## CurvePrimitive Class

A curve primitive is bounded. A curve primitive maps fractions in 0..1 to points in space. As the fraction proceeds from 0 towards 1, the point moves "forward" along the curve. True distance along the curve is not always strictly proportional to fraction.

• A LineSegment3d always has proportional fraction and distance.
• An Arc3d which is true circular has proportional fraction and distance.
• A LineString3d is not proportional (except for special case of all segments of equal length).
• A Spiral3d is proportional.
• A BsplineCurve3d is only proportional for special cases. For fractions outside 0..1, the curve primitive class may either (a) return the near endpoint or (b) evaluate an extended curve.

### Methods

Name Description
constructor(): Protected Constructor
addMappedStrokesToLineString3D(map: StrokeCountMap, linestring: LineString3d): number Evaluate strokes at fractions indicated in a StrokeCountMap.
announceClipIntervals(_clipper: Clipper, _announce?: AnnounceNumberNumberCurvePrimitive): boolean Find intervals of this curvePrimitive that are interior to a clipper
appendPlaneIntersectionPoints(plane: PlaneAltitudeEvaluator, result: CurveLocationDetail[]): number Compute intersections of the curve with a plane.
clone(): Abstract Return a deep clone.
clonePartialCurve(_fractionA: number, _fractionB: number): undefined | CurvePrimitive Return (if possible) a curve primitive which is a portion of this curve.
cloneTransformed(transform: Transform): undefined | CurvePrimitive Abstract Return a transformed deep clone.
closestPoint(spacePoint: Point3d, extend: VariantCurveExtendParameter, result?: CurveLocationDetail): undefined | CurveLocationDetail Search for a point on the curve that is closest to the spacePoint.
collectCurvePrimitives(collectorArray?: CurvePrimitive[], smallestPossiblePrimitives: booleanfalse, explodeLinestrings: booleanfalse): Return an array containing only the curve primitives.
collectCurvePrimitivesGo(collectorArray: CurvePrimitive[], _smallestPossiblePrimitives: boolean, _explodeLinestrings: booleanfalse): void Return an array containing only the curve primitives.
computeAndAttachRecursiveStrokeCounts(options?: StrokeOptions, parentMap?: StrokeCountMap): void Attach StrokeCountMap structure to this primitive (and recursively to any children)
computeStrokeCountForOptions(options?: StrokeOptions): number Abstract Return the stroke count required for given options.
constructOffsetXY(offsetDistanceOrOptions: number | OffsetOptions): undefined | CurvePrimitive | CurvePrimitive[] Abstract Construct an offset of the instance curve as viewed in the xy-plane (ignoring z).
curveLength(): number Return the length of the curve.
curveLengthBetweenFractions(fraction0: number, fraction1: number): number Returns a (high accuracy) length of the curve between fractional positions.
curveLengthWithFixedIntervalCountQuadrature(fraction0: number, fraction1: number, numInterval: number, numGauss: number5): number Run an integration (with a default Gaussian quadrature) with a fixed fractional step
emitStrokableParts(dest: IStrokeHandler, options?: StrokeOptions): void Abstract Ask the curve to announce points and simple subcurve fragments for stroking.
emitStrokes(dest: LineString3d, options?: StrokeOptions): void Abstract Add strokes to caller-supplied linestring (function updates `dest`)
endPoint(result?: Point3d): Return the end point of the primitive.
fractionAndDistanceToPointOnTangent(fraction: number, distance: number): Construct a point extrapolated along tangent at fraction.
fractionToCurvature(fraction: number): undefined | number Returns the (absolute) curvature magnitude.
fractionToFrenetFrame(fraction: number, result?: Transform): undefined | Transform Construct a frenet frame:
fractionToPoint(fraction: number, result?: Point3d): Abstract Return the point (x,y,z) on the curve at fractional position.
fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): undefined | Plane3dByOriginAndVectors Abstract Return a plane with
fractionToPointAndDerivative(fraction: number, result?: Ray3d): Abstract Return the point (x,y,z) and derivative on the curve at fractional position.
fractionToPointAndUnitTangent(fraction: number, result?: Ray3d): Returns a ray whose origin is the curve point and direction is the unit tangent.
fractionToSignedXYRadiusOfCurvature(fraction: number): number Construct signed distance from a point on the planar curve to its center of curvature (in xy only).
getFractionToDistanceScale(): undefined | number If the curve primitive has distance-along-curve strictly proportional to curve fraction, return the scale factor.
isInPlane(): boolean Abstract Ask if the curve is within tolerance of a plane.
moveSignedDistanceFromFraction(startFraction: number, signedDistance: number, allowExtension: boolean, result?: CurveLocationDetail): (Attempt to) find a position on the curve at a signed distance from start fraction.
moveSignedDistanceFromFractionGeneric(startFraction: number, signedDistance: number, allowExtension: boolean, result?: CurveLocationDetail): Protected Generic algorithm to search for point at signed distance from a fractional startPoint.
projectedParameterRange(_ray: Vector3d | Ray3d, _lowHigh?: Range1d): undefined | Range1d Project instance geometry (via dispatch) onto the line of the given ray, and return the extreme fractional
quickLength(): number Abstract Compute a length for curve which may be a fast approximation to the true length.
rangeBetweenFractions(fraction0: number, fraction1: number, transform?: Transform): Returns a (high accuracy) range of the curve between fractional positions
rangeBetweenFractionsByClone(fraction0: number, fraction1: number, transform?: Transform): Returns a (high accuracy) range of the curve between fractional positions
rangeBetweenFractionsByCount(fraction0: number, fraction1: number, count: number, transform?: Transform, extrapolationFactor: number0.0): Returns an approximate range based on a fixed number of evaluations
reverseInPlace(): void Abstract Reverse the curve's data so that its fractional stroking moves in the opposite direction.
startPoint(result?: Point3d): Return the startPoint of the primitive.
installStrokeCountMap(curve: CurvePrimitive, curveMap: StrokeCountMap, parentMap?: StrokeCountMap): void Static Final install step to save curveMap in curve.

