module Geom
class Point3d

# Creates a new 3D point.
#   Creates a point at the origin with all coordinates set to zero.
#   @param [Geom::Point3d] point  another point
#   @param [Array<Numeric>] array  an array of two or three coordinates
# @overload initialize(x, y, z=0.0)
#   @param [Numeric] x  the x coordinate
#   @param [Numeric] y  the y coordinate
#   @param [Numeric] z  the z coordinate
def initialize(*args)
end

# Returns a new point which is offset from the receiver by the given vector.
# @example
#   pt = Geom::Point3d.new(1, 2, 3)
#   pt2 = pt + [1, 1, 1]
#   ==> Point3d(2, 3, 4)
# @param [Geom::Vector3d] vector a Vector3d or Array used to offset the point
# @return [Geom::Point3d]
# @since SketchUp 6.0
def +(vector)
end

# Subtracts from this point.
#   Returns a point that is offset from this point in the opposite direction of the given vector.
#   @param [Geom::Vector3d,Array<Numeric>] vector
#   @return [Geom::Point3d]
#   Returns a vector from another point to this point.
#   @param [Geom::Point3d] point2
#   @return [Geom::Vector3d]
def -(vector)
end

# Compare two points coordinate by coordinate. First the x coordinates are compared, if they are equal, the y
# coordinates are compared, if those are equal finally the z coordinates.
# @param [Geom::Point3d,Array<Numeric>] point2
# @return [Boolean] true if this point's x, y or z coordinate is less
# @example
#   pt1 = Geom::Point3d.new(10, 10, 90)
#   pt2 = Geom::Point3d.new(10, 20, 20)
#   pt1 < pt2 # ==> true
def < (point2)
end

# Compare {Point3d}s using SketchUp tolerance.
# @params [Geom::Point3d,Array<Numeric>] point2
# @return [Boolean]
def ==(point2)
end

# Retrieves the coordinate of the point at the specified index.
# @param [Integer] index  The index 0, 1 or 2 for a specific x, y, or z value within the point.
# @return [Numeric] The coordinate at the specified index.
# @raise IndexError Raised if the index is outside the range [0,2]. Note that negative indices [-3,-1] don't raise.
def [](index)
end

# Retrieves the coordinate of the point at the specified index.
# @param [Integer] index  The index 0, 1 or 2 for a specific x, y, or z value within the point.
# @param [Numeric] value  The new x, y or z value.
# @return [Numeric] The argument passed for the new value.
# @raise IndexError  Raised if the index is outside the range [0,2]. Note that negative indices [-3,-1] don't raise.
def []=(index, value)
end

# Creates another point identical to the point being cloned.
# @return [Geom::Point3d] A new point that is a copy of this one.
def clone
end

# Compute the distance from this point to another point.
# @param [Geom::Point3d,Array<Numeric>] point2  The Point3d object to compute the distance to.
# @return [Length] The distance as length object.
def distance(point2)
end

# Computes the distance from this point to a line.
# @param [Array(Geom::Point3d,Geom::Vector3d),Array(Geom::Point3d,Geom::Point3d)] line
# @return [Length] The distance as length object.
def distance_to_line(line)
end

# Computes the distance from this point to a plane.
# @param [Array(Geom::Point3d,Geom::Vector3d),Array<Numeric>] plane
# @return [Length] The distance as length object.
def distance_to_plane(plane)
end

# Returns a string containing a human-readable representation of this point.
# @return [String] A string representation of the point
def inspect
end

# Creates a new point as a linear combination of two points. This method is generally used to get a point at some
# percentage along a line connecting the two points. The weights should sum up to 1 if you want to get a on that
# line. The weights should be between 0 and 1 if you want to get a point between the two points.
# @param [Numeric] weight1  The weight of point1.
# @param [Geom::Point3d,Array<Numeric>] point1
# @param [Numeric] weight2  The weight of point2.
# @param [Geom::Point3d,Array<Numeric>] point2
# @return [Geom::Point3d]
def self.linear_combination(weight1, point1, weight2, point2)
end

# Offsets a point by a vector and returns a new point. The length of the vector must not be zero.
# @param [Geom::Vector3d,Array<Numeric>] vector  A vector providing direction and distance to offset the point by.
# @param [Numeric] length  The distance to offset. If not provided, the offset is equal to the vector length.
# @return [Geom::Point3d] a new Point3d object
def offset(vector, length=vector.length)
end

# Applies an offset by a vector to this point. The length of the vector must not be zero.
# @param [Geom::Vector3d,Array<Numeric>] vector  A vector providing direction and distance to offset the point by.
# @param [Numeric] length  The distance to offset. If not provided, the offset is equal to the vector length.
# @return [self]
def offset!(vector, length=vector.length)
end

# Determines if this point is on a line.
# @param [Array(Geom::Point3d,Geom::Vector3d),Array(Geom::Point3d,Geom::Point3d)] line
# @return [Boolean] true if the point is on the line; false if the point is not on the line
def on_line?(line)
end

# Determines if this point is on a plane.
# @param [Array(Geom::Point3d,Geom::Vector3d),Array<Numeric>] plane
# @return [Boolean] true if the point is on the plane; false if the point is not on the plane
def on_plane?(plane)
end

# Retrieves the point on a line that is closest to this point.
# @param [Array(Geom::Point3d,Geom::Vector3d),Array(Geom::Point3d,Geom::Point3d)] line
# @return [Geom::Point3d] A new point that is on a line closest to the point
def project_to_line
end

# Retrieves the point on a plane that is closest to this point.
# @param [Array(Geom::Point3d,Geom::Vector3d),Array<Numeric>] plane
# @return [Geom::Point3d] A new point that is on a plane closest to the point
def project_to_plane
end

# Sets the values of this point.
# @param [Numeric] x  The location along the x axis.
# @param [Numeric] y  The location along the y axis. If not given, this coordinate is not modified.
# @param [Numeric] z  The location along the z axis. If not given, this coordinate is not modified.
# @return [self]
def set!(x, y=self.x, z=self.y)
end

# Returns an array representation of this point.
# @return [Array(Length,Length,Length)] An array containing its x, y, z coordinates
def to_a
end

# Returns a string representation of this point.
# @return [String] A string of this point in the current model units, using the user's locale's decimal delimiter.
def to_s
end

# Applies a transformation to a copy this point to create a new point.
# @param [Geom::Transformation] transformation  A Transformation object.
# @return [Geom::Point3d] The new point
def transform(transformation)
end

# Applies a transformation to this point.
# Unlike the {#transform} method, the point itself is modified.
# @param [Geom::Transformation] transformation  A Transformation object.
# @return [self]
def transform!(transformation)
end

# Creates a vector between this point and another point.
# @param [Geom::Point3d,Array<Numeric>] point2  The other point
# @return [Geom::Vector3d]
def vector_to(point2)
end

# Retrieves the x coordinate of this point.
# @return [Length]
def x
end

# Sets the x value of this point.
# @param [Numeric] value  The new x coordinate.
# @return [Numeric] The argument passed for the new value.
def x=(value)
end

# Retrieves the y coordinate of this point.
# @return [Length]
def y
end

# Sets the y value of this point.
# @param [Numeric] value  The new y coordinate.
# @return [Numeric] The argument passed for the new value.
def y=(value)
end

# Retrieves the z coordinate of this point.
# @return [Length]
def z
end

# Sets the z value of this point.
# @param [Numeric] value  The new z coordinate.
# @return [Numeric] The argument passed for the new value.
def z=(value)
end

end
end