Table of Contents

Class GeoPolygonArc3

Namespace
GeometryHelper.Geometry
Assembly
GeometryHelper.dll

Whether a curved loop touches another shape.

public sealed class GeoPolygonArc3 : IEquatable<GeoPolygonArc3>
Inheritance
GeoPolygonArc3
Implements
Inherited Members

Remarks

Coplanarity is enforced at construction, exactly as GeoPolygon3 enforces it. A loop that is not flat encloses nothing, has no area and no inside, so it is not this type; a bar bent out of one plane belongs in GeoPolylineArc3, whose ends may meet without the loop being flat.

That one rule is what makes everything else exact. Area, centroid, what is inside, offsetting and the booleans are all worked out by laying the loop out in its own plane as a GeoPolygonArc2, answering there, and lifting the answer back. Nothing is approximated and none of the arc machinery is written twice.

A closed stirrup with a bending radius is this type: build the loop from the points it turns at and call Fillet(double).

Constructors

GeoPolygonArc3(GeoCoordinateSystem3, GeoPolygonArc2)

Initializes a loop by lifting one out of a frame into the plane of that frame in space.

GeoPolygonArc3(GeoPolygon3)

Initializes a loop from a straight one, with no bulges.

GeoPolygonArc3(IEnumerable<GeoEdge3>)

Initializes a loop from edges that run end to end and close.

GeoPolygonArc3(IEnumerable<GeoPoint3>)

Initializes a loop of straight pieces.

GeoPolygonArc3(IEnumerable<GeoPoint3>, IEnumerable<double>, IEnumerable<GeoVector3>)

Initializes a loop whose pieces may be arcs.

GeoPolygonArc3(IEnumerable<GeoPoint3>, IEnumerable<double>, IEnumerable<GeoVector3>, Tolerance)

Initializes a loop whose pieces may be arcs, within a tolerance.

Properties

Area

Gets the area the loop encloses, counting each arc against its own chord.

Bulges

Gets the bulge of each edge: the one at an index belongs to the edge leaving that vertex, and the last belongs to the edge closing the loop.

Centroid

Gets the centroid of the region the loop encloses.

EdgeCount

Gets the number of edges, which is also the number of vertices.

IsClockwise

Gets a value indicating whether the loop runs clockwise in its own frame.

this[int]

Gets the vertex at an index.

Length

Gets the length round the loop, measured along its arcs.

Normal

Gets the normal of the plane the whole loop lies in.

Normals

Gets the normal each bulge is read about; of no length at all where the edge is straight.

SignedArea

Gets the area the loop encloses, negative when it runs clockwise in its own frame.

VertexCount

Gets the number of vertices, which is also the number of edges.

Vertices

Gets the vertices of the loop, in order; the last joins back to the first.

Methods

Chamfer(double)

Cuts every corner of the loop back by the same distance.

Chamfer(double, Tolerance)

Cuts every corner of the loop back by the same distance, within a tolerance.

Clone()

Creates a copy of this loop.

CollidesWith(GeoAabb3)

Checks whether this curved loop touches an axis-aligned box.

CollidesWith(GeoAabb3, Tolerance)

Checks whether this curved loop touches an axis-aligned box, within a tolerance.

CollidesWith(GeoArc3)

Checks whether this curved loop touches an arc.

CollidesWith(GeoArc3, Tolerance)

Checks whether this curved loop touches an arc, within a tolerance.

CollidesWith(GeoCircle3)

Checks whether this curved loop touches a circle.

CollidesWith(GeoCircle3, Tolerance)

Checks whether this curved loop touches a circle, within a tolerance.

CollidesWith(GeoFace3)

Checks whether this curved loop touches a face.

CollidesWith(GeoFace3, Tolerance)

Checks whether this curved loop touches a face, within a tolerance.

CollidesWith(GeoLine3)

Determines whether this loop touches a segment.

CollidesWith(GeoLine3, Tolerance)

Determines whether this loop touches a segment, within a tolerance.

CollidesWith(GeoObb3)

Checks whether this curved loop touches an oriented box.

CollidesWith(GeoObb3, Tolerance)