### Inherited methods

Name Inherited from Description
dispatchToGeometryHandler(handler: GeometryHandler): any Abstract GeometryQuery Double Dispatch call pattern.
extendRange(rangeToExtend: Range3d, transform?: Transform): void Abstract GeometryQuery Extend `rangeToExtend` by the range of this geometry multiplied by the `transform`.
isAlmostEqual(other: GeometryQuery): boolean GeometryQuery Test for exact structure and nearly identical geometry.
isSameGeometryClass(other: GeometryQuery): boolean Abstract GeometryQuery Test `if (other instanceof this.Type)`.
range(transform?: Transform, result?: Range3d): GeometryQuery Return the range of the entire GeometryQuery tree.
tryTransformInPlace(transform: Transform): boolean Abstract GeometryQuery Attempt to transform in place.
tryTranslateInPlace(dx: number, dy: number0.0, dz: number0.0): boolean GeometryQuery Try to move the geometry by dx,dy,dz.
areAlmostEqual(): boolean Static GeometryQuery Apply instance method isAlmostEqual if both are defined.

### Properties

Name Type Description
curvePrimitiveType Abstract Readonly CurvePrimitiveType String name for schema properties
geometryCategory Readonly "curvePrimitive" String name for schema properties
isExtensibleFractionSpace Accessor ReadOnly boolean * Returns true if the curve can be easily extended past its start/end point (i.e., beyond the usual
parent any | undefined Data attached by various algorithms (e.g.
strokeData StrokeCountMap | undefined Data attached during stroking for facets.

### Inherited properties

Name Type Inherited from Description
children Accessor ReadOnly undefined | GeometryQuery[] GeometryQuery Return GeometryQuery children for recursive queries.
* leaf classes do not need to implement.

### Defined in

Last Updated: 17 July, 2024