@itwin/core-geometry 3.2.0-dev.0 → 3.2.0-dev.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/bspline/AkimaCurve3d.d.ts +2 -8
- package/lib/cjs/bspline/AkimaCurve3d.d.ts.map +1 -1
- package/lib/cjs/bspline/AkimaCurve3d.js +2 -17
- package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
- package/lib/cjs/bspline/BSpline1dNd.d.ts +11 -6
- package/lib/cjs/bspline/BSpline1dNd.d.ts.map +1 -1
- package/lib/cjs/bspline/BSpline1dNd.js +64 -6
- package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurve.d.ts +9 -13
- package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
- package/lib/cjs/bspline/BSplineCurve.js +39 -31
- package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurve3dH.d.ts +0 -2
- package/lib/cjs/bspline/BSplineCurve3dH.d.ts.map +1 -1
- package/lib/cjs/bspline/BSplineCurve3dH.js +0 -6
- package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurveOps.d.ts.map +1 -1
- package/lib/cjs/bspline/BSplineCurveOps.js +4 -6
- package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
- package/lib/cjs/bspline/Bezier1dNd.d.ts +8 -11
- package/lib/cjs/bspline/Bezier1dNd.d.ts.map +1 -1
- package/lib/cjs/bspline/Bezier1dNd.js +13 -14
- package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
- package/lib/cjs/bspline/BezierCurve3d.d.ts +0 -6
- package/lib/cjs/bspline/BezierCurve3d.d.ts.map +1 -1
- package/lib/cjs/bspline/BezierCurve3d.js +0 -14
- package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
- package/lib/cjs/bspline/BezierCurve3dH.d.ts +0 -4
- package/lib/cjs/bspline/BezierCurve3dH.d.ts.map +1 -1
- package/lib/cjs/bspline/BezierCurve3dH.js +0 -8
- package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
- package/lib/cjs/bspline/BezierCurveBase.d.ts +9 -0
- package/lib/cjs/bspline/BezierCurveBase.d.ts.map +1 -1
- package/lib/cjs/bspline/BezierCurveBase.js +15 -0
- package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
- package/lib/cjs/bspline/InterpolationCurve3d.d.ts +2 -8
- package/lib/cjs/bspline/InterpolationCurve3d.d.ts.map +1 -1
- package/lib/cjs/bspline/InterpolationCurve3d.js +2 -17
- package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
- package/lib/cjs/bspline/KnotVector.d.ts +24 -9
- package/lib/cjs/bspline/KnotVector.d.ts.map +1 -1
- package/lib/cjs/bspline/KnotVector.js +86 -26
- package/lib/cjs/bspline/KnotVector.js.map +1 -1
- package/lib/cjs/curve/Arc3d.d.ts +1 -1
- package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
- package/lib/cjs/curve/Arc3d.js.map +1 -1
- package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts +3 -3
- package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js +3 -7
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/cjs/curve/CurveCollection.d.ts +2 -2
- package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
- package/lib/cjs/curve/CurveCollection.js.map +1 -1
- package/lib/cjs/curve/CurveCurveIntersectXY.js +2 -2
- package/lib/cjs/curve/CurveCurveIntersectXY.js.map +1 -1
- package/lib/cjs/curve/CurvePrimitive.d.ts +4 -0
- package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
- package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
- package/lib/cjs/curve/LineSegment3d.d.ts +1 -1
- package/lib/cjs/curve/LineSegment3d.d.ts.map +1 -1
- package/lib/cjs/curve/LineSegment3d.js.map +1 -1
- package/lib/cjs/curve/LineString3d.d.ts +1 -1
- package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
- package/lib/cjs/curve/LineString3d.js.map +1 -1
- package/lib/cjs/curve/ProxyCurve.d.ts +6 -2
- package/lib/cjs/curve/ProxyCurve.d.ts.map +1 -1
- package/lib/cjs/curve/ProxyCurve.js +11 -2
- package/lib/cjs/curve/ProxyCurve.js.map +1 -1
- package/lib/cjs/curve/Query/CurveSplitContext.d.ts.map +1 -1
- package/lib/cjs/curve/Query/CurveSplitContext.js +1 -3
- package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
- package/lib/cjs/curve/StrokeOptions.js +2 -1
- package/lib/cjs/curve/StrokeOptions.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.d.ts +2 -2
- package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
- package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
- package/lib/cjs/curve/spiral/DirectSpiral3d.d.ts +0 -4
- package/lib/cjs/curve/spiral/DirectSpiral3d.d.ts.map +1 -1
- package/lib/cjs/curve/spiral/DirectSpiral3d.js +0 -15
- package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/IntegratedSpiral3d.d.ts +0 -4
- package/lib/cjs/curve/spiral/IntegratedSpiral3d.d.ts.map +1 -1
- package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +0 -15
- package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts +8 -0
- package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
- package/lib/cjs/curve/spiral/TransitionSpiral3d.js +15 -0
- package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/cjs/solid/RuledSweep.js.map +1 -1
- package/lib/cjs/solid/SweepContour.js.map +1 -1
- package/lib/esm/bspline/AkimaCurve3d.d.ts +2 -8
- package/lib/esm/bspline/AkimaCurve3d.d.ts.map +1 -1
- package/lib/esm/bspline/AkimaCurve3d.js +2 -17
- package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
- package/lib/esm/bspline/BSpline1dNd.d.ts +11 -6
- package/lib/esm/bspline/BSpline1dNd.d.ts.map +1 -1
- package/lib/esm/bspline/BSpline1dNd.js +65 -7
- package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
- package/lib/esm/bspline/BSplineCurve.d.ts +9 -13
- package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
- package/lib/esm/bspline/BSplineCurve.js +39 -31
- package/lib/esm/bspline/BSplineCurve.js.map +1 -1
- package/lib/esm/bspline/BSplineCurve3dH.d.ts +0 -2
- package/lib/esm/bspline/BSplineCurve3dH.d.ts.map +1 -1
- package/lib/esm/bspline/BSplineCurve3dH.js +0 -6
- package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
- package/lib/esm/bspline/BSplineCurveOps.d.ts.map +1 -1
- package/lib/esm/bspline/BSplineCurveOps.js +4 -6
- package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
- package/lib/esm/bspline/Bezier1dNd.d.ts +8 -11
- package/lib/esm/bspline/Bezier1dNd.d.ts.map +1 -1
- package/lib/esm/bspline/Bezier1dNd.js +13 -14
- package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
- package/lib/esm/bspline/BezierCurve3d.d.ts +0 -6
- package/lib/esm/bspline/BezierCurve3d.d.ts.map +1 -1
- package/lib/esm/bspline/BezierCurve3d.js +0 -14
- package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
- package/lib/esm/bspline/BezierCurve3dH.d.ts +0 -4
- package/lib/esm/bspline/BezierCurve3dH.d.ts.map +1 -1
- package/lib/esm/bspline/BezierCurve3dH.js +0 -8
- package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
- package/lib/esm/bspline/BezierCurveBase.d.ts +9 -0
- package/lib/esm/bspline/BezierCurveBase.d.ts.map +1 -1
- package/lib/esm/bspline/BezierCurveBase.js +15 -0
- package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
- package/lib/esm/bspline/InterpolationCurve3d.d.ts +2 -8
- package/lib/esm/bspline/InterpolationCurve3d.d.ts.map +1 -1
- package/lib/esm/bspline/InterpolationCurve3d.js +2 -17
- package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
- package/lib/esm/bspline/KnotVector.d.ts +24 -9
- package/lib/esm/bspline/KnotVector.d.ts.map +1 -1
- package/lib/esm/bspline/KnotVector.js +86 -26
- package/lib/esm/bspline/KnotVector.js.map +1 -1
- package/lib/esm/curve/Arc3d.d.ts +1 -1
- package/lib/esm/curve/Arc3d.d.ts.map +1 -1
- package/lib/esm/curve/Arc3d.js.map +1 -1
- package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +3 -3
- package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
- package/lib/esm/curve/CurveChainWithDistanceIndex.js +3 -7
- package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/esm/curve/CurveCollection.d.ts +2 -2
- package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
- package/lib/esm/curve/CurveCollection.js.map +1 -1
- package/lib/esm/curve/CurveCurveIntersectXY.js +2 -2
- package/lib/esm/curve/CurveCurveIntersectXY.js.map +1 -1
- package/lib/esm/curve/CurvePrimitive.d.ts +4 -0
- package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
- package/lib/esm/curve/CurvePrimitive.js.map +1 -1
- package/lib/esm/curve/LineSegment3d.d.ts +1 -1
- package/lib/esm/curve/LineSegment3d.d.ts.map +1 -1
- package/lib/esm/curve/LineSegment3d.js.map +1 -1
- package/lib/esm/curve/LineString3d.d.ts +1 -1
- package/lib/esm/curve/LineString3d.d.ts.map +1 -1
- package/lib/esm/curve/LineString3d.js.map +1 -1
- package/lib/esm/curve/ProxyCurve.d.ts +6 -2
- package/lib/esm/curve/ProxyCurve.d.ts.map +1 -1
- package/lib/esm/curve/ProxyCurve.js +11 -2
- package/lib/esm/curve/ProxyCurve.js.map +1 -1
- package/lib/esm/curve/Query/CurveSplitContext.d.ts.map +1 -1
- package/lib/esm/curve/Query/CurveSplitContext.js +1 -3
- package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
- package/lib/esm/curve/StrokeOptions.js +2 -1
- package/lib/esm/curve/StrokeOptions.js.map +1 -1
- package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.d.ts +2 -2
- package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
- package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
- package/lib/esm/curve/spiral/DirectSpiral3d.d.ts +0 -4
- package/lib/esm/curve/spiral/DirectSpiral3d.d.ts.map +1 -1
- package/lib/esm/curve/spiral/DirectSpiral3d.js +0 -15
- package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/IntegratedSpiral3d.d.ts +0 -4
- package/lib/esm/curve/spiral/IntegratedSpiral3d.d.ts.map +1 -1
- package/lib/esm/curve/spiral/IntegratedSpiral3d.js +0 -15
- package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts +8 -0
- package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
- package/lib/esm/curve/spiral/TransitionSpiral3d.js +15 -0
- package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/esm/solid/RuledSweep.js.map +1 -1
- package/lib/esm/solid/SweepContour.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Bezier1dNd.js","sourceRoot":"","sources":["../../../src/bspline/Bezier1dNd.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Bspline\r\n */\r\n\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Point3dArray } from \"../geometry3d/PointHelpers\";\r\nimport { Segment1d } from \"../geometry3d/Segment1d\";\r\nimport { Point4d } from \"../geometry4d/Point4d\";\r\nimport { BezierCoffs, UnivariateBezier } from \"../numerics/BezierPolynomials\";\r\nimport { KnotVector } from \"./KnotVector\";\r\n\r\n/**\r\n * Shared implementation details for derived bezier curve classes\r\n * * BezierCurve3d implements with blockSize 3.\r\n * * BezierCurve3dH implements with blockSize 4.\r\n * @public\r\n */\r\nexport class Bezier1dNd {\r\n private _packedData: Float64Array;\r\n private _order: number; // bezier order. probably low\r\n private _blockSize: number; // loosely expected to be 1 to 4.\r\n private _basis: BezierCoffs; // server for basis queries. It carries coefficients that we don't use.\r\n // constructor CAPTURES the control points array.\r\n public constructor(blockSize: number, polygon: Float64Array) {\r\n this._blockSize = blockSize;\r\n this._order = Math.floor(polygon.length / blockSize); // This should be an integer!!!\r\n this._packedData = polygon;\r\n this._basis = new UnivariateBezier(this._order);\r\n }\r\n /** return a clone of the data array */\r\n public clonePolygon(result?: Float64Array): Float64Array {\r\n const n = this._packedData.length;\r\n if (!result || result.length !== n)\r\n return this._packedData.slice();\r\n /** move data into the supplied result */\r\n for (let i = 0; i < n; i++)\r\n result[i] = this._packedData[i];\r\n return result;\r\n }\r\n /** Return the bezier order */\r\n public get order() { return this._order; }\r\n /** return the packed data array. This is a REFERENCE to the array. */\r\n public get packedData() { return this._packedData; }\r\n /** Create a Bezier1dNd, using the structure of `data[0]` to determine the bezier order. */\r\n public static create(data: Point2d[] | Point3d[] | Point4d[]): Bezier1dNd | undefined {\r\n if (data.length < 1)\r\n return undefined;\r\n if (data[0] instanceof Point3d) {\r\n const polygon = new Float64Array(data.length * 3);\r\n let i = 0;\r\n for (const p of (data as Point3d[])) {\r\n polygon[i++] = p.x;\r\n polygon[i++] = p.y;\r\n polygon[i++] = p.z;\r\n }\r\n return new Bezier1dNd(3, polygon);\r\n } else if (data[0] instanceof Point4d) {\r\n const polygon = new Float64Array(data.length * 4);\r\n let i = 0;\r\n for (const p of (data as Point4d[])) {\r\n polygon[i++] = p.x;\r\n polygon[i++] = p.y;\r\n polygon[i++] = p.z;\r\n polygon[i++] = p.w;\r\n }\r\n return new Bezier1dNd(4, polygon);\r\n } else if (data[0] instanceof Point2d) {\r\n const polygon = new Float64Array(data.length * 2);\r\n let i = 0;\r\n for (const p of (data as Point2d[])) {\r\n polygon[i++] = p.x;\r\n polygon[i++] = p.y;\r\n }\r\n return new Bezier1dNd(2, polygon);\r\n }\r\n return undefined;\r\n }\r\n /** Return the curve value at bezier fraction `s`\r\n * @return buffer of length `blockSize`.\r\n */\r\n public evaluate(s: number, buffer?: Float64Array): Float64Array {\r\n return this._basis.sumBasisFunctions(s, this._packedData, this._blockSize, buffer);\r\n }\r\n /** Return the curve derivative value at bezier fraction `s`\r\n * @return buffer of length `blockSize`.\r\n */\r\n public evaluateDerivative(s: number, buffer?: Float64Array): Float64Array {\r\n return this._basis.sumBasisFunctionDerivatives(s, this._packedData, this._blockSize, buffer);\r\n }\r\n /** get a single point of the polygon as a simple array. */\r\n public getPolygonPoint(i: number, buffer?: Float64Array): Float64Array | undefined {\r\n if (!buffer)\r\n buffer = new Float64Array(this._blockSize);\r\n if (i >= 0 && i < this._order) {\r\n const k0 = this._blockSize * i;\r\n for (let k = 0; k < this._blockSize; k++)\r\n buffer[k] = this._packedData[k0 + k];\r\n return buffer;\r\n }\r\n return undefined;\r\n }\r\n /** set a single point of the polygon as a simple array. */\r\n public setPolygonPoint(i: number, buffer: Float64Array) {\r\n if (i >= 0 && i < this._order) {\r\n const k0 = this._blockSize * i;\r\n for (let k = 0; k < this._blockSize; k++)\r\n this._packedData[k0 + k] = buffer[k];\r\n }\r\n }\r\n /** Load order * dimension doubles from data[dimension * spanIndex] as poles\r\n * @param data packed source array. block size in `data` assumed to match dimension for this.\r\n * @param spanIndex block index in data.\r\n */\r\n public loadSpanPoles(data: Float64Array, spanIndex: number) {\r\n let k = spanIndex * this._blockSize;\r\n for (let i = 0; i < this._packedData.length; i++)\r\n this._packedData[i] = data[k++];\r\n }\r\n /** Load order * (dataDimension + 1) doubles from data[dataDimension * spanIndex] as poles with weight inserted\r\n * @param data packed array of data.\r\n * @param dataDimension dimension of data. Must have `dataDimension+1=this.order`\r\n * @param spanIndex index of first data block to access.\r\n * @param weight weight to append to each block\r\n */\r\n public loadSpanPolesWithWeight(data: Float64Array, dataDimension: number, spanIndex: number, weight: number) {\r\n let destIndex = 0;\r\n const order = this._order;\r\n let dataIndex = spanIndex * dataDimension;\r\n for (let i = 0; i < order; i++) {\r\n for (let j = 0; j < dataDimension; j++)\r\n this._packedData[destIndex++] = data[dataIndex++];\r\n this._packedData[destIndex++] = weight;\r\n }\r\n }\r\n /** return a json array of arrays with each control point as a lower level array of numbers */\r\n public unpackToJsonArrays(): any[] {\r\n return Point3dArray.unpackNumbersToNestedArrays(this._packedData, this._blockSize);\r\n }\r\n /** equality test with usual metric tolerances */\r\n public isAlmostEqual(other: any): boolean {\r\n if (other instanceof Bezier1dNd) {\r\n if (this._blockSize !== other._blockSize)\r\n return false;\r\n if (this._order !== other._order)\r\n return false;\r\n if (this._packedData.length !== other._packedData.length)\r\n return false;\r\n for (let i = 0; i < this._packedData.length; i++) {\r\n if (!Geometry.isSameCoordinate(this._packedData[i], other._packedData[i]))\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** block-by-block reversal */\r\n public reverseInPlace() {\r\n const m = this._blockSize;\r\n const n = this._order;\r\n let i, j;\r\n let a;\r\n for (i = 0, j = (n - 1) * m; i < j; i += m, j -= m) {\r\n for (let k = 0; k < m; k++) {\r\n a = this._packedData[i + k];\r\n this._packedData[i + k] = this._packedData[j + k];\r\n this._packedData[j + k] = a;\r\n }\r\n }\r\n }\r\n //\r\n /**\r\n * interpolate at `fraction` between poleA and poleB.\r\n * * Data is left \"in place\" in poleIndexA\r\n * @param poleIndexA first pole index\r\n * @param fraction fractional position\r\n * @param poleIndexB second pole index\r\n */\r\n public interpolatePoleInPlace(poleIndexA: number, fraction: number, poleIndexB: number) {\r\n let i0 = poleIndexA * this._blockSize;\r\n let i1 = poleIndexB * this._blockSize;\r\n const data = this._packedData;\r\n for (let i = 0; i < this._blockSize; i++ , i0++ , i1++) {\r\n data[i0] += fraction * (data[i1] - data[i0]);\r\n }\r\n }\r\n private static _knotTolerance = 1.0e-8;\r\n /**\r\n * Compute new control points to \"clamp\" bspline unsaturated support to saturated form.\r\n * * At input time, the control points are associated with the input knots (unsaturated)\r\n * * At output, they control points are modified by repeated knot insertion to be fully clamped.\r\n * @param knots knot values for the current (unsaturated) pole set\r\n * @param spanIndex index of span whose (unsaturated) poles are in the bezier.\r\n * @param optional function for `setInterval (knotA, knotB)` call to announce knot limits.\r\n */\r\n public saturateInPlace(knots: KnotVector, spanIndex: number): boolean {\r\n const degree = knots.degree;\r\n const kA = spanIndex + degree - 1; // left knot index of the active span\r\n const kB = kA + 1;\r\n if (spanIndex < 0 || spanIndex >= knots.numSpans)\r\n return false;\r\n const knotArray = knots.knots;\r\n const knotA = knotArray[kA];\r\n const knotB = knotArray[kB];\r\n this.setInterval(knotA, knotB);\r\n if (knotB <= knotA + Bezier1dNd._knotTolerance)\r\n return false;\r\n for (let numInsert = degree - 1; numInsert > 0; numInsert--) {\r\n // left numInsert poles are pulled forward\r\n let k0 = kA - numInsert;\r\n if (knotArray[k0] < knotA) {\r\n let k1 = kB;\r\n for (let i = 0; i < numInsert; i++ , k0++ , k1++) {\r\n const knot0 = knotArray[k0];\r\n const knot1 = knotArray[k1];\r\n const fraction = (knotA - knot0) / (knot1 - knot0);\r\n this.interpolatePoleInPlace(i, fraction, i + 1);\r\n }\r\n }\r\n }\r\n for (let numInsert = degree - 1; numInsert > 0; numInsert--) {\r\n let k2 = kB + numInsert;\r\n if (knotArray[k2] > knotB) {\r\n for (let i = 0; i < numInsert; i++ , k2--) {\r\n const knot2 = knotArray[k2]; // right side of moving window\r\n // left side of window ia always the (previously saturated) knotA\r\n const fraction = (knotB - knot2) / (knotA - knot2);\r\n this.interpolatePoleInPlace(degree - i, fraction, degree - i - 1);\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n /**\r\n * Saturate a univariate bspline coefficient array in place\r\n * * On input, the array is the coefficients one span of a bspline, packed in an array of `(knots.order)` values.\r\n * * These are modified in place, and on return are a bezier for the same knot interval.\r\n * @param coffs input as bspline coefficients, returned as bezier coefficients\r\n * @param knots knot vector\r\n * @param spanIndex index of span whose (unsaturated) poles are in the coefficients.\r\n * @param optional function for `setInterval (knotA, knotB)` call to announce knot limits.\r\n */\r\n public static saturate1dInPlace(coffs: Float64Array, knots: KnotVector, spanIndex: number): boolean {\r\n const degree = knots.degree;\r\n const kA = spanIndex + degree - 1; // left knot index of the active span\r\n const kB = kA + 1;\r\n if (spanIndex < 0 || spanIndex >= knots.numSpans)\r\n return false;\r\n const knotArray = knots.knots;\r\n const knotA = knotArray[kA];\r\n const knotB = knotArray[kB];\r\n for (let numInsert = degree - 1; numInsert > 0; numInsert--) {\r\n // left numInsert poles are pulled forward\r\n let k0 = kA - numInsert;\r\n if (knotArray[k0] < knotA) {\r\n let k1 = kB;\r\n for (let i = 0; i < numInsert; i++ , k0++ , k1++) {\r\n const knot0 = knotArray[k0];\r\n const knot1 = knotArray[k1];\r\n const fraction = (knotA - knot0) / (knot1 - knot0);\r\n coffs[i] = coffs[i] + fraction * (coffs[i + 1] - coffs[i]);\r\n }\r\n }\r\n }\r\n for (let numInsert = degree - 1; numInsert > 0; numInsert--) {\r\n let k2 = kB + numInsert;\r\n let k;\r\n if (knotArray[k2] > knotB) {\r\n for (let i = 0; i < numInsert; i++ , k2--) {\r\n const knot2 = knotArray[k2]; // right side of moving window\r\n // left side of window ia always the (previously saturated) knotA\r\n const fraction = (knotB - knot2) / (knotA - knot2);\r\n k = degree - i;\r\n coffs[k] += fraction * (coffs[k - 1] - coffs[k]);\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n /**\r\n * Apply deCasteljou interpolations to isolate a smaller bezier polygon, representing interval 0..fraction of the original\r\n * @param fraction \"end\" fraction for split.\r\n * @returns false if fraction is 0 -- no changes applied.\r\n */\r\n public subdivideInPlaceKeepLeft(fraction: number): boolean {\r\n if (Geometry.isAlmostEqualNumber(fraction, 1.0))\r\n return true;\r\n if (Geometry.isAlmostEqualNumber(fraction, 0.0))\r\n return false;\r\n const g = 1.0 - fraction; // interpolations will pull towards right indices\r\n const order = this.order;\r\n for (let level = 1; level < order; level++) {\r\n for (let i1 = order - 1; i1 >= level; i1--) {\r\n this.interpolatePoleInPlace(i1, g, i1 - 1); // leave updates to right\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Apply deCasteljou interpolations to isolate a smaller bezier polygon, representing interval 0..fraction of the original\r\n * @param fraction \"end\" fraction for split.\r\n * @returns false if fraction is 0 -- no changes applied.\r\n */\r\n public subdivideInPlaceKeepRight(fraction: number): boolean {\r\n if (Geometry.isAlmostEqualNumber(fraction, 0.0))\r\n return true;\r\n if (Geometry.isAlmostEqualNumber(fraction, 1.0))\r\n return false;\r\n const order = this.order;\r\n for (let level = 1; level < order; level++) {\r\n for (let i0 = 0; i0 + level < order; i0++)\r\n this.interpolatePoleInPlace(i0, fraction, i0 + 1); // leave updates to left.\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Saturate a univariate bspline coefficient array in place\r\n * @param fraction0 fraction for first split. This is the start of the output polygon\r\n * @param fraction1 fraction for first split. This is the start of the output polygon\r\n * @return false if fractions are (almost) identical.\r\n */\r\n public subdivideToIntervalInPlace(fraction0: number, fraction1: number): boolean {\r\n if (Geometry.isAlmostEqualNumber(fraction0, fraction1))\r\n return false;\r\n if (fraction1 < fraction0) {\r\n this.subdivideToIntervalInPlace(fraction1, fraction0);\r\n this.reverseInPlace();\r\n return true;\r\n }\r\n this.subdivideInPlaceKeepLeft(fraction1);\r\n this.subdivideInPlaceKeepRight(fraction0 / fraction1);\r\n return true;\r\n }\r\n\r\n /** optional interval for mapping to a parent object */\r\n public interval?: Segment1d;\r\n /** create or update the mapping to parent curve. */\r\n public setInterval(a: number, b: number) {\r\n this.interval = Segment1d.create(a, b, this.interval);\r\n }\r\n /** map a fraction to the parent space. */\r\n public fractionToParentFraction(fraction: number): number { return this.interval ? this.interval.fractionToPoint(fraction) : fraction; }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"Bezier1dNd.js","sourceRoot":"","sources":["../../../src/bspline/Bezier1dNd.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Bspline\r\n */\r\n\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Point3dArray } from \"../geometry3d/PointHelpers\";\r\nimport { Segment1d } from \"../geometry3d/Segment1d\";\r\nimport { Point4d } from \"../geometry4d/Point4d\";\r\nimport { BezierCoffs, UnivariateBezier } from \"../numerics/BezierPolynomials\";\r\nimport { KnotVector } from \"./KnotVector\";\r\n\r\n/**\r\n * Shared implementation details for derived bezier curve classes\r\n * * BezierCurve3d implements with blockSize 3.\r\n * * BezierCurve3dH implements with blockSize 4.\r\n * @public\r\n */\r\nexport class Bezier1dNd {\r\n private _packedData: Float64Array;\r\n private _order: number; // bezier order. probably low\r\n private _blockSize: number; // loosely expected to be 1 to 4.\r\n private _basis: BezierCoffs; // server for basis queries. It carries coefficients that we don't use.\r\n // constructor CAPTURES the control points array.\r\n public constructor(blockSize: number, polygon: Float64Array) {\r\n this._blockSize = blockSize;\r\n this._order = Math.floor(polygon.length / blockSize); // This should be an integer!!!\r\n this._packedData = polygon;\r\n this._basis = new UnivariateBezier(this._order);\r\n }\r\n /** return a clone of the data array */\r\n public clonePolygon(result?: Float64Array): Float64Array {\r\n const n = this._packedData.length;\r\n if (!result || result.length !== n)\r\n return this._packedData.slice();\r\n /** move data into the supplied result */\r\n for (let i = 0; i < n; i++)\r\n result[i] = this._packedData[i];\r\n return result;\r\n }\r\n /** Return the bezier order */\r\n public get order() { return this._order; }\r\n /** return the packed data array. This is a REFERENCE to the array. */\r\n public get packedData() { return this._packedData; }\r\n /** Create a Bezier1dNd, using the structure of `data[0]` to determine the bezier order. */\r\n public static create(data: Point2d[] | Point3d[] | Point4d[]): Bezier1dNd | undefined {\r\n if (data.length < 1)\r\n return undefined;\r\n if (data[0] instanceof Point3d) {\r\n const polygon = new Float64Array(data.length * 3);\r\n let i = 0;\r\n for (const p of (data as Point3d[])) {\r\n polygon[i++] = p.x;\r\n polygon[i++] = p.y;\r\n polygon[i++] = p.z;\r\n }\r\n return new Bezier1dNd(3, polygon);\r\n } else if (data[0] instanceof Point4d) {\r\n const polygon = new Float64Array(data.length * 4);\r\n let i = 0;\r\n for (const p of (data as Point4d[])) {\r\n polygon[i++] = p.x;\r\n polygon[i++] = p.y;\r\n polygon[i++] = p.z;\r\n polygon[i++] = p.w;\r\n }\r\n return new Bezier1dNd(4, polygon);\r\n } else if (data[0] instanceof Point2d) {\r\n const polygon = new Float64Array(data.length * 2);\r\n let i = 0;\r\n for (const p of (data as Point2d[])) {\r\n polygon[i++] = p.x;\r\n polygon[i++] = p.y;\r\n }\r\n return new Bezier1dNd(2, polygon);\r\n }\r\n return undefined;\r\n }\r\n /** Return the curve value at bezier fraction `s`\r\n * @return buffer of length `blockSize`.\r\n */\r\n public evaluate(s: number, buffer?: Float64Array): Float64Array {\r\n return this._basis.sumBasisFunctions(s, this._packedData, this._blockSize, buffer);\r\n }\r\n /** Return the curve derivative value at bezier fraction `s`\r\n * @return buffer of length `blockSize`.\r\n */\r\n public evaluateDerivative(s: number, buffer?: Float64Array): Float64Array {\r\n return this._basis.sumBasisFunctionDerivatives(s, this._packedData, this._blockSize, buffer);\r\n }\r\n /** get a single point of the polygon as a simple array. */\r\n public getPolygonPoint(i: number, buffer?: Float64Array): Float64Array | undefined {\r\n if (!buffer)\r\n buffer = new Float64Array(this._blockSize);\r\n if (i >= 0 && i < this._order) {\r\n const k0 = this._blockSize * i;\r\n for (let k = 0; k < this._blockSize; k++)\r\n buffer[k] = this._packedData[k0 + k];\r\n return buffer;\r\n }\r\n return undefined;\r\n }\r\n /** set a single point of the polygon as a simple array. */\r\n public setPolygonPoint(i: number, buffer: Float64Array) {\r\n if (i >= 0 && i < this._order) {\r\n const k0 = this._blockSize * i;\r\n for (let k = 0; k < this._blockSize; k++)\r\n this._packedData[k0 + k] = buffer[k];\r\n }\r\n }\r\n /** Load order * dimension doubles from data[dimension * spanIndex] as poles\r\n * @param data packed source array. block size in `data` assumed to match dimension for this.\r\n * @param spanIndex block index in data.\r\n */\r\n public loadSpanPoles(data: Float64Array, spanIndex: number) {\r\n let k = spanIndex * this._blockSize;\r\n for (let i = 0; i < this._packedData.length; i++)\r\n this._packedData[i] = data[k++];\r\n }\r\n /** Load order * (dataDimension + 1) doubles from data[dataDimension * spanIndex] as poles with weight inserted\r\n * @param data packed array of data.\r\n * @param dataDimension dimension of data. Must have `dataDimension+1=this.order`\r\n * @param spanIndex index of first data block to access.\r\n * @param weight weight to append to each block\r\n */\r\n public loadSpanPolesWithWeight(data: Float64Array, dataDimension: number, spanIndex: number, weight: number) {\r\n let destIndex = 0;\r\n const order = this._order;\r\n let dataIndex = spanIndex * dataDimension;\r\n for (let i = 0; i < order; i++) {\r\n for (let j = 0; j < dataDimension; j++)\r\n this._packedData[destIndex++] = data[dataIndex++];\r\n this._packedData[destIndex++] = weight;\r\n }\r\n }\r\n /** return a json array of arrays with each control point as a lower level array of numbers */\r\n public unpackToJsonArrays(): any[] {\r\n return Point3dArray.unpackNumbersToNestedArrays(this._packedData, this._blockSize);\r\n }\r\n /** equality test with usual metric tolerances */\r\n public isAlmostEqual(other: any): boolean {\r\n if (other instanceof Bezier1dNd) {\r\n if (this._blockSize !== other._blockSize)\r\n return false;\r\n if (this._order !== other._order)\r\n return false;\r\n if (this._packedData.length !== other._packedData.length)\r\n return false;\r\n for (let i = 0; i < this._packedData.length; i++) {\r\n if (!Geometry.isSameCoordinate(this._packedData[i], other._packedData[i]))\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** block-by-block reversal */\r\n public reverseInPlace() {\r\n const m = this._blockSize;\r\n const n = this._order;\r\n let i, j;\r\n let a;\r\n for (i = 0, j = (n - 1) * m; i < j; i += m, j -= m) {\r\n for (let k = 0; k < m; k++) {\r\n a = this._packedData[i + k];\r\n this._packedData[i + k] = this._packedData[j + k];\r\n this._packedData[j + k] = a;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * interpolate at `fraction` between poleA and poleB.\r\n * * Data is left \"in place\" in poleIndexA\r\n * @param poleIndexA first pole index\r\n * @param fraction fractional position\r\n * @param poleIndexB second pole index\r\n */\r\n public interpolatePoleInPlace(poleIndexA: number, fraction: number, poleIndexB: number) {\r\n let i0 = poleIndexA * this._blockSize;\r\n let i1 = poleIndexB * this._blockSize;\r\n const data = this._packedData;\r\n for (let i = 0; i < this._blockSize; i++ , i0++ , i1++) {\r\n data[i0] += fraction * (data[i1] - data[i0]);\r\n }\r\n }\r\n\r\n /**\r\n * Compute new control points to \"clamp\" bspline unsaturated support to saturated form.\r\n * * At input time, the control points are associated with the input knots (unsaturated)\r\n * * At output, the control points are modified by repeated knot insertion to be fully clamped.\r\n * @param knots knot values for the current (unsaturated) pole set\r\n * @param spanIndex index of span whose (unsaturated) poles are in the bezier.\r\n */\r\n public saturateInPlace(knots: KnotVector, spanIndex: number): boolean {\r\n const degree = knots.degree;\r\n const kA = spanIndex + degree - 1; // left knot index of the active span\r\n const kB = kA + 1;\r\n if (spanIndex < 0 || spanIndex >= knots.numSpans)\r\n return false;\r\n const knotArray = knots.knots;\r\n const knotA = knotArray[kA];\r\n const knotB = knotArray[kB];\r\n this.setInterval(knotA, knotB);\r\n if (knotB <= knotA + KnotVector.knotTolerance)\r\n return false;\r\n for (let numInsert = degree - 1; numInsert > 0; numInsert--) {\r\n // left numInsert poles are pulled forward\r\n let k0 = kA - numInsert;\r\n if (knotArray[k0] < knotA) {\r\n let k1 = kB;\r\n for (let i = 0; i < numInsert; i++ , k0++ , k1++) {\r\n const knot0 = knotArray[k0];\r\n const knot1 = knotArray[k1];\r\n const fraction = (knotA - knot0) / (knot1 - knot0);\r\n this.interpolatePoleInPlace(i, fraction, i + 1);\r\n }\r\n }\r\n }\r\n for (let numInsert = degree - 1; numInsert > 0; numInsert--) {\r\n let k2 = kB + numInsert;\r\n if (knotArray[k2] > knotB) {\r\n for (let i = 0; i < numInsert; i++ , k2--) {\r\n const knot2 = knotArray[k2]; // right side of moving window\r\n // left side of window ia always the (previously saturated) knotA\r\n const fraction = (knotB - knot2) / (knotA - knot2);\r\n this.interpolatePoleInPlace(degree - i, fraction, degree - i - 1);\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n /**\r\n * Saturate a univariate bspline coefficient array in place\r\n * * On input, the array is the coefficients of one span of a bspline, packed in an array of `(knots.order)` values.\r\n * * These are modified in place, and on return are a bezier for the same knot interval.\r\n * @param coffs input as bspline coefficients, returned as bezier coefficients\r\n * @param knots knot vector\r\n * @param spanIndex index of span whose (unsaturated) poles are in the coefficients.\r\n */\r\n public static saturate1dInPlace(coffs: Float64Array, knots: KnotVector, spanIndex: number): boolean {\r\n const degree = knots.degree;\r\n const kA = spanIndex + degree - 1; // left knot index of the active span\r\n const kB = kA + 1;\r\n if (spanIndex < 0 || spanIndex >= knots.numSpans)\r\n return false;\r\n const knotArray = knots.knots;\r\n const knotA = knotArray[kA];\r\n const knotB = knotArray[kB];\r\n if (knotB <= knotA + KnotVector.knotTolerance)\r\n return false;\r\n for (let numInsert = degree - 1; numInsert > 0; numInsert--) {\r\n // left numInsert poles are pulled forward\r\n let k0 = kA - numInsert;\r\n if (knotArray[k0] < knotA) {\r\n let k1 = kB;\r\n for (let i = 0; i < numInsert; i++ , k0++ , k1++) {\r\n const knot0 = knotArray[k0];\r\n const knot1 = knotArray[k1];\r\n const fraction = (knotA - knot0) / (knot1 - knot0);\r\n coffs[i] = coffs[i] + fraction * (coffs[i + 1] - coffs[i]);\r\n }\r\n }\r\n }\r\n for (let numInsert = degree - 1; numInsert > 0; numInsert--) {\r\n let k2 = kB + numInsert;\r\n let k;\r\n if (knotArray[k2] > knotB) {\r\n for (let i = 0; i < numInsert; i++ , k2--) {\r\n const knot2 = knotArray[k2]; // right side of moving window\r\n // left side of window is always the (previously saturated) knotA\r\n const fraction = (knotB - knot2) / (knotA - knot2);\r\n k = degree - i;\r\n coffs[k] += fraction * (coffs[k - 1] - coffs[k]);\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n /**\r\n * Apply deCasteljau interpolations to isolate a smaller bezier polygon, representing interval 0..fraction of the original\r\n * @param fraction \"end\" fraction for split.\r\n * @returns false if fraction is 0 or 1 -- no changes applied.\r\n */\r\n public subdivideInPlaceKeepLeft(fraction: number): boolean {\r\n if (Geometry.isAlmostEqualNumber(fraction, 1.0))\r\n return true;\r\n if (Geometry.isAlmostEqualNumber(fraction, 0.0))\r\n return false;\r\n const g = 1.0 - fraction; // interpolations will pull towards right indices\r\n const order = this.order;\r\n for (let level = 1; level < order; level++) {\r\n for (let i1 = order - 1; i1 >= level; i1--) {\r\n this.interpolatePoleInPlace(i1, g, i1 - 1); // leave updates to right\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Apply deCasteljau interpolations to isolate a smaller bezier polygon, representing interval fraction..1 of the original\r\n * @param fraction \"start\" fraction for split.\r\n * @returns false if fraction is 0 or 1 -- no changes applied.\r\n */\r\n public subdivideInPlaceKeepRight(fraction: number): boolean {\r\n if (Geometry.isAlmostEqualNumber(fraction, 0.0))\r\n return true;\r\n if (Geometry.isAlmostEqualNumber(fraction, 1.0))\r\n return false;\r\n const order = this.order;\r\n for (let level = 1; level < order; level++) {\r\n for (let i0 = 0; i0 + level < order; i0++)\r\n this.interpolatePoleInPlace(i0, fraction, i0 + 1); // leave updates to left.\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Saturate a univariate bspline coefficient array in place\r\n * @param fraction0 fraction for first split. This is the start of the output polygon\r\n * @param fraction1 fraction for second split. This is the end of the output polygon\r\n * @return false if fractions are (almost) identical.\r\n */\r\n public subdivideToIntervalInPlace(fraction0: number, fraction1: number): boolean {\r\n if (Geometry.isAlmostEqualNumber(fraction0, fraction1))\r\n return false;\r\n if (fraction1 < fraction0) {\r\n this.subdivideToIntervalInPlace(fraction1, fraction0);\r\n this.reverseInPlace();\r\n return true;\r\n }\r\n this.subdivideInPlaceKeepLeft(fraction1);\r\n this.subdivideInPlaceKeepRight(fraction0 / fraction1);\r\n return true;\r\n }\r\n\r\n /** optional interval for mapping to a parent object */\r\n public interval?: Segment1d;\r\n /** create or update the mapping to parent curve. */\r\n public setInterval(a: number, b: number) {\r\n this.interval = Segment1d.create(a, b, this.interval);\r\n }\r\n /** map a fraction to the parent space. */\r\n public fractionToParentFraction(fraction: number): number { return this.interval ? this.interval.fractionToPoint(fraction) : fraction; }\r\n}\r\n"]}
|
|
@@ -46,12 +46,6 @@ export declare class BezierCurve3d extends BezierCurveBase {
|
|
|
46
46
|
loadSpanPoles(data: Float64Array, spanIndex: number): void;
|
|
47
47
|
/** Clone as a bezier 3d. */
|
|
48
48
|
clone(): BezierCurve3d;
|
|
49
|
-
/** Clone the interval from f0 to f1. */
|
|
50
|
-
clonePartialCurve(f0: number, f1: number): BezierCurve3d | undefined;
|
|
51
|
-
/**
|
|
52
|
-
* Return a curve after transform.
|
|
53
|
-
*/
|
|
54
|
-
cloneTransformed(transform: Transform): BezierCurve3d;
|
|
55
49
|
/** Return a (de-weighted) point on the curve. If de-weight fails, returns 000 */
|
|
56
50
|
fractionToPoint(fraction: number, result?: Point3d): Point3d;
|
|
57
51
|
/** Return the cartesian point and derivative vector. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BezierCurve3d.d.ts","sourceRoot":"","sources":["../../../src/bspline/BezierCurve3d.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAY,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAMpD;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,eAAe;IAChD,+CAA+C;IACxC,mBAAmB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAC/C,iDAAiD;IAC1C,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IASzD,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,SAAS,CAAQ;IACzB,yDAAyD;IAClD,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;IAMvE,kEAAkE;IAC3D,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;IAMvE;;;OAGG;IACH,OAAO;IAKP,mCAAmC;IAC5B,sBAAsB,IAAI,YAAY;IAM7C;;;;OAIG;WACW,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,aAAa,GAAG,SAAS;IAuB5E,kEAAkE;WACpD,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa;IAIvD,+DAA+D;IACxD,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM;IAG1D,4BAA4B;
|
|
1
|
+
{"version":3,"file":"BezierCurve3d.d.ts","sourceRoot":"","sources":["../../../src/bspline/BezierCurve3d.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAY,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAMpD;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,eAAe;IAChD,+CAA+C;IACxC,mBAAmB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAC/C,iDAAiD;IAC1C,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IASzD,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,SAAS,CAAQ;IACzB,yDAAyD;IAClD,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;IAMvE,kEAAkE;IAC3D,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;IAMvE;;;OAGG;IACH,OAAO;IAKP,mCAAmC;IAC5B,sBAAsB,IAAI,YAAY;IAM7C;;;;OAIG;WACW,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,aAAa,GAAG,SAAS;IAuB5E,kEAAkE;WACpD,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa;IAIvD,+DAA+D;IACxD,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM;IAG1D,4BAA4B;IACZ,KAAK,IAAI,aAAa;IAGtC,iFAAiF;IAC1E,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAInE,wDAAwD;IACjD,4BAA4B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK;IAK5E;;;;;OAKG;IACI,8BAA8B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,yBAAyB,GAAG,yBAAyB;IAatH,mCAAmC;IACnB,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAMlD,gFAAgF;IACzE,yBAAyB,CAAC,OAAO,EAAE,eAAe,GAAG,GAAG;IAG/D;;;OAGG;IACI,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS;CA6CjE"}
|
|
@@ -110,20 +110,6 @@ class BezierCurve3d extends BezierCurveBase_1.BezierCurveBase {
|
|
|
110
110
|
clone() {
|
|
111
111
|
return new BezierCurve3d(this._polygon.clonePolygon());
|
|
112
112
|
}
|
|
113
|
-
/** Clone the interval from f0 to f1. */
|
|
114
|
-
clonePartialCurve(f0, f1) {
|
|
115
|
-
const partialCurve = new BezierCurve3d(this._polygon.clonePolygon());
|
|
116
|
-
partialCurve._polygon.subdivideToIntervalInPlace(f0, f1);
|
|
117
|
-
return partialCurve;
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Return a curve after transform.
|
|
121
|
-
*/
|
|
122
|
-
cloneTransformed(transform) {
|
|
123
|
-
const curve1 = this.clone();
|
|
124
|
-
curve1.tryTransformInPlace(transform);
|
|
125
|
-
return curve1;
|
|
126
|
-
}
|
|
127
113
|
/** Return a (de-weighted) point on the curve. If de-weight fails, returns 000 */
|
|
128
114
|
fractionToPoint(fraction, result) {
|
|
129
115
|
this._polygon.evaluate(fraction, this._workData0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BezierCurve3d.js","sourceRoot":"","sources":["../../../src/bspline/BezierCurve3d.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Bspline\r\n */\r\n\r\nimport { LineString3d } from \"../curve/LineString3d\";\r\nimport { GeometryHandler } from \"../geometry3d/GeometryHandler\";\r\nimport { Plane3dByOriginAndVectors } from \"../geometry3d/Plane3dByOriginAndVectors\";\r\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Range3d } from \"../geometry3d/Range\";\r\nimport { Ray3d } from \"../geometry3d/Ray3d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { Point4d } from \"../geometry4d/Point4d\";\r\nimport { BezierPolynomialAlgebra } from \"../numerics/BezierPolynomials\";\r\nimport { BezierCurveBase } from \"./BezierCurveBase\";\r\n\r\n// ================================================================================================================\r\n// ================================================================================================================\r\n// ================================================================================================================\r\n// ================================================================================================================\r\n/** 3d Bezier curve class.\r\n * * Use BezierCurve3dH if the curve has weights.\r\n * * The control points (xyz) are managed as the _packedData buffer in the _polygon member of BezierCurveBase.\r\n * @public\r\n */\r\nexport class BezierCurve3d extends BezierCurveBase {\r\n /** test if `other` is also a BezierCurve3d. */\r\n public isSameGeometryClass(other: any): boolean { return other instanceof BezierCurve3d; }\r\n /** apply the transform to the control points. */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n const data = this._workData0;\r\n for (let i = 0; i < this._polygon.order; i++) {\r\n this._polygon.getPolygonPoint(i, data);\r\n transform.multiplyXYZToFloat64Array(data[0], data[1], data[2], data);\r\n this._polygon.setPolygonPoint(i, data);\r\n }\r\n return true;\r\n }\r\n private _workRay0: Ray3d;\r\n private _workRay1: Ray3d;\r\n /** Return a specific pole as a full `[x,y,z] Point3d` */\r\n public getPolePoint3d(i: number, result?: Point3d): Point3d | undefined {\r\n const data = this._polygon.getPolygonPoint(i, this._workData0);\r\n if (data)\r\n return Point3d.create(data[0], data[1], data[2], result);\r\n return undefined;\r\n }\r\n /** Return a specific pole as a full `[w*x,w*y,w*z, w] Point4d` */\r\n public getPolePoint4d(i: number, result?: Point4d): Point4d | undefined {\r\n const data = this._polygon.getPolygonPoint(i, this._workData0);\r\n if (data)\r\n return Point4d.create(data[0], data[1], data[2], 1.0, result);\r\n return undefined;\r\n }\r\n /**\r\n * Capture a polygon as the data for a new `BezierCurve3d`\r\n * @param polygon complete packed data and order.\r\n */\r\n private constructor(polygon: Float64Array) {\r\n super(3, polygon);\r\n this._workRay0 = Ray3d.createXAxis();\r\n this._workRay1 = Ray3d.createXAxis();\r\n }\r\n /** Return poles as a linestring */\r\n public copyPointsAsLineString(): LineString3d {\r\n const result = LineString3d.create();\r\n for (let i = 0; i < this._polygon.order; i++)\r\n result.addPoint(this.getPolePoint3d(i)!);\r\n return result;\r\n }\r\n /** Create a curve with given points.\r\n * * If input is `Point2d[]`, the points are promoted with `z=0` and `w=1`\r\n * * If input is `Point3d[]`, the points are promoted with w=1`\r\n *\r\n */\r\n public static create(data: Point3d[] | Point2d[]): BezierCurve3d | undefined {\r\n if (data.length < 1)\r\n return undefined;\r\n const polygon = new Float64Array(data.length * 3);\r\n if (data[0] instanceof Point3d) {\r\n let i = 0;\r\n for (const p of (data as Point3d[])) {\r\n polygon[i++] = p.x;\r\n polygon[i++] = p.y;\r\n polygon[i++] = p.z;\r\n }\r\n return new BezierCurve3d(polygon);\r\n } else if (data[0] instanceof Point2d) {\r\n let i = 0;\r\n for (const p of (data as Point2d[])) {\r\n polygon[i++] = p.x;\r\n polygon[i++] = p.y;\r\n polygon[i++] = 0.0;\r\n }\r\n return new BezierCurve3d(polygon);\r\n }\r\n return undefined;\r\n }\r\n /** create a bezier curve of specified order, filled with zeros */\r\n public static createOrder(order: number): BezierCurve3d {\r\n const polygonArray = new Float64Array(order * 3); // This is initialized to zeros!!\r\n return new BezierCurve3d(polygonArray);\r\n }\r\n /** Load order * 3 doubles from data[3 * spanIndex] as poles */\r\n public loadSpanPoles(data: Float64Array, spanIndex: number) {\r\n this._polygon.loadSpanPoles(data, spanIndex);\r\n }\r\n /** Clone as a bezier 3d. */\r\n public clone(): BezierCurve3d {\r\n return new BezierCurve3d(this._polygon.clonePolygon());\r\n }\r\n /** Clone the interval from f0 to f1. */\r\n public override clonePartialCurve(f0: number, f1: number): BezierCurve3d | undefined {\r\n const partialCurve = new BezierCurve3d(this._polygon.clonePolygon());\r\n partialCurve._polygon.subdivideToIntervalInPlace(f0, f1);\r\n return partialCurve;\r\n }\r\n\r\n /**\r\n * Return a curve after transform.\r\n */\r\n public cloneTransformed(transform: Transform): BezierCurve3d {\r\n const curve1 = this.clone();\r\n curve1.tryTransformInPlace(transform);\r\n return curve1;\r\n }\r\n /** Return a (de-weighted) point on the curve. If de-weight fails, returns 000 */\r\n public fractionToPoint(fraction: number, result?: Point3d): Point3d {\r\n this._polygon.evaluate(fraction, this._workData0);\r\n return Point3d.create(this._workData0[0], this._workData0[1], this._workData0[2], result);\r\n }\r\n /** Return the cartesian point and derivative vector. */\r\n public fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d {\r\n this._polygon.evaluate(fraction, this._workData0);\r\n this._polygon.evaluateDerivative(fraction, this._workData1);\r\n return Ray3d.createXYZUVW(this._workData0[0], this._workData0[1], this._workData0[2], this._workData1[0], this._workData1[1], this._workData1[2], result);\r\n }\r\n /** Construct a plane with\r\n * * origin at the fractional position along the arc\r\n * * x axis is the first derivative, i.e. tangent along the arc\r\n * * y axis is the second derivative, i.e. in the plane and on the center side of the tangent.\r\n * If the arc is circular, the second derivative is directly towards the center\r\n */\r\n public fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n const epsilon = 1.0e-8;\r\n const a = 1.0 / (2.0 * epsilon);\r\n if (!result)\r\n result = Plane3dByOriginAndVectors.createXYPlane();\r\n const ray = this.fractionToPointAndDerivative(fraction, this._workRay0);\r\n result.origin.setFrom(ray.origin);\r\n result.vectorU.setFrom(ray.direction);\r\n const ray0 = this.fractionToPointAndDerivative(fraction - epsilon, this._workRay0);\r\n const ray1 = this.fractionToPointAndDerivative(fraction + epsilon, this._workRay1);\r\n Vector3d.createAdd2Scaled(ray0.direction, -a, ray1.direction, a, result.vectorV);\r\n return result;\r\n }\r\n /** Near-equality test on poles. */\r\n public override isAlmostEqual(other: any): boolean {\r\n if (other instanceof BezierCurve3d) {\r\n return this._polygon.isAlmostEqual(other._polygon);\r\n }\r\n return false;\r\n }\r\n /** Second step of double dispatch: call `handler.handleBezierCurve3d(this)` */\r\n public dispatchToGeometryHandler(handler: GeometryHandler): any {\r\n return handler.handleBezierCurve3d(this);\r\n }\r\n /** Extend `rangeToExtend`, using candidate extrema at\r\n * * both end points\r\n * * any internal extrema in x,y,z\r\n */\r\n public extendRange(rangeToExtend: Range3d, transform?: Transform) {\r\n const order = this.order;\r\n if (!transform) {\r\n this.allocateAndZeroBezierWorkData(order - 1, 0, 0);\r\n const bezier = this._workBezier!;\r\n this.getPolePoint3d(0, this._workPoint0);\r\n rangeToExtend.extend(this._workPoint0);\r\n this.getPolePoint3d(order - 1, this._workPoint0);\r\n rangeToExtend.extend(this._workPoint0);\r\n for (let axisIndex = 0; axisIndex < 3; axisIndex++) {\r\n BezierPolynomialAlgebra.componentDifference(bezier.coffs, this._polygon.packedData, 3, order, axisIndex);\r\n const roots = bezier.roots(0.0, true);\r\n if (roots) {\r\n for (const r of roots) {\r\n this.fractionToPoint(r, this._workPoint0);\r\n rangeToExtend.extend(this._workPoint0);\r\n }\r\n }\r\n }\r\n } else {\r\n this.allocateAndZeroBezierWorkData(order - 1, order, 0);\r\n const bezier = this._workBezier!;\r\n const componentCoffs = this._workCoffsA!; // to hold transformed copy of x,y,z in turn.\r\n\r\n this.getPolePoint3d(0, this._workPoint0);\r\n rangeToExtend.extendTransformedPoint(transform, this._workPoint0);\r\n this.getPolePoint3d(order - 1, this._workPoint0);\r\n rangeToExtend.extendTransformedPoint(transform, this._workPoint0);\r\n const data = this._polygon.packedData;\r\n for (let axisIndex = 0; axisIndex < 3; axisIndex++) {\r\n // apply one row of the transform to get the transformed coff by itself\r\n for (let i = 0, k = 0; i < order; i++, k += 3)\r\n componentCoffs[i] = transform.multiplyComponentXYZ(axisIndex, data[k], data[k + 1], data[k + 2]);\r\n BezierPolynomialAlgebra.univariateDifference(componentCoffs, bezier.coffs);\r\n const roots = bezier.roots(0.0, true);\r\n if (roots && roots.length > 0) {\r\n for (const r of roots) {\r\n this.fractionToPoint(r, this._workPoint0);\r\n rangeToExtend.extendTransformedPoint(transform, this._workPoint0);\r\n }\r\n }\r\n }\r\n\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"BezierCurve3d.js","sourceRoot":"","sources":["../../../src/bspline/BezierCurve3d.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Bspline\r\n */\r\n\r\nimport { LineString3d } from \"../curve/LineString3d\";\r\nimport { GeometryHandler } from \"../geometry3d/GeometryHandler\";\r\nimport { Plane3dByOriginAndVectors } from \"../geometry3d/Plane3dByOriginAndVectors\";\r\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Range3d } from \"../geometry3d/Range\";\r\nimport { Ray3d } from \"../geometry3d/Ray3d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { Point4d } from \"../geometry4d/Point4d\";\r\nimport { BezierPolynomialAlgebra } from \"../numerics/BezierPolynomials\";\r\nimport { BezierCurveBase } from \"./BezierCurveBase\";\r\n\r\n// ================================================================================================================\r\n// ================================================================================================================\r\n// ================================================================================================================\r\n// ================================================================================================================\r\n/** 3d Bezier curve class.\r\n * * Use BezierCurve3dH if the curve has weights.\r\n * * The control points (xyz) are managed as the _packedData buffer in the _polygon member of BezierCurveBase.\r\n * @public\r\n */\r\nexport class BezierCurve3d extends BezierCurveBase {\r\n /** test if `other` is also a BezierCurve3d. */\r\n public isSameGeometryClass(other: any): boolean { return other instanceof BezierCurve3d; }\r\n /** apply the transform to the control points. */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n const data = this._workData0;\r\n for (let i = 0; i < this._polygon.order; i++) {\r\n this._polygon.getPolygonPoint(i, data);\r\n transform.multiplyXYZToFloat64Array(data[0], data[1], data[2], data);\r\n this._polygon.setPolygonPoint(i, data);\r\n }\r\n return true;\r\n }\r\n private _workRay0: Ray3d;\r\n private _workRay1: Ray3d;\r\n /** Return a specific pole as a full `[x,y,z] Point3d` */\r\n public getPolePoint3d(i: number, result?: Point3d): Point3d | undefined {\r\n const data = this._polygon.getPolygonPoint(i, this._workData0);\r\n if (data)\r\n return Point3d.create(data[0], data[1], data[2], result);\r\n return undefined;\r\n }\r\n /** Return a specific pole as a full `[w*x,w*y,w*z, w] Point4d` */\r\n public getPolePoint4d(i: number, result?: Point4d): Point4d | undefined {\r\n const data = this._polygon.getPolygonPoint(i, this._workData0);\r\n if (data)\r\n return Point4d.create(data[0], data[1], data[2], 1.0, result);\r\n return undefined;\r\n }\r\n /**\r\n * Capture a polygon as the data for a new `BezierCurve3d`\r\n * @param polygon complete packed data and order.\r\n */\r\n private constructor(polygon: Float64Array) {\r\n super(3, polygon);\r\n this._workRay0 = Ray3d.createXAxis();\r\n this._workRay1 = Ray3d.createXAxis();\r\n }\r\n /** Return poles as a linestring */\r\n public copyPointsAsLineString(): LineString3d {\r\n const result = LineString3d.create();\r\n for (let i = 0; i < this._polygon.order; i++)\r\n result.addPoint(this.getPolePoint3d(i)!);\r\n return result;\r\n }\r\n /** Create a curve with given points.\r\n * * If input is `Point2d[]`, the points are promoted with `z=0` and `w=1`\r\n * * If input is `Point3d[]`, the points are promoted with w=1`\r\n *\r\n */\r\n public static create(data: Point3d[] | Point2d[]): BezierCurve3d | undefined {\r\n if (data.length < 1)\r\n return undefined;\r\n const polygon = new Float64Array(data.length * 3);\r\n if (data[0] instanceof Point3d) {\r\n let i = 0;\r\n for (const p of (data as Point3d[])) {\r\n polygon[i++] = p.x;\r\n polygon[i++] = p.y;\r\n polygon[i++] = p.z;\r\n }\r\n return new BezierCurve3d(polygon);\r\n } else if (data[0] instanceof Point2d) {\r\n let i = 0;\r\n for (const p of (data as Point2d[])) {\r\n polygon[i++] = p.x;\r\n polygon[i++] = p.y;\r\n polygon[i++] = 0.0;\r\n }\r\n return new BezierCurve3d(polygon);\r\n }\r\n return undefined;\r\n }\r\n /** create a bezier curve of specified order, filled with zeros */\r\n public static createOrder(order: number): BezierCurve3d {\r\n const polygonArray = new Float64Array(order * 3); // This is initialized to zeros!!\r\n return new BezierCurve3d(polygonArray);\r\n }\r\n /** Load order * 3 doubles from data[3 * spanIndex] as poles */\r\n public loadSpanPoles(data: Float64Array, spanIndex: number) {\r\n this._polygon.loadSpanPoles(data, spanIndex);\r\n }\r\n /** Clone as a bezier 3d. */\r\n public override clone(): BezierCurve3d {\r\n return new BezierCurve3d(this._polygon.clonePolygon());\r\n }\r\n /** Return a (de-weighted) point on the curve. If de-weight fails, returns 000 */\r\n public fractionToPoint(fraction: number, result?: Point3d): Point3d {\r\n this._polygon.evaluate(fraction, this._workData0);\r\n return Point3d.create(this._workData0[0], this._workData0[1], this._workData0[2], result);\r\n }\r\n /** Return the cartesian point and derivative vector. */\r\n public fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d {\r\n this._polygon.evaluate(fraction, this._workData0);\r\n this._polygon.evaluateDerivative(fraction, this._workData1);\r\n return Ray3d.createXYZUVW(this._workData0[0], this._workData0[1], this._workData0[2], this._workData1[0], this._workData1[1], this._workData1[2], result);\r\n }\r\n /** Construct a plane with\r\n * * origin at the fractional position along the arc\r\n * * x axis is the first derivative, i.e. tangent along the arc\r\n * * y axis is the second derivative, i.e. in the plane and on the center side of the tangent.\r\n * If the arc is circular, the second derivative is directly towards the center\r\n */\r\n public fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n const epsilon = 1.0e-8;\r\n const a = 1.0 / (2.0 * epsilon);\r\n if (!result)\r\n result = Plane3dByOriginAndVectors.createXYPlane();\r\n const ray = this.fractionToPointAndDerivative(fraction, this._workRay0);\r\n result.origin.setFrom(ray.origin);\r\n result.vectorU.setFrom(ray.direction);\r\n const ray0 = this.fractionToPointAndDerivative(fraction - epsilon, this._workRay0);\r\n const ray1 = this.fractionToPointAndDerivative(fraction + epsilon, this._workRay1);\r\n Vector3d.createAdd2Scaled(ray0.direction, -a, ray1.direction, a, result.vectorV);\r\n return result;\r\n }\r\n /** Near-equality test on poles. */\r\n public override isAlmostEqual(other: any): boolean {\r\n if (other instanceof BezierCurve3d) {\r\n return this._polygon.isAlmostEqual(other._polygon);\r\n }\r\n return false;\r\n }\r\n /** Second step of double dispatch: call `handler.handleBezierCurve3d(this)` */\r\n public dispatchToGeometryHandler(handler: GeometryHandler): any {\r\n return handler.handleBezierCurve3d(this);\r\n }\r\n /** Extend `rangeToExtend`, using candidate extrema at\r\n * * both end points\r\n * * any internal extrema in x,y,z\r\n */\r\n public extendRange(rangeToExtend: Range3d, transform?: Transform) {\r\n const order = this.order;\r\n if (!transform) {\r\n this.allocateAndZeroBezierWorkData(order - 1, 0, 0);\r\n const bezier = this._workBezier!;\r\n this.getPolePoint3d(0, this._workPoint0);\r\n rangeToExtend.extend(this._workPoint0);\r\n this.getPolePoint3d(order - 1, this._workPoint0);\r\n rangeToExtend.extend(this._workPoint0);\r\n for (let axisIndex = 0; axisIndex < 3; axisIndex++) {\r\n BezierPolynomialAlgebra.componentDifference(bezier.coffs, this._polygon.packedData, 3, order, axisIndex);\r\n const roots = bezier.roots(0.0, true);\r\n if (roots) {\r\n for (const r of roots) {\r\n this.fractionToPoint(r, this._workPoint0);\r\n rangeToExtend.extend(this._workPoint0);\r\n }\r\n }\r\n }\r\n } else {\r\n this.allocateAndZeroBezierWorkData(order - 1, order, 0);\r\n const bezier = this._workBezier!;\r\n const componentCoffs = this._workCoffsA!; // to hold transformed copy of x,y,z in turn.\r\n\r\n this.getPolePoint3d(0, this._workPoint0);\r\n rangeToExtend.extendTransformedPoint(transform, this._workPoint0);\r\n this.getPolePoint3d(order - 1, this._workPoint0);\r\n rangeToExtend.extendTransformedPoint(transform, this._workPoint0);\r\n const data = this._polygon.packedData;\r\n for (let axisIndex = 0; axisIndex < 3; axisIndex++) {\r\n // apply one row of the transform to get the transformed coff by itself\r\n for (let i = 0, k = 0; i < order; i++, k += 3)\r\n componentCoffs[i] = transform.multiplyComponentXYZ(axisIndex, data[k], data[k + 1], data[k + 2]);\r\n BezierPolynomialAlgebra.univariateDifference(componentCoffs, bezier.coffs);\r\n const roots = bezier.roots(0.0, true);\r\n if (roots && roots.length > 0) {\r\n for (const r of roots) {\r\n this.fractionToPoint(r, this._workPoint0);\r\n rangeToExtend.extendTransformedPoint(transform, this._workPoint0);\r\n }\r\n }\r\n }\r\n\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -60,10 +60,6 @@ export declare class BezierCurve3dH extends BezierCurveBase {
|
|
|
60
60
|
loadSpan4dPoles(data: Float64Array, spanIndex: number): void;
|
|
61
61
|
/** Clone the entire curve. */
|
|
62
62
|
clone(): BezierCurve3dH;
|
|
63
|
-
/**
|
|
64
|
-
* Return a curve after transform.
|
|
65
|
-
*/
|
|
66
|
-
cloneTransformed(transform: Transform): BezierCurve3dH;
|
|
67
63
|
/** Return a (deweighted) point on the curve. If deweight fails, returns 000 */
|
|
68
64
|
fractionToPoint(fraction: number, result?: Point3d): Point3d;
|
|
69
65
|
/** Return a (deweighted) point on the curve. If deweight fails, returns 000 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BezierCurve3dH.d.ts","sourceRoot":"","sources":["../../../src/bspline/BezierCurve3dH.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAY,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,eAAe;IACjD,gDAAgD;IACzC,mBAAmB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAC/C;;;OAGG;IACI,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IASzD;;;OAGG;IACI,0BAA0B,CAAC,MAAM,EAAE,QAAQ;IAGlD,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,SAAS,CAAQ;IACzB,2DAA2D;IACpD,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;IAMvE;OACG;IACI,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;IAMvE;;OAEG;IACI,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO;IAehD;;;OAGG;IACH,OAAO;IAKP;;;;OAIG;WACW,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,cAAc,GAAG,SAAS;IAkCzF,kEAAkE;WACpD,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc;IAIxD,mFAAmF;IAC5E,yBAAyB,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAGtF,mFAAmF;IAC5E,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM;IAG5D,8BAA8B;
|
|
1
|
+
{"version":3,"file":"BezierCurve3dH.d.ts","sourceRoot":"","sources":["../../../src/bspline/BezierCurve3dH.ts"],"names":[],"mappings":"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"}
|
|
@@ -144,14 +144,6 @@ class BezierCurve3dH extends BezierCurveBase_1.BezierCurveBase {
|
|
|
144
144
|
clone() {
|
|
145
145
|
return new BezierCurve3dH(this._polygon.clonePolygon());
|
|
146
146
|
}
|
|
147
|
-
/**
|
|
148
|
-
* Return a curve after transform.
|
|
149
|
-
*/
|
|
150
|
-
cloneTransformed(transform) {
|
|
151
|
-
const curve1 = this.clone();
|
|
152
|
-
curve1.tryTransformInPlace(transform);
|
|
153
|
-
return curve1;
|
|
154
|
-
}
|
|
155
147
|
/** Return a (deweighted) point on the curve. If deweight fails, returns 000 */
|
|
156
148
|
fractionToPoint(fraction, result) {
|
|
157
149
|
this._polygon.evaluate(fraction, this._workData0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BezierCurve3dH.js","sourceRoot":"","sources":["../../../src/bspline/BezierCurve3dH.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Bspline\r\n */\r\n\r\nimport { CurveLocationDetail } from \"../curve/CurveLocationDetail\";\r\nimport { Geometry } from \"../Geometry\";\r\nimport { GeometryHandler } from \"../geometry3d/GeometryHandler\";\r\nimport { Plane3dByOriginAndVectors } from \"../geometry3d/Plane3dByOriginAndVectors\";\r\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Range3d } from \"../geometry3d/Range\";\r\nimport { Ray3d } from \"../geometry3d/Ray3d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { Matrix4d } from \"../geometry4d/Matrix4d\";\r\nimport { Point4d } from \"../geometry4d/Point4d\";\r\nimport { BezierPolynomialAlgebra } from \"../numerics/BezierPolynomials\";\r\nimport { BezierCurveBase } from \"./BezierCurveBase\";\r\n\r\n/** 3d curve with homogeneous weights.\r\n * * A control point with weight w and cartesian (projected) coordinates x,y,z has the weight multiplied into the coordinates,\r\n * hence the control point as stored is (xw, yw, zw, w).\r\n * @public\r\n */\r\nexport class BezierCurve3dH extends BezierCurveBase {\r\n /** test if `other` is also a BezierCurve3dH. */\r\n public isSameGeometryClass(other: any): boolean { return other instanceof BezierCurve3dH; }\r\n /**\r\n * Apply (multiply by) an affine transform\r\n * @param transform\r\n */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n const data = this._workData0;\r\n for (let i = 0; i < this._polygon.order; i++) {\r\n this._polygon.getPolygonPoint(i, data);\r\n transform.multiplyXYZWToFloat64Array(data[0], data[1], data[2], data[3], data);\r\n this._polygon.setPolygonPoint(i, data);\r\n }\r\n return true;\r\n }\r\n /**\r\n * Apply (multiply by) a perspective transform\r\n * @param matrix\r\n */\r\n public tryMultiplyMatrix4dInPlace(matrix: Matrix4d) {\r\n matrix.multiplyBlockedFloat64ArrayInPlace(this._polygon.packedData);\r\n }\r\n private _workRay0: Ray3d;\r\n private _workRay1: Ray3d;\r\n /** Return a specific pole as a full `[x,y,z,x] Point4d` */\r\n public getPolePoint4d(i: number, result?: Point4d): Point4d | undefined {\r\n const data = this._polygon.getPolygonPoint(i, this._workData0);\r\n if (data)\r\n return Point4d.create(data[0], data[1], data[2], data[3], result);\r\n return undefined;\r\n }\r\n /** Return a specific pole normalized to weight 1\r\n */\r\n public getPolePoint3d(i: number, result?: Point3d): Point3d | undefined {\r\n const data = this._polygon.getPolygonPoint(i, this._workData0);\r\n if (data)\r\n return Point3d.createFromPackedXYZW(data, 0, result);\r\n return undefined;\r\n }\r\n /**\r\n * Returns true if all weights are within tolerance of 1.0\r\n */\r\n public isUnitWeight(tolerance?: number): boolean {\r\n if (tolerance === undefined)\r\n tolerance = Geometry.smallAngleRadians;\r\n const aLow = 1.0 - tolerance;\r\n const aHigh = 1.0 + tolerance;\r\n const data = this._polygon.packedData;\r\n const n = data.length;\r\n let a;\r\n for (let i = 3; i < n; i += 4) {\r\n a = data[i];\r\n if (a < aLow || a > aHigh)\r\n return false;\r\n }\r\n return true;\r\n }\r\n /**\r\n * Capture a polygon as the data for a new `BezierCurve3dH`\r\n * @param polygon complete packed data and order.\r\n */\r\n private constructor(polygon: Float64Array) {\r\n super(4, polygon);\r\n this._workRay0 = Ray3d.createXAxis();\r\n this._workRay1 = Ray3d.createXAxis();\r\n }\r\n /** Create a curve with given points.\r\n * * If input is `Point2d[]`, the points are promoted with `z=0` and `w=1`\r\n * * If input is `Point3d[]`, the points are promoted with w=1`\r\n *\r\n */\r\n public static create(data: Point3d[] | Point4d[] | Point2d[]): BezierCurve3dH | undefined {\r\n if (data.length < 1)\r\n return undefined;\r\n const polygon = new Float64Array(data.length * 4);\r\n if (data[0] instanceof Point3d) {\r\n let i = 0;\r\n for (const p of (data as Point3d[])) {\r\n polygon[i++] = p.x;\r\n polygon[i++] = p.y;\r\n polygon[i++] = p.z;\r\n polygon[i++] = 1.0;\r\n }\r\n return new BezierCurve3dH(polygon);\r\n } else if (data[0] instanceof Point4d) {\r\n let i = 0;\r\n for (const p of (data as Point4d[])) {\r\n polygon[i++] = p.x;\r\n polygon[i++] = p.y;\r\n polygon[i++] = p.z;\r\n polygon[i++] = p.w;\r\n }\r\n return new BezierCurve3dH(polygon);\r\n } else if (data[0] instanceof Point2d) {\r\n let i = 0;\r\n for (const p of (data as Point2d[])) {\r\n polygon[i++] = p.x;\r\n polygon[i++] = p.y;\r\n polygon[i++] = 0.0;\r\n polygon[i++] = 1.0;\r\n }\r\n return new BezierCurve3dH(polygon);\r\n }\r\n return undefined;\r\n }\r\n /** create a bezier curve of specified order, filled with zeros */\r\n public static createOrder(order: number): BezierCurve3dH {\r\n const polygonArray = new Float64Array(order * 4); // and we trust that this is all zeros !!!\r\n return new BezierCurve3dH(polygonArray);\r\n }\r\n /** Load order * 4 doubles from data[3 * spanIndex] as poles (with added weight) */\r\n public loadSpan3dPolesWithWeight(data: Float64Array, spanIndex: number, weight: number) {\r\n this._polygon.loadSpanPolesWithWeight(data, 3, spanIndex, weight);\r\n }\r\n /** Load order * 4 doubles from data[3 * spanIndex] as poles (with added weight) */\r\n public loadSpan4dPoles(data: Float64Array, spanIndex: number) {\r\n this._polygon.loadSpanPoles(data, spanIndex);\r\n }\r\n /** Clone the entire curve. */\r\n public clone(): BezierCurve3dH {\r\n return new BezierCurve3dH(this._polygon.clonePolygon());\r\n }\r\n /**\r\n * Return a curve after transform.\r\n */\r\n public cloneTransformed(transform: Transform): BezierCurve3dH {\r\n const curve1 = this.clone();\r\n curve1.tryTransformInPlace(transform);\r\n return curve1;\r\n }\r\n /** Return a (deweighted) point on the curve. If deweight fails, returns 000 */\r\n public fractionToPoint(fraction: number, result?: Point3d): Point3d {\r\n this._polygon.evaluate(fraction, this._workData0);\r\n result = Point3d.createFromPackedXYZW(this._workData0, 0, result);\r\n return result ? result : Point3d.createZero();\r\n }\r\n /** Return a (deweighted) point on the curve. If deweight fails, returns 000 */\r\n public fractionToPoint4d(fraction: number, result?: Point4d): Point4d {\r\n this._polygon.evaluate(fraction, this._workData0);\r\n return Point4d.createFromPackedXYZW(this._workData0, 0, result);\r\n }\r\n /** Return the cartesian point and derivative vector. */\r\n public fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d {\r\n this._polygon.evaluate(fraction, this._workData0);\r\n this._polygon.evaluateDerivative(fraction, this._workData1);\r\n result = Ray3d.createWeightedDerivative(this._workData0, this._workData1, result);\r\n if (result)\r\n return result;\r\n // Bad. Very Bad. Return origin and x axis. Should be undefined, but usual cartesian types do not allow that\r\n return Ray3d.createXAxis();\r\n }\r\n /** Construct a plane with\r\n * * origin at the fractional position along the arc\r\n * * x axis is the first derivative, i.e. tangent along the arc\r\n * * y axis is the second derivative, i.e. in the plane and on the center side of the tangent.\r\n * If the arc is circular, the second derivative is directly towards the center\r\n */\r\n public fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n const epsilon = 1.0e-8;\r\n const a = 1.0 / (2.0 * epsilon);\r\n if (!result)\r\n result = Plane3dByOriginAndVectors.createXYPlane();\r\n const ray = this.fractionToPointAndDerivative(fraction, this._workRay0);\r\n result.origin.setFrom(ray.origin);\r\n result.vectorU.setFrom(ray.direction);\r\n const ray0 = this.fractionToPointAndDerivative(fraction - epsilon, this._workRay0);\r\n const ray1 = this.fractionToPointAndDerivative(fraction + epsilon, this._workRay1);\r\n Vector3d.createAdd2Scaled(ray0.direction, -a, ray1.direction, a, result.vectorV);\r\n return result;\r\n }\r\n /** test for nearly equal control points */\r\n public override isAlmostEqual(other: any): boolean {\r\n if (other instanceof BezierCurve3dH) {\r\n return this._polygon.isAlmostEqual(other._polygon);\r\n }\r\n return false;\r\n }\r\n /** Second step of double dispatch: call `handler.handleBezierCurve3dH(this)` */\r\n public dispatchToGeometryHandler(handler: GeometryHandler): any {\r\n return handler.handleBezierCurve3dH(this);\r\n }\r\n /**\r\n * Form dot products of each pole with given coefficients. Return as entries in products array.\r\n * @param products array of (scalar) dot products\r\n * @param ax x coefficient\r\n * @param ay y coefficient\r\n * @param az z coefficient\r\n * @param aw w coefficient\r\n */\r\n public poleProductsXYZW(products: Float64Array, ax: number, ay: number, az: number, aw: number) {\r\n const n = this.numPoles;\r\n const data = this._polygon.packedData;\r\n for (let i = 0, k = 0; i < n; i++, k += 4)\r\n products[i] = ax * data[k] + ay * data[k + 1] + az * data[k + 2] + aw * data[k + 3];\r\n }\r\n /** Find the closest point within the bezier span, using true perpendicular test (but no endpoint test)\r\n * * If closer than previously recorded, update the CurveLocationDetail\r\n * * This assumes this bezier is saturated.\r\n * @param spacePoint point being projected\r\n * @param detail pre-allocated detail to record (evolving) closest point.\r\n * @returns true if an updated occurred, false if either (a) no perpendicular projections or (b) perpendiculars were not closer.\r\n */\r\n public updateClosestPointByTruePerpendicular(spacePoint: Point3d, detail: CurveLocationDetail): boolean {\r\n let numUpdates = 0;\r\n let roots: number[] | undefined;\r\n if (this.isUnitWeight()) {\r\n // unweighted !!!\r\n const productOrder = 2 * this.order - 2;\r\n this.allocateAndZeroBezierWorkData(productOrder, 0, 0);\r\n const bezier = this._workBezier!;\r\n // closestPoint condition is:\r\n // (spacePoint - curvePoint) DOT curveTangent = 0;\r\n // Each product (x,y,z) of the DOT is the product of two bezier polynomials\r\n BezierPolynomialAlgebra.accumulateScaledShiftedComponentTimesComponentDelta(bezier.coffs, this._polygon.packedData, 4, this.order, 1.0, 0, -spacePoint.x, 0);\r\n BezierPolynomialAlgebra.accumulateScaledShiftedComponentTimesComponentDelta(bezier.coffs, this._polygon.packedData, 4, this.order, 1.0, 1, -spacePoint.y, 1);\r\n BezierPolynomialAlgebra.accumulateScaledShiftedComponentTimesComponentDelta(bezier.coffs, this._polygon.packedData, 4, this.order, 1.0, 2, -spacePoint.z, 2);\r\n roots = bezier.roots(0.0, true);\r\n } else {\r\n // This bezier has weights.\r\n // The pure cartesian closest point condition is\r\n // (spacePoint - X/w) DOT (X' w - w' X)/ w^2 = 0\r\n // ignoring denominator and using bezier coefficient differences for the derivative, making the numerator 0 is\r\n // (w * spacePoint - X) DOT ( DELTA X * w - DELTA w * X) = 0\r\n const orderA = this.order;\r\n const orderB = 2 * this.order - 2; // products of component and component difference.\r\n const productOrder = orderA + orderB - 1;\r\n this.allocateAndZeroBezierWorkData(productOrder, orderA, orderB);\r\n const bezier = this._workBezier!;\r\n const workA = this._workCoffsA!;\r\n const workB = this._workCoffsB!;\r\n const packedData = this._polygon.packedData;\r\n for (let i = 0; i < 3; i++) {\r\n // x representing loop pass: (w * spacePoint.x - curve.x(s)) * (curveDelta.x(s) * curve.w(s) - curve.x(s) * curveDelta.w(s))\r\n // (and p.w is always 1)\r\n for (let k = 0; k < workA.length; k++)workA[k] = 0;\r\n for (let k = 0; k < workB.length; k++)workB[k] = 0;\r\n BezierPolynomialAlgebra.scaledComponentSum(workA, packedData, 4, orderA, 3, spacePoint.at(i), // w * spacePoint.x\r\n i, -1.0); // curve.x(s) * 1.0\r\n BezierPolynomialAlgebra.accumulateScaledShiftedComponentTimesComponentDelta(workB, packedData, 4, orderA, 1.0, 3, 0.0, i);\r\n BezierPolynomialAlgebra.accumulateScaledShiftedComponentTimesComponentDelta(workB, packedData, 4, orderA, -1.0, i, 0.0, 3);\r\n BezierPolynomialAlgebra.accumulateProduct(bezier.coffs, workA, workB);\r\n }\r\n roots = bezier.roots(0.0, true);\r\n }\r\n if (roots) {\r\n for (const fraction of roots) {\r\n const xyz = this.fractionToPoint(fraction);\r\n const a = xyz.distance(spacePoint);\r\n numUpdates += detail.updateIfCloserCurveFractionPointDistance(this, fraction, xyz, a) ? 1 : 0;\r\n }\r\n }\r\n return numUpdates > 0;\r\n }\r\n /** Extend `rangeToExtend`, using candidate extrema at\r\n * * both end points\r\n * * any internal extrema in x,y,z\r\n */\r\n public extendRange(rangeToExtend: Range3d, transform?: Transform) {\r\n const order = this.order;\r\n if (!transform) {\r\n this.allocateAndZeroBezierWorkData(order * 2 - 2, 0, 0);\r\n const bezier = this._workBezier!;\r\n const data = this._polygon.packedData;\r\n this.getPolePoint3d(0, this._workPoint0);\r\n rangeToExtend.extend(this._workPoint0);\r\n this.getPolePoint3d(order - 1, this._workPoint0);\r\n rangeToExtend.extend(this._workPoint0);\r\n // Example:\r\n // For x component ...\r\n // coefficients of (weighted x) are at axisIndex=0\r\n // deweighted polynomial is (x(s)/w(s))\r\n // its derivative (to be zeroed) is\r\n // (x'(s)*w(s) -x(s) * w'(s)) / w^2(s)\r\n // The coefficients of the derivatives are (degree times) differences of successive coffs.\r\n // Make the numerator zero to get extrema\r\n for (let axisIndex = 0; axisIndex < 3; axisIndex++) {\r\n bezier.zero();\r\n BezierPolynomialAlgebra.accumulateScaledShiftedComponentTimesComponentDelta(\r\n bezier.coffs,\r\n data, 4, order,\r\n 1.0,\r\n axisIndex, 0.0,\r\n 3);\r\n BezierPolynomialAlgebra.accumulateScaledShiftedComponentTimesComponentDelta(\r\n bezier.coffs,\r\n data, 4, order,\r\n -1.0,\r\n 3, 0.0,\r\n axisIndex);\r\n const roots = bezier.roots(0.0, true);\r\n if (roots) {\r\n for (const r of roots) {\r\n this.fractionToPoint(r, this._workPoint0);\r\n rangeToExtend.extend(this._workPoint0);\r\n }\r\n }\r\n }\r\n } else {\r\n this.allocateAndZeroBezierWorkData(order * 2 - 2, order, order);\r\n const componentCoffs = this._workCoffsA!; // to hold transformed copy of x,y,z in turn.\r\n const weightCoffs = this._workCoffsB!; // to hold weights\r\n const bezier = this._workBezier!;\r\n\r\n this.getPolePoint3d(0, this._workPoint0);\r\n rangeToExtend.extendTransformedPoint(transform, this._workPoint0);\r\n this.getPolePoint3d(order - 1, this._workPoint0);\r\n rangeToExtend.extendTransformedPoint(transform, this._workPoint0);\r\n\r\n const data = this._polygon.packedData; // Example:\r\n // For x component ...\r\n // coefficients of (weighted x) are at axisIndex=0\r\n // deweighted polynomial is (x(s)/w(s))\r\n // its derivative (to be zeroed) is\r\n // (x'(s)*w(s) -x(s) * w'(s)) / w^2(s)\r\n // The coefficients of the derivatives are (degree times) differences of successive coffs.\r\n // Make the numerator zero to get extrema\r\n // apply one row of the transform to get the transformed coff by itself\r\n let weight;\r\n for (let axisIndex = 0; axisIndex < 3; axisIndex++) {\r\n bezier.zero();\r\n for (let i = 0, k = 0; i < order; i++, k += 4) {\r\n weight = data[k + 3];\r\n componentCoffs[i] = transform.multiplyComponentXYZW(axisIndex, data[k], data[k + 1], data[k + 2], weight);\r\n weightCoffs[i] = weight;\r\n }\r\n BezierPolynomialAlgebra.accumulateProductWithDifferences(bezier.coffs, componentCoffs, weightCoffs, 1.0);\r\n BezierPolynomialAlgebra.accumulateProductWithDifferences(bezier.coffs, weightCoffs, componentCoffs, -1.0);\r\n const roots = bezier.roots(0.0, true);\r\n if (roots && roots.length > 0) {\r\n for (const r of roots) {\r\n this.fractionToPoint(r, this._workPoint0);\r\n rangeToExtend.extendTransformedPoint(transform, this._workPoint0);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"BezierCurve3dH.js","sourceRoot":"","sources":["../../../src/bspline/BezierCurve3dH.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Bspline\r\n */\r\n\r\nimport { CurveLocationDetail } from \"../curve/CurveLocationDetail\";\r\nimport { Geometry } from \"../Geometry\";\r\nimport { GeometryHandler } from \"../geometry3d/GeometryHandler\";\r\nimport { Plane3dByOriginAndVectors } from \"../geometry3d/Plane3dByOriginAndVectors\";\r\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Range3d } from \"../geometry3d/Range\";\r\nimport { Ray3d } from \"../geometry3d/Ray3d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { Matrix4d } from \"../geometry4d/Matrix4d\";\r\nimport { Point4d } from \"../geometry4d/Point4d\";\r\nimport { BezierPolynomialAlgebra } from \"../numerics/BezierPolynomials\";\r\nimport { BezierCurveBase } from \"./BezierCurveBase\";\r\n\r\n/** 3d curve with homogeneous weights.\r\n * * A control point with weight w and cartesian (projected) coordinates x,y,z has the weight multiplied into the coordinates,\r\n * hence the control point as stored is (xw, yw, zw, w).\r\n * @public\r\n */\r\nexport class BezierCurve3dH extends BezierCurveBase {\r\n /** test if `other` is also a BezierCurve3dH. */\r\n public isSameGeometryClass(other: any): boolean { return other instanceof BezierCurve3dH; }\r\n /**\r\n * Apply (multiply by) an affine transform\r\n * @param transform\r\n */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n const data = this._workData0;\r\n for (let i = 0; i < this._polygon.order; i++) {\r\n this._polygon.getPolygonPoint(i, data);\r\n transform.multiplyXYZWToFloat64Array(data[0], data[1], data[2], data[3], data);\r\n this._polygon.setPolygonPoint(i, data);\r\n }\r\n return true;\r\n }\r\n /**\r\n * Apply (multiply by) a perspective transform\r\n * @param matrix\r\n */\r\n public tryMultiplyMatrix4dInPlace(matrix: Matrix4d) {\r\n matrix.multiplyBlockedFloat64ArrayInPlace(this._polygon.packedData);\r\n }\r\n private _workRay0: Ray3d;\r\n private _workRay1: Ray3d;\r\n /** Return a specific pole as a full `[x,y,z,x] Point4d` */\r\n public getPolePoint4d(i: number, result?: Point4d): Point4d | undefined {\r\n const data = this._polygon.getPolygonPoint(i, this._workData0);\r\n if (data)\r\n return Point4d.create(data[0], data[1], data[2], data[3], result);\r\n return undefined;\r\n }\r\n /** Return a specific pole normalized to weight 1\r\n */\r\n public getPolePoint3d(i: number, result?: Point3d): Point3d | undefined {\r\n const data = this._polygon.getPolygonPoint(i, this._workData0);\r\n if (data)\r\n return Point3d.createFromPackedXYZW(data, 0, result);\r\n return undefined;\r\n }\r\n /**\r\n * Returns true if all weights are within tolerance of 1.0\r\n */\r\n public isUnitWeight(tolerance?: number): boolean {\r\n if (tolerance === undefined)\r\n tolerance = Geometry.smallAngleRadians;\r\n const aLow = 1.0 - tolerance;\r\n const aHigh = 1.0 + tolerance;\r\n const data = this._polygon.packedData;\r\n const n = data.length;\r\n let a;\r\n for (let i = 3; i < n; i += 4) {\r\n a = data[i];\r\n if (a < aLow || a > aHigh)\r\n return false;\r\n }\r\n return true;\r\n }\r\n /**\r\n * Capture a polygon as the data for a new `BezierCurve3dH`\r\n * @param polygon complete packed data and order.\r\n */\r\n private constructor(polygon: Float64Array) {\r\n super(4, polygon);\r\n this._workRay0 = Ray3d.createXAxis();\r\n this._workRay1 = Ray3d.createXAxis();\r\n }\r\n /** Create a curve with given points.\r\n * * If input is `Point2d[]`, the points are promoted with `z=0` and `w=1`\r\n * * If input is `Point3d[]`, the points are promoted with w=1`\r\n *\r\n */\r\n public static create(data: Point3d[] | Point4d[] | Point2d[]): BezierCurve3dH | undefined {\r\n if (data.length < 1)\r\n return undefined;\r\n const polygon = new Float64Array(data.length * 4);\r\n if (data[0] instanceof Point3d) {\r\n let i = 0;\r\n for (const p of (data as Point3d[])) {\r\n polygon[i++] = p.x;\r\n polygon[i++] = p.y;\r\n polygon[i++] = p.z;\r\n polygon[i++] = 1.0;\r\n }\r\n return new BezierCurve3dH(polygon);\r\n } else if (data[0] instanceof Point4d) {\r\n let i = 0;\r\n for (const p of (data as Point4d[])) {\r\n polygon[i++] = p.x;\r\n polygon[i++] = p.y;\r\n polygon[i++] = p.z;\r\n polygon[i++] = p.w;\r\n }\r\n return new BezierCurve3dH(polygon);\r\n } else if (data[0] instanceof Point2d) {\r\n let i = 0;\r\n for (const p of (data as Point2d[])) {\r\n polygon[i++] = p.x;\r\n polygon[i++] = p.y;\r\n polygon[i++] = 0.0;\r\n polygon[i++] = 1.0;\r\n }\r\n return new BezierCurve3dH(polygon);\r\n }\r\n return undefined;\r\n }\r\n /** create a bezier curve of specified order, filled with zeros */\r\n public static createOrder(order: number): BezierCurve3dH {\r\n const polygonArray = new Float64Array(order * 4); // and we trust that this is all zeros !!!\r\n return new BezierCurve3dH(polygonArray);\r\n }\r\n /** Load order * 4 doubles from data[3 * spanIndex] as poles (with added weight) */\r\n public loadSpan3dPolesWithWeight(data: Float64Array, spanIndex: number, weight: number) {\r\n this._polygon.loadSpanPolesWithWeight(data, 3, spanIndex, weight);\r\n }\r\n /** Load order * 4 doubles from data[3 * spanIndex] as poles (with added weight) */\r\n public loadSpan4dPoles(data: Float64Array, spanIndex: number) {\r\n this._polygon.loadSpanPoles(data, spanIndex);\r\n }\r\n /** Clone the entire curve. */\r\n public override clone(): BezierCurve3dH {\r\n return new BezierCurve3dH(this._polygon.clonePolygon());\r\n }\r\n /** Return a (deweighted) point on the curve. If deweight fails, returns 000 */\r\n public fractionToPoint(fraction: number, result?: Point3d): Point3d {\r\n this._polygon.evaluate(fraction, this._workData0);\r\n result = Point3d.createFromPackedXYZW(this._workData0, 0, result);\r\n return result ? result : Point3d.createZero();\r\n }\r\n /** Return a (deweighted) point on the curve. If deweight fails, returns 000 */\r\n public fractionToPoint4d(fraction: number, result?: Point4d): Point4d {\r\n this._polygon.evaluate(fraction, this._workData0);\r\n return Point4d.createFromPackedXYZW(this._workData0, 0, result);\r\n }\r\n /** Return the cartesian point and derivative vector. */\r\n public fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d {\r\n this._polygon.evaluate(fraction, this._workData0);\r\n this._polygon.evaluateDerivative(fraction, this._workData1);\r\n result = Ray3d.createWeightedDerivative(this._workData0, this._workData1, result);\r\n if (result)\r\n return result;\r\n // Bad. Very Bad. Return origin and x axis. Should be undefined, but usual cartesian types do not allow that\r\n return Ray3d.createXAxis();\r\n }\r\n /** Construct a plane with\r\n * * origin at the fractional position along the arc\r\n * * x axis is the first derivative, i.e. tangent along the arc\r\n * * y axis is the second derivative, i.e. in the plane and on the center side of the tangent.\r\n * If the arc is circular, the second derivative is directly towards the center\r\n */\r\n public fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n const epsilon = 1.0e-8;\r\n const a = 1.0 / (2.0 * epsilon);\r\n if (!result)\r\n result = Plane3dByOriginAndVectors.createXYPlane();\r\n const ray = this.fractionToPointAndDerivative(fraction, this._workRay0);\r\n result.origin.setFrom(ray.origin);\r\n result.vectorU.setFrom(ray.direction);\r\n const ray0 = this.fractionToPointAndDerivative(fraction - epsilon, this._workRay0);\r\n const ray1 = this.fractionToPointAndDerivative(fraction + epsilon, this._workRay1);\r\n Vector3d.createAdd2Scaled(ray0.direction, -a, ray1.direction, a, result.vectorV);\r\n return result;\r\n }\r\n /** test for nearly equal control points */\r\n public override isAlmostEqual(other: any): boolean {\r\n if (other instanceof BezierCurve3dH) {\r\n return this._polygon.isAlmostEqual(other._polygon);\r\n }\r\n return false;\r\n }\r\n /** Second step of double dispatch: call `handler.handleBezierCurve3dH(this)` */\r\n public dispatchToGeometryHandler(handler: GeometryHandler): any {\r\n return handler.handleBezierCurve3dH(this);\r\n }\r\n /**\r\n * Form dot products of each pole with given coefficients. Return as entries in products array.\r\n * @param products array of (scalar) dot products\r\n * @param ax x coefficient\r\n * @param ay y coefficient\r\n * @param az z coefficient\r\n * @param aw w coefficient\r\n */\r\n public poleProductsXYZW(products: Float64Array, ax: number, ay: number, az: number, aw: number) {\r\n const n = this.numPoles;\r\n const data = this._polygon.packedData;\r\n for (let i = 0, k = 0; i < n; i++, k += 4)\r\n products[i] = ax * data[k] + ay * data[k + 1] + az * data[k + 2] + aw * data[k + 3];\r\n }\r\n /** Find the closest point within the bezier span, using true perpendicular test (but no endpoint test)\r\n * * If closer than previously recorded, update the CurveLocationDetail\r\n * * This assumes this bezier is saturated.\r\n * @param spacePoint point being projected\r\n * @param detail pre-allocated detail to record (evolving) closest point.\r\n * @returns true if an updated occurred, false if either (a) no perpendicular projections or (b) perpendiculars were not closer.\r\n */\r\n public updateClosestPointByTruePerpendicular(spacePoint: Point3d, detail: CurveLocationDetail): boolean {\r\n let numUpdates = 0;\r\n let roots: number[] | undefined;\r\n if (this.isUnitWeight()) {\r\n // unweighted !!!\r\n const productOrder = 2 * this.order - 2;\r\n this.allocateAndZeroBezierWorkData(productOrder, 0, 0);\r\n const bezier = this._workBezier!;\r\n // closestPoint condition is:\r\n // (spacePoint - curvePoint) DOT curveTangent = 0;\r\n // Each product (x,y,z) of the DOT is the product of two bezier polynomials\r\n BezierPolynomialAlgebra.accumulateScaledShiftedComponentTimesComponentDelta(bezier.coffs, this._polygon.packedData, 4, this.order, 1.0, 0, -spacePoint.x, 0);\r\n BezierPolynomialAlgebra.accumulateScaledShiftedComponentTimesComponentDelta(bezier.coffs, this._polygon.packedData, 4, this.order, 1.0, 1, -spacePoint.y, 1);\r\n BezierPolynomialAlgebra.accumulateScaledShiftedComponentTimesComponentDelta(bezier.coffs, this._polygon.packedData, 4, this.order, 1.0, 2, -spacePoint.z, 2);\r\n roots = bezier.roots(0.0, true);\r\n } else {\r\n // This bezier has weights.\r\n // The pure cartesian closest point condition is\r\n // (spacePoint - X/w) DOT (X' w - w' X)/ w^2 = 0\r\n // ignoring denominator and using bezier coefficient differences for the derivative, making the numerator 0 is\r\n // (w * spacePoint - X) DOT ( DELTA X * w - DELTA w * X) = 0\r\n const orderA = this.order;\r\n const orderB = 2 * this.order - 2; // products of component and component difference.\r\n const productOrder = orderA + orderB - 1;\r\n this.allocateAndZeroBezierWorkData(productOrder, orderA, orderB);\r\n const bezier = this._workBezier!;\r\n const workA = this._workCoffsA!;\r\n const workB = this._workCoffsB!;\r\n const packedData = this._polygon.packedData;\r\n for (let i = 0; i < 3; i++) {\r\n // x representing loop pass: (w * spacePoint.x - curve.x(s)) * (curveDelta.x(s) * curve.w(s) - curve.x(s) * curveDelta.w(s))\r\n // (and p.w is always 1)\r\n for (let k = 0; k < workA.length; k++)workA[k] = 0;\r\n for (let k = 0; k < workB.length; k++)workB[k] = 0;\r\n BezierPolynomialAlgebra.scaledComponentSum(workA, packedData, 4, orderA, 3, spacePoint.at(i), // w * spacePoint.x\r\n i, -1.0); // curve.x(s) * 1.0\r\n BezierPolynomialAlgebra.accumulateScaledShiftedComponentTimesComponentDelta(workB, packedData, 4, orderA, 1.0, 3, 0.0, i);\r\n BezierPolynomialAlgebra.accumulateScaledShiftedComponentTimesComponentDelta(workB, packedData, 4, orderA, -1.0, i, 0.0, 3);\r\n BezierPolynomialAlgebra.accumulateProduct(bezier.coffs, workA, workB);\r\n }\r\n roots = bezier.roots(0.0, true);\r\n }\r\n if (roots) {\r\n for (const fraction of roots) {\r\n const xyz = this.fractionToPoint(fraction);\r\n const a = xyz.distance(spacePoint);\r\n numUpdates += detail.updateIfCloserCurveFractionPointDistance(this, fraction, xyz, a) ? 1 : 0;\r\n }\r\n }\r\n return numUpdates > 0;\r\n }\r\n /** Extend `rangeToExtend`, using candidate extrema at\r\n * * both end points\r\n * * any internal extrema in x,y,z\r\n */\r\n public extendRange(rangeToExtend: Range3d, transform?: Transform) {\r\n const order = this.order;\r\n if (!transform) {\r\n this.allocateAndZeroBezierWorkData(order * 2 - 2, 0, 0);\r\n const bezier = this._workBezier!;\r\n const data = this._polygon.packedData;\r\n this.getPolePoint3d(0, this._workPoint0);\r\n rangeToExtend.extend(this._workPoint0);\r\n this.getPolePoint3d(order - 1, this._workPoint0);\r\n rangeToExtend.extend(this._workPoint0);\r\n // Example:\r\n // For x component ...\r\n // coefficients of (weighted x) are at axisIndex=0\r\n // deweighted polynomial is (x(s)/w(s))\r\n // its derivative (to be zeroed) is\r\n // (x'(s)*w(s) -x(s) * w'(s)) / w^2(s)\r\n // The coefficients of the derivatives are (degree times) differences of successive coffs.\r\n // Make the numerator zero to get extrema\r\n for (let axisIndex = 0; axisIndex < 3; axisIndex++) {\r\n bezier.zero();\r\n BezierPolynomialAlgebra.accumulateScaledShiftedComponentTimesComponentDelta(\r\n bezier.coffs,\r\n data, 4, order,\r\n 1.0,\r\n axisIndex, 0.0,\r\n 3);\r\n BezierPolynomialAlgebra.accumulateScaledShiftedComponentTimesComponentDelta(\r\n bezier.coffs,\r\n data, 4, order,\r\n -1.0,\r\n 3, 0.0,\r\n axisIndex);\r\n const roots = bezier.roots(0.0, true);\r\n if (roots) {\r\n for (const r of roots) {\r\n this.fractionToPoint(r, this._workPoint0);\r\n rangeToExtend.extend(this._workPoint0);\r\n }\r\n }\r\n }\r\n } else {\r\n this.allocateAndZeroBezierWorkData(order * 2 - 2, order, order);\r\n const componentCoffs = this._workCoffsA!; // to hold transformed copy of x,y,z in turn.\r\n const weightCoffs = this._workCoffsB!; // to hold weights\r\n const bezier = this._workBezier!;\r\n\r\n this.getPolePoint3d(0, this._workPoint0);\r\n rangeToExtend.extendTransformedPoint(transform, this._workPoint0);\r\n this.getPolePoint3d(order - 1, this._workPoint0);\r\n rangeToExtend.extendTransformedPoint(transform, this._workPoint0);\r\n\r\n const data = this._polygon.packedData; // Example:\r\n // For x component ...\r\n // coefficients of (weighted x) are at axisIndex=0\r\n // deweighted polynomial is (x(s)/w(s))\r\n // its derivative (to be zeroed) is\r\n // (x'(s)*w(s) -x(s) * w'(s)) / w^2(s)\r\n // The coefficients of the derivatives are (degree times) differences of successive coffs.\r\n // Make the numerator zero to get extrema\r\n // apply one row of the transform to get the transformed coff by itself\r\n let weight;\r\n for (let axisIndex = 0; axisIndex < 3; axisIndex++) {\r\n bezier.zero();\r\n for (let i = 0, k = 0; i < order; i++, k += 4) {\r\n weight = data[k + 3];\r\n componentCoffs[i] = transform.multiplyComponentXYZW(axisIndex, data[k], data[k + 1], data[k + 2], weight);\r\n weightCoffs[i] = weight;\r\n }\r\n BezierPolynomialAlgebra.accumulateProductWithDifferences(bezier.coffs, componentCoffs, weightCoffs, 1.0);\r\n BezierPolynomialAlgebra.accumulateProductWithDifferences(bezier.coffs, weightCoffs, componentCoffs, -1.0);\r\n const roots = bezier.roots(0.0, true);\r\n if (roots && roots.length > 0) {\r\n for (const r of roots) {\r\n this.fractionToPoint(r, this._workPoint0);\r\n rangeToExtend.extendTransformedPoint(transform, this._workPoint0);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -108,6 +108,10 @@ export declare abstract class BezierCurveBase extends CurvePrimitive {
|
|
|
108
108
|
* @param options stroke options structure.
|
|
109
109
|
*/
|
|
110
110
|
computeStrokeCountForOptions(options?: StrokeOptions): number;
|
|
111
|
+
/** Return a deep clone. */
|
|
112
|
+
abstract clone(): BezierCurveBase;
|
|
113
|
+
/** Return a transformed deep clone. */
|
|
114
|
+
cloneTransformed(transform: Transform): BezierCurveBase;
|
|
111
115
|
/**
|
|
112
116
|
* Construct an offset of the instance curve as viewed in the xy-plane (ignoring z).
|
|
113
117
|
* * No attempt is made to join the offsets of smaller constituent primitives. To construct a fully joined offset
|
|
@@ -115,5 +119,10 @@ export declare abstract class BezierCurveBase extends CurvePrimitive {
|
|
|
115
119
|
* @param offsetDistanceOrOptions offset distance (positive to left of the instance curve), or options object
|
|
116
120
|
*/
|
|
117
121
|
constructOffsetXY(offsetDistanceOrOptions: number | OffsetOptions): CurvePrimitive | CurvePrimitive[] | undefined;
|
|
122
|
+
/** Return a curve primitive which is a portion of this curve.
|
|
123
|
+
* @param fractionA [in] start fraction
|
|
124
|
+
* @param fractionB [in] end fraction
|
|
125
|
+
*/
|
|
126
|
+
clonePartialCurve(fractionA: number, fractionB: number): BezierCurveBase;
|
|
118
127
|
}
|
|
119
128
|
//# sourceMappingURL=BezierCurveBase.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BezierCurveBase.d.ts","sourceRoot":"","sources":["../../../src/bspline/BezierCurveBase.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"BezierCurveBase.d.ts","sourceRoot":"","sources":["../../../src/bspline/BezierCurveBase.ts"],"names":[],"mappings":"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"}
|
|
@@ -198,6 +198,12 @@ class BezierCurveBase extends CurvePrimitive_1.CurvePrimitive {
|
|
|
198
198
|
}
|
|
199
199
|
return numStrokes;
|
|
200
200
|
}
|
|
201
|
+
/** Return a transformed deep clone. */
|
|
202
|
+
cloneTransformed(transform) {
|
|
203
|
+
const curve1 = this.clone();
|
|
204
|
+
curve1.tryTransformInPlace(transform);
|
|
205
|
+
return curve1;
|
|
206
|
+
}
|
|
201
207
|
/**
|
|
202
208
|
* Construct an offset of the instance curve as viewed in the xy-plane (ignoring z).
|
|
203
209
|
* * No attempt is made to join the offsets of smaller constituent primitives. To construct a fully joined offset
|
|
@@ -210,6 +216,15 @@ class BezierCurveBase extends CurvePrimitive_1.CurvePrimitive {
|
|
|
210
216
|
this.emitStrokableParts(handler, options.strokeOptions);
|
|
211
217
|
return handler.claimResult();
|
|
212
218
|
}
|
|
219
|
+
/** Return a curve primitive which is a portion of this curve.
|
|
220
|
+
* @param fractionA [in] start fraction
|
|
221
|
+
* @param fractionB [in] end fraction
|
|
222
|
+
*/
|
|
223
|
+
clonePartialCurve(fractionA, fractionB) {
|
|
224
|
+
const partialCurve = this.clone();
|
|
225
|
+
partialCurve._polygon.subdivideToIntervalInPlace(fractionA, fractionB);
|
|
226
|
+
return partialCurve;
|
|
227
|
+
}
|
|
213
228
|
}
|
|
214
229
|
exports.BezierCurveBase = BezierCurveBase;
|
|
215
230
|
//# sourceMappingURL=BezierCurveBase.js.map
|