TransitionSpiral3d Class

TransitionSpiral3d is a base class for multiple variants of spirals.

  • The menagerie of spiral types have 2 broad categories:
    • IntegratedSpiral3d -- a spiral whose direct function for curvature versus distance must be integrated to determine x,y
      • The IntegratedSpiral3d types are enumerated in IntegratedSpiralTypes
    • DirectSpiral3d -- a spiral implemented with direct calculation of x,y from fractional position along the spiral.
      • The direct spiral types are enumerated in the DirectSpiralType
  • The method set for CurvePrimitive support includes a handleTransitionSpiral(g: TransitionSpiral3d) which receives all the spiral types.
  • The spiral class may impose expectations that its inflection is at the origin, with tangent along the x axis.
    • This is generally necessary for direct spirals.
    • This is not necessary for integrated spirals.

Extends

Extended by

Methods

Name Description
constructor(spiralType: undefined | string, localToWorld: Transform, activeFractionInterval: undefined | Segment1d, designProperties: undefined | TransitionConditionalProperties): TransitionSpiral3d Protected    
applyRigidPartOfTransform(transformA: Transform): undefined | { rigidAxes: Matrix3d, scale: number } Protected * If transformA is rigid with uniform scale, apply the rigid part of transformA to the localToWorld transform and return the scale and rigid separation.  
clone(): TransitionSpiral3d Abstract Return a deep clone.  
clonePartialCurve(fractionA: number, fractionB: number): TransitionSpiral3d Return (if possible) a spiral which is a portion of this curve.  
cloneTransformed(transform: Transform): TransitionSpiral3d Clone with a transform applied  
constructOffsetXY(offsetDistanceOrOptions: number | OffsetOptions): undefined | CurvePrimitive | CurvePrimitive[] Construct an offset of the instance curve as viewed in the xy-plane (ignoring z).  
extendRange(rangeToExtend: Range3d, transform?: Transform): void extend the range by the strokes of the spiral  
projectedParameterRange(ray: Ray3d | Vector3d, lowHigh?: Range1d): undefined | Range1d Project instance geometry (via dispatch) onto the given ray, and return the extreme fractional parameters of projection.  
rangeBetweenFractions(fractionA: number, fractionB: number, transform?: Transform): Range3d return the range of spiral between fractions of the activeStrokes.  
refreshComputedProperties(): void Abstract Recompute strokes  
averageCurvature(radiusLimits: Segment1d): number Static Return the average of the start and end curvatures.  
averageCurvatureR0R1(r0: number, r1: number): number Static Given two radii (or zeros for 0 curvature) return the average curvature  
curvatureToRadius(curvature: number): number Static Return 1/k with convention that if near-zero is given as curvature, its infinite radius is returned as 0  
interpolateCurvatureR0R1(r0: number, fraction: number, r1: number): number Static Given two radii (or zeros for 0 curvature) return the average curvature  
radius0LengthSweepRadiansToRadius1(radius0: number, arcLength: number, sweepRadians: number): number Static Return the end radius for spiral of given start radius, length, and turn angle.  
radius1LengthSweepRadiansToRadius0(radius1: number, arcLength: number, sweepRadians: number): number Static Return the start radius for spiral of given end radius, length, and turn angle.  
radiusRadiusLengthToSweepRadians(radius0: number, radius1: number, arcLength: number): number Static Return the turn angle for spiral of given length between two radii  
radiusRadiusSweepRadiansToArcLength(radius0: number, radius1: number, sweepRadians: number): number Static Return the arc length of a transition spiral with given sweep and radius pair.  
radiusToCurvature(radius: number): number Static Return 1/r with convention that if true zero is given as radius it represents infinite radius (0 curvature, straight line)  

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.
closestPoint(spacePoint: Point3d, extend: VariantCurveExtendParameter): undefined | CurveLocationDetail CurvePrimitive Search for the curve point that is closest to the spacePoint.
collectCurvePrimitives(collectorArray?: CurvePrimitive[], smallestPossiblePrimitives: boolean = false, explodeLinestrings: boolean = false): CurvePrimitive[] CurvePrimitive Return an array containing only the curve primitives.
collectCurvePrimitivesGo(collectorArray: CurvePrimitive[], _smallestPossiblePrimitives: boolean, _explodeLinestrings: boolean = false): void CurvePrimitive Return an array containing only the curve primitives.
computeAndAttachRecursiveStrokeCounts(options?: StrokeOptions, parentMap?: StrokeCountMap): void CurvePrimitive attach StrokeCountMap structure to this primitive (and recursively to any children)
computeStrokeCountForOptions(options?: StrokeOptions): number Abstract CurvePrimitive return the stroke count required for given options.
curveLength(): number CurvePrimitive return the length of the curve.
curveLengthBetweenFractions(fraction0: number, fraction1: number): number CurvePrimitive Returns a (high accuracy) length of the curve between fractional positions
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
dispatchToGeometryHandler(handler: GeometryHandler): any Abstract CurvePrimitive * "double dispatch" call pattern.
emitStrokableParts(dest: IStrokeHandler, options?: StrokeOptions): void Abstract CurvePrimitive Ask the curve to announce points and simple subcurve fragments for stroking.
emitStrokes(dest: LineString3d, options?: StrokeOptions): void Abstract CurvePrimitive Add strokes to caller-supplied linestring
endPoint(result?: Point3d): Point3d CurvePrimitive return the end point of the primitive.
fractionAndDistanceToPointOnTangent(fraction: number, distance: number): Point3d CurvePrimitive Construct a point extrapolated along tangent at fraction.
fractionToCurvature(fraction: number): undefined | number CurvePrimitive Returns the (absolute) curvature magnitude.
fractionToFrenetFrame(fraction: number, result?: Transform): undefined | Transform CurvePrimitive Construct a frenet frame:
fractionToPoint(fraction: number, result?: Point3d): Point3d Abstract CurvePrimitive Return the point (x,y,z) on the curve at fractional position.
fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): undefined | Plane3dByOriginAndVectors Abstract CurvePrimitive Return a plane with
fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d Abstract CurvePrimitive Return the point (x,y,z) and derivative on the curve at fractional position.
fractionToPointAndUnitTangent(fraction: number, result?: Ray3d): Ray3d CurvePrimitive Returns a ray whose origin is the curve point and direction is the unit tangent.
fractionToSignedXYRadiusOfCurvature(fraction: number): number CurvePrimitive Construct signed distance from a point on the curve to its center of curvature (in xy only).
getFractionToDistanceScale(): undefined | number CurvePrimitive * If the curve primitive has distance-along-curve strictly proportional to curve fraction, return the scale factor.
isAlmostEqual(other: GeometryQuery): boolean CurvePrimitive test for exact structure and nearly identical geometry.
isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean Abstract CurvePrimitive Ask if the curve is within tolerance of a plane.
isSameGeometryClass(other: GeometryQuery): boolean Abstract CurvePrimitive test if (other instanceof this.Type).
moveSignedDistanceFromFraction(startFraction: number, signedDistance: number, allowExtension: boolean, result?: CurveLocationDetail): CurveLocationDetail CurvePrimitive * (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 CurvePrimitive Generic algorithm to search for point at signed distance from a fractional startPoint.
quickLength(): number Abstract CurvePrimitive Compute a length which may be an fast approximation to the true length.
range(transform?: Transform, result?: Range3d): Range3d CurvePrimitive return the range of the entire (tree) GeometryQuery
rangeBetweenFractionsByClone(fraction0: number, fraction1: number, transform?: Transform): Range3d CurvePrimitive Returns a (high accuracy) range of the curve between fractional positions
rangeBetweenFractionsByCount(fraction0: number, fraction1: number, count: number, transform?: Transform, extrapolationFactor: number = 0.0): Range3d CurvePrimitive Returns an approximate range based on a fixed number of evaluations
reverseInPlace(): void Abstract CurvePrimitive Reverse the curve's data so that its fractional stroking moves in the opposite direction.
startPoint(result?: Point3d): Point3d CurvePrimitive return the startPoint of the primitive.
tryTransformInPlace(transform: Transform): boolean Abstract CurvePrimitive Attempt to transform in place.
tryTranslateInPlace(dx: number, dy: number = 0.0, dz: number = 0.0): boolean CurvePrimitive try to move the geometry by dx,dy,dz
areAlmostEqual(a: undefined | GeometryQuery, b: undefined | GeometryQuery): boolean Static CurvePrimitive apply instance method isAlmostEqual if both are defined.
installStrokeCountMap(curve: CurvePrimitive, curveMap: StrokeCountMap, parentMap?: StrokeCountMap): void Static CurvePrimitive final install step to save curveMap in curve.

Properties

Name Type Description
_activeFractionInterval Protected Segment1d Fractional interval for the "active" part of a containing spiral.  
_designProperties Protected undefined | TransitionConditionalProperties Original defining properties.  
_localToWorld Protected Transform Placement transform  
_spiralType Protected string string name of spiral type  
activeFractionInterval Accessor ReadOnly Segment1d Return (reference to) the active portion of the reference spiral.  
activeStrokes Accessor AbstractReadOnly LineString3d strokes in the active portion  
designProperties Accessor ReadOnly undefined | TransitionConditionalProperties Return the original defining properties (if any) saved by the constructor.  
localToWorld Accessor ReadOnly Transform (reference to) placement transform.  
spiralType Accessor ReadOnly string    

Inherited properties

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

* leaf classes do not need to implement.
curvePrimitiveType AbstractReadonly CurvePrimitiveType CurvePrimitive String name for schema properties
geometryCategory Readonly "curvePrimitive" CurvePrimitive String name for schema properties
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:
* LineSegment3d
* LineString3d
* Arc3d
parent undefined | any CurvePrimitive data attached by various algorithms (e.g.
strokeData undefined | StrokeCountMap CurvePrimitive data attached during stroking for facets.

Defined in

Last Updated: 30 November, 2023