Checks whether this curved loop touches an oriented box, within a tolerance.

CollidesWith(GeoPlane3)

Checks whether this curved loop touches a plane.

CollidesWith(GeoPlane3, Tolerance)

Checks whether this curved loop touches a plane, within a tolerance.

CollidesWith(GeoPolygon3)

Checks whether this curved loop touches a polygon.

CollidesWith(GeoPolygon3, Tolerance)

Checks whether this curved loop touches a polygon, within a tolerance.

CollidesWith(GeoPolygonArc3)

Determines whether this loop touches a curved loop.

CollidesWith(GeoPolygonArc3, Tolerance)

Determines whether this loop touches a curved loop, within a tolerance.

CollidesWith(GeoPolyline3)

Determines whether this loop touches a straight chain.

CollidesWith(GeoPolyline3, Tolerance)

Determines whether this loop touches a straight chain, within a tolerance.

CollidesWith(GeoPolylineArc3)

Determines whether this loop touches a curved chain.

CollidesWith(GeoPolylineArc3, Tolerance)

Determines whether this loop touches a curved chain, within a tolerance.

CollidesWith(GeoRay3)

Determines whether this loop touches a ray.

CollidesWith(GeoRay3, Tolerance)

Determines whether this loop touches a ray, within a tolerance.

CollidesWith(GeoSolid3)

Checks whether this curved loop touches a solid.

CollidesWith(GeoSolid3, Tolerance)

Checks whether this curved loop touches a solid, within a tolerance.

CollidesWith(GeoTriangle3)

Checks whether this curved loop touches a triangle.

CollidesWith(GeoTriangle3, Tolerance)

Checks whether this curved loop touches a triangle, within a tolerance.

Contains(GeoPoint3)

Determines whether the loop holds a point, on its outline or inside it.

Contains(GeoPoint3, Tolerance)

Determines whether the loop holds a point, on its outline or inside it, within a tolerance.

DistanceTo(GeoPoint3)

Gets the distance from the outline of the loop to a point.

DistanceTo(GeoPoint3, Tolerance)

Gets the distance from the outline of the loop to a point, within a tolerance.

Equals(GeoPolygonArc3)

Indicates whether the current loop holds the same vertices, bulges and planes as another.

Equals(object)

Indicates whether this instance and a specified object are equal.

Fillet(IReadOnlyList<double>)

Rounds the corners of the loop, each by its own radius.

Fillet(IReadOnlyList<double>, Tolerance)

Rounds the corners of the loop, each by its own radius, within a tolerance.

Fillet(double)

Rounds every corner of the loop by the same radius.

Fillet(double, Tolerance)

Rounds every corner of the loop by the same radius, within a tolerance.

Flatten()

Gets the loop with its arcs thrown away, leaving the chords.

GetAabb()

Gets the smallest axis-aligned box holding the loop, arcs and all.

GetBulgeAt(int)

Gets the bulge of the edge leaving a vertex.

GetClosestEdge(GeoArc3)

Gets the edge of this loop that comes nearest an arc in the same plane.

GetClosestEdge(GeoArc3, Tolerance)

Gets the edge of this loop that comes nearest an arc in the same plane, within a tolerance.

GetClosestEdge(GeoCircle3)

Gets the edge of this loop that comes nearest a circle in the same plane.

GetClosestEdge(GeoCircle3, Tolerance)

Gets the edge of this loop that comes nearest a circle in the same plane, within a tolerance.

GetClosestEdge(GeoEdge3)

Gets the edge of this loop that comes nearest an edge in the same plane.

GetClosestEdge(GeoEdge3, Tolerance)

Gets the edge of this loop that comes nearest an edge in the same plane, within a tolerance.

GetClosestEdge(GeoLine3)

Gets the edge of this loop that comes nearest a segment in the same plane.

GetClosestEdge(GeoLine3, Tolerance)

Gets the edge of this loop that comes nearest a segment in the same plane, within a tolerance.

GetClosestEdge(GeoPoint3)

Gets the edge of this loop that comes nearest a point.

GetClosestEdge(GeoPoint3, Tolerance)

Gets the edge of this loop that comes nearest a point, within a tolerance.

