CurveChainWithDistanceIndex Class

CurveChainWithDistanceIndex is a CurvePrimitive whose fractional parameterization is proportional to true distance along a CurveChain.

  • The curve chain can be any type derived from CurveChain.
    • i.e. either a Path or a Loop



Name Description
constructor(): CurveChainWithDistanceIndex Protected    
chainDistanceToChainFraction(distance: number): number Convert distance along the chain to fraction along the chain.  
chainDistanceToFragment(distance: number, allowExtrapolation: boolean = false): PathFragment | undefined Protected Resolve a fraction of the CurveChain to a PathFragment  
clone(): CurvePrimitive | undefined Return a deep clone  
cloneTransformed(transform: Transform): CurvePrimitive | undefined Create a clone, transformed and with its own distance index.  
closestPoint(spacePoint: Point3d, extend: VariantCurveExtendParameter): CurveLocationDetail | undefined Search for the curve point that is closest to the spacePoint.  
computeAndAttachRecursiveStrokeCounts(options?: StrokeOptions, parentStrokeMap?: StrokeCountMap): void construct StrokeCountMap for each child, accumulating data to stroke count map for this primitive.  
computeStrokeCountForOptions(options?: StrokeOptions): number return the stroke count required for given options.  
curveAndChildFractionToFragment(curve: CurvePrimitive, fraction: number): PathFragment | undefined Protected Resolve a fraction within a specific curve to a fragment.  
curveLength(): number Returns the total length of curves.  
curveLengthBetweenFractions(fraction0: number, fraction1: number): number * Curve length is always positive.  
dispatchToGeometryHandler(handler: GeometryHandler): any Second step of double dispatch: call this._path.dispatchToGeometryHandler (handler)
* Note that this exposes the children individually to the handler.
emitStrokableParts(dest: IStrokeHandler, options?: StrokeOptions): void Ask the curve to announce points and simple subcurve fragments for stroking.  
emitStrokes(dest: LineString3d, options?: StrokeOptions): void Add strokes to caller-supplied linestring  
endPoint(result?: Point3d): Point3d Return the end point of the primitive.  
extendRange(rangeToExtend: Range3d, transform?: Transform): void Extend (increase) rangeToExtend as needed to include these curves (optionally transformed)  
fractionToPoint(fraction: number, result?: Point3d): Point3d Return the point (x,y,z) on the curve at fractional position along the chain.  
fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors | undefined Return a plane with

origin at fractional position along the curve
vectorU is the first derivative, i.e.
fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d Return the point (x,y,z) and derivative on the curve at fractional position.  
fractionToPointAndUnitTangent(fraction: number, result?: Ray3d): Ray3d Returns a ray whose origin is the curve point and direction is the unit tangent.  
isAlmostEqual(other: GeometryQuery): boolean Test for equality conditions:
Mismatched totalLength is a quick exit condition
If totalLength matches, recurse to the path for matching primitives.
isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean Ask if the curve is within tolerance of a plane.  
isSameGeometryClass(other: GeometryQuery): boolean Test if other is a CurveChainWithDistanceIndex  
moveSignedDistanceFromFraction(startFraction: number, signedDistance: number, allowExtension: boolean, result?: CurveLocationDetail): CurveLocationDetail Implement moveSignedDistanceFromFraction.  
quickLength(): number Returns the total length of the path.  
reverseInPlace(): void Reverse the curve's data so that its fractional stroking moves in the opposite direction.  
startPoint(result?: Point3d): Point3d return the start point of the primitive.  
tryTransformInPlace(transform: Transform): boolean Attempt to transform in place.  
createCapture(path: CurveChain, options?: StrokeOptions): CurveChainWithDistanceIndex | undefined Static Capture (not clone) a path into a new CurveChainWithDistanceIndex  

Inherited methods

Name Inherited from Description
addMappedStrokesToLineString3D(map: StrokeCountMap, linestring: LineString3d): number CurvePrimitive * evaluate strokes at fractions indicated in a StrokeCountMap.
announceClipIntervals(_clipper: Clipper, _announce?: AnnounceNumberNumberCurvePrimitive): boolean CurvePrimitive Find intervals of this curvePrimitive that are interior to a clipper
appendPlaneIntersectionPoints(plane: PlaneAltitudeEvaluator, result: CurveLocationDetail[]): number CurvePrimitive Compute intersections with a plane.
clonePartialCurve(_fractionA: number, _fractionB: number): CurvePrimitive | undefined CurvePrimitive Return (if possible) a curve primitive which is a portion of this curve.
curveLengthWithFixedIntervalCountQuadrature(fraction0: number, fraction1: number, numInterval: number, numGauss: number = 5): number CurvePrimitive Run an integration (with a default gaussian quadrature) with a fixed fractional step
This is typically called by specific curve type implementations of curveLengthBetweenFractions.
fractionAndDistanceToPointOnTangent(fraction: number, distance: number): Point3d CurvePrimitive Construct a point extrapolated along tangent at fraction.
fractionToFrenetFrame(fraction: number, result?: Transform): Transform | undefined CurvePrimitive Construct a frenet frame:
origin at the point on the curve
x axis is unit vector along the curve (tangent)
* y axis is perpendicular and in the plane of the osculating circle.
getFractionToDistanceScale(): number | undefined CurvePrimitive If the curve primitive has distance-along-curve strictly proportional to curve fraction, return true
If distance-along-the-curve is not proportional, return undefined.
moveSignedDistanceFromFractionGeneric(startFraction: number, signedDistance: number, allowExtension: boolean, result?: CurveLocationDetail): CurveLocationDetail Protected CurvePrimitive Generic algorithm to search for point at signed distance from a fractional startPoint.
range(transform?: Transform, result?: Range3d): Range3d GeometryQuery return the range of the entire (tree) GeometryQuery
tryTranslateInPlace(dx: number, dy: number = 0, dz: number = 0): boolean GeometryQuery try to move the geometry by dx,dy,dz
installStrokeCountMap(curve: CurvePrimitive, curveMap: StrokeCountMap, parentMap?: StrokeCountMap): void Static CurvePrimitive final install step to save curveMap in curve.


Name Type Description
curvePrimitiveType "curveChainWithDistanceIndex" = "curveChainWithDistanceIndex"    
path Accessor ReadOnly CurveChain Reference to the contained path.  

Inherited properties

Name Type Inherited from Description
children Accessor ReadOnly GeometryQuery[] | undefined GeometryQuery return GeometryQuery children for recursive queries.

* leaf classes do not need to implement.
geometryCategory "curvePrimitive" = "curvePrimitive" CurvePrimitive  
isExtensibleFractionSpace Accessor ReadOnly boolean CurvePrimitive Returns true if the curve's fraction queries extend beyond 0..1.
Base class default implementation returns false.
These class (and perhaps others in the future) will return true:
strokeData undefined | StrokeCountMap CurvePrimitive data attached during stroking for facets.

Defined in

Last Updated: 10 September, 2019