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.
- 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.
|constructor(): CurvePrimitive Protected|
|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 with a plane.|
|clonePartialCurve(_fractionA: number, _fractionB: number): CurvePrimitive | undefined||Return (if possible) a curve primitive which is a portion of this curve.|
|closestPoint(spacePoint: Point3d, extend: VariantCurveExtendParameter): CurveLocationDetail | undefined||Search for the curve point that is closest to the spacePoint.|
|computeAndAttachRecursiveStrokeCounts(options?: StrokeOptions, parentMap?: StrokeCountMap): void||attach StrokeCountMap structure to this primitive (and recursively to any children)
* Base class implementation (here) gets the simple count from computeStrokeCountForOptions and attaches it.
|computeStrokeCountForOptions(options?: StrokeOptions): number Abstract||return the stroke count required for given options.|
|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
* Curve length is always positive.
|curveLengthWithFixedIntervalCountQuadrature(fraction0: number, fraction1: number, numInterval: number, numGauss: number = 5): number|| Run an integration (with a default gaussian quadrature) with a fixed fractional step
This is typically called by specific curve type implementations of curveLengthBetweenFractions.
|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|
|endPoint(result?: Point3d): Point3d||return the end point of the primitive.|
|fractionAndDistanceToPointOnTangent(fraction: number, distance: number): Point3d||Construct a point extrapolated along tangent at fraction.|
|fractionToFrenetFrame(fraction: number, result?: Transform): Transform | undefined||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.
|fractionToPoint(fraction: number, result?: Point3d): Point3d Abstract||Return the point (x,y,z) on the curve at fractional position.|
|fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors | undefined Abstract||Return a plane with
origin at fractional position along the curve
vectorU is the first derivative, i.e.
|fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d Abstract||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.|
|getFractionToDistanceScale(): number | undefined|| 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.
|isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean Abstract||Ask if the curve is within tolerance of a plane.|
|moveSignedDistanceFromFraction(startFraction: number, signedDistance: number, allowExtension: boolean, result?: CurveLocationDetail): 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): CurveLocationDetail Protected||Generic algorithm to search for point at signed distance from a fractional startPoint.|
|quickLength(): number Abstract||Compute a length which may be an fast approximation to the true length.|
|reverseInPlace(): void Abstract||Reverse the curve's data so that its fractional stroking moves in the opposite direction.|
|startPoint(result?: Point3d): Point3d||return the startPoint of the primitive.|
|installStrokeCountMap(curve: CurvePrimitive, curveMap: StrokeCountMap, parentMap?: StrokeCountMap): void Static||final install step to save curveMap in curve.|
|clone(): GeometryQuery | undefined Abstract||GeometryQuery||return a clone|
|cloneTransformed(transform: Transform): GeometryQuery | undefined Abstract||GeometryQuery||return a transformed clone.|
|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): Range3d||GeometryQuery||return the range of the entire (tree) GeometryQuery|
|tryTransformInPlace(transform: Transform): boolean Abstract||GeometryQuery||Attempt to transform in place.|
|tryTranslateInPlace(dx: number, dy: number = 0, dz: number = 0): boolean||GeometryQuery||try to move the geometry by dx,dy,dz|
|geometryCategory||"curvePrimitive" = "curvePrimitive"|
|isExtensibleFractionSpace Accessor ReadOnly||boolean||* Returns true if the curve's fraction queries extend beyond 0..1.|
|strokeData||undefined | StrokeCountMap||data attached during stroking for facets.|
|children Accessor ReadOnly||GeometryQuery | undefined||GeometryQuery||return GeometryQuery children for recursive queries.
* leaf classes do not need to implement.
Last Updated: 10 September, 2019