ianmackenzie / elm-geometry / Polyline3d

A Polyline3d represents a sequence of vertices in 3D connected by line segments. This module contains a variety of polyline-related functionality, such as


type alias Polyline3d units coordinates =
Geometry.Types.Polyline3d units coordinates

Constructors

fromVertices : List (Point3d units coordinates) -> Polyline3d units coordinates

Construct a polyline from its vertices:

examplePolyline =
    Polyline3d.fromVertices
        [ Point3d.meters 0 0 0
        , Point3d.meters 1 0 0
        , Point3d.meters 1 2 0
        , Point3d.meters 1 2 3
        ]

on : SketchPlane3d units coordinates3d { defines : coordinates2d } -> Polyline2d units coordinates2d -> Polyline3d units coordinates3d

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.meters 0 0
        , Point2d.meters 1 0
        , Point2d.meters 1 1
        , Point2d.meters 2 1
        ]
--> Polyline3d.fromVertices
-->     [ Point3d.meters 0 0 0
-->     , Point3d.meters 0 1 0
-->     , Point3d.meters 0 1 1
-->     , Point3d.meters 0 2 1
-->     ]

Properties

vertices : Polyline3d units coordinates -> List (Point3d units coordinates)

Get the vertices of a polyline.

segments : Polyline3d units coordinates -> List (LineSegment3d units coordinates)

Get the individual segments of a polyline.

Polyline3d.segments examplePolyline
--> [ LineSegment3d.from
-->     (Point3d.meters 0 0 0)
-->     (Point3d.meters 1 0 0)
--> , LineSegment3d.from
-->     (Point3d.meters 1 0 0)
-->     (Point3d.meters 1 2 0)
--> , LineSegment3d.from
-->     (Point3d.meters 1 2 0)
-->     (Point3d.meters 1 2 3)
--> ]

length : Polyline3d units coordinates -> Quantity Basics.Float units

Get the overall length of a polyline (the sum of the lengths of its segments).

Polyline3d.length examplePolyline
--> Length.meters 6

boundingBox : Polyline3d units coordinates -> Maybe (BoundingBox3d units coordinates)

Get the minimal bounding box containing a given polyline. Returns Nothing if the polyline has no vertices.

Polyline3d.boundingBox examplePolyline
--> Just <|
-->     BoundingBox3d.from
-->         (Point3d.meters 0 0 0)
-->         (Point3d.meters 1 2 3)

centroid : Polyline3d units coordinates -> Maybe (Point3d units coordinates)

Find the centroid (center of mass) of a polyline. This is the length-weighted average of the edges of the polyline, not the centroid of its vertices. Returns Nothing if the polyline is empty (has no vertices).

Polyline3d.centroid examplePolyline
--> Just (Point3d.meters 0.9167 1.333 0.75)

Transformations

These transformations generally behave just like the ones in the Point3d module.

scaleAbout : Point3d units coordinates -> Basics.Float -> Polyline3d units coordinates -> Polyline3d units coordinates

Scale a polyline about the given center point by the given scale.

rotateAround : Axis3d units coordinates -> Angle -> Polyline3d units coordinates -> Polyline3d units coordinates

Rotate a polyline around the given axis by the given angle.

translateBy : Vector3d units coordinates -> Polyline3d units coordinates -> Polyline3d units coordinates

Translate a polyline by the given displacement.

translateIn : Direction3d coordinates -> Quantity Basics.Float units -> Polyline3d units coordinates -> Polyline3d units coordinates

Translate a polyline in a given direction by a given distance.

mirrorAcross : Plane3d units coordinates -> Polyline3d units coordinates -> Polyline3d units coordinates

Mirror a polyline across the given plane.

projectOnto : Plane3d units coordinates -> Polyline3d units coordinates -> Polyline3d units coordinates

Find the orthographic projection of a polyline onto a plane. This will flatten the polyline.

mapVertices : (Point3d units1 coordinates1 -> Point3d units2 coordinates2) -> Polyline3d units1 coordinates1 -> Polyline3d units2 coordinates2

Transform each vertex of a polyline by the given function. All other transformations can be defined in terms of mapVertices; for example,

Polyline3d.mirrorAcross plane

is equivalent to

Polyline3d.mapVertices (Point3d.mirrorAcross plane)

Unit conversions

at : Quantity Basics.Float (Quantity.Rate units2 units1) -> Polyline3d units1 coordinates -> Polyline3d units2 coordinates

Convert a polyline from one units type to another, by providing a conversion factor given as a rate of change of destination units with respect to source units.

at_ : Quantity Basics.Float (Quantity.Rate units1 units2) -> Polyline3d units1 coordinates -> Polyline3d units2 coordinates

Convert a polyline from one units type to another, by providing an 'inverse' conversion factor given as a rate of change of source units with respect to destination units.

Coordinate conversions

relativeTo : Frame3d units globalCoordinates { defines : localCoordinates } -> Polyline3d units globalCoordinates -> Polyline3d units localCoordinates

Take a polyline defined in global coordinates, and return it expressed in local coordinates relative to a given reference frame.

placeIn : Frame3d units globalCoordinates { defines : localCoordinates } -> Polyline3d units localCoordinates -> Polyline3d units globalCoordinates

Take a polyline considered to be defined in local coordinates relative to a given reference frame, and return that polyline expressed in global coordinates.

projectInto : SketchPlane3d units coordinates3d { defines : coordinates2d } -> Polyline3d units coordinates3d -> Polyline2d units coordinates2d

Project a polyline into a given sketch plane.