@itwin/core-geometry 5.12.0-dev.8 → 5.12.0

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.
Files changed (96) hide show
  1. package/CHANGELOG.md +22 -1
  2. package/lib/cjs/bspline/AkimaCurve3d.d.ts +5 -0
  3. package/lib/cjs/bspline/AkimaCurve3d.d.ts.map +1 -1
  4. package/lib/cjs/bspline/AkimaCurve3d.js +8 -0
  5. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  6. package/lib/cjs/bspline/InterpolationCurve3d.d.ts +5 -0
  7. package/lib/cjs/bspline/InterpolationCurve3d.d.ts.map +1 -1
  8. package/lib/cjs/bspline/InterpolationCurve3d.js +8 -0
  9. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  10. package/lib/cjs/curve/CurveCollection.d.ts +2 -0
  11. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  12. package/lib/cjs/curve/CurveCollection.js +5 -0
  13. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  14. package/lib/cjs/curve/CurvePrimitive.d.ts +2 -0
  15. package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
  16. package/lib/cjs/curve/CurvePrimitive.js +5 -0
  17. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  18. package/lib/cjs/curve/Query/PlanarSubdivision.d.ts +3 -3
  19. package/lib/cjs/curve/Query/PlanarSubdivision.d.ts.map +1 -1
  20. package/lib/cjs/curve/Query/PlanarSubdivision.js +6 -6
  21. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  22. package/lib/cjs/curve/RegionOps.d.ts +69 -8
  23. package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
  24. package/lib/cjs/curve/RegionOps.js +257 -86
  25. package/lib/cjs/curve/RegionOps.js.map +1 -1
  26. package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts +2 -3
  27. package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
  28. package/lib/cjs/curve/RegionOpsClassificationSweeps.js +5 -6
  29. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  30. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts +1 -1
  31. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  32. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +82 -58
  33. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  34. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts +3 -7
  35. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
  36. package/lib/cjs/curve/internalContexts/MultiChainCollector.js +48 -53
  37. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  38. package/lib/cjs/geometry3d/Transform.d.ts +1 -4
  39. package/lib/cjs/geometry3d/Transform.d.ts.map +1 -1
  40. package/lib/cjs/geometry3d/Transform.js +1 -4
  41. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  42. package/lib/cjs/numerics/Polynomials.d.ts +3 -3
  43. package/lib/cjs/numerics/Polynomials.js +5 -5
  44. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  45. package/lib/cjs/topology/Graph.d.ts +5 -2
  46. package/lib/cjs/topology/Graph.d.ts.map +1 -1
  47. package/lib/cjs/topology/Graph.js +5 -2
  48. package/lib/cjs/topology/Graph.js.map +1 -1
  49. package/lib/esm/bspline/AkimaCurve3d.d.ts +5 -0
  50. package/lib/esm/bspline/AkimaCurve3d.d.ts.map +1 -1
  51. package/lib/esm/bspline/AkimaCurve3d.js +8 -0
  52. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  53. package/lib/esm/bspline/InterpolationCurve3d.d.ts +5 -0
  54. package/lib/esm/bspline/InterpolationCurve3d.d.ts.map +1 -1
  55. package/lib/esm/bspline/InterpolationCurve3d.js +8 -0
  56. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  57. package/lib/esm/curve/CurveCollection.d.ts +2 -0
  58. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  59. package/lib/esm/curve/CurveCollection.js +5 -0
  60. package/lib/esm/curve/CurveCollection.js.map +1 -1
  61. package/lib/esm/curve/CurvePrimitive.d.ts +2 -0
  62. package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
  63. package/lib/esm/curve/CurvePrimitive.js +5 -0
  64. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  65. package/lib/esm/curve/Query/PlanarSubdivision.d.ts +3 -3
  66. package/lib/esm/curve/Query/PlanarSubdivision.d.ts.map +1 -1
  67. package/lib/esm/curve/Query/PlanarSubdivision.js +6 -6
  68. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  69. package/lib/esm/curve/RegionOps.d.ts +69 -8
  70. package/lib/esm/curve/RegionOps.d.ts.map +1 -1
  71. package/lib/esm/curve/RegionOps.js +257 -86
  72. package/lib/esm/curve/RegionOps.js.map +1 -1
  73. package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts +2 -3
  74. package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
  75. package/lib/esm/curve/RegionOpsClassificationSweeps.js +5 -6
  76. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  77. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts +1 -1
  78. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  79. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +82 -58
  80. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  81. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts +3 -7
  82. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
  83. package/lib/esm/curve/internalContexts/MultiChainCollector.js +48 -53
  84. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  85. package/lib/esm/geometry3d/Transform.d.ts +1 -4
  86. package/lib/esm/geometry3d/Transform.d.ts.map +1 -1
  87. package/lib/esm/geometry3d/Transform.js +1 -4
  88. package/lib/esm/geometry3d/Transform.js.map +1 -1
  89. package/lib/esm/numerics/Polynomials.d.ts +3 -3
  90. package/lib/esm/numerics/Polynomials.js +5 -5
  91. package/lib/esm/numerics/Polynomials.js.map +1 -1
  92. package/lib/esm/topology/Graph.d.ts +5 -2
  93. package/lib/esm/topology/Graph.d.ts.map +1 -1
  94. package/lib/esm/topology/Graph.js +5 -2
  95. package/lib/esm/topology/Graph.js.map +1 -1
  96. package/package.json +5 -5
package/CHANGELOG.md CHANGED
@@ -1,6 +1,27 @@
1
1
  # Change Log - @itwin/core-geometry
2
2
 
3
- This log was last generated on Wed, 08 Jul 2026 19:05:13 GMT and should not be manually modified.
3
+ This log was last generated on Mon, 03 Aug 2026 12:25:49 GMT and should not be manually modified.
4
+
5
+ ## 5.12.0
6
+ Mon, 03 Aug 2026 12:25:49 GMT
7
+
8
+ ### Updates
9
+
10
+ - RegionOps.regionBooleanXY enhancements
11
+ - RegionOps tolerance fixes
12
+ - added test for fillet vs line intersection
13
+ - Reduced Newton max iteration for spiral/bspline intersection
14
+ - Rewrote CurveCurveCloseApproachXY Bspline and Spiral CloseApproach tests
15
+
16
+ ## 5.11.3
17
+ Wed, 15 Jul 2026 19:40:44 GMT
18
+
19
+ _Version update only_
20
+
21
+ ## 5.11.2
22
+ Fri, 10 Jul 2026 12:20:31 GMT
23
+
24
+ _Version update only_
4
25
 
5
26
  ## 5.11.1
6
27
  Wed, 08 Jul 2026 19:03:45 GMT
@@ -9,6 +9,7 @@ import { GeometryHandler } from "../geometry3d/GeometryHandler";
9
9
  import { Point3d } from "../geometry3d/Point3dVector3d";
10
10
  import { Transform } from "../geometry3d/Transform";
11
11
  import { XYZProps } from "../geometry3d/XYZProps";
12
+ import { BSplineCurve3d } from "./BSplineCurve";
12
13
  /**
13
14
  * fitPoints [[AkimaCurve3d]]
14
15
  * * This is a "json compatible" version of the serializer-friendly [[AkimaCurve3dOptions]]
@@ -69,6 +70,8 @@ export declare class AkimaCurve3d extends ProxyCurve {
69
70
  * * The options object is captured into the new curve object (not copied)
70
71
  */
71
72
  static createCapture(options: AkimaCurve3dOptions): AkimaCurve3d | undefined;
73
+ /** Return the (pointer to) the proxy B-spline curve. */
74
+ get proxyCurve(): BSplineCurve3d;
72
75
  /** Return a (copy of) the defining points, packed as a Float64Array */
73
76
  copyFitPointsFloat64Array(): Float64Array;
74
77
  /**
@@ -97,6 +100,8 @@ export declare class AkimaCurve3d extends ProxyCurve {
97
100
  announceClipIntervals(clipper: Clipper, announce?: AnnounceNumberNumberCurvePrimitive): boolean;
98
101
  /** Return a deep clone */
99
102
  clone(): AkimaCurve3d;
103
+ /** Return a transformed clone. */
104
+ cloneTransformed(transform: Transform): AkimaCurve3d | undefined;
100
105
  /** Test if `other` is also an [[AkimaCurve3d]] */
101
106
  isSameGeometryClass(other: GeometryQuery): boolean;
102
107
  isAlmostEqual(other: GeometryQuery): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"AkimaCurve3d.d.ts","sourceRoot":"","sources":["../../../src/bspline/AkimaCurve3d.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,kCAAkC,EAAkB,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGlD;;;;GAIG;AACF,MAAM,WAAW,iBAAiB;IAClC,8CAA8C;IAC9C,SAAS,EAAE,QAAQ,EAAE,CAAC;CACtB;AAED;;;;;GAKG;AACH,qBAAa,mBAAmB;IACvB,SAAS,EAAE,OAAO,EAAE,CAAC;IAC5B;;;;OAIG;gBACgB,SAAS,CAAC,EAAE,OAAO,EAAE;IAIzC;;;;mEAI+D;IACvD,wBAAwB,IAAI,iBAAiB;IAMtD,gEAAgE;IACvD,KAAK,IAAI,mBAAmB;IAKrC,gEAAgE;WAClD,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,mBAAmB;WAKpD,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,SAAS,EAAE,KAAK,EAAE,mBAAmB,GAAG,SAAS,GAAG,OAAO;CAQtH;AAED;;;;;;GAMG;AACH,qBAAa,YAAa,SAAQ,UAAU;IAC1C,SAAgB,kBAAkB,wBAAwB;IAC1D,OAAO,CAAC,QAAQ,CAAsB;IACtC,0CAA0C;IAC1C,OAAO;IAIP,8EAA8E;IAC9D,yBAAyB,CAAC,OAAO,EAAE,eAAe;IAMpE;;;;OAIG;WACa,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,iBAAiB,GAAG,YAAY,GAAG,SAAS;IAShG;;;OAGG;WACW,aAAa,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,GAAG,SAAS;IAOnF,uEAAuE;IAChE,yBAAyB,IAAI,YAAY;IAIhD;;;OAGG;IACI,MAAM,IAAI,GAAG;IAGpB,2EAA2E;IACpE,UAAU,IAAI,iBAAiB;IAItC;;;OAGG;IACI,cAAc,IAAI,IAAI;IAI7B;;OAEG;IACI,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IAOzD;;;;;;OAMG;IACa,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,kCAAkC,GAAG,OAAO;IAG/G,0BAA0B;IACV,KAAK,IAAI,YAAY;IAIrC,kDAAkD;IAC3C,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;IAEzC,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;CAM7D"}
