Class Polyline
A continuous set of lines. Parameterization of the curve is 0->n-1 where n is the number of vertices.
Examples
var a = new Vector3();
var b = new Vector3(10, 10);
var c = new Vector3(20, 5);
var d = new Vector3(25, 10);
var pline = new Polyline(new[] { a, b, c, d });
var offset = pline.Offset(1, EndType.Square);
Implements
Inherited Members
Namespace: Elements.Geometry
Assembly: Hypar.Elements.dll
Syntax
public class Polyline : IndexedPolycurve, ICurve, ITransformable<Curve>, IBoundedCurve, IEnumerable<BoundedCurve>, IEnumerable, IEquatable<IndexedPolycurve>
Constructors
Polyline(Vector3[])
Construct a polyline from points. This is a convenience constructor
that can be used like this: new Polyline((0,0,0), (10,0,0), (10,10,0))
Declaration
public Polyline(params Vector3[] vertices)
Parameters
| Type | Name | Description |
|---|---|---|
| Vector3[] | vertices | The vertices of the polyline. |
Polyline(Boolean, Vector3[])
Construct a polyline from points. This is a convenience constructor
that can be used like this: new Polyline((0,0,0), (10,0,0), (10,10,0))
Declaration
public Polyline(bool disableValidation, params Vector3[] vertices)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Boolean | disableValidation | Should self intersection testing be disabled? |
| Vector3[] | vertices | The vertices of the polyline. |
Polyline(IList<Vector3>)
Construct a polyline.
Declaration
[JsonConstructor]
public Polyline(IList<Vector3> vertices)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Collections.Generic.IList<Vector3> | vertices | A collection of vertex locations. |
Polyline(IList<Vector3>, Boolean)
Construct a polyline.
Declaration
public Polyline(IList<Vector3> vertices, bool disableValidation = false)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Collections.Generic.IList<Vector3> | vertices | A collection of vertex locations. |
| System.Boolean | disableValidation | Should self intersection testing be disabled? |
Properties
Domain
The domain of the curve.
Declaration
[JsonIgnore]
public override Domain1d Domain { get; }
Property Value
| Type | Description |
|---|---|
| Domain1d |
Overrides
Methods
CreateMiterTransform(Int32, Vector3, Vector3)
Generates a transform that expresses the plane of a miter join at a point on the curve.
Declaration
protected Transform CreateMiterTransform(int i, Vector3 a, Vector3 up)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Int32 | i | |
| Vector3 | a | |
| Vector3 | up |
Returns
| Type | Description |
|---|---|
| Transform |
Fillet(Double)
Fillet all corners on this polygon.
Declaration
public IndexedPolycurve Fillet(double radius)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Double | radius | The fillet radius. |
Returns
| Type | Description |
|---|---|
| IndexedPolycurve | A contour containing trimmed edge segments and fillets. |
ForceAngleCompliance(IEnumerable<Double>, Vector3, NormalizationType)
Make the polyline correspond to the supported angles by moving the vertices slightly. The result polyline will have only allowed angles, but vertices positions can be changed.
Declaration
public Polyline ForceAngleCompliance(IEnumerable<double> supportedAngles, Vector3 referenceVector, NormalizationType pathType = NormalizationType.Start)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Collections.Generic.IEnumerable<System.Double> | supportedAngles | List of supported angles that the returned polyline can have. Supported angles must be between 0 and 90. |
| Vector3 | referenceVector | Vector to align first segment of polyline with. |
| NormalizationType | pathType | The path type. For each 3 consecutive points A, B, C to make angle ABC be one of allowed angles:
|
Returns
| Type | Description |
|---|---|
| Polyline | The result polyline that has only allowed angles. |
ForceAngleCompliance(IEnumerable<Double>, Vector3, out Double, NormalizationType)
Make the polyline correspond to the supported angles by moving the vertices slightly. The result polyline will have only allowed angles, but vertices positions can be changed. The first vertex is never moved.
Declaration
public Polyline ForceAngleCompliance(IEnumerable<double> supportedAngles, Vector3 referenceVector, out double furthestDistancePointsMoved, NormalizationType pathType = NormalizationType.Start)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Collections.Generic.IEnumerable<System.Double> | supportedAngles | List of supported angles that the returned polyline can have. Supported angles must be between 0 and 90. |
| Vector3 | referenceVector | Vector to align first segment of polyline with. |
| System.Double | furthestDistancePointsMoved | The furthest distance that any point moved. |
| NormalizationType | pathType | The path type. For each 3 consecutive points A, B, C to make angle ABC be one of allowed angles:
|
Returns
| Type | Description |
|---|---|
| Polyline | The result polyline that has only allowed angles. |
Frames(Double, Double, Double)
Get a collection of Transforms which represent frames along this curve.
Declaration
public override Transform[] Frames(double startSetbackDistance = 0, double endSetbackDistance = 0, double additionalRotation = 0)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Double | startSetbackDistance | The offset from the start of the ICurve. |
| System.Double | endSetbackDistance | The offset from the end of the ICurve. |
| System.Double | additionalRotation | An additional rotation of the frame at each point. |
Returns
| Type | Description |
|---|---|
| Transform[] | A collection of Transforms. |
Overrides
GetParameterAt(Vector3)
Find the parameter corresponding to a point along a polyline.
Declaration
public double GetParameterAt(Vector3 point)
Parameters
| Type | Name | Description |
|---|---|---|
| Vector3 | point | A point. |
Returns
| Type | Description |
|---|---|
| System.Double | A parameter for the point along a polyline if the point is on the polyline. Otherwise, -1. |
GetSubsegment(Vector3, Vector3)
Get new polyline between two points
Declaration
public Polyline GetSubsegment(Vector3 start, Vector3 end)
Parameters
| Type | Name | Description |
|---|---|---|
| Vector3 | start | Start point |
| Vector3 | end | End point |
Returns
| Type | Description |
|---|---|
| Polyline | New polyline or null if any of points is not on polyline |
Intersects(Line, out List<Vector3>, Boolean, Boolean)
Check if polyline intersects with line
Declaration
public bool Intersects(Line line, out List<Vector3> intersections, bool infinite = false, bool includeEnds = false)
Parameters
| Type | Name | Description |
|---|---|---|
| Line | line | Line to check |
| System.Collections.Generic.List<Vector3> | intersections | Intersections between polyline and line |
| System.Boolean | infinite | Threat the line as infinite? |
| System.Boolean | includeEnds | If the end of line lies exactly on the vertex of polyline, count it as an intersection? |
Returns
| Type | Description |
|---|---|
| System.Boolean | True if line intersects with polyline, false if they do not intersect |
Intersects(Polygon, out List<Polyline>)
Checks if polyline intersects with polygon
Declaration
public bool Intersects(Polygon polygon, out List<Polyline> sharedSegments)
Parameters
| Type | Name | Description |
|---|---|---|
| Polygon | polygon | Polygon to check |
| System.Collections.Generic.List<Polyline> | sharedSegments | List of shared subsegments |
Returns
| Type | Description |
|---|---|
| System.Boolean | Result of check if polyline and polygon intersects |
Length()
Calculate the length of the polygon.
Declaration
public override double Length()
Returns
| Type | Description |
|---|---|
| System.Double |
Overrides
NormalsAtVertices()
Get the normal of each vertex on the polyline.
Declaration
protected virtual Vector3[] NormalsAtVertices()
Returns
| Type | Description |
|---|---|
| Vector3[] | A collection of unit vectors, each corresponding to a single vertex. |
Offset(Double, EndType, Double)
Offset this polyline by the specified amount.
Declaration
public virtual Polygon[] Offset(double offset, EndType endType, double tolerance = 1E-05)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Double | offset | The amount to offset. |
| EndType | endType | The closure type to use on the offset polygon. |
| System.Double | tolerance | An optional tolerance. |
Returns
| Type | Description |
|---|---|
| Polygon[] | A new closed Polygon offset in all directions by offset from the polyline. |
OffsetOnSide(Double, Boolean)
Offset this polyline by the specified amount, only on one side.
Declaration
public Polygon[] OffsetOnSide(double offset, bool flip)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Double | offset | The amount to offset. |
| System.Boolean | flip | Offset on the opposite of the default side. The default is to draw on the +X side of a polyline that goes up the +Y axis. |
Returns
| Type | Description |
|---|---|
| Polygon[] | An array of polygons that are extruded from each segment of the polyline. |
Remarks
This blunts sharp corners to keep widths close to the target.
OffsetOpen(Double)
A naïve control-point-only 2D open offset. This algorithm does not do any self-intersection checking.
Declaration
public Polyline OffsetOpen(double offset)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Double | offset | The offset distance. |
Returns
| Type | Description |
|---|---|
| Polyline | A new polyline with the same number of control points. |
OffsetWithAcuteAngle(Double)
Offset this polyline by the specified amount. The resulting polygon will have acute angles.
Declaration
public Polygon[] OffsetWithAcuteAngle(double offset)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Double | offset | The amount to offset. |
Returns
| Type | Description |
|---|---|
| Polygon[] |
Remarks
This blunts sharp corners to keep widths close to the target.
Plane()
Compute the Plane defined by the first three non-collinear vertices of the Polygon.
Declaration
public virtual Plane Plane()
Returns
| Type | Description |
|---|---|
| Plane | A Plane. |
Project(Plane)
Project this polyline onto the plane.
Declaration
public Polyline Project(Plane plane)
Parameters
| Type | Name | Description |
|---|---|---|
| Plane | plane | The plane of the returned polyline. |
Returns
| Type | Description |
|---|---|
| Polyline |
Reversed()
Reverse the direction of a polyline.
Declaration
public Polyline Reversed()
Returns
| Type | Description |
|---|---|
| Polyline | Returns a new polyline with opposite winding. |
Segments()
Get a collection a line segments which connect the vertices of this polyline.
Declaration
public virtual Line[] Segments()
Returns
| Type | Description |
|---|---|
| Line[] | A collection of Lines. |
SharedSegments(Polyline, Polyline, Boolean)
Identify any shared segments between two polylines.
Declaration
public static List<(int indexOnA, int indexOnB)> SharedSegments(Polyline a, Polyline b, bool isClosed = false)
Parameters
| Type | Name | Description |
|---|---|---|
| Polyline | a | The first polyline to compare. |
| Polyline | b | The second polyline to compare. |
| System.Boolean | isClosed | Flag as closed to include segment between first and last vertex. |
Returns
| Type | Description |
|---|---|
| System.Collections.Generic.List<System.ValueTuple<System.Int32, System.Int32>> | Returns a list of tuples of indices for the segments that match in each polyline. |
Split(IList<Vector3>)
Insert a point into the polyline if it lies along one of the polyline's segments.
Declaration
public virtual void Split(IList<Vector3> points)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Collections.Generic.IList<Vector3> | points | The points at which to split the polyline. |
Split(IList<Vector3>, Boolean)
Insert a point into the polyline if it lies along one of the polyline's segments.
Declaration
protected void Split(IList<Vector3> points, bool closed = false)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Collections.Generic.IList<Vector3> | points | The points at which to split the polyline. |
| System.Boolean | closed | Is the polyline closed? |
TransformAt(Double)
Get the transform at the specified parameter along the polyline.
Declaration
public override Transform TransformAt(double u)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Double | u | The parameter on the polygon between 0.0 and length. |
Returns
| Type | Description |
|---|---|
| Transform | A transform with its Z axis aligned trangent to the polyline. |
Overrides
Transformed(Transform)
Create a transformed copy of this curve. Use of non-affine transforms (i.e. scale) will result in unpredictable results for curve methods such as Length().
Declaration
public override Curve Transformed(Transform transform)
Parameters
| Type | Name | Description |
|---|---|---|
| Transform | transform | The transform to apply. |
Returns
| Type | Description |
|---|---|
| Curve |
Overrides
TransformedPolyline(Transform)
Construct a transformed copy of this Polyline.
Declaration
public Polyline TransformedPolyline(Transform transform)
Parameters
| Type | Name | Description |
|---|---|---|
| Transform | transform | The transform to apply. |
Returns
| Type | Description |
|---|---|
| Polyline |
TransformSegment(Transform, Int32, Boolean, Boolean)
Transform a specified segment of this polyline in place.
Declaration
public void TransformSegment(Transform t, int i, bool isClosed = false, bool isPlanar = false)
Parameters
| Type | Name | Description |
|---|---|---|
| Transform | t | The transform. If it is not within the polygon plane, then an exception will be thrown. |
| System.Int32 | i | The segment to transform. If it does not exist, then no work will be done. |
| System.Boolean | isClosed | If set to true, the segment between the start end end point will be considered a valid target. |
| System.Boolean | isPlanar | If set to true, an exception will be thrown if the resultant shape is no longer planar. |