GetClosestPointOnBoundary(GeoPoint3)

Gets the point of the outline nearest another point.

GetClosestPointOnBoundary(GeoPoint3, Tolerance)

Gets the point of the outline nearest another point, within a tolerance.

GetDistanceAtParameter(double)

Gets the distance round the loop at a given parameter.

GetDistanceAtPoint(GeoPoint3)

Gets the distance round the loop to the point on it nearest another point.

GetDistanceAtPoint(GeoPoint3, Tolerance)

Gets the distance round the loop to the point on it nearest another point, within a tolerance.

GetEdgeAt(int)

Gets the edge at an index; the last closes the loop.

GetEdges()

Gets the edges of the loop, in order.

GetFrame()

Gets the frame the loop is laid out in, which turns with the loop.

GetHashCode()

Returns the hash code for this instance.

GetIntersections(GeoAabb3)

Gets every point where this curved loop crosses an axis-aligned box.

GetIntersections(GeoAabb3, Tolerance)

Gets every point where this curved loop crosses an axis-aligned box, within a tolerance.

GetIntersections(GeoArc3)

Gets every point where this curved loop crosses an arc.

GetIntersections(GeoArc3, Tolerance)

Gets every point where this curved loop crosses an arc, within a tolerance.

GetIntersections(GeoCircle3)

Gets every point where this curved loop crosses a circle.

GetIntersections(GeoCircle3, Tolerance)

Gets every point where this curved loop crosses a circle, within a tolerance.

GetIntersections(GeoFace3)

Gets every point where this curved loop crosses a face.

GetIntersections(GeoFace3, Tolerance)

Gets every point where this curved loop crosses a face, within a tolerance.

GetIntersections(GeoLine3)

Gets every point where this loop crosses a segment.

GetIntersections(GeoLine3, Tolerance)

Gets every point where this loop crosses a segment, within a tolerance.

GetIntersections(GeoObb3)

Gets every point where this curved loop crosses an oriented box.

GetIntersections(GeoObb3, Tolerance)

Gets every point where this curved loop crosses an oriented box, within a tolerance.

GetIntersections(GeoPlane3)

Gets every point where this curved loop crosses a plane.

GetIntersections(GeoPlane3, Tolerance)

Gets every point where this curved loop crosses a plane, within a tolerance.

GetIntersections(GeoPolygon3)

Gets every point where this curved loop crosses a polygon.

GetIntersections(GeoPolygon3, Tolerance)

Gets every point where this curved loop crosses a polygon, within a tolerance.

GetIntersections(GeoPolygonArc3)

Gets every point where this loop crosses a curved loop.

GetIntersections(GeoPolygonArc3, Tolerance)

Gets every point where this loop crosses a curved loop, within a tolerance.

GetIntersections(GeoPolyline3)

Gets every point where this loop crosses a straight chain.

GetIntersections(GeoPolyline3, Tolerance)

Gets every point where this loop crosses a straight chain, within a tolerance.

GetIntersections(GeoPolylineArc3)

Gets every point where this loop crosses a curved chain.

GetIntersections(GeoPolylineArc3, Tolerance)

Gets every point where this loop crosses a curved chain, within a tolerance.

GetIntersections(GeoRay3)

Gets every point where this loop crosses a ray.

GetIntersections(GeoRay3, Tolerance)

Gets every point where this loop crosses a ray, within a tolerance.

GetIntersections(GeoSolid3)

Gets every point where this curved loop crosses a solid.

GetIntersections(GeoSolid3, Tolerance)

Gets every point where this curved loop crosses a solid, within a tolerance.

GetIntersections(GeoTriangle3)

Gets every point where this curved loop crosses a triangle.

GetIntersections(GeoTriangle3, Tolerance)

Gets every point where this curved loop crosses a triangle, within a tolerance.

GetNormalAt(int)

Gets the plane the bulge leaving a vertex is read about.

GetParameterAtDistance(double)

Gets the parameter at a given distance round the loop.

GetParameterAtPoint(GeoPoint3)

Gets the parameter of the point on the loop nearest another point.

GetParameterAtPoint(GeoPoint3, Tolerance)