1
+ {"version":3,"file":"AkimaCurve3d.d.ts","sourceRoot":"","sources":["../../../src/bspline/AkimaCurve3d.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,kCAAkC,EAAkB,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;;GAIG;AACF,MAAM,WAAW,iBAAiB;IAClC,8CAA8C;IAC9C,SAAS,EAAE,QAAQ,EAAE,CAAC;CACtB;AAED;;;;;GAKG;AACH,qBAAa,mBAAmB;IACvB,SAAS,EAAE,OAAO,EAAE,CAAC;IAC5B;;;;OAIG;gBACgB,SAAS,CAAC,EAAE,OAAO,EAAE;IAIzC;;;;mEAI+D;IACvD,wBAAwB,IAAI,iBAAiB;IAMtD,gEAAgE;IACvD,KAAK,IAAI,mBAAmB;IAKrC,gEAAgE;WAClD,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,mBAAmB;WAKpD,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,SAAS,EAAE,KAAK,EAAE,mBAAmB,GAAG,SAAS,GAAG,OAAO;CAQtH;AAED;;;;;;GAMG;AACH,qBAAa,YAAa,SAAQ,UAAU;IAC1C,SAAgB,kBAAkB,wBAAwB;IAC1D,OAAO,CAAC,QAAQ,CAAsB;IACtC,0CAA0C;IAC1C,OAAO;IAIP,8EAA8E;IAC9D,yBAAyB,CAAC,OAAO,EAAE,eAAe;IAMpE;;;;OAIG;WACa,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,iBAAiB,GAAG,YAAY,GAAG,SAAS;IAShG;;;OAGG;WACW,aAAa,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,GAAG,SAAS;IAMnF,wDAAwD;IACxD,IAAoB,UAAU,IAAI,cAAc,CAE/C;IACD,uEAAuE;IAChE,yBAAyB,IAAI,YAAY;IAIhD;;;OAGG;IACI,MAAM,IAAI,GAAG;IAGpB,2EAA2E;IACpE,UAAU,IAAI,iBAAiB;IAItC;;;OAGG;IACI,cAAc,IAAI,IAAI;IAI7B;;OAEG;IACI,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IAOzD;;;;;;OAMG;IACa,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,kCAAkC,GAAG,OAAO;IAG/G,0BAA0B;IACV,KAAK,IAAI,YAAY;IAGrC,kCAAkC;IAClB,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS;IAIhF,kDAAkD;IAC3C,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;IAEzC,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;CAM7D"}
@@ -106,6 +106,10 @@ class AkimaCurve3d extends ProxyCurve_1.ProxyCurve {
106
106
  return new AkimaCurve3d(options, proxyCurve);
107
107
  return undefined;
108
108
  }
109
+ /** Return the (pointer to) the proxy B-spline curve. */
110
+ get proxyCurve() {
111
+ return this._proxyCurve;
112
+ }
109
113
  /** Return a (copy of) the defining points, packed as a Float64Array */
110
114
  copyFitPointsFloat64Array() {
111
115
  return PointHelpers_1.Point3dArray.cloneXYZPropsAsFloat64Array(this._options.fitPoints);
@@ -153,6 +157,10 @@ class AkimaCurve3d extends ProxyCurve_1.ProxyCurve {
153
157
  clone() {
154
158
  return new AkimaCurve3d(this._options.clone(), this._proxyCurve.clone());
155
159
  }
160
+ /** Return a transformed clone. */
161
+ cloneTransformed(transform) {
162
+ return super.cloneTransformed(transform);
163
+ }
156
164
  /** Test if `other` is also an [[AkimaCurve3d]] */
157
165
  isSameGeometryClass(other) { return other instanceof AkimaCurve3d; }
158
166
  isAlmostEqual(other) {
@@ -1 +1 @@
1
- {"version":3,"file":"AkimaCurve3d.js","sourceRoot":"","sources":["../../../src/bspline/AkimaCurve3d.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAKH,oDAAiD;AACjD,0CAAuC;AAGvC,6DAA0D;AAG1D,iDAAgD;AAYhD;;;;;GAKG;AACH,MAAa,mBAAmB;IACvB,SAAS,CAAY;IAC5B;;;;OAIG;IACH,YAAmB,SAAqB;QACtC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,CAAC;IAEF;;;;mEAI+D;IACvD,wBAAwB;QAC7B,MAAM,KAAK,GAAG;YACZ,SAAS,EAAE,2BAAY,CAAC,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC;SAClE,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IACH,gEAAgE;IACvD,KAAK;QACV,MAAM,KAAK,GAAG,IAAI,mBAAmB,CAAC,2BAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACtF,OAAO,KAAK,CAAC;IACf,CAAC;IAEH,gEAAgE;IACzD,MAAM,CAAC,MAAM,CAAC,MAAyB;QAC5C,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,2BAAY,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QACzF,OAAO,MAAM,CAAC;IAChB,CAAC;IAEQ,MAAM,CAAC,cAAc,CAAC,KAAsC,EAAE,KAAsC;QACzG,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;YAC5C,OAAO,IAAI,CAAC;QACd,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7C,OAAO,mBAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QACxH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AA1CD,kDA0CC;AAED;;;;;;GAMG;AACH,MAAa,YAAa,SAAQ,uBAAU;IAC1B,kBAAkB,GAAG,oBAAoB,CAAC;IAClD,QAAQ,CAAsB;IACtC,0CAA0C;IAC1C,YAAoB,UAA+B,EAAE,UAA0B;QAC7E,KAAK,CAAC,UAAU,CAAC,CAAC;QAClB,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;IAC7B,CAAC;IACD,8EAA8E;IAC9D,yBAAyB,CAAC,OAAwB;QAChE,IAAI,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,SAAS,KAAK,MAAM,EAAE,kEAAkE;YAC1F,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;QAC/D,OAAO,MAAM,CAAC;IAChB,CAAC;IACH;;;;OAIG;IACM,MAAM,CAAC,MAAM,CAAC,OAAgD;QACnE,IAAI,WAAW,CAAC;QAChB,IAAI,OAAO,YAAY,mBAAmB,EAAE,CAAC;YAC3C,WAAW,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,YAAY,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,aAAa,CAAC,OAA4B;QACtD,MAAM,UAAU,GAAG,6BAAc,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC;QACzE,IAAI,UAAU;YACZ,OAAO,IAAI,YAAY,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC/C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,uEAAuE;IAChE,yBAAyB;QAC9B,OAAO,2BAAY,CAAC,2BAA2B,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC3E,CAAC;IAED;;;OAGG;IACI,MAAM;QACX,OAAO,IAAI,CAAC,QAAQ,CAAC,wBAAwB,EAAE,CAAC;IAClD,CAAC;IACD,2EAA2E;IACpE,UAAU;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,wBAAwB,EAAE,CAAC;IAClD,CAAC;IAED;;;OAGG;IACI,cAAc;QACnB,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IACpC,CAAC;IACD;;OAEG;IACI,mBAAmB,CAAC,SAAoB;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAChE,IAAI,OAAO,EAAE,CAAC;YACZ,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IACD;;;;;;OAMG;IACa,qBAAqB,CAAC,OAAgB,EAAE,QAA6C;QACnG,OAAO,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACnE,CAAC;IACD,0BAA0B;IACV,KAAK;QACnB,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,kDAAkD;IAC3C,mBAAmB,CAAC,KAAoB,IAAa,OAAO,KAAK,YAAY,YAAY,CAAC,CAAC,CAAC;IAEnF,aAAa,CAAC,KAAoB;QAChD,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;YAClC,OAAO,mBAAmB,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAnGD,oCAmGC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Bspline\n */\n\nimport { Clipper } from \"../clipping/ClipUtils\";\nimport { AnnounceNumberNumberCurvePrimitive, CurvePrimitive } from \"../curve/CurvePrimitive\";\nimport { GeometryQuery } from \"../curve/GeometryQuery\";\nimport { ProxyCurve } from \"../curve/ProxyCurve\";\nimport { Geometry } from \"../Geometry\";\nimport { GeometryHandler } from \"../geometry3d/GeometryHandler\";\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\nimport { Point3dArray } from \"../geometry3d/PointHelpers\";\nimport { Transform } from \"../geometry3d/Transform\";\nimport { XYZProps } from \"../geometry3d/XYZProps\";\nimport { BSplineCurve3d } from \"./BSplineCurve\";\n\n/**\n * fitPoints [[AkimaCurve3d]]\n * * This is a \"json compatible\" version of the serializer-friendly [[AkimaCurve3dOptions]]\n * @public\n */\n export interface AkimaCurve3dProps {\n /** Points that the curve must pass through */\n fitPoints: XYZProps[];\n}\n\n/**\n * fitPoints and end condition data for [[AkimaCurve3d]]\n * * This is a \"typed object\" version of the serializer-friendly [[AkimaCurve3dProps]]\n * * Typical use cases rarely require all parameters, so the constructor does not itemize them as parameters.\n * @public\n */\nexport class AkimaCurve3dOptions {\n public fitPoints: Point3d[];\n /**\n *\n * @param fitPoints points to CAPTURE\n * @param knots array to CAPTURE\n */\n public constructor(fitPoints?: Point3d[]) {\n this.fitPoints = fitPoints ? fitPoints : [];\n }\n\n /** Points that the curve must pass through.\n * First and last 2 points are \"beyond the end\" for control of end slope.\n fitPoints: Point3d[];\n\n/** Clone with strongly typed members reduced to simple json. */\n public cloneAsAkimaCurve3dProps(): AkimaCurve3dProps {\n const props = {\n fitPoints: Point3dArray.cloneDeepJSONNumberArrays(this.fitPoints),\n };\n return props;\n }\n/** Clone with strongly typed members reduced to simple json. */\n public clone(): AkimaCurve3dOptions {\n const clone = new AkimaCurve3dOptions(Point3dArray.clonePoint3dArray(this.fitPoints));\n return clone;\n }\n\n/** Clone with strongly typed members reduced to simple json. */\npublic static create(source: AkimaCurve3dProps): AkimaCurve3dOptions {\n const result = new AkimaCurve3dOptions(Point3dArray.clonePoint3dArray(source.fitPoints));\n return result;\n}\n\n public static areAlmostEqual(dataA: AkimaCurve3dOptions | undefined, dataB: AkimaCurve3dOptions | undefined): boolean {\n if (dataA === undefined && dataB === undefined)\n return true;\n if (dataA !== undefined && dataB !== undefined) {\n return Geometry.almostEqualArrays(dataA.fitPoints, dataB.fitPoints, (a: Point3d, b: Point3d) => a.isAlmostEqual(b));\n }\n return false;\n }\n}\n\n/**\n * Interpolating curve.\n * * Derive from [[ProxyCurve]]\n * * Use a [[BSplineCurve3d]] as the proxy\n * *\n * @public\n */\nexport class AkimaCurve3d extends ProxyCurve {\n public readonly curvePrimitiveType = \"interpolationCurve\";\n private _options: AkimaCurve3dOptions;\n /** CAPTURE properties and proxy curve. */\n private constructor(properties: AkimaCurve3dOptions, proxyCurve: CurvePrimitive) {\n super(proxyCurve);\n this._options = properties;\n }\n /** Second step of double dispatch: call `handler.handleAkimaCurve3d(this)` */\n public override dispatchToGeometryHandler(handler: GeometryHandler) {\n let result = handler.handleAkimaCurve3d(this);\n if (undefined === result) // if handler doesn't specialize on Akima curves, default to proxy\n result = this._proxyCurve.dispatchToGeometryHandler(handler);\n return result;\n }\n/**\n * Create an [[AkimaCurve3d]] based on points, knots, and other properties in the [[AkimaCurve3dProps]] or [[AkimaCurve3dOptions]].\n * * This saves a COPY OF the options or props.\n * * Use createCapture () if the options or props can be used without copy\n */\n public static create(options: AkimaCurve3dOptions | AkimaCurve3dProps): AkimaCurve3d | undefined {\n let optionsCopy;\n if (options instanceof AkimaCurve3dOptions) {\n optionsCopy = options.clone();\n } else {\n optionsCopy = AkimaCurve3dOptions.create(options);\n }\n return AkimaCurve3d.createCapture(optionsCopy);\n }\n /**\n * Create an [[AkimaCurve3d]]\n * * The options object is captured into the new curve object (not copied)\n */\n public static createCapture(options: AkimaCurve3dOptions): AkimaCurve3d | undefined{\n const proxyCurve = BSplineCurve3d.createFromAkimaCurve3dOptions(options);\n if (proxyCurve)\n return new AkimaCurve3d(options, proxyCurve);\n return undefined;\n }\n\n /** Return a (copy of) the defining points, packed as a Float64Array */\n public copyFitPointsFloat64Array(): Float64Array {\n return Point3dArray.cloneXYZPropsAsFloat64Array(this._options.fitPoints);\n }\n\n /**\n * Return json key-value pairs for for this [[AkimaCurve3d]].\n * @returns\n */\n public toJSON(): any {\n return this._options.cloneAsAkimaCurve3dProps();\n }\n /** Clone the [[AkimaCurve3dProps]] object in this [[AkimaCurve3dProps]] */\n public cloneProps(): AkimaCurve3dProps {\n return this._options.cloneAsAkimaCurve3dProps();\n }\n\n /**\n * Reverse the curve direction.\n * * This updates both the defining properties and the proxy bspline.\n */\n public reverseInPlace(): void {\n this._proxyCurve.reverseInPlace();\n this._options.fitPoints.reverse();\n }\n /**\n * Transform this [[AkimaCurve3d]] and its defining data in place\n */\n public tryTransformInPlace(transform: Transform): boolean {\n const proxyOk = this._proxyCurve.tryTransformInPlace(transform);\n if (proxyOk) {\n transform.multiplyPoint3dArray(this._options.fitPoints);\n }\n return proxyOk;\n }\n /**\n * Find intervals of this CurvePrimitive that are interior to a clipper.\n * * This implementation simply passes the call to the proxy curve.\n * @param clipper clip structure (e.g. clip planes).\n * @param announce (optional) function to be called announcing fractional intervals of the input curve.\n * @returns true if any \"in\" segments are announced.\n */\n public override announceClipIntervals(clipper: Clipper, announce?: AnnounceNumberNumberCurvePrimitive): boolean {\n return this._proxyCurve.announceClipIntervals(clipper, announce);\n }\n /** Return a deep clone */\n public override clone(): AkimaCurve3d {\n return new AkimaCurve3d(this._options.clone(), this._proxyCurve.clone());\n }\n\n /** Test if `other` is also an [[AkimaCurve3d]] */\n public isSameGeometryClass(other: GeometryQuery): boolean { return other instanceof AkimaCurve3d; }\n\n public override isAlmostEqual(other: GeometryQuery): boolean{\n if (other instanceof AkimaCurve3d) {\n return AkimaCurve3dOptions.areAlmostEqual(this._options, other._options);\n }\n return false;\n }\n}\n"]}
1
+ {"version":3,"file":"AkimaCurve3d.js","sourceRoot":"","sources":["../../../src/bspline/AkimaCurve3d.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Bspline\n */\n\nimport { Clipper } from \"../clipping/ClipUtils\";\nimport { AnnounceNumberNumberCurvePrimitive, CurvePrimitive } from \"../curve/CurvePrimitive\";\nimport { GeometryQuery } from \"../curve/GeometryQuery\";\nimport { ProxyCurve } from \"../curve/ProxyCurve\";\nimport { Geometry } from \"../Geometry\";\nimport { GeometryHandler } from \"../geometry3d/GeometryHandler\";\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\nimport { Point3dArray } from \"../geometry3d/PointHelpers\";\nimport { Transform } from \"../geometry3d/Transform\";\nimport { XYZProps } from \"../geometry3d/XYZProps\";\nimport { BSplineCurve3d } from \"./BSplineCurve\";\n\n/**\n * fitPoints [[AkimaCurve3d]]\n * * This is a \"json compatible\" version of the serializer-friendly [[AkimaCurve3dOptions]]\n * @public\n */\n export interface AkimaCurve3dProps {\n /** Points that the curve must pass through */\n fitPoints: XYZProps[];\n}\n\n/**\n * fitPoints and end condition data for [[AkimaCurve3d]]\n * * This is a \"typed object\" version of the serializer-friendly [[AkimaCurve3dProps]]\n * * Typical use cases rarely require all parameters, so the constructor does not itemize them as parameters.\n * @public\n */\nexport class AkimaCurve3dOptions {\n public fitPoints: Point3d[];\n /**\n *\n * @param fitPoints points to CAPTURE\n * @param knots array to CAPTURE\n */\n public constructor(fitPoints?: Point3d[]) {\n this.fitPoints = fitPoints ? fitPoints : [];\n }\n\n /** Points that the curve must pass through.\n * First and last 2 points are \"beyond the end\" for control of end slope.\n fitPoints: Point3d[];\n\n/** Clone with strongly typed members reduced to simple json. */\n public cloneAsAkimaCurve3dProps(): AkimaCurve3dProps {\n const props = {\n fitPoints: Point3dArray.cloneDeepJSONNumberArrays(this.fitPoints),\n };\n return props;\n }\n/** Clone with strongly typed members reduced to simple json. */\n public clone(): AkimaCurve3dOptions {\n const clone = new AkimaCurve3dOptions(Point3dArray.clonePoint3dArray(this.fitPoints));\n return clone;\n }\n\n/** Clone with strongly typed members reduced to simple json. */\npublic static create(source: AkimaCurve3dProps): AkimaCurve3dOptions {\n const result = new AkimaCurve3dOptions(Point3dArray.clonePoint3dArray(source.fitPoints));\n return result;\n}\n\n public static areAlmostEqual(dataA: AkimaCurve3dOptions | undefined, dataB: AkimaCurve3dOptions | undefined): boolean {\n if (dataA === undefined && dataB === undefined)\n return true;\n if (dataA !== undefined && dataB !== undefined) {\n return Geometry.almostEqualArrays(dataA.fitPoints, dataB.fitPoints, (a: Point3d, b: Point3d) => a.isAlmostEqual(b));\n }\n return false;\n }\n}\n\n/**\n * Interpolating curve.\n * * Derive from [[ProxyCurve]]\n * * Use a [[BSplineCurve3d]] as the proxy\n * *\n * @public\n */\nexport class AkimaCurve3d extends ProxyCurve {\n public readonly curvePrimitiveType = \"interpolationCurve\";\n private _options: AkimaCurve3dOptions;\n /** CAPTURE properties and proxy curve. */\n private constructor(properties: AkimaCurve3dOptions, proxyCurve: CurvePrimitive) {\n super(proxyCurve);\n this._options = properties;\n }\n /** Second step of double dispatch: call `handler.handleAkimaCurve3d(this)` */\n public override dispatchToGeometryHandler(handler: GeometryHandler) {\n let result = handler.handleAkimaCurve3d(this);\n if (undefined === result) // if handler doesn't specialize on Akima curves, default to proxy\n result = this._proxyCurve.dispatchToGeometryHandler(handler);\n return result;\n }\n/**\n * Create an [[AkimaCurve3d]] based on points, knots, and other properties in the [[AkimaCurve3dProps]] or [[AkimaCurve3dOptions]].\n * * This saves a COPY OF the options or props.\n * * Use createCapture () if the options or props can be used without copy\n */\n public static create(options: AkimaCurve3dOptions | AkimaCurve3dProps): AkimaCurve3d | undefined {\n let optionsCopy;\n if (options instanceof AkimaCurve3dOptions) {\n optionsCopy = options.clone();\n } else {\n optionsCopy = AkimaCurve3dOptions.create(options);\n }\n return AkimaCurve3d.createCapture(optionsCopy);\n }\n /**\n * Create an [[AkimaCurve3d]]\n * * The options object is captured into the new curve object (not copied)\n */\n public static createCapture(options: AkimaCurve3dOptions): AkimaCurve3d | undefined{\n const proxyCurve = BSplineCurve3d.createFromAkimaCurve3dOptions(options);\n if (proxyCurve)\n return new AkimaCurve3d(options, proxyCurve);\n return undefined;\n }\n /** Return the (pointer to) the proxy B-spline curve. */\n public override get proxyCurve(): BSplineCurve3d {\n return this._proxyCurve as BSplineCurve3d;\n }\n /** Return a (copy of) the defining points, packed as a Float64Array */\n public copyFitPointsFloat64Array(): Float64Array {\n return Point3dArray.cloneXYZPropsAsFloat64Array(this._options.fitPoints);\n }\n\n /**\n * Return json key-value pairs for for this [[AkimaCurve3d]].\n * @returns\n */\n public toJSON(): any {\n return this._options.cloneAsAkimaCurve3dProps();\n }\n /** Clone the [[AkimaCurve3dProps]] object in this [[AkimaCurve3dProps]] */\n public cloneProps(): AkimaCurve3dProps {\n return this._options.cloneAsAkimaCurve3dProps();\n }\n\n /**\n * Reverse the curve direction.\n * * This updates both the defining properties and the proxy bspline.\n */\n public reverseInPlace(): void {\n this._proxyCurve.reverseInPlace();\n this._options.fitPoints.reverse();\n }\n /**\n * Transform this [[AkimaCurve3d]] and its defining data in place\n */\n public tryTransformInPlace(transform: Transform): boolean {\n const proxyOk = this._proxyCurve.tryTransformInPlace(transform);\n if (proxyOk) {\n transform.multiplyPoint3dArray(this._options.fitPoints);\n }\n return proxyOk;\n }\n /**\n * Find intervals of this CurvePrimitive that are interior to a clipper.\n * * This implementation simply passes the call to the proxy curve.\n * @param clipper clip structure (e.g. clip planes).\n * @param announce (optional) function to be called announcing fractional intervals of the input curve.\n * @returns true if any \"in\" segments are announced.\n */\n public override announceClipIntervals(clipper: Clipper, announce?: AnnounceNumberNumberCurvePrimitive): boolean {\n return this._proxyCurve.announceClipIntervals(clipper, announce);\n }\n /** Return a deep clone */\n public override clone(): AkimaCurve3d {\n return new AkimaCurve3d(this._options.clone(), this._proxyCurve.clone());\n }\n /** Return a transformed clone. */\n public override cloneTransformed(transform: Transform): AkimaCurve3d | undefined {\n return super.cloneTransformed(transform) as AkimaCurve3d | undefined;\n }\n\n /** Test if `other` is also an [[AkimaCurve3d]] */\n public isSameGeometryClass(other: GeometryQuery): boolean { return other instanceof AkimaCurve3d; }\n\n public override isAlmostEqual(other: GeometryQuery): boolean{\n if (other instanceof AkimaCurve3d) {\n return AkimaCurve3dOptions.areAlmostEqual(this._options, other._options);\n }\n return false;\n }\n}\n"]}
@@ -9,6 +9,7 @@ import { GeometryHandler } from "../geometry3d/GeometryHandler";
9
9
  import { Point3d, Vector3d } from "../geometry3d/Point3dVector3d";
10
10
  import { Transform } from "../geometry3d/Transform";
11
11
  import { XYZProps } from "../geometry3d/XYZProps";
12
+ import { BSplineCurve3d } from "./BSplineCurve";
12
13
  /**
13
14
  * fitPoints and end condition data for [[InterpolationCurve3d]]
14
15
  * * This is a "json compatible" version of [[InterpolationCurve3dOptions]]
@@ -130,6 +131,8 @@ export declare class InterpolationCurve3d extends ProxyCurve {
130
131
  * * The options object is captured into the new curve object (not copied)
131
132
  */
132
133
  static createCapture(options: InterpolationCurve3dOptions): InterpolationCurve3d | undefined;
134
+ /** Return the (pointer to) the proxy B-spline curve. */
135
+ get proxyCurve(): BSplineCurve3d;
133
136
  /** Return a (copy of) the defining points, packed as a Float64Array */
134
137
  copyFitPointsFloat64Array(): Float64Array;
135
138
  /**
@@ -160,6 +163,8 @@ export declare class InterpolationCurve3d extends ProxyCurve {
160
163
  announceClipIntervals(clipper: Clipper, announce?: AnnounceNumberNumberCurvePrimitive): boolean;
161
164
  /** Return a deep clone */
162
165
  clone(): InterpolationCurve3d;
166
+ /** Return a transformed clone. */
167
+ cloneTransformed(transform: Transform): InterpolationCurve3d | undefined;
163
168
  isAlmostEqual(other: GeometryQuery): boolean;
164
169
  /** Test if `other` is also an [[InterpolationCurve3d]] */
165
170
  isSameGeometryClass(other: GeometryQuery): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"InterpolationCurve3d.d.ts","sourceRoot":"","sources":["../../../src/bspline/InterpolationCurve3d.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"InterpolationCurve3d.d.ts","sourceRoot":"","sources":["../../../src/bspline/InterpolationCurve3d.ts"],"names":[],"mappings":"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"}
@@ -233,6 +233,10 @@ class InterpolationCurve3d extends ProxyCurve_1.ProxyCurve {
233
233
  return new InterpolationCurve3d(options, proxyCurve);
234
234
  return undefined;
235
235
  }
236
+ /** Return the (pointer to) the proxy B-spline curve. */
237
+ get proxyCurve() {
238
+ return this._proxyCurve;
239
+ }
236
240
  /** Return a (copy of) the defining points, packed as a Float64Array */
237
241
  copyFitPointsFloat64Array() {
238
242
  return PointHelpers_1.Point3dArray.cloneXYZPropsAsFloat64Array(this._options.fitPoints);
@@ -286,6 +290,10 @@ class InterpolationCurve3d extends ProxyCurve_1.ProxyCurve {
286
290
  clone() {
287
291
  return new InterpolationCurve3d(this._options.clone(), this._proxyCurve.clone());
288
292
  }
293
+ /** Return a transformed clone. */
294
+ cloneTransformed(transform) {
295
+ return super.cloneTransformed(transform);
296
+ }
289
297
  isAlmostEqual(other) {
290
298
  if (other instanceof InterpolationCurve3d) {
291
299
  return InterpolationCurve3dOptions.areAlmostEqual(this._options, other._options);
@@ -1 +1 @@
1
- {"version":3,"file":"InterpolationCurve3d.js","sourceRoot":"","sources":["../../../src/bspline/InterpolationCurve3d.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,gEAA6D;AAI7D,oDAAiD;AACjD,0CAAuC;AAEvC,mEAAkE;AAClE,6DAA0D;AAG1D,iDAAgD;AA8BhD;;;;;GAKG;AACH,MAAa,2BAA2B;IACtC;;;;OAIG;IACH,YAAmB,SAAqB,EAAE,KAAgB;QACxD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAEO,MAAM,CAAU;IAChB,OAAO,CAAW;IAClB,gBAAgB,CAAU;IAC1B,mBAAmB,CAAU;IAC7B,mBAAmB,CAAU;IAC7B,kBAAkB,CAAU;IAC5B,aAAa,CAAY;IACzB,WAAW,CAAY;IACvB,UAAU,CAAY;IACtB,MAAM,CAAY;IAE1B,0BAA0B;IAC1B,IAAW,KAAK,KAAa,OAAO,mBAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,IAAW,KAAK,CAAC,GAAW,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;IACpD,2BAA2B;IAC3B,IAAW,MAAM,KAAc,OAAO,mBAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACnF,IAAW,MAAM,CAAC,GAAY,IAAI,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC;IACvD,oCAAoC;IACpC,IAAW,eAAe,KAAa,OAAO,mBAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjG,IAAW,eAAe,CAAC,GAAW,IAAI,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,CAAC,CAAC;IACxE,uCAAuC;IACvC,IAAW,kBAAkB,KAAa,OAAO,mBAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACvG,IAAW,kBAAkB,CAAC,GAAW,IAAI,IAAI,CAAC,mBAAmB,GAAG,GAAG,CAAC,CAAC,CAAC;IAC9E,uCAAuC;IACvC,IAAW,kBAAkB,KAAa,OAAO,mBAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACvG,IAAW,kBAAkB,CAAC,GAAW,IAAI,IAAI,CAAC,mBAAmB,GAAG,GAAG,CAAC,CAAC,CAAC;IAC9E,sCAAsC;IACtC,IAAW,iBAAiB,KAAa,OAAO,mBAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACrG,IAAW,iBAAiB,CAAC,GAAW,IAAI,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC,CAAC,CAAC;IAC5E,gEAAgE;IAChE,IAAW,YAAY,KAA2B,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAC9E,IAAW,YAAY,CAAC,GAAyB,IAAI,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC,CAAC;IAChF,8DAA8D;IAC9D,IAAW,UAAU,KAA2B,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC1E,IAAW,UAAU,CAAC,GAAyB,IAAI,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC;IAC5E,qDAAqD;IACrD,IAAW,SAAS,KAAgB,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7D,IAAW,SAAS,CAAC,GAAc,IAAI,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC;IAC/D,8DAA8D;IAC9D,IAAW,KAAK,KAA2B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAChE,IAAW,KAAK,CAAC,GAAyB,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;IAElE;;;OAGG;IACI,oBAAoB,CACzB,KAAyB,EACzB,MAA2B,EAC3B,eAAmC,EACnC,kBAAsC,EACtC,iBAAqC,EACrC,iBAAqC,EACrC,YAAkC,EAClC,UAAgC;QAEhC,IAAI,CAAC,MAAM,GAAG,mBAAQ,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO,GAAG,mBAAQ,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC1D,IAAI,CAAC,gBAAgB,GAAG,mBAAQ,CAAC,kBAAkB,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,mBAAmB,GAAG,mBAAQ,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QAC9E,IAAI,CAAC,mBAAmB,GAAG,mBAAQ,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;QAC7E,IAAI,CAAC,kBAAkB,GAAG,mBAAQ,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAEhC,CAAC;IACD,iGAAiG;IAC1F,gCAAgC;QACrC,MAAM,KAAK,GAA8B;YACvC,SAAS,EAAE,2BAAY,CAAC,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC;YACjE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE;SAC5B,CAAC;QACF,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAC3B,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QAC5B,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAC5B,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9B,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS;YACrC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAChD,IAAI,IAAI,CAAC,mBAAmB,KAAK,SAAS;YACxC,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACtD,IAAI,IAAI,CAAC,mBAAmB,KAAK,SAAS;YACxC,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACtD,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS;YACvC,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACpD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS;YAClC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC;QACrD,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;YAChC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,gEAAgE;IACzD,KAAK;QACV,MAAM,KAAK,GAAG,IAAI,2BAA2B,CAAC,2BAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACnH,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;QAC1B,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;QAC5B,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC;QAC9C,KAAK,CAAC,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACpD,KAAK,CAAC,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACpD,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAClD,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC;QAClD,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gEAAgE;IACzD,MAAM,CAAC,MAAM,CAAC,MAAiC;QACpD,MAAM,MAAM,GAAG,IAAI,2BAA2B,CAAC,2BAAY,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACxH,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;QAC7B,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;QAC/B,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,eAAe,CAAC;QACjD,MAAM,CAAC,mBAAmB,GAAG,MAAM,CAAC,kBAAkB,CAAC;QACvD,MAAM,CAAC,mBAAmB,GAAG,MAAM,CAAC,kBAAkB,CAAC;QACvD,MAAM,CAAC,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC;QACrD,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,0BAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAChG,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,0BAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1F,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO;IACP,qEAAqE;IAC7D,MAAM,CAAC,iCAAiC,CAAC,CAAuB,EAAE,CAAuB;QAC/F,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC;YACrC,CAAC,GAAG,SAAS,CAAC;QAChB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC;YACrC,CAAC,GAAG,SAAS,CAAC;QAChB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS;YACpC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC5B,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS,CAAC;IAC5C,CAAC;IACM,MAAM,CAAC,cAAc,CAAC,KAA8C,EAAE,KAA8C;QACzH,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;YAC5C,OAAO,IAAI,CAAC;QACd,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/C,IAAI,mBAAQ,CAAC,sBAAsB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;mBACxD,mBAAQ,CAAC,sBAAsB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;mBAC3D,mBAAQ,CAAC,sBAAsB,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,eAAe,CAAC;mBAC7E,mBAAQ,CAAC,sBAAsB,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,CAAC;mBACnF,mBAAQ,CAAC,sBAAsB,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,CAAC;mBACjF,IAAI,CAAC,iCAAiC,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC;mBAC9E,IAAI,CAAC,iCAAiC,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC;mBAC1E,mBAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClH,IAAI,mBAAQ,CAAC,uBAAuB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;oBAC/F,OAAO,IAAI,CAAC;gBACd,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;oBACxD,OAAO,IAAI,CAAC;gBACd,8DAA8D;gBAC9D,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC/C,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAG,6DAA6D;oBAC3F,MAAM,GAAG,iCAAe,CAAC,UAAU,CAAC,gCAAgC,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;qBACxH,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;oBAChC,MAAM,GAAG,iCAAe,CAAC,UAAU,CAAC,gCAAgC,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC7H,MAAM,GAAG,iCAAe,CAAC,UAAU,CAAC,iCAAiC,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBAC7G,MAAM,GAAG,iCAAe,CAAC,UAAU,CAAC,iCAAiC,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBAC7G,OAAO,mBAAQ,CAAC,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,mBAAQ,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACxH,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,yEAAyE;IAClE,cAAc;QACnB,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,KAAK;YACZ,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACvB,8FAA8F;QAC9F,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;QACpC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;IAC9B,CAAC;CACF;AAlLD,kEAkLC;AAED;;;;;;GAMG;AACH,MAAa,oBAAqB,SAAQ,uBAAU;IAClC,kBAAkB,GAAG,oBAAoB,CAAC;IAClD,QAAQ,CAA8B;IAC9C,0CAA0C;IAC1C,YAAoB,UAAuC,EAAE,UAA0B;QACrF,KAAK,CAAC,UAAU,CAAC,CAAC;QAClB,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;IAC7B,CAAC;IACD,sFAAsF;IACtE,yBAAyB,CAAC,OAAwB;QAChE,IAAI,MAAM,GAAG,OAAO,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,SAAS,KAAK,MAAM,EAAE,0EAA0E;YAClG,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;QAC/D,OAAO,MAAM,CAAC;IAChB,CAAC;IACD;;;;OAIG;IACI,MAAM,CAAC,MAAM,CAAC,OAAgE;QACnF,IAAI,WAAW,CAAC;QAChB,IAAI,OAAO,YAAY,2BAA2B,EAAE,CAAC;YACnD,WAAW,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,2BAA2B,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,oBAAoB,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IACzD,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,aAAa,CAAC,OAAoC;QAC9D,MAAM,UAAU,GAAG,6BAAc,CAAC,qCAAqC,CAAC,OAAO,CAAC,CAAC;QACjF,IAAI,UAAU;YACZ,OAAO,IAAI,oBAAoB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACvD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,uEAAuE;IAChE,yBAAyB;QAC9B,OAAO,2BAAY,CAAC,2BAA2B,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC3E,CAAC;IAED;;;OAGG;IACI,MAAM;QACX,OAAO,IAAI,CAAC,QAAQ,CAAC,gCAAgC,EAAE,CAAC;IAC1D,CAAC;IACD,sFAAsF;IAC/E,UAAU;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,gCAAgC,EAAE,CAAC;IAC1D,CAAC;IAED,iCAAiC;IACjC,IAAW,OAAO,KAAkC,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE3E;;;OAGG;IACI,cAAc;QACnB,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;IACjC,CAAC;IACD;;OAEG;IACI,mBAAmB,CAAC,SAAoB;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAChE,IAAI,OAAO,EAAE,CAAC;YACZ,SAAS,CAAC,2BAA2B,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC/D,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY;gBAC5B,SAAS,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAC9D,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU;gBAC1B,SAAS,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IACD;;;;;;OAMG;IACa,qBAAqB,CAAC,OAAgB,EAAE,QAA6C;QACnG,OAAO,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACnE,CAAC;IACD,0BAA0B;IACV,KAAK;QACnB,OAAO,IAAI,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;IACnF,CAAC;IAEe,aAAa,CAAC,KAAoB;QAChD,IAAI,KAAK,YAAY,oBAAoB,EAAE,CAAC;YAC1C,OAAO,2BAA2B,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnF,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,0DAA0D;IACnD,mBAAmB,CAAC,KAAoB,IAAa,OAAO,KAAK,YAAY,oBAAoB,CAAC,CAAC,CAAC;CAE5G;AA1GD,oDA0GC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Bspline\n */\n\nimport { BSplineCurveOps } from \"../bspline/BSplineCurveOps\";\nimport { Clipper } from \"../clipping/ClipUtils\";\nimport { AnnounceNumberNumberCurvePrimitive, CurvePrimitive } from \"../curve/CurvePrimitive\";\nimport { GeometryQuery } from \"../curve/GeometryQuery\";\nimport { ProxyCurve } from \"../curve/ProxyCurve\";\nimport { Geometry } from \"../Geometry\";\nimport { GeometryHandler } from \"../geometry3d/GeometryHandler\";\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\nimport { Point3dArray } from \"../geometry3d/PointHelpers\";\nimport { Transform } from \"../geometry3d/Transform\";\nimport { XYZProps } from \"../geometry3d/XYZProps\";\nimport { BSplineCurve3d } from \"./BSplineCurve\";\n\n/**\n * fitPoints and end condition data for [[InterpolationCurve3d]]\n * * This is a \"json compatible\" version of [[InterpolationCurve3dOptions]]\n * @public\n */\nexport interface InterpolationCurve3dProps {\n /** The order of the computed B-spline curve (one more than its degree). */\n order?: number;\n /** Whether the B-spline construction should be periodic. Default is `false`. */\n closed?: boolean;\n /** If closed and no knots, compute chord length knots (1) or uniform knots (0, default). Chord length knots give best fit. */\n isChordLenKnots?: number;\n /** If !closed but first and last fitPoints are equal, pivot computed start/end tangent(s) so that they are colinear (1) or leave them be (0, default). */\n isColinearTangents?: number;\n /** If !closed and start/endTangent is defined, set its magnitude to the first/last fit point chord length (1) or to the magnitude of the Bessel tangent (0, default). Bessel gives best fit. */\n isChordLenTangents?: number;\n /** If !closed and start/endTangent is `undefined`, compute it using the natural end condition (1) or Bessel (0, default). Bessel gives best fit. */\n isNaturalTangents?: number;\n /** Optional start tangent, pointing into curve. Magnitude is ignored. */\n startTangent?: XYZProps;\n /** Optional end tangent, pointing into curve. Magnitude is ignored. */\n endTangent?: XYZProps;\n /** Points that the curve must pass through. */\n fitPoints: XYZProps[];\n /** Optional parameters for curve fitting, one per fit point. If `undefined`, knots are computed. */\n knots?: number[];\n}\n\n/**\n * fitPoints and end condition data for [[InterpolationCurve3d]]\n * * This is a \"typed object\" version of the serializer-friendly [[InterpolationCurve3dProps]]\n * * Typical use cases rarely require all parameters, so the constructor does not itemize them as parameters.\n * @public\n */\nexport class InterpolationCurve3dOptions {\n /**\n * Constructor.\n * @param fitPoints points to CAPTURE\n * @param knots array to CAPTURE\n */\n public constructor(fitPoints?: Point3d[], knots?: number[]) {\n this._fitPoints = fitPoints ? fitPoints : [];\n this._knots = knots;\n }\n\n private _order?: number;\n private _closed?: boolean;\n private _isChordLenKnots?: number;\n private _isColinearTangents?: number;\n private _isChordLenTangents?: number;\n private _isNaturalTangents?: number;\n private _startTangent?: Vector3d;\n private _endTangent?: Vector3d;\n private _fitPoints: Point3d[];\n private _knots?: number[];\n\n /** `order` as property */\n public get order(): number { return Geometry.resolveNumber(this._order, 4); }\n public set order(val: number) { this._order = val; }\n /** `closed` as property */\n public get closed(): boolean { return Geometry.resolveValue(this._closed, false); }\n public set closed(val: boolean) { this._closed = val; }\n /** `isChordLenKnots` as property */\n public get isChordLenKnots(): number { return Geometry.resolveNumber(this._isChordLenKnots, 0); }\n public set isChordLenKnots(val: number) { this._isChordLenKnots = val; }\n /** `isColinearTangents` as property */\n public get isColinearTangents(): number { return Geometry.resolveNumber(this._isColinearTangents, 0); }\n public set isColinearTangents(val: number) { this._isColinearTangents = val; }\n /** `isChordLenTangents` as property */\n public get isChordLenTangents(): number { return Geometry.resolveNumber(this._isChordLenTangents, 0); }\n public set isChordLenTangents(val: number) { this._isChordLenTangents = val; }\n /** `isNaturalTangents` as property */\n public get isNaturalTangents(): number { return Geometry.resolveNumber(this._isNaturalTangents, 0); }\n public set isNaturalTangents(val: number) { this._isNaturalTangents = val; }\n /** access POSSIBLY UNDEFINED start tangent. Setter CAPTURES. */\n public get startTangent(): Vector3d | undefined { return this._startTangent; }\n public set startTangent(val: Vector3d | undefined) { this._startTangent = val; }\n /** access POSSIBLY UNDEFINED end tangent. Setter CAPTURES. */\n public get endTangent(): Vector3d | undefined { return this._endTangent; }\n public set endTangent(val: Vector3d | undefined) { this._endTangent = val; }\n /** access POINTER TO fit points. Setter CAPTURES. */\n public get fitPoints(): Point3d[] { return this._fitPoints; }\n public set fitPoints(val: Point3d[]) { this._fitPoints = val; }\n /** access POSSIBLY UNDEFINED knots array. Setter CAPTURES. */\n public get knots(): number[] | undefined { return this._knots; }\n public set knots(val: number[] | undefined) { this._knots = val; }\n\n /** One step setup of properties not named in constructor.\n * * CAPTURE pointers to tangents.\n * * OPTIONALLY downgrade \"0\" values to undefined.\n */\n public captureOptionalProps(\n order: number | undefined,\n closed: boolean | undefined,\n isChordLenKnots: number | undefined,\n isColinearTangents: number | undefined,\n isChordLenTangent: number | undefined,\n isNaturalTangents: number | undefined,\n startTangent: Vector3d | undefined,\n endTangent: Vector3d | undefined,\n ) {\n this._order = Geometry.resolveToUndefined(order, 0);\n this._closed = Geometry.resolveToUndefined(closed, false);\n this._isChordLenKnots = Geometry.resolveToUndefined(isChordLenKnots, 0);\n this._isColinearTangents = Geometry.resolveToUndefined(isColinearTangents, 0);\n this._isChordLenTangents = Geometry.resolveToUndefined(isChordLenTangent, 0);\n this._isNaturalTangents = Geometry.resolveToUndefined(isNaturalTangents, 0);\n this._startTangent = startTangent;\n this._endTangent = endTangent;\n\n }\n /** Clone with strongly typed members reduced to simple json, with \"undefined\" members omitted */\n public cloneAsInterpolationCurve3dProps(): InterpolationCurve3dProps {\n const props: InterpolationCurve3dProps = {\n fitPoints: Point3dArray.cloneDeepJSONNumberArrays(this.fitPoints),\n knots: this._knots?.slice(),\n };\n if (this._order !== undefined)\n props.order = this._order;\n if (this._closed !== undefined)\n props.closed = this._closed;\n if (this._isChordLenKnots !== undefined)\n props.isChordLenKnots = this._isChordLenKnots;\n if (this._isColinearTangents !== undefined)\n props.isColinearTangents = this._isColinearTangents;\n if (this._isChordLenTangents !== undefined)\n props.isChordLenTangents = this._isChordLenTangents;\n if (this._isNaturalTangents !== undefined)\n props.isNaturalTangents = this._isNaturalTangents;\n if (this._startTangent !== undefined)\n props.startTangent = this._startTangent?.toArray();\n if (this._endTangent !== undefined)\n props.endTangent = this._endTangent?.toArray();\n return props;\n }\n /** Clone with strongly typed members reduced to simple json. */\n public clone(): InterpolationCurve3dOptions {\n const clone = new InterpolationCurve3dOptions(Point3dArray.clonePoint3dArray(this.fitPoints), this.knots?.slice());\n clone._order = this.order;\n clone._closed = this.closed;\n clone._isChordLenKnots = this.isChordLenKnots;\n clone._isColinearTangents = this.isColinearTangents;\n clone._isChordLenTangents = this.isChordLenTangents;\n clone._isNaturalTangents = this.isNaturalTangents;\n clone._startTangent = this._startTangent?.clone();\n clone._endTangent = this._endTangent?.clone();\n return clone;\n }\n\n /** Clone with strongly typed members reduced to simple json. */\n public static create(source: InterpolationCurve3dProps): InterpolationCurve3dOptions {\n const result = new InterpolationCurve3dOptions(Point3dArray.clonePoint3dArray(source.fitPoints), source.knots?.slice());\n result._order = source.order;\n result._closed = source.closed;\n result._isChordLenKnots = source.isChordLenKnots;\n result._isColinearTangents = source.isColinearTangents;\n result._isChordLenTangents = source.isChordLenTangents;\n result._isNaturalTangents = source.isNaturalTangents;\n result._startTangent = source.startTangent ? Vector3d.fromJSON(source.startTangent) : undefined;\n result._endTangent = source.endTangent ? Vector3d.fromJSON(source.endTangent) : undefined;\n return result;\n }\n // ugh.\n // vector equality test with awkward rule that 000 matches undefined.\n private static areAlmostEqualAllow000AsUndefined(a: Vector3d | undefined, b: Vector3d | undefined): boolean {\n if (a !== undefined && a.maxAbs() === 0)\n a = undefined;\n if (b !== undefined && b.maxAbs() === 0)\n b = undefined;\n if (a !== undefined && b !== undefined)\n return a.isAlmostEqual(b);\n return a === undefined && b === undefined;\n }\n public static areAlmostEqual(dataA: InterpolationCurve3dOptions | undefined, dataB: InterpolationCurve3dOptions | undefined): boolean {\n if (dataA === undefined && dataB === undefined)\n return true;\n if (dataA !== undefined && dataB !== undefined) {\n if (Geometry.areEqualAllowUndefined(dataA.order, dataB.order)\n && Geometry.areEqualAllowUndefined(dataA.closed, dataB.closed)\n && Geometry.areEqualAllowUndefined(dataA.isChordLenKnots, dataB.isChordLenKnots)\n && Geometry.areEqualAllowUndefined(dataA.isColinearTangents, dataB.isColinearTangents)\n && Geometry.areEqualAllowUndefined(dataA.isNaturalTangents, dataB.isNaturalTangents)\n && this.areAlmostEqualAllow000AsUndefined(dataA.startTangent, dataB.startTangent)\n && this.areAlmostEqualAllow000AsUndefined(dataA.endTangent, dataB.endTangent)\n && Geometry.almostEqualArrays(dataA.fitPoints, dataB.fitPoints, (a: Point3d, b: Point3d) => a.isAlmostEqual(b))) {\n if (Geometry.almostEqualNumberArrays(dataA.knots, dataB.knots, (a: number, b: number) => a === b))\n return true;\n if (dataA.knots === undefined && dataB.knots === undefined)\n return true;\n /* alas .. need to allow tricky mismatch of end replication */\n let knotsA = dataA.knots, knotsB = dataB.knots;\n if (dataA.knots === undefined) // construct undefined knots to compare against defined knots\n knotsA = BSplineCurveOps.C2CubicFit.constructFitParametersFromPoints(dataA.fitPoints, dataA.isChordLenKnots, dataA.closed);\n else if (dataB.knots === undefined)\n knotsB = BSplineCurveOps.C2CubicFit.constructFitParametersFromPoints(dataB.fitPoints, dataB.isChordLenKnots, dataB.closed);\n knotsA = BSplineCurveOps.C2CubicFit.convertCubicKnotVectorToFitParams(knotsA, dataA.fitPoints.length, false);\n knotsB = BSplineCurveOps.C2CubicFit.convertCubicKnotVectorToFitParams(knotsB, dataB.fitPoints.length, false);\n return Geometry.almostEqualNumberArrays(knotsA, knotsB, (a: number, b: number) => Geometry.isAlmostEqualNumber(a, b));\n }\n }\n return false;\n }\n /** reverse the order or sense of all start-to-end related properties. */\n public reverseInPlace() {\n this.fitPoints.reverse();\n if (this.knots)\n this.knots.reverse();\n // Swap pointers to tangents. They don't need to be negated because they point into the curve.\n const oldStart = this._startTangent;\n this._startTangent = this.endTangent;\n this._endTangent = oldStart;\n }\n}\n\n/**\n * Interpolating curve.\n * * Derive from [[ProxyCurve]]\n * * Use a [[BSplineCurve3d]] as the proxy\n * *\n * @public\n */\nexport class InterpolationCurve3d extends ProxyCurve {\n public readonly curvePrimitiveType = \"interpolationCurve\";\n private _options: InterpolationCurve3dOptions;\n /** CAPTURE properties and proxy curve. */\n private constructor(properties: InterpolationCurve3dOptions, proxyCurve: CurvePrimitive) {\n super(proxyCurve);\n this._options = properties;\n }\n /** Second step of double dispatch: call `handler.handleInterpolationCurve3d(this)` */\n public override dispatchToGeometryHandler(handler: GeometryHandler): any {\n let result = handler.handleInterpolationCurve3d(this);\n if (undefined === result) // if handler doesn't specialize on interpolation curves, default to proxy\n result = this._proxyCurve.dispatchToGeometryHandler(handler);\n return result;\n }\n /**\n * Create an [[InterpolationCurve3d]] based on points, knots, and other properties in the [[InterpolationCurve3dProps]] or [[InterpolationCurve3dOptions]].\n * * This saves a COPY OF the options or props.\n * * Use createCapture () if the options or props can be used without copy\n */\n public static create(options: InterpolationCurve3dOptions | InterpolationCurve3dProps): InterpolationCurve3d | undefined {\n let optionsCopy;\n if (options instanceof InterpolationCurve3dOptions) {\n optionsCopy = options.clone();\n } else {\n optionsCopy = InterpolationCurve3dOptions.create(options);\n }\n return InterpolationCurve3d.createCapture(optionsCopy);\n }\n /**\n * Create an [[InterpolationCurve3d]]\n * * The options object is captured into the new curve object (not copied)\n */\n public static createCapture(options: InterpolationCurve3dOptions): InterpolationCurve3d | undefined {\n const proxyCurve = BSplineCurve3d.createFromInterpolationCurve3dOptions(options);\n if (proxyCurve)\n return new InterpolationCurve3d(options, proxyCurve);\n return undefined;\n }\n /** Return a (copy of) the defining points, packed as a Float64Array */\n public copyFitPointsFloat64Array(): Float64Array {\n return Point3dArray.cloneXYZPropsAsFloat64Array(this._options.fitPoints);\n }\n\n /**\n * Return json key-value pairs for for this [[InterpolationCurve3d]].\n * @returns\n */\n public toJSON(): any {\n return this._options.cloneAsInterpolationCurve3dProps();\n }\n /** Clone the [[InterpolationCurve3dProps]] object in this [[InterpolationCurve3d]] */\n public cloneProps(): InterpolationCurve3dProps {\n return this._options.cloneAsInterpolationCurve3dProps();\n }\n\n /** return the options pointer */\n public get options(): InterpolationCurve3dOptions { return this._options; }\n\n /**\n * Reverse the curve direction.\n * * This updates both the defining properties and the proxy bspline.\n */\n public reverseInPlace(): void {\n this._proxyCurve.reverseInPlace();\n this._options.reverseInPlace();\n }\n /**\n * Transform this [[InterpolationCurve3d]] and its defining data in place\n */\n public tryTransformInPlace(transform: Transform): boolean {\n const proxyOk = this._proxyCurve.tryTransformInPlace(transform);\n if (proxyOk) {\n transform.multiplyPoint3dArrayInPlace(this._options.fitPoints);\n if (this._options.startTangent)\n transform.multiplyVectorInPlace(this._options.startTangent);\n if (this._options.endTangent)\n transform.multiplyVectorInPlace(this._options.endTangent);\n }\n return proxyOk;\n }\n /**\n * Find intervals of this CurvePrimitive that are interior to a clipper.\n * * This implementation simply passes the call to the proxy curve.\n * @param clipper clip structure (e.g. clip planes).\n * @param announce (optional) function to be called announcing fractional intervals of the input curve.\n * @returns true if any \"in\" segments are announced.\n */\n public override announceClipIntervals(clipper: Clipper, announce?: AnnounceNumberNumberCurvePrimitive): boolean {\n return this._proxyCurve.announceClipIntervals(clipper, announce);\n }\n /** Return a deep clone */\n public override clone(): InterpolationCurve3d {\n return new InterpolationCurve3d(this._options.clone(), this._proxyCurve.clone());\n }\n\n public override isAlmostEqual(other: GeometryQuery): boolean {\n if (other instanceof InterpolationCurve3d) {\n return InterpolationCurve3dOptions.areAlmostEqual(this._options, other._options);\n }\n return false;\n }\n\n /** Test if `other` is also an [[InterpolationCurve3d]] */\n public isSameGeometryClass(other: GeometryQuery): boolean { return other instanceof InterpolationCurve3d; }\n\n}\n"]}
1
+ {"version":3,"file":"InterpolationCurve3d.js","sourceRoot":"","sources":["../../../src/bspline/InterpolationCurve3d.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Bspline\n */\n\nimport { BSplineCurveOps } from \"../bspline/BSplineCurveOps\";\nimport { Clipper } from \"../clipping/ClipUtils\";\nimport { AnnounceNumberNumberCurvePrimitive, CurvePrimitive } from \"../curve/CurvePrimitive\";\nimport { GeometryQuery } from \"../curve/GeometryQuery\";\nimport { ProxyCurve } from \"../curve/ProxyCurve\";\nimport { Geometry } from \"../Geometry\";\nimport { GeometryHandler } from \"../geometry3d/GeometryHandler\";\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\nimport { Point3dArray } from \"../geometry3d/PointHelpers\";\nimport { Transform } from \"../geometry3d/Transform\";\nimport { XYZProps } from \"../geometry3d/XYZProps\";\nimport { BSplineCurve3d } from \"./BSplineCurve\";\n\n/**\n * fitPoints and end condition data for [[InterpolationCurve3d]]\n * * This is a \"json compatible\" version of [[InterpolationCurve3dOptions]]\n * @public\n */\nexport interface InterpolationCurve3dProps {\n /** The order of the computed B-spline curve (one more than its degree). */\n order?: number;\n /** Whether the B-spline construction should be periodic. Default is `false`. */\n closed?: boolean;\n /** If closed and no knots, compute chord length knots (1) or uniform knots (0, default). Chord length knots give best fit. */\n isChordLenKnots?: number;\n /** If !closed but first and last fitPoints are equal, pivot computed start/end tangent(s) so that they are colinear (1) or leave them be (0, default). */\n isColinearTangents?: number;\n /** If !closed and start/endTangent is defined, set its magnitude to the first/last fit point chord length (1) or to the magnitude of the Bessel tangent (0, default). Bessel gives best fit. */\n isChordLenTangents?: number;\n /** If !closed and start/endTangent is `undefined`, compute it using the natural end condition (1) or Bessel (0, default). Bessel gives best fit. */\n isNaturalTangents?: number;\n /** Optional start tangent, pointing into curve. Magnitude is ignored. */\n startTangent?: XYZProps;\n /** Optional end tangent, pointing into curve. Magnitude is ignored. */\n endTangent?: XYZProps;\n /** Points that the curve must pass through. */\n fitPoints: XYZProps[];\n /** Optional parameters for curve fitting, one per fit point. If `undefined`, knots are computed. */\n knots?: number[];\n}\n\n/**\n * fitPoints and end condition data for [[InterpolationCurve3d]]\n * * This is a \"typed object\" version of the serializer-friendly [[InterpolationCurve3dProps]]\n * * Typical use cases rarely require all parameters, so the constructor does not itemize them as parameters.\n * @public\n */\nexport class InterpolationCurve3dOptions {\n /**\n * Constructor.\n * @param fitPoints points to CAPTURE\n * @param knots array to CAPTURE\n */\n public constructor(fitPoints?: Point3d[], knots?: number[]) {\n this._fitPoints = fitPoints ? fitPoints : [];\n this._knots = knots;\n }\n\n private _order?: number;\n private _closed?: boolean;\n private _isChordLenKnots?: number;\n private _isColinearTangents?: number;\n private _isChordLenTangents?: number;\n private _isNaturalTangents?: number;\n private _startTangent?: Vector3d;\n private _endTangent?: Vector3d;\n private _fitPoints: Point3d[];\n private _knots?: number[];\n\n /** `order` as property */\n public get order(): number { return Geometry.resolveNumber(this._order, 4); }\n public set order(val: number) { this._order = val; }\n /** `closed` as property */\n public get closed(): boolean { return Geometry.resolveValue(this._closed, false); }\n public set closed(val: boolean) { this._closed = val; }\n /** `isChordLenKnots` as property */\n public get isChordLenKnots(): number { return Geometry.resolveNumber(this._isChordLenKnots, 0); }\n public set isChordLenKnots(val: number) { this._isChordLenKnots = val; }\n /** `isColinearTangents` as property */\n public get isColinearTangents(): number { return Geometry.resolveNumber(this._isColinearTangents, 0); }\n public set isColinearTangents(val: number) { this._isColinearTangents = val; }\n /** `isChordLenTangents` as property */\n public get isChordLenTangents(): number { return Geometry.resolveNumber(this._isChordLenTangents, 0); }\n public set isChordLenTangents(val: number) { this._isChordLenTangents = val; }\n /** `isNaturalTangents` as property */\n public get isNaturalTangents(): number { return Geometry.resolveNumber(this._isNaturalTangents, 0); }\n public set isNaturalTangents(val: number) { this._isNaturalTangents = val; }\n /** access POSSIBLY UNDEFINED start tangent. Setter CAPTURES. */\n public get startTangent(): Vector3d | undefined { return this._startTangent; }\n public set startTangent(val: Vector3d | undefined) { this._startTangent = val; }\n /** access POSSIBLY UNDEFINED end tangent. Setter CAPTURES. */\n public get endTangent(): Vector3d | undefined { return this._endTangent; }\n public set endTangent(val: Vector3d | undefined) { this._endTangent = val; }\n /** access POINTER TO fit points. Setter CAPTURES. */\n public get fitPoints(): Point3d[] { return this._fitPoints; }\n public set fitPoints(val: Point3d[]) { this._fitPoints = val; }\n /** access POSSIBLY UNDEFINED knots array. Setter CAPTURES. */\n public get knots(): number[] | undefined { return this._knots; }\n public set knots(val: number[] | undefined) { this._knots = val; }\n\n /** One step setup of properties not named in constructor.\n * * CAPTURE pointers to tangents.\n * * OPTIONALLY downgrade \"0\" values to undefined.\n */\n public captureOptionalProps(\n order: number | undefined,\n closed: boolean | undefined,\n isChordLenKnots: number | undefined,\n isColinearTangents: number | undefined,\n isChordLenTangent: number | undefined,\n isNaturalTangents: number | undefined,\n startTangent: Vector3d | undefined,\n endTangent: Vector3d | undefined,\n ) {\n this._order = Geometry.resolveToUndefined(order, 0);\n this._closed = Geometry.resolveToUndefined(closed, false);\n this._isChordLenKnots = Geometry.resolveToUndefined(isChordLenKnots, 0);\n this._isColinearTangents = Geometry.resolveToUndefined(isColinearTangents, 0);\n this._isChordLenTangents = Geometry.resolveToUndefined(isChordLenTangent, 0);\n this._isNaturalTangents = Geometry.resolveToUndefined(isNaturalTangents, 0);\n this._startTangent = startTangent;\n this._endTangent = endTangent;\n\n }\n /** Clone with strongly typed members reduced to simple json, with \"undefined\" members omitted */\n public cloneAsInterpolationCurve3dProps(): InterpolationCurve3dProps {\n const props: InterpolationCurve3dProps = {\n fitPoints: Point3dArray.cloneDeepJSONNumberArrays(this.fitPoints),\n knots: this._knots?.slice(),\n };\n if (this._order !== undefined)\n props.order = this._order;\n if (this._closed !== undefined)\n props.closed = this._closed;\n if (this._isChordLenKnots !== undefined)\n props.isChordLenKnots = this._isChordLenKnots;\n if (this._isColinearTangents !== undefined)\n props.isColinearTangents = this._isColinearTangents;\n if (this._isChordLenTangents !== undefined)\n props.isChordLenTangents = this._isChordLenTangents;\n if (this._isNaturalTangents !== undefined)\n props.isNaturalTangents = this._isNaturalTangents;\n if (this._startTangent !== undefined)\n props.startTangent = this._startTangent?.toArray();\n if (this._endTangent !== undefined)\n props.endTangent = this._endTangent?.toArray();\n return props;\n }\n /** Clone with strongly typed members reduced to simple json. */\n public clone(): InterpolationCurve3dOptions {\n const clone = new InterpolationCurve3dOptions(Point3dArray.clonePoint3dArray(this.fitPoints), this.knots?.slice());\n clone._order = this.order;\n clone._closed = this.closed;\n clone._isChordLenKnots = this.isChordLenKnots;\n clone._isColinearTangents = this.isColinearTangents;\n clone._isChordLenTangents = this.isChordLenTangents;\n clone._isNaturalTangents = this.isNaturalTangents;\n clone._startTangent = this._startTangent?.clone();\n clone._endTangent = this._endTangent?.clone();\n return clone;\n }\n\n /** Clone with strongly typed members reduced to simple json. */\n public static create(source: InterpolationCurve3dProps): InterpolationCurve3dOptions {\n const result = new InterpolationCurve3dOptions(Point3dArray.clonePoint3dArray(source.fitPoints), source.knots?.slice());\n result._order = source.order;\n result._closed = source.closed;\n result._isChordLenKnots = source.isChordLenKnots;\n result._isColinearTangents = source.isColinearTangents;\n result._isChordLenTangents = source.isChordLenTangents;\n result._isNaturalTangents = source.isNaturalTangents;\n result._startTangent = source.startTangent ? Vector3d.fromJSON(source.startTangent) : undefined;\n result._endTangent = source.endTangent ? Vector3d.fromJSON(source.endTangent) : undefined;\n return result;\n }\n // ugh.\n // vector equality test with awkward rule that 000 matches undefined.\n private static areAlmostEqualAllow000AsUndefined(a: Vector3d | undefined, b: Vector3d | undefined): boolean {\n if (a !== undefined && a.maxAbs() === 0)\n a = undefined;\n if (b !== undefined && b.maxAbs() === 0)\n b = undefined;\n if (a !== undefined && b !== undefined)\n return a.isAlmostEqual(b);\n return a === undefined && b === undefined;\n }\n public static areAlmostEqual(dataA: InterpolationCurve3dOptions | undefined, dataB: InterpolationCurve3dOptions | undefined): boolean {\n if (dataA === undefined && dataB === undefined)\n return true;\n if (dataA !== undefined && dataB !== undefined) {\n if (Geometry.areEqualAllowUndefined(dataA.order, dataB.order)\n && Geometry.areEqualAllowUndefined(dataA.closed, dataB.closed)\n && Geometry.areEqualAllowUndefined(dataA.isChordLenKnots, dataB.isChordLenKnots)\n && Geometry.areEqualAllowUndefined(dataA.isColinearTangents, dataB.isColinearTangents)\n && Geometry.areEqualAllowUndefined(dataA.isNaturalTangents, dataB.isNaturalTangents)\n && this.areAlmostEqualAllow000AsUndefined(dataA.startTangent, dataB.startTangent)\n && this.areAlmostEqualAllow000AsUndefined(dataA.endTangent, dataB.endTangent)\n && Geometry.almostEqualArrays(dataA.fitPoints, dataB.fitPoints, (a: Point3d, b: Point3d) => a.isAlmostEqual(b))) {\n if (Geometry.almostEqualNumberArrays(dataA.knots, dataB.knots, (a: number, b: number) => a === b))\n return true;\n if (dataA.knots === undefined && dataB.knots === undefined)\n return true;\n /* alas .. need to allow tricky mismatch of end replication */\n let knotsA = dataA.knots, knotsB = dataB.knots;\n if (dataA.knots === undefined) // construct undefined knots to compare against defined knots\n knotsA = BSplineCurveOps.C2CubicFit.constructFitParametersFromPoints(dataA.fitPoints, dataA.isChordLenKnots, dataA.closed);\n else if (dataB.knots === undefined)\n knotsB = BSplineCurveOps.C2CubicFit.constructFitParametersFromPoints(dataB.fitPoints, dataB.isChordLenKnots, dataB.closed);\n knotsA = BSplineCurveOps.C2CubicFit.convertCubicKnotVectorToFitParams(knotsA, dataA.fitPoints.length, false);\n knotsB = BSplineCurveOps.C2CubicFit.convertCubicKnotVectorToFitParams(knotsB, dataB.fitPoints.length, false);\n return Geometry.almostEqualNumberArrays(knotsA, knotsB, (a: number, b: number) => Geometry.isAlmostEqualNumber(a, b));\n }\n }\n return false;\n }\n /** reverse the order or sense of all start-to-end related properties. */\n public reverseInPlace() {\n this.fitPoints.reverse();\n if (this.knots)\n this.knots.reverse();\n // Swap pointers to tangents. They don't need to be negated because they point into the curve.\n const oldStart = this._startTangent;\n this._startTangent = this.endTangent;\n this._endTangent = oldStart;\n }\n}\n\n/**\n * Interpolating curve.\n * * Derive from [[ProxyCurve]]\n * * Use a [[BSplineCurve3d]] as the proxy\n * *\n * @public\n */\nexport class InterpolationCurve3d extends ProxyCurve {\n public readonly curvePrimitiveType = \"interpolationCurve\";\n private _options: InterpolationCurve3dOptions;\n /** CAPTURE properties and proxy curve. */\n private constructor(properties: InterpolationCurve3dOptions, proxyCurve: CurvePrimitive) {\n super(proxyCurve);\n this._options = properties;\n }\n /** Second step of double dispatch: call `handler.handleInterpolationCurve3d(this)` */\n public override dispatchToGeometryHandler(handler: GeometryHandler): any {\n let result = handler.handleInterpolationCurve3d(this);\n if (undefined === result) // if handler doesn't specialize on interpolation curves, default to proxy\n result = this._proxyCurve.dispatchToGeometryHandler(handler);\n return result;\n }\n /**\n * Create an [[InterpolationCurve3d]] based on points, knots, and other properties in the [[InterpolationCurve3dProps]] or [[InterpolationCurve3dOptions]].\n * * This saves a COPY OF the options or props.\n * * Use createCapture () if the options or props can be used without copy\n */\n public static create(options: InterpolationCurve3dOptions | InterpolationCurve3dProps): InterpolationCurve3d | undefined {\n let optionsCopy;\n if (options instanceof InterpolationCurve3dOptions) {\n optionsCopy = options.clone();\n } else {\n optionsCopy = InterpolationCurve3dOptions.create(options);\n }\n return InterpolationCurve3d.createCapture(optionsCopy);\n }\n /**\n * Create an [[InterpolationCurve3d]]\n * * The options object is captured into the new curve object (not copied)\n */\n public static createCapture(options: InterpolationCurve3dOptions): InterpolationCurve3d | undefined {\n const proxyCurve = BSplineCurve3d.createFromInterpolationCurve3dOptions(options);\n if (proxyCurve)\n return new InterpolationCurve3d(options, proxyCurve);\n return undefined;\n }\n /** Return the (pointer to) the proxy B-spline curve. */\n public override get proxyCurve(): BSplineCurve3d {\n return this._proxyCurve as BSplineCurve3d;\n }\n /** Return a (copy of) the defining points, packed as a Float64Array */\n public copyFitPointsFloat64Array(): Float64Array {\n return Point3dArray.cloneXYZPropsAsFloat64Array(this._options.fitPoints);\n }\n\n /**\n * Return json key-value pairs for for this [[InterpolationCurve3d]].\n * @returns\n */\n public toJSON(): any {\n return this._options.cloneAsInterpolationCurve3dProps();\n }\n /** Clone the [[InterpolationCurve3dProps]] object in this [[InterpolationCurve3d]] */\n public cloneProps(): InterpolationCurve3dProps {\n return this._options.cloneAsInterpolationCurve3dProps();\n }\n\n /** return the options pointer */\n public get options(): InterpolationCurve3dOptions { return this._options; }\n\n /**\n * Reverse the curve direction.\n * * This updates both the defining properties and the proxy bspline.\n */\n public reverseInPlace(): void {\n this._proxyCurve.reverseInPlace();\n this._options.reverseInPlace();\n }\n /**\n * Transform this [[InterpolationCurve3d]] and its defining data in place\n */\n public tryTransformInPlace(transform: Transform): boolean {\n const proxyOk = this._proxyCurve.tryTransformInPlace(transform);\n if (proxyOk) {\n transform.multiplyPoint3dArrayInPlace(this._options.fitPoints);\n if (this._options.startTangent)\n transform.multiplyVectorInPlace(this._options.startTangent);\n if (this._options.endTangent)\n transform.multiplyVectorInPlace(this._options.endTangent);\n }\n return proxyOk;\n }\n /**\n * Find intervals of this CurvePrimitive that are interior to a clipper.\n * * This implementation simply passes the call to the proxy curve.\n * @param clipper clip structure (e.g. clip planes).\n * @param announce (optional) function to be called announcing fractional intervals of the input curve.\n * @returns true if any \"in\" segments are announced.\n */\n public override announceClipIntervals(clipper: Clipper, announce?: AnnounceNumberNumberCurvePrimitive): boolean {\n return this._proxyCurve.announceClipIntervals(clipper, announce);\n }\n /** Return a deep clone */\n public override clone(): InterpolationCurve3d {\n return new InterpolationCurve3d(this._options.clone(), this._proxyCurve.clone());\n }\n /** Return a transformed clone. */\n public override cloneTransformed(transform: Transform): InterpolationCurve3d | undefined {\n return super.cloneTransformed(transform) as InterpolationCurve3d | undefined;\n }\n\n public override isAlmostEqual(other: GeometryQuery): boolean {\n if (other instanceof InterpolationCurve3d) {\n return InterpolationCurve3dOptions.areAlmostEqual(this._options, other._options);\n }\n return false;\n }\n\n /** Test if `other` is also an [[InterpolationCurve3d]] */\n public isSameGeometryClass(other: GeometryQuery): boolean { return other instanceof InterpolationCurve3d; }\n\n}\n"]}
@@ -98,6 +98,8 @@ export declare abstract class CurveCollection extends GeometryQuery {
98
98
  closestTangent(spacePoint: Point3d, options?: TangentOptions): CurveLocationDetail | undefined;
99
99
  /** Reverse the collection's data so that each child curve's fractional stroking moves in the opposite direction. */
100
100
  reverseInPlace(): void;
101
+ /** Call [[reverseInPlace]] and return the instance. */
102
+ reverse(): this;
101
103
  /**
102
104
  * Return the max gap between adjacent primitives in Path and Loop collections.
103
105
  * * In a Path, gaps are computed between consecutive primitives.
@@ -1 +1 @@
1
- {"version":3,"file":"CurveCollection.d.ts","sourceRoot":"","sources":["../../../src/curve/CurveCollection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CurveCollection.d.ts","sourceRoot":"","sources":["../../../src/curve/CurveCollection.ts"],"names":[],"mappings":"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"}
@@ -156,6 +156,11 @@ class CurveCollection extends GeometryQuery_1.GeometryQuery {
156
156
  for (const curve of this.children)
157
157
  curve.reverseInPlace();
158
158
  }
159
+ /** Call [[reverseInPlace]] and return the instance. */
160
+ reverse() {
161
+ this.reverseInPlace();
162
+ return this;
163
+ }
159
164
  /**
160
165
  * Return the max gap between adjacent primitives in Path and Loop collections.
161
166
  * * In a Path, gaps are computed between consecutive primitives.