A Polyline3d represents a sequence of vertices in 3D connected by line
segments. This module contains a variety of polyline-related functionality, such
as
Construct a polyline from its vertices:
examplePolyline =
Polyline3d.fromVertices
[ Point2d.fromCoordinates ( 0, 0, 0 )
, Point2d.fromCoordinates ( 1, 0, 0 )
, Point2d.fromCoordinates ( 1, 2, 0 )
, Point2d.fromCoordinates ( 1, 2, 3 )
]Construct a 3D polyline lying on a sketch plane by providing a 2D polyline specified in XY coordinates within the sketch plane.
Polyline3d.on SketchPlane3d.yz <|
Polyline2d.fromVertices
[ Point2d.fromCoordinates ( 0, 0 )
, Point2d.fromCoordinates ( 1, 0 )
, Point2d.fromCoordinates ( 1, 1 )
, Point2d.fromCoordinates ( 2, 1 )
]
--> Polyline3d.fromVertices
--> [ Point3d.fromCoordinates ( 0, 0, 0 )
--> , Point3d.fromCoordinates ( 0, 1, 0 )
--> , Point3d.fromCoordinates ( 0, 1, 1 )
--> , Point3d.fromCoordinates ( 0, 2, 1 )
--> ]Get the vertices of a polyline.
Polyline3d.vertices examplePolyline
--> [ Point3d.fromCoordinates ( 0, 0, 0 )
--> , Point3d.fromCoordinates ( 1, 0, 0 )
--> , Point3d.fromCoordinates ( 1, 2, 0 )
--> , Point3d.fromCoordinates ( 1, 2, 3 )
--> ]Get the individual segments of a polyline.
Polyline3d.segments examplePolyline
--> [ LineSegment3d.fromEndpoints
--> ( Point3d.fromCoordinates ( 0, 0, 0 )
--> , Point3d.fromCoordinates ( 1, 0, 0 )
--> )
--> , LineSegment3d.fromEndpoints
--> ( Point3d.fromCoordinates ( 1, 0, 0 )
--> , Point3d.fromCoordinates ( 1, 2, 0 )
--> )
--> , LineSegment3d.fromEndpoints
--> ( Point3d.fromCoordinates ( 1, 2, 0 )
--> , Point3d.fromCoordinates ( 1, 2, 3 )
--> )
--> ]Get the overall length of a polyline (the sum of the lengths of its segments).
Polyline3d.length examplePolyline
--> 6Get the minimal bounding box containing a given polyline. Returns Nothing
if the polyline has no vertices.
Polyline3d.boundingBox examplePolyline
--> Just
--> (BoundingBox3d.with
--> { minX = 0
--> , maxX = 1
--> , minY = 0
--> , maxY = 2
--> , minZ = 0
--> , maxZ = 3
--> }
--> )Transforming a polyline is equivalent to transforming each of its vertices.
Scale a polyline about the given center point by the given scale.
point =
Point3d.fromCoordinates ( 1, 0, 0 )
Polyline3d.scaleAbout point 2 examplePolyline
--> Polyline3d.fromVertices
--> [ Point3d.fromCoordinates ( -1, 0, 0 )
--> , Point3d.fromCoordinates ( 1, 0, 0 )
--> , Point3d.fromCoordinates ( 1, 4, 0 )
--> , Point3d.fromCoordinates ( 1, 4, 6 )
--> ]Rotate a polyline around the given axis by the given angle (in radians).
examplePolyline
|> Polyline3d.rotateAround Axis3d.z (degrees 90)
--> Polyline3d.fromVertices
--> [ Point3d.fromCoordinates ( 0, 0, 0 )
--> , Point3d.fromCoordinates ( 0, 1, 0 )
--> , Point3d.fromCoordinates ( -2, 1, 0 )
--> , Point3d.fromCoordinates ( -2, 1, 3 )
--> ]Translate a polyline by the given displacement.
displacement =
Vector3d.fromComponents ( 1, 2, 3 )
Polyline3d.translateBy displacement examplePolyline
--> Polyline3d.fromVertices
--> [ Point3d.fromCoordinates ( 1, 2, 3 )
--> , Point3d.fromCoordinates ( 2, 2, 3 )
--> , Point3d.fromCoordinates ( 2, 4, 3 )
--> , Point3d.fromCoordinates ( 2, 4, 6 )
--> ]Mirror a polyline across the given plane.
Polyline3d.mirrorAcross Plane3d.xz examplePolyline
--> Polyline3d.fromVertices
--> [ Point3d.fromCoordinates ( 0, 0, 0 )
--> , Point3d.fromCoordinates ( 1, 0, 0 )
--> , Point3d.fromCoordinates ( 1, -2, 0 )
--> , Point3d.fromCoordinates ( 1, -2, 3 )
--> ]Find the orthographic projection of a polyline onto a plane. This will flatten the polyline.
Polyline3d.projectOnto Plane3d.xz examplePolyline
--> Polyline3d.fromVertices
--> [ Point3d.fromCoordinates ( 0, 0, 0 )
--> , Point3d.fromCoordinates ( 1, 0, 0 )
--> , Point3d.fromCoordinates ( 1, 0, 0 )
--> , Point3d.fromCoordinates ( 1, 0, 3 )
--> ]Transform each vertex of a polyline by the given function. All other
transformations can be defined in terms of mapVertices; for example,
Polyline3d.mirrorAcross planeis equivalent to
Polyline3d.mapVertices (Point3d.mirrorAcross plane)Take a polyline defined in global coordinates, and return it expressed in local coordinates relative to a given reference frame.
localFrame =
Frame3d.atPoint
(Point3d.fromCoordinates ( 1, 2, 3 ))
Polyline3d.relativeTo localFrame examplePolyline
--> Polyline3d.fromVertices
--> [ Point3d.fromCoordinates ( -1, -2, -3 )
--> , Point3d.fromCoordinates ( 0, -2, -3 )
--> , Point3d.fromCoordinates ( 0, 0, -3 )
--> , Point3d.fromCoordinates ( 0, 0, 0 )
--> ]Take a polyline considered to be defined in local coordinates relative to a given reference frame, and return that polyline expressed in global coordinates.
localFrame =
Frame3d.atPoint
(Point3d.fromCoordinates ( 1, 2, 3 ))
Polyline3d.placeIn localFrame examplePolyline
--> Polyline3d.fromVertices
--> [ Point3d.fromCoordinates ( 1, 2, 3 )
--> , Point3d.fromCoordinates ( 2, 2, 3 )
--> , Point3d.fromCoordinates ( 2, 4, 3 )
--> , Point3d.fromCoordinates ( 2, 4, 6 )
--> ]Project a polyline into a given sketch plane. Conceptually, this finds the orthographic projection of the polyline onto the plane and then expresses the projected polyline in 2D sketch coordinates.
Polyline3d.projectInto Plane3d.xy examplePolyline
--> Polyline2d.fromVertices
--> [ Point2d.fromCoordinates ( 0, 0 )
--> , Point2d.fromCoordinates ( 1, 0 )
--> , Point2d.fromCoordinates ( 1, 2 )
--> , Point2d.fromCoordinates ( 1, 2 )
--> ]