API Reference > geometry-core > Bspline > BezierCurveBase BezierCurveBase Class Base class for CurvePrimitive (necessarily 3D) with _polygon. This has a Bezier1dNd polygon as a member, and implements dimension-independent methods This exists to support BezierCurve3d -- 3 coordinates x,y,z per block in the Bezier1dNd poles BezierCurve3dH -- 4 coordinates x,y,z,w per block in the Bezier1dNd poles The implementations of "pure 3d" queries is based on calling getPolePoint3d. This has the subtle failure difference that getPolePoint3d call with a valid index on on a 3d curve always succeeds, but on 3dH curve fails when weight is zero. Extends CurvePrimitive Extended by BezierCurve3d BezierCurve3dH Methods Name Description constructor(blockSize: number, data: Float64Array): BezierCurveBase Protected allocateAndZeroBezierWorkData(primaryBezierOrder: number, orderA: number, orderB: number): void Protected set up the _workBezier members with specific order. computeStrokeCountForOptions(options?: StrokeOptions): number Assess length and turn to determine a stroke count. copyPolesAsJsonArray(): any[] Return a simple array of arrays with the control points as [[x,y,z],[x,y,z],..] emitStrokableParts(handler: IStrokeHandler, _options?: StrokeOptions): void announce intervals with stroke counts emitStrokes(dest: LineString3d, options?: StrokeOptions): void append stroke points to a linestring, based on strokeCount and fractionToPoint from derived class endPoint(): Point3d Return the end point. extendRange(rangeToExtend: Range3d, transform?: Transform): void Abstract Concrete classes must implement extendRange . fractionToParentFraction(fraction: number): number map fraction from this Bezier curves inherent 0..1 range to the (a,b) range of parent getPolePoint3d(i: number, point?: Point3d): undefined | Point3d Abstract Get pole i as a Point3d. getPolePoint4d(i: number, point?: Point4d): undefined | Point4d Abstract Get pole i as a Point4d. isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean return true if all poles are on a plane. polygonLength(): number Return the length of the control polygon. quickLength(): number Return the control polygon length as a quick length estimate. reverseInPlace(): void reverse the poles in place saturateInPlace(knotVector: KnotVector, spanIndex: number): boolean saturate the pole in place, using knot intervals from spanIndex of the knotVector setInterval(a: number, b: number): void Set mapping to parent curve (e.g. startPoint(): Point3d Return the start point. 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. clone(): undefined | GeometryQuery Abstract CurvePrimitive return a clone clonePartialCurve(_fractionA: number, _fractionB: number): undefined | CurvePrimitive CurvePrimitive Return (if possible) a curve primitive which is a portion of this curve. cloneTransformed(transform: Transform): undefined | GeometryQuery Abstract CurvePrimitive return a transformed clone. 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) 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. 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. getFractionToDistanceScale(): undefined | number CurvePrimitive * If the curve primitive has distance-along-curve strictly proportional to curve fraction, return true isAlmostEqual(other: GeometryQuery): boolean CurvePrimitive test for exact structure and nearly identical geometry. 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. range(transform?: Transform, result?: Range3d): Range3d CurvePrimitive return the range of the entire (tree) GeometryQuery 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 _polygon Protected Bezier1dNd Control points _workCoffsA Protected undefined | Float64Array scratch array for use by derived classes, using allocateAndZeroBezierWorkData for sizing. _workCoffsB Protected undefined | Float64Array scratch array for use by derived classes, using allocateAndZeroBezierWorkData for sizing. _workData0 Protected Float64Array scratch data blocks accessible by concrete class. _workData1 Protected Float64Array scratch data blocks accessible by concrete class. _workPoint0 Protected Point3d Scratch xyz point accessible by derived classes. _workPoint1 Protected Point3d Scratch xyz point accessible by derived classes. curvePrimitiveType Readonly "bezierCurve" String name for schema properties degree Accessor ReadOnly number (property accessor) Return the polynomial degree (one less than order) numPoles Accessor ReadOnly number (property accessor) Return the number of poles (aka control points) order Accessor ReadOnly number (property accessor) Return the polynomial order 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. 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 bspline/BezierCurveBase.ts Line 36 Last Updated: 12 June, 2024