API Reference > geometry-core > Curve > CurveChain CurveChain Class Shared base class for use by both open and closed paths. A CurveChain contains only curvePrimitives. No other paths, loops, or regions allowed. A single entry in the chain can in fact contain multiple curve primitives if the entry itself is (for instance) CurveChainWithDistanceIndex which presents itself (through method interface) as a CurvePrimitive with well defined mappings from fraction to xyz, but in fact does all the calculations over multiple primitives. The specific derived classes are Path and Loop CurveChain is an intermediate class. It is not instantiable on its own. see Curve Collections learning article. Extends CurveCollection Extended by Loop Path Methods Name Description constructor(): CurveChain Protected cloneStroked(options?: StrokeOptions): AnyCurve Abstract Return a structural clone, with CurvePrimitive objects stroked. cyclicCurvePrimitive(index: number, cyclic: boolean = true): undefined | CurvePrimitive Return the [index] curve primitive, optionally using modulo to mapindex to the cyclic indexing. extendRange(range: Range3d, transform?: Transform): void invoke curve.extendRange(range, transform) for each child getChild(i: number): undefined | CurvePrimitive Return a child by index getPackedStrokes(options?: StrokeOptions): undefined | GrowableXYZArray Stroke the chain into a simple xyz array. primitiveIndexAndFractionToCurveLocationDetailPointAndDerivative(index: number, fraction: number, cyclic: boolean = false, result?: CurveLocationDetail): undefined | CurveLocationDetail Evaluate an indexed curve at a fraction. reverseChildrenInPlace(): void Reverse each child curve (in place) tryAddChild(child: undefined | AnyCurve): boolean add a child curve. Inherited methods Name Inherited from Description announceToCurveProcessor(processor: RecursiveCurveProcessor): void Abstract CurveCollection Support method for ICurvePrimitive ... checkForNonLinearPrimitives(): boolean CurveCollection return true if the curve collection has any primitives other than LineSegment3d and LineString3d clone(): undefined | CurveCollection CurveCollection Return a deep copy. cloneEmptyPeer(): CurveCollection Abstract CurveCollection clone an empty collection. cloneTransformed(transform: Transform): undefined | CurveCollection CurveCollection Create a deep copy of transformed curves. cloneWithExpandedLineStrings(): undefined | CurveCollection CurveCollection Create a deep copy with all linestrings expanded to multiple LineSegment3d. closestPoint(spacePoint: Point3d): undefined | CurveLocationDetail CurveCollection Return the closest point on the contained curves collectCurvePrimitives(collectorArray?: CurvePrimitive[], smallestPossiblePrimitives: boolean = false, explodeLineStrings: boolean = false): CurvePrimitive[] CurveCollection Return an array containing only the curve primitives. dgnBoundaryType(): number Abstract CurveCollection Return the boundary type of a corresponding MicroStation CurveVector. dispatchToGeometryHandler(handler: GeometryHandler): any Abstract CurveCollection * "double dispatch" call pattern. isAlmostEqual(other: GeometryQuery): boolean CurveCollection test for exact structure and nearly identical geometry. isSameGeometryClass(other: GeometryQuery): boolean Abstract CurveCollection test if (other instanceof this.Type). maxGap(): number CurveCollection return the max gap between adjacent primitives in Path and Loop collections. range(transform?: Transform, result?: Range3d): Range3d CurveCollection return the range of the entire (tree) GeometryQuery sumLengths(): number CurveCollection Return the sum of the lengths of all contained curves. tryTransformInPlace(transform: Transform): boolean CurveCollection Apply transform recursively to children tryTranslateInPlace(dx: number, dy: number = 0.0, dz: number = 0.0): boolean CurveCollection try to move the geometry by dx,dy,dz areAlmostEqual(a: undefined | GeometryQuery, b: undefined | GeometryQuery): boolean Static CurveCollection apply instance method isAlmostEqual if both are defined. createCurveLocationDetailOnAnyCurvePrimitive(source: undefined | GeometryQuery, fraction: number = 0.5): undefined | CurveLocationDetail Static CurveCollection * Find any curve primitive in the source. Properties Name Type Description _curves Protected CurvePrimitive[] The curve primitives in the chain. children Accessor ReadOnly CurvePrimitive[] Return the array of CurvePrimitive Inherited properties Name Type Inherited from Description curveCollectionType AbstractReadonly CurveCollectionType CurveCollection Type discriminator. geometryCategory Readonly "curveCollection" CurveCollection String name for schema properties isAnyRegionType Accessor ReadOnly boolean CurveCollection Return true for planar region types:* Loop* ParityRegion* UnionRegion isClosedPath Accessor ReadOnly boolean CurveCollection Return true for a single-loop planar region type, i.e. Loop.* This is _not- a test for physical closure of a Path isInner boolean CurveCollection Flag for inner loop status. isOpenPath Accessor ReadOnly boolean CurveCollection Return true for a Path, i.e. a chain of curves joined head-to-tail Defined in curve/CurveCollection.ts Line 202 Last Updated: 12 June, 2024