An AlternatingConvexClipTreeNode is a node in a tree structure in which
- Each node contains a ConvexClipPlaneSet
- Each node contains an array of children which are also AlternatingConvexClipTreeNode.
- The rule for an in/out decision is that a point is IN the subtree under a node if
- It is IN the node's ConvexClipPlaneSet.
- It is NOT IN any of the children.
- Applying "NOT IN any of the children" locally to children at each level means that the ConvexClipPlaneSet at adjacent levels flip between being positive areas and holes.
- Use an AlternatingConvexClipTreeNodeBuilder to construct the tree from a polygon.
- It is possible for the root clip plane set to be empty. An empty clip plane set returns "true" for all point tests, so the meaning is just that holes are to be subtracted from the rest of space.
- Although the interpretation of in/out alternates with tree levels, the ConvexClipPlaneSets at each level are all "enclosing" planes in the usual way.
|addEmptyChild(index0: number, numPoints: number): void||Add a new child that has an empty plane set and given indices.|
|addPlane(plane: ClipPlane): void||Add a plane to the ConvexClipPlaneSet|
|appendCurveCollectionClipIntervals(curves: CurveCollection, insideIntervals: CurveLocationDetailPair, outsideIntervals: CurveLocationDetailPair): void||Append start-end positions for curve intervals classified as inside or outside.|
|appendCurvePrimitiveClipIntervals(curve: CurvePrimitive, insideIntervals: CurveLocationDetailPair, outsideIntervals: CurveLocationDetailPair): void||Append start-end positions for curve intervals classified as inside or outside.|
|captureConvexClipPlaneSetAsVoid(child: AlternatingCCTreeNode): void||Add an AlternatingConvexClipTreeNode as a child of this one -- i.e.|
|clone(result?: AlternatingCCTreeNode): AlternatingCCTreeNode||Creates a deep copy of this node (expensive - copies Geometry, and is recursive for children array).|
|empty(): void||Resets this AlternatingConvexClipTreeNode to a newly-created state|
|isPointOnOrInside(point: Point3d): boolean||Search with alternating in and out semantics.|
|createTreeForPolygon(points: Point3d, result?: AlternatingCCTreeNode): AlternatingCCTreeNode Static||
|createWithIndices(index0: number, numPoints: number, result?: AlternatingCCTreeNode): AlternatingCCTreeNode Static||Initialize this node with index data referencing the parent polygon.|
Last Updated: 10 September, 2019