Gets the parameter of the point on the loop nearest another point, within a tolerance.

GetPlane()

Gets the plane the loop lies in.

GetPointAtDistance(double)

Gets the point a given distance round the loop, walked along its arcs.

GetPointAtParameter(double)

Gets the point a given way round the loop, from nought at the first vertex to one back at it.

GetShortestLineTo(GeoArc3)

Gets the shortest line from this loop's boundary to an arc in the same plane.

GetShortestLineTo(GeoArc3, Tolerance)

Gets the shortest line from this loop's boundary to an arc in the same plane, within a tolerance.

GetShortestLineTo(GeoCircle3)

Gets the shortest line from this loop's boundary to a circle in the same plane.

GetShortestLineTo(GeoCircle3, Tolerance)

Gets the shortest line from this loop's boundary to a circle in the same plane, within a tolerance.

GetShortestLineTo(GeoEdge3)

Gets the shortest line from this loop's boundary to an edge in the same plane.

GetShortestLineTo(GeoEdge3, Tolerance)

Gets the shortest line from this loop's boundary to an edge in the same plane, within a tolerance.

GetShortestLineTo(GeoFace3)

Gets the shortest line from this loop's boundary to a face in the same plane.

GetShortestLineTo(GeoFace3, Tolerance)

Gets the shortest line from this loop's boundary to a face in the same plane, within a tolerance.

GetShortestLineTo(GeoLine3)

Gets the shortest line from this loop's boundary to a segment in the same plane.

GetShortestLineTo(GeoLine3, Tolerance)

Gets the shortest line from this loop's boundary to a segment in the same plane, within a tolerance.

GetShortestLineTo(GeoPoint3)

Gets the shortest line from this loop's boundary to a point.

GetShortestLineTo(GeoPoint3, Tolerance)

Gets the shortest line from this loop's boundary to a point, within a tolerance.

GetShortestLineTo(GeoPolygon3)

Gets the shortest line from this loop's boundary to a polygon in the same plane.

GetShortestLineTo(GeoPolygon3, Tolerance)

Gets the shortest line from this loop's boundary to a polygon in the same plane, within a tolerance.

GetShortestLineTo(GeoPolygonArc3)

Gets the shortest line from this loop's boundary to another curved loop in the same plane.

GetShortestLineTo(GeoPolygonArc3, Tolerance)

Gets the shortest line from this loop's boundary to another curved loop in the same plane, within a tolerance.

GetShortestLineTo(GeoPolyline3)

Gets the shortest line from this loop's boundary to a straight chain in the same plane.

GetShortestLineTo(GeoPolyline3, Tolerance)

Gets the shortest line from this loop's boundary to a straight chain in the same plane, within a tolerance.

GetShortestLineTo(GeoPolylineArc3)

Gets the shortest line from this loop's boundary to a curved chain in the same plane.

GetShortestLineTo(GeoPolylineArc3, Tolerance)

Gets the shortest line from this loop's boundary to a curved chain in the same plane, within a tolerance.

Intersect(GeoPolygon3)

Keeps what this loop and a polygon lying in the same plane both cover.

Intersect(GeoPolygon3, Tolerance)

Keeps what this loop and a polygon lying in the same plane both cover, within a tolerance.

Intersect(GeoPolygonArc3)

Keeps what this loop and another lying in the same plane both cover.

Intersect(GeoPolygonArc3, Tolerance)

Keeps what this loop and another lying in the same plane both cover, within a tolerance.

IsEqualTo(GeoPolygonArc3)

Determines whether this loop draws the same outline as another.

IsEqualTo(GeoPolygonArc3, Tolerance)

Determines whether this loop draws the same outline as another, within a tolerance.

IsPointOn(GeoPoint3)

Determines whether a point lies on the outline of the loop.

IsPointOn(GeoPoint3, Tolerance)

Determines whether a point lies on the outline of the loop, within a tolerance.

IsSimple()

Determines whether no two edges of the loop cross.

IsSimple(Tolerance)

Determines whether no two edges of the loop cross, within a tolerance.

Locate(GeoPoint3)

Says where a point sits relative to the loop.

Locate(GeoPoint3, Tolerance)

Says where a point sits relative to the loop, within a tolerance.

Offset(double)

Moves the outline of the loop sideways in its own plane.

Offset(double, Tolerance)

Moves the outline of the loop sideways in its own plane, within a tolerance.

ProjectToPolygonArc2(GeoCoordinateSystem3)

Lays the loop out in a given frame.

Reverse()

Gets the loop run the other way round, drawing the same outline.

SharesPlaneWith(GeoPlane3)

Determines whether a plane is the plane this loop lies in.

SharesPlaneWith(GeoPlane3, Tolerance)

Determines whether a plane is the plane this loop lies in, within a tolerance.

SignedDistanceTo(GeoPoint3)

Gets how far a point is from the boundary of the loop, negative inside it.

SignedDistanceTo(GeoPoint3, Tolerance)

Gets how far a point is from the boundary of the loop, negative inside it, within a tolerance.

SplitAtDistances(IEnumerable<double>, out GeoPolylineArc3[])

Cuts the loop at a set of distances measured along it.

SplitAtDistances(IEnumerable<double>, out GeoPolylineArc3[], Tolerance)

Cuts the loop at a set of distances measured along it, within a tolerance.

Subtract(GeoPolygon3)

Takes a polygon lying in the same plane out of this loop.

Subtract(GeoPolygon3, Tolerance)

Takes a polygon lying in the same plane out of this loop, within a tolerance.

Subtract(GeoPolygonArc3)

Takes another loop lying in the same plane out of this one.

Subtract(GeoPolygonArc3, Tolerance)

Takes another loop lying in the same plane out of this one, within a tolerance.

ToPolygon3(double)

Gets the loop as a straight one following its arcs to a given accuracy.

ToPolygonArc2()

Lays the loop out in its own frame.

ToPolylineArc3()

Gets the loop as an open chain running once round it.

ToString()

Returns a string describing the loop.

TransformBy(GeoTransform3)

Applies a transformation to the loop.

Translate(GeoVector3)

Moves the loop by a vector.

TryChamferAt(int, double, double, out GeoPolygonArc3)

Cuts one named corner of the loop back and reports whether it had room.

TryChamferAt(int, double, double, out GeoPolygonArc3, Tolerance)

Cuts one named corner of the loop back and reports whether it had room, within a tolerance.

TryFilletAt(int, double, out GeoPolygonArc3)

Rounds one named corner of the loop and reports whether it had room.

TryFilletAt(int, double, out GeoPolygonArc3, Tolerance)

Rounds one named corner of the loop and reports whether it had room, within a tolerance.

TryIntersectWith(GeoLine3, out GeoPoint3[])

Tries to find where this loop crosses a segment.

TryIntersectWith(GeoLine3, out GeoPoint3[], Tolerance)

Tries to find where this loop crosses a segment, within a tolerance.

TryIntersectWith(GeoPolygonArc3, out GeoPoint3[])

Tries to find where this loop crosses a curved loop.

TryIntersectWith(GeoPolygonArc3, out GeoPoint3[], Tolerance)

Tries to find where this loop crosses a curved loop, within a tolerance.

TryIntersectWith(GeoPolyline3, out GeoPoint3[])

Tries to find where this loop crosses a straight chain.

TryIntersectWith(GeoPolyline3, out GeoPoint3[], Tolerance)

Tries to find where this loop crosses a straight chain, within a tolerance.

TryIntersectWith(GeoPolylineArc3, out GeoPoint3[])

Tries to find where this loop crosses a curved chain.

TryIntersectWith(GeoPolylineArc3, out GeoPoint3[], Tolerance)

Tries to find where this loop crosses a curved chain, within a tolerance.

TryIntersectWith(GeoRay3, out GeoPoint3[])

Tries to find where this loop crosses a ray.

TryIntersectWith(GeoRay3, out GeoPoint3[], Tolerance)

Tries to find where this loop crosses a ray, within a tolerance.

TrySplitBy(GeoAabb3, out GeoPolylineArc3[], out GeoPolylineArc3[])

Cuts the loop where it crosses a square box, telling what is in from what is out.

TrySplitBy(GeoAabb3, out GeoPolylineArc3[], out GeoPolylineArc3[], Tolerance)

Cuts the loop where it crosses a square box, telling what is in from what is out, within a tolerance.

TrySplitBy(GeoAabb3[], out GeoPolylineArc3[], out GeoPolylineArc3[])

Cuts the loop where it crosses several square boxes, telling what is in from what is out.

TrySplitBy(GeoAabb3[], out GeoPolylineArc3[], out GeoPolylineArc3[], Tolerance)

Cuts the loop where it crosses several square boxes, telling what is in from what is out, within a tolerance.

TrySplitBy(GeoFace3, out GeoPolylineArc3[])

Cuts the loop wherever it crosses a face.

TrySplitBy(GeoFace3, out GeoPolylineArc3[], Tolerance)

Cuts the loop wherever it crosses a face, within a tolerance.

TrySplitBy(GeoObb3, out GeoPolylineArc3[], out GeoPolylineArc3[])

Cuts the loop where it crosses a box, telling what is in from what is out.

TrySplitBy(GeoObb3, out GeoPolylineArc3[], out GeoPolylineArc3[], Tolerance)

Cuts the loop where it crosses a box, telling what is in from what is out, within a tolerance.

TrySplitBy(GeoObb3[], out GeoPolylineArc3[], out GeoPolylineArc3[])

Cuts the loop where it crosses several boxes, telling what is in from what is out.

TrySplitBy(GeoObb3[], out GeoPolylineArc3[], out GeoPolylineArc3[], Tolerance)

Cuts the loop where it crosses several boxes, telling what is in from what is out, within a tolerance.

TrySplitBy(GeoPlane3, out GeoPolylineArc3[])

Cuts the loop wherever it crosses a plane.

TrySplitBy(GeoPlane3, out GeoPolylineArc3[], Tolerance)

Cuts the loop wherever it crosses a plane, within a tolerance.

TrySplitBy(GeoPoint3, out GeoPolylineArc3[])

Cuts the loop at a point on it.

TrySplitBy(GeoPoint3, out GeoPolylineArc3[], Tolerance)

Cuts the loop at a point on it, within a tolerance.

TrySplitBy(GeoSolid3, out GeoPolylineArc3[], out GeoPolylineArc3[])

Cuts the loop where it crosses the surface of a solid, telling what is in from what is out.

TrySplitBy(GeoSolid3, out GeoPolylineArc3[], out GeoPolylineArc3[], Tolerance)

Cuts the loop where it crosses the surface of a solid, telling what is in from what is out, within a tolerance.

TrySplitBy(GeoSolid3[], out GeoPolylineArc3[], out GeoPolylineArc3[])

Cuts the loop where it crosses several bodies, telling what is in from what is out.

TrySplitBy(GeoSolid3[], out GeoPolylineArc3[], out GeoPolylineArc3[], Tolerance)

Cuts the loop where it crosses several bodies, telling what is in from what is out, within a tolerance.

Union(GeoPolygon3)

Joins this loop to a polygon lying in the same plane.

Union(GeoPolygon3, Tolerance)

Joins this loop to a polygon lying in the same plane, within a tolerance.

Union(GeoPolygonArc3)

Joins this loop to another lying in the same plane.

Union(GeoPolygonArc3, Tolerance)

Joins this loop to another lying in the same plane, within a tolerance.

Xor(GeoPolygon3)

Keeps what this loop and a polygon lying in the same plane cover between them but do not share.

Xor(GeoPolygon3, Tolerance)

Keeps what this loop and a polygon lying in the same plane cover between them but do not share, within a tolerance.

Xor(GeoPolygonArc3)

Keeps what this loop and another lying in the same plane cover, but not both.

Xor(GeoPolygonArc3, Tolerance)

Keeps what this loop and another lying in the same plane cover, but not both, within a tolerance.

Operators

operator ==(GeoPolygonArc3, GeoPolygonArc3)

Determines whether two loops hold the same vertices, bulges and planes.

operator !=(GeoPolygonArc3, GeoPolygonArc3)

Determines whether two loops differ.