@itwin/core-geometry 4.1.0-dev.70 → 4.1.0-dev.71

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 +6 -1
  2. package/lib/cjs/clipping/AlternatingConvexClipTree.d.ts +15 -17
  3. package/lib/cjs/clipping/AlternatingConvexClipTree.d.ts.map +1 -1
  4. package/lib/cjs/clipping/AlternatingConvexClipTree.js +24 -20
  5. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  6. package/lib/cjs/clipping/BooleanClipFactory.d.ts +28 -28
  7. package/lib/cjs/clipping/BooleanClipFactory.d.ts.map +1 -1
  8. package/lib/cjs/clipping/BooleanClipFactory.js +28 -28
  9. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  10. package/lib/cjs/clipping/BooleanClipNode.d.ts +11 -11
  11. package/lib/cjs/clipping/BooleanClipNode.d.ts.map +1 -1
  12. package/lib/cjs/clipping/BooleanClipNode.js +11 -11
  13. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  14. package/lib/cjs/clipping/ClipPlane.d.ts +73 -76
  15. package/lib/cjs/clipping/ClipPlane.d.ts.map +1 -1
  16. package/lib/cjs/clipping/ClipPlane.js +105 -86
  17. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  18. package/lib/cjs/clipping/ClipPrimitive.d.ts +78 -47
  19. package/lib/cjs/clipping/ClipPrimitive.d.ts.map +1 -1
  20. package/lib/cjs/clipping/ClipPrimitive.js +110 -54
  21. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  22. package/lib/cjs/clipping/ClipUtils.d.ts +54 -44
  23. package/lib/cjs/clipping/ClipUtils.d.ts.map +1 -1
  24. package/lib/cjs/clipping/ClipUtils.js +33 -29
  25. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  26. package/lib/cjs/clipping/ClipVector.d.ts +39 -25
  27. package/lib/cjs/clipping/ClipVector.d.ts.map +1 -1
  28. package/lib/cjs/clipping/ClipVector.js +35 -23
  29. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  30. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts +61 -38
  31. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  32. package/lib/cjs/clipping/ConvexClipPlaneSet.js +64 -41
  33. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  34. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts +49 -30
  35. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
  36. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js +50 -30
  37. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  38. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.d.ts +2 -2
  39. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.d.ts.map +1 -1
  40. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js +2 -2
  41. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  42. package/lib/cjs/curve/CurvePrimitive.d.ts +4 -2
  43. package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
  44. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  45. package/lib/cjs/curve/LineSegment3d.d.ts.map +1 -1
  46. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  47. package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
  48. package/lib/cjs/curve/LineString3d.js.map +1 -1
  49. package/lib/esm/clipping/AlternatingConvexClipTree.d.ts +15 -17
  50. package/lib/esm/clipping/AlternatingConvexClipTree.d.ts.map +1 -1
  51. package/lib/esm/clipping/AlternatingConvexClipTree.js +24 -20
  52. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  53. package/lib/esm/clipping/BooleanClipFactory.d.ts +28 -28
  54. package/lib/esm/clipping/BooleanClipFactory.d.ts.map +1 -1
  55. package/lib/esm/clipping/BooleanClipFactory.js +28 -28
  56. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  57. package/lib/esm/clipping/BooleanClipNode.d.ts +11 -11
  58. package/lib/esm/clipping/BooleanClipNode.d.ts.map +1 -1
  59. package/lib/esm/clipping/BooleanClipNode.js +11 -11
  60. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  61. package/lib/esm/clipping/ClipPlane.d.ts +73 -76
  62. package/lib/esm/clipping/ClipPlane.d.ts.map +1 -1
  63. package/lib/esm/clipping/ClipPlane.js +105 -86
  64. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  65. package/lib/esm/clipping/ClipPrimitive.d.ts +78 -47
  66. package/lib/esm/clipping/ClipPrimitive.d.ts.map +1 -1
  67. package/lib/esm/clipping/ClipPrimitive.js +110 -54
  68. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  69. package/lib/esm/clipping/ClipUtils.d.ts +54 -44
  70. package/lib/esm/clipping/ClipUtils.d.ts.map +1 -1
  71. package/lib/esm/clipping/ClipUtils.js +33 -29
  72. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  73. package/lib/esm/clipping/ClipVector.d.ts +39 -25
  74. package/lib/esm/clipping/ClipVector.d.ts.map +1 -1
  75. package/lib/esm/clipping/ClipVector.js +35 -23
  76. package/lib/esm/clipping/ClipVector.js.map +1 -1
  77. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts +61 -38
  78. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  79. package/lib/esm/clipping/ConvexClipPlaneSet.js +64 -41
  80. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  81. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts +49 -30
  82. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
  83. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js +50 -30
  84. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  85. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.d.ts +2 -2
  86. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.d.ts.map +1 -1
  87. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js +2 -2
  88. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  89. package/lib/esm/curve/CurvePrimitive.d.ts +4 -2
  90. package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
  91. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  92. package/lib/esm/curve/LineSegment3d.d.ts.map +1 -1
  93. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  94. package/lib/esm/curve/LineString3d.d.ts.map +1 -1
  95. package/lib/esm/curve/LineString3d.js.map +1 -1
  96. package/package.json +3 -3
@@ -20,11 +20,13 @@ import { ConvexClipPlaneSet } from "./ConvexClipPlaneSet";
20
20
  */
21
21
  class UnionOfConvexClipPlaneSets {
22
22
  /** (property accessor) Return the (reference to the) array of `ConvexClipPlaneSet` */
23
- get convexSets() { return this._convexSets; }
23
+ get convexSets() {
24
+ return this._convexSets;
25
+ }
24
26
  constructor() {
25
27
  this._convexSets = [];
26
28
  }
27
- /** Return an array with the `toJSON` form of each `ConvexClipPlaneSet` */
29
+ /** Return an array with the `toJSON` form of each `ConvexClipPlaneSet` */
28
30
  toJSON() {
29
31
  const val = [];
30
32
  for (const convex of this._convexSets)
@@ -50,8 +52,9 @@ class UnionOfConvexClipPlaneSets {
50
52
  return new UnionOfConvexClipPlaneSets();
51
53
  }
52
54
  /**
53
- * Return true if all member convex sets are almostEqual to corresponding members of other. This includes identical order in array.
54
- * @param other clip plane to compare
55
+ * Return true if all member convex sets are almostEqual to corresponding members of other. This includes
56
+ * identical order in array.
57
+ * @param other clip plane to compare.
55
58
  */
56
59
  isAlmostEqual(other) {
57
60
  if (this._convexSets.length !== other._convexSets.length)
@@ -61,14 +64,14 @@ class UnionOfConvexClipPlaneSets {
61
64
  return false;
62
65
  return true;
63
66
  }
64
- /** Create a `UnionOfConvexClipPlaneSets` with given `ConvexClipPlaneSet` members */
67
+ /** Create a `UnionOfConvexClipPlaneSets` with given `ConvexClipPlaneSet` members. */
65
68
  static createConvexSets(convexSets, result) {
66
69
  result = result ? result : new UnionOfConvexClipPlaneSets();
67
70
  for (const set of convexSets)
68
71
  result._convexSets.push(set);
69
72
  return result;
70
73
  }
71
- /** return a deep copy. */
74
+ /** Return a deep copy. */
72
75
  clone(result) {
73
76
  result = result ? result : new UnionOfConvexClipPlaneSets();
74
77
  result._convexSets.length = 0;
@@ -76,7 +79,8 @@ class UnionOfConvexClipPlaneSets {
76
79
  result._convexSets.push(convexSet.clone());
77
80
  return result;
78
81
  }
79
- /** Append `toAdd` to the array of `ConvexClipPlaneSet`.
82
+ /**
83
+ * Append `toAdd` to the array of `ConvexClipPlaneSet`.
80
84
  * * undefined toAdd is ignored.
81
85
  */
82
86
  addConvexSet(toAdd) {
@@ -87,7 +91,7 @@ class UnionOfConvexClipPlaneSets {
87
91
  * Test if there is any intersection with a ray defined by origin and direction.
88
92
  * * Optionally record the range (null or otherwise) in caller-allocated result.
89
93
  * * If the ray is unbounded inside the clip, result can contain positive or negative
90
- * "Geometry.largeCoordinateResult" values
94
+ * "Geometry.largeCoordinateResult" values.
91
95
  * * If no result is provide, there are no object allocations.
92
96
  * @param maximalRange optional Range1d to receive parameters along the ray.
93
97
  */
@@ -108,7 +112,10 @@ class UnionOfConvexClipPlaneSets {
108
112
  }
109
113
  return !maximalRange.isNull;
110
114
  }
111
- /** Return true if true is returned for any contained convex set returns true for `convexSet.isPointInside (point, tolerance)` */
115
+ /**
116
+ * Return true if true is returned for any contained convex set returns true for
117
+ * `convexSet.isPointInside (point, tolerance)`.
118
+ */
112
119
  isPointInside(point) {
113
120
  for (const convexSet of this._convexSets) {
114
121
  if (convexSet.isPointInside(point)) {
@@ -117,7 +124,10 @@ class UnionOfConvexClipPlaneSets {
117
124
  }
118
125
  return false;
119
126
  }
120
- /** Return true if true is returned for any contained convex set returns true for `convexSet.isPointOnOrInside (point, tolerance)` */
127
+ /**
128
+ * Return true if true is returned for any contained convex set returns true for
129
+ * `convexSet.isPointOnOrInside (point, tolerance)`.
130
+ */
121
131
  isPointOnOrInside(point, tolerance = Geometry.smallMetricDistance) {
122
132
  for (const convexSet of this._convexSets) {
123
133
  if (convexSet.isPointOnOrInside(point, tolerance))
@@ -125,7 +135,10 @@ class UnionOfConvexClipPlaneSets {
125
135
  }
126
136
  return false;
127
137
  }
128
- /** Return true if true is returned for any contained convex set returns true for `convexSet.isSphereOnOrInside (point, tolerance)` */
138
+ /**
139
+ * Return true if true is returned for any contained convex set returns true for
140
+ * `convexSet.isSphereOnOrInside (point, tolerance)`.
141
+ */
129
142
  isSphereInside(point, radius) {
130
143
  for (const convexSet of this._convexSets) {
131
144
  if (convexSet.isSphereInside(point, radius))
@@ -133,7 +146,7 @@ class UnionOfConvexClipPlaneSets {
133
146
  }
134
147
  return false;
135
148
  }
136
- /** test if any part of a line segment is within the volume */
149
+ /** Test if any part of a line segment is within the volume. */
137
150
  isAnyPointInOrOnFromSegment(segment) {
138
151
  for (const convexSet of this._convexSets) {
139
152
  if (convexSet.announceClippedSegmentIntervals(0.0, 1.0, segment.point0Ref, segment.point1Ref))
@@ -143,19 +156,19 @@ class UnionOfConvexClipPlaneSets {
143
156
  }
144
157
  // Intervals must be Segment1d array, as there may be multiple intervals along segment that pass through set regions,
145
158
  // and so splitting the intervals into segments aids in better organization
146
- /** Returns the fractions of the segment that pass through the set region, as 1 dimensional pieces */
159
+ /** Returns the fractions of the segment that pass through the set region, as 1 dimensional pieces. */
147
160
  appendIntervalsFromSegment(segment, intervals) {
148
161
  for (const convexSet of this._convexSets) {
149
162
  convexSet.announceClippedSegmentIntervals(0.0, 1.0, segment.point0Ref, segment.point1Ref, (fraction0, fraction1) => intervals.push(Segment1d.create(fraction0, fraction1)));
150
163
  }
151
164
  }
152
- /** apply `transform` to all the ConvexClipPlaneSet's */
165
+ /** Apply `transform` to all the ConvexClipPlaneSet's. */
153
166
  transformInPlace(transform) {
154
167
  for (const convexSet of this._convexSets) {
155
168
  convexSet.transformInPlace(transform);
156
169
  }
157
170
  }
158
- /** Returns 1, 2, or 3 based on whether point is strongly inside, ambiguous, or strongly outside respectively */
171
+ /** Returns 1, 2, or 3 based on whether point is strongly inside, ambiguous, or strongly outside respectively. */
159
172
  classifyPointContainment(points, onIsOutside) {
160
173
  for (const convexSet of this._convexSets) {
161
174
  const thisStatus = convexSet.classifyPointContainment(points, onIsOutside);
@@ -164,7 +177,10 @@ class UnionOfConvexClipPlaneSets {
164
177
  }
165
178
  return ClipPlaneContainment.StronglyOutside;
166
179
  }
167
- /** Clip a polygon using this ClipPlaneSet, returning new polygon boundaries. Note that each polygon may lie next to the previous, or be disconnected. */
180
+ /**
181
+ * Clip a polygon using this ClipPlaneSet, returning new polygon boundaries. Note that each polygon may lie
182
+ * next to the previous, or be disconnected.
183
+ */
168
184
  polygonClip(input, output) {
169
185
  output.length = 0;
170
186
  if (Array.isArray(input))
@@ -178,13 +194,13 @@ class UnionOfConvexClipPlaneSets {
178
194
  }
179
195
  }
180
196
  /**
181
- * * announce clipSegment() for each convexSet in this ClipPlaneSet.
182
- * * all clipPlaneSets are inspected
197
+ * Announce clipSegment() for each convexSet in this ClipPlaneSet.
198
+ * * all clipPlaneSets are inspected.
183
199
  * * announced intervals are for each individual clipPlaneSet -- adjacent intervals are not consolidated.
184
200
  * @param f0 active interval start.
185
- * @param f1 active interval end
186
- * @param pointA line segment start
187
- * @param pointB line segment end
201
+ * @param f1 active interval end.
202
+ * @param pointA line segment start.
203
+ * @param pointB line segment end.
188
204
  * @param announce function to announce interval.
189
205
  * @returns Return true if any announcements are made.
190
206
  */
@@ -196,7 +212,8 @@ class UnionOfConvexClipPlaneSets {
196
212
  }
197
213
  return numAnnounce > 0;
198
214
  }
199
- /** Find parts of an arc that are inside any member clipper.
215
+ /**
216
+ * Find parts of an arc that are inside any member clipper.
200
217
  * Announce each with `announce(startFraction, endFraction, this)`
201
218
  */
202
219
  announceClippedArcIntervals(arc, announce) {
@@ -212,12 +229,12 @@ class UnionOfConvexClipPlaneSets {
212
229
  }
213
230
  /**
214
231
  * Collect the output from computePlanePlanePlaneIntersections in all the contained convex sets.
215
- *
216
232
  * @param transform (optional) transform to apply to the points.
217
233
  * @param points (optional) array to which computed points are to be added.
218
- * @param range (optional) range to be extended by the computed points
234
+ * @param range (optional) range to be extended by the computed points.
219
235
  * @param transform (optional) transform to apply to the accepted points.
220
- * @param testContainment if true, test each point to see if it is within the convex set. (Send false if confident that the convex set is rectilinear set such as a slab. Send true if chiseled corners are possible)
236
+ * @param testContainment if true, test each point to see if it is within the convex set (send false if confident
237
+ * that the convex set is rectilinear set such as a slab. Send true if chiseled corners are possible).
221
238
  * @returns number of points.
222
239
  */
223
240
  computePlanePlanePlaneIntersectionsInAllConvexSets(points, rangeToExtend, transform, testContainment = true) {
@@ -231,8 +248,9 @@ class UnionOfConvexClipPlaneSets {
231
248
  * Multiply all ClipPlanes DPoint4d by matrix.
232
249
  * @param matrix matrix to apply.
233
250
  * @param invert if true, use in verse of the matrix.
234
- * @param transpose if true, use the transpose of the matrix (or inverse, per invert parameter)
235
- * * Note that if matrixA is applied to all of space, the matrix to send to this method to get a corresponding effect on the plane is the inverse transpose of matrixA
251
+ * @param transpose if true, use the transpose of the matrix (or inverse, per invert parameter).
252
+ * * Note that if matrixA is applied to all of space, the matrix to send to this method to get a corresponding effect
253
+ * on the plane is the inverse transpose of matrixA.
236
254
  * * Callers that will apply the same matrix to many planes should pre-invert the matrix for efficiency.
237
255
  * * Both params default to true to get the full effect of transforming space.
238
256
  * @param matrix matrix to apply
@@ -269,7 +287,7 @@ class UnionOfConvexClipPlaneSets {
269
287
  this._convexSets.push(convexSet);
270
288
  }
271
289
  }
272
- /** move convex sets from source.*/
290
+ /** Move convex sets from source.*/
273
291
  takeConvexSets(source) {
274
292
  let convexSet;
275
293
  while ((undefined !== (convexSet = source._convexSets.pop()))) {
@@ -279,8 +297,10 @@ class UnionOfConvexClipPlaneSets {
279
297
  /**
280
298
  *
281
299
  * @param xyz input polygon. This is not changed.
282
- * @param insideFragments Array to receive "inside" fragments. Each fragment is a GrowableXYZArray grabbed from the cache. This is NOT cleared.
283
- * @param outsideFragments Array to receive "outside" fragments. Each fragment is a GrowableXYZArray grabbed from the cache. This is NOT cleared.
300
+ * @param insideFragments Array to receive "inside" fragments. Each fragment is a GrowableXYZArray grabbed from
301
+ * the cache. This is NOT cleared.
302
+ * @param outsideFragments Array to receive "outside" fragments. Each fragment is a GrowableXYZArray grabbed from
303
+ * the cache. This is NOT cleared.
284
304
  * @param arrayCache cache for reusable GrowableXYZArray.
285
305
  */
286
306
  appendPolygonClip(xyz, insideFragments, outsideFragments, arrayCache) {
@@ -1 +1 @@
1
- {"version":3,"file":"UnionOfConvexClipPlaneSets.js","sourceRoot":"","sources":["../../../src/clipping/UnionOfConvexClipPlaneSets.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAKH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,OAAO,EAAE,OAAO,EAAW,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGpD,OAAO,EAAW,oBAAoB,EAAE,aAAa,EAAkB,MAAM,aAAa,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAA2B,MAAM,sBAAsB,CAAC;AAOnF;;;;;GAKG;AACH,MAAa,0BAA0B;IAErC,uFAAuF;IACvF,IAAW,UAAU,KAA2B,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAE1E;QACE,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;IACxB,CAAC;IACD,2EAA2E;IACpE,MAAM;QACX,MAAM,GAAG,GAA8B,EAAE,CAAC;QAC1C,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,WAAW;YACnC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAE5B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,sEAAsE;IAC/D,MAAM,CAAC,QAAQ,CAAC,IAAiD,EAAE,MAAmC;QAC3G,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,0BAA0B,EAAE,CAAC;QAC5D,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YACtB,OAAO,MAAM,CAAC;QAEhB,KAAK,MAAM,QAAQ,IAAI,IAAI;YACzB,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEjE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,6DAA6D;IACtD,MAAM,CAAC,WAAW,CAAC,MAAmC;QAC3D,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;YAC9B,OAAO,MAAM,CAAC;SACf;QACD,OAAO,IAAI,0BAA0B,EAAE,CAAC;IAC1C,CAAC;IACD;;;OAGG;IACI,aAAa,CAAC,KAAiC;QACpD,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,KAAK,CAAC,WAAW,CAAC,MAAM;YACtD,OAAO,KAAK,CAAC;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE;YAC9C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBAC1D,OAAO,KAAK,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,oFAAoF;IAC7E,MAAM,CAAC,gBAAgB,CAAC,UAAgC,EAAE,MAAmC;QAClG,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,0BAA0B,EAAE,CAAC;QAC5D,KAAK,MAAM,GAAG,IAAI,UAAU;YAC1B,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/B,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,0BAA0B;IACnB,KAAK,CAAC,MAAmC;QAC9C,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,0BAA0B,EAAE,CAAC;QAC5D,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9B,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW;YACtC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7C,OAAO,MAAM,CAAC;IAChB,CAAC;IACD;;OAEG;IACI,YAAY,CAAC,KAAqC;QACvD,IAAI,KAAK;YACP,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IACD;;;;;;;OAOG;IACI,sBAAsB,CAAC,GAAU,EAAE,YAAsB;QAC9D,IAAI,YAAY,KAAK,SAAS,EAAE;YAC9B,6DAA6D;YAC7D,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;gBACvC,IAAI,QAAQ,CAAC,sBAAsB,CAAC,GAAG,CAAC;oBACtC,OAAO,IAAI,CAAC;aACf;YACD,OAAO,KAAK,CAAC;SACd;QACD,YAAY,CAAC,OAAO,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;QACpC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;YACvC,IAAI,QAAQ,CAAC,sBAAsB,CAAC,GAAG,EAAE,MAAM,CAAC;gBAC9C,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;SACpC;QACD,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,kIAAkI;IAC3H,aAAa,CAAC,KAAc;QACjC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE;YACxC,IAAI,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;gBAClC,OAAO,IAAI,CAAC;aACb;SACF;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,sIAAsI;IAC/H,iBAAiB,CAAC,KAAc,EAAE,YAAoB,QAAQ,CAAC,mBAAmB;QACvF,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE;YACxC,IAAI,SAAS,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC;gBAC/C,OAAO,IAAI,CAAC;SACf;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,uIAAuI;IAChI,cAAc,CAAC,KAAc,EAAE,MAAc;QAClD,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE;YACxC,IAAI,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC;gBACzC,OAAO,IAAI,CAAC;SACf;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,8DAA8D;IACvD,2BAA2B,CAAC,OAAsB;QACvD,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE;YACxC,IAAI,SAAS,CAAC,+BAA+B,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC;gBAC3F,OAAO,IAAI,CAAC;SACf;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,qHAAqH;IACrH,2EAA2E;IAC3E,qGAAqG;IAC9F,0BAA0B,CAAC,OAAsB,EAAE,SAAsB;QAC9E,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE;YACxC,SAAS,CAAC,+BAA+B,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,EACtF,CAAC,SAAiB,EAAE,SAAiB,EAAE,EAAE,CACvC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;SAC7D;IACH,CAAC;IACD,wDAAwD;IACjD,gBAAgB,CAAC,SAAoB;QAC1C,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE;YACxC,SAAS,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;SACvC;IACH,CAAC;IAED,gHAAgH;IACzG,wBAAwB,CAAC,MAAiB,EAAE,WAAoB;QACrE,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE;YACxC,MAAM,UAAU,GAAG,SAAS,CAAC,wBAAwB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAC3E,IAAI,UAAU,KAAK,oBAAoB,CAAC,eAAe;gBACrD,OAAO,UAAU,CAAC;SACrB;QACD,OAAO,oBAAoB,CAAC,eAAe,CAAC;IAC9C,CAAC;IAED,yJAAyJ;IAClJ,WAAW,CAAC,KAAmC,EAAE,MAA0B;QAChF,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAClB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACtB,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACpC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE;YACxC,MAAM,eAAe,GAAG,IAAI,gBAAgB,EAAE,CAAC;YAC/C,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;YACpD,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;gBAC9B,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SAChC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACI,+BAA+B,CAAC,EAAU,EAAE,EAAU,EAAE,MAAe,EAAE,MAAe,EAAE,QAAyD;QACxJ,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE;YACxC,IAAI,SAAS,CAAC,+BAA+B,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC;gBAC7E,WAAW,EAAE,CAAC;SACjB;QACD,OAAO,WAAW,GAAG,CAAC,CAAC;IACzB,CAAC;IAGD;;OAEG;IACI,2BAA2B,CAAC,GAAU,EAAE,QAA6C;QAC1F,MAAM,MAAM,GAAG,0BAA0B,CAAC,qBAAqB,CAAC;QAChE,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE;YACxC,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,MAAM,EAAE;gBACxC,SAAS,CAAC,yBAAyB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;aAClD;SACF;QACD,GAAG,CAAC,KAAK,CAAC,uCAAuC,CAAC,MAAM,CAAC,CAAC;QAC1D,OAAO,aAAa,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACtE,CAAC;IAED;;;;;;;;;OASG;IACI,kDAAkD,CAAC,MAA6B,EAAE,aAAkC,EAAE,SAAqB,EAAE,kBAA2B,IAAI;QACjL,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE;YACxC,CAAC,IAAI,SAAS,CAAC,mCAAmC,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;SACvG;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IACD;;;;;;;;;OASG;IACI,wBAAwB,CAAC,MAAgB,EAAE,SAAkB,IAAI,EAAE,YAAqB,IAAI;QACjG,IAAI,MAAM,EAAE,EAAG,+CAA+C;YAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;YACvC,IAAI,CAAC,OAAO;gBACV,OAAO,KAAK,CAAC;YACf,OAAO,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;SACjE;QACD,yCAAyC;QACzC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE;YACxC,SAAS,CAAC,wBAAwB,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;SAC9D;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,iEAAiE;IAC1D,YAAY,CAAC,SAAkB;QACpC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE;YACxC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;SACnC;IACH,CAAC;IACD,wEAAwE;IACjE,mBAAmB,CAAC,SAAkB,EAAE,IAAa,EAAE,KAAc;QAC1E,IAAI,IAAI,EAAE;YACR,MAAM,SAAS,GAAG,kBAAkB,CAAC,WAAW,EAAE,CAAC;YACnD,SAAS,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAClC;QACD,IAAI,KAAK,EAAE;YACT,MAAM,SAAS,GAAG,kBAAkB,CAAC,WAAW,EAAE,CAAC;YACnD,SAAS,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YACtD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAClC;IACH,CAAC;IACD,mCAAmC;IAC5B,cAAc,CAAC,MAAkC;QACtD,IAAI,SAAS,CAAC;QACd,OAAO,CAAC,SAAS,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE;YAC7D,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAClC;IACH,CAAC;IACD;;;;;;OAMG;IACI,iBAAiB,CACtB,GAAqB,EACrB,eAAmC,EACnC,gBAAoC,EACpC,UAAiC;QACjC,MAAM,eAAe,GAAG,gBAAgB,CAAC,MAAM,CAAC;QAChD,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC;QAC9C,IAAI,aAAa,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QAClD,IAAI,aAAa,GAAuB,EAAE,CAAC;QAC3C,IAAI,MAAM,CAAC;QACX,IAAI,KAAK,CAAC;QACV,0GAA0G;QAC1G,6HAA6H;QAC7H,kDAAkD;QAClD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE;YAChC,OAAO,SAAS,KAAK,CAAC,KAAK,GAAG,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE;gBAClD,CAAC,CAAC,iBAAiB,CAAC,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;gBACvE,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;aAC/B;YACD,MAAM,GAAG,aAAa,CAAC;YACvB,aAAa,GAAG,aAAa,CAAC,CAAE,oBAAoB;YACpD,aAAa,GAAG,MAAM,CAAC;SACxB;QACD,OAAO,SAAS,KAAK,CAAC,KAAK,GAAG,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE;YAClD,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC9B;QACD,IAAI,gBAAgB,CAAC,MAAM,KAAK,eAAe;YAC7C,aAAa,CAAC,uCAAuC,CAAC,eAAe,EAAE,cAAc,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;aACrG,IAAI,eAAe,CAAC,MAAM,KAAK,cAAc;YAChD,aAAa,CAAC,uCAAuC,CAAC,gBAAgB,EAAE,eAAe,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;IAC9G,CAAC;;AAvHc,gDAAqB,GAAG,IAAI,oBAAoB,EAAE,CAAC;SAnMvD,0BAA0B;AA6TvC;;;;;;;;;;;;;;EAcE","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 CartesianGeometry\r\n */\r\n\r\nimport { Arc3d } from \"../curve/Arc3d\";\r\nimport { AnnounceNumberNumberCurvePrimitive } from \"../curve/CurvePrimitive\";\r\nimport { LineSegment3d } from \"../curve/LineSegment3d\";\r\nimport { Geometry } from \"../Geometry\";\r\nimport { GrowableFloat64Array } from \"../geometry3d/GrowableFloat64Array\";\r\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\r\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Range1d, Range3d } from \"../geometry3d/Range\";\r\nimport { Ray3d } from \"../geometry3d/Ray3d\";\r\nimport { GrowableXYZArrayCache } from \"../geometry3d/ReusableObjectCache\";\r\nimport { Segment1d } from \"../geometry3d/Segment1d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { Matrix4d } from \"../geometry4d/Matrix4d\";\r\nimport { Clipper, ClipPlaneContainment, ClipUtilities, PolygonClipper } from \"./ClipUtils\";\r\nimport { ConvexClipPlaneSet, ConvexClipPlaneSetProps } from \"./ConvexClipPlaneSet\";\r\n\r\n/** Wire format describing a [[UnionOfConvexClipPlaneSets]].\r\n * @public\r\n */\r\nexport type UnionOfConvexClipPlaneSetsProps = ConvexClipPlaneSetProps[];\r\n\r\n/**\r\n * A collection of ConvexClipPlaneSets.\r\n * * A point is \"in\" the clip plane set if it is \"in\" one or more of the ConvexClipPlaneSet\r\n * * Hence the boolean logic is that the ClipPlaneSet is a UNION of its constituents.\r\n * @public\r\n */\r\nexport class UnionOfConvexClipPlaneSets implements Clipper, PolygonClipper {\r\n private _convexSets: ConvexClipPlaneSet[];\r\n /** (property accessor) Return the (reference to the) array of `ConvexClipPlaneSet` */\r\n public get convexSets(): ConvexClipPlaneSet[] { return this._convexSets; }\r\n\r\n private constructor() {\r\n this._convexSets = [];\r\n }\r\n /** Return an array with the `toJSON` form of each `ConvexClipPlaneSet` */\r\n public toJSON(): UnionOfConvexClipPlaneSetsProps {\r\n const val: ConvexClipPlaneSetProps[] = [];\r\n for (const convex of this._convexSets)\r\n val.push(convex.toJSON());\r\n\r\n return val;\r\n }\r\n\r\n /** Convert json `UnionOfConvexClipPlaneSets`, using `setFromJSON`. */\r\n public static fromJSON(json: UnionOfConvexClipPlaneSetsProps | undefined, result?: UnionOfConvexClipPlaneSets): UnionOfConvexClipPlaneSets {\r\n result = result ? result : new UnionOfConvexClipPlaneSets();\r\n result._convexSets.length = 0;\r\n if (!Array.isArray(json))\r\n return result;\r\n\r\n for (const thisJson of json)\r\n result._convexSets.push(ConvexClipPlaneSet.fromJSON(thisJson));\r\n\r\n return result;\r\n }\r\n\r\n /** Create a `UnionOfConvexClipPlaneSets` with no members. */\r\n public static createEmpty(result?: UnionOfConvexClipPlaneSets): UnionOfConvexClipPlaneSets {\r\n if (result) {\r\n result._convexSets.length = 0;\r\n return result;\r\n }\r\n return new UnionOfConvexClipPlaneSets();\r\n }\r\n /**\r\n * Return true if all member convex sets are almostEqual to corresponding members of other. This includes identical order in array.\r\n * @param other clip plane to compare\r\n */\r\n public isAlmostEqual(other: UnionOfConvexClipPlaneSets): boolean {\r\n if (this._convexSets.length !== other._convexSets.length)\r\n return false;\r\n for (let i = 0; i < this._convexSets.length; i++)\r\n if (!this._convexSets[i].isAlmostEqual(other._convexSets[i]))\r\n return false;\r\n return true;\r\n }\r\n /** Create a `UnionOfConvexClipPlaneSets` with given `ConvexClipPlaneSet` members */\r\n public static createConvexSets(convexSets: ConvexClipPlaneSet[], result?: UnionOfConvexClipPlaneSets): UnionOfConvexClipPlaneSets {\r\n result = result ? result : new UnionOfConvexClipPlaneSets();\r\n for (const set of convexSets)\r\n result._convexSets.push(set);\r\n return result;\r\n }\r\n /** return a deep copy. */\r\n public clone(result?: UnionOfConvexClipPlaneSets): UnionOfConvexClipPlaneSets {\r\n result = result ? result : new UnionOfConvexClipPlaneSets();\r\n result._convexSets.length = 0;\r\n for (const convexSet of this._convexSets)\r\n result._convexSets.push(convexSet.clone());\r\n return result;\r\n }\r\n /** Append `toAdd` to the array of `ConvexClipPlaneSet`.\r\n * * undefined toAdd is ignored.\r\n */\r\n public addConvexSet(toAdd: ConvexClipPlaneSet | undefined) {\r\n if (toAdd)\r\n this._convexSets.push(toAdd);\r\n }\r\n /**\r\n * Test if there is any intersection with a ray defined by origin and direction.\r\n * * Optionally record the range (null or otherwise) in caller-allocated result.\r\n * * If the ray is unbounded inside the clip, result can contain positive or negative\r\n * \"Geometry.largeCoordinateResult\" values\r\n * * If no result is provide, there are no object allocations.\r\n * @param maximalRange optional Range1d to receive parameters along the ray.\r\n */\r\n public hasIntersectionWithRay(ray: Ray3d, maximalRange?: Range1d): boolean {\r\n if (maximalRange === undefined) {\r\n // if complete result is not requested, return after any hit.\r\n for (const planeSet of this._convexSets) {\r\n if (planeSet.hasIntersectionWithRay(ray))\r\n return true;\r\n }\r\n return false;\r\n }\r\n maximalRange.setNull();\r\n const rangeA = Range1d.createNull();\r\n for (const planeSet of this._convexSets) {\r\n if (planeSet.hasIntersectionWithRay(ray, rangeA))\r\n maximalRange.extendRange(rangeA);\r\n }\r\n return !maximalRange.isNull;\r\n }\r\n\r\n /** Return true if true is returned for any contained convex set returns true for `convexSet.isPointInside (point, tolerance)` */\r\n public isPointInside(point: Point3d): boolean {\r\n for (const convexSet of this._convexSets) {\r\n if (convexSet.isPointInside(point)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /** Return true if true is returned for any contained convex set returns true for `convexSet.isPointOnOrInside (point, tolerance)` */\r\n public isPointOnOrInside(point: Point3d, tolerance: number = Geometry.smallMetricDistance): boolean {\r\n for (const convexSet of this._convexSets) {\r\n if (convexSet.isPointOnOrInside(point, tolerance))\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /** Return true if true is returned for any contained convex set returns true for `convexSet.isSphereOnOrInside (point, tolerance)` */\r\n public isSphereInside(point: Point3d, radius: number) {\r\n for (const convexSet of this._convexSets) {\r\n if (convexSet.isSphereInside(point, radius))\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /** test if any part of a line segment is within the volume */\r\n public isAnyPointInOrOnFromSegment(segment: LineSegment3d): boolean {\r\n for (const convexSet of this._convexSets) {\r\n if (convexSet.announceClippedSegmentIntervals(0.0, 1.0, segment.point0Ref, segment.point1Ref))\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n // Intervals must be Segment1d array, as there may be multiple intervals along segment that pass through set regions,\r\n // and so splitting the intervals into segments aids in better organization\r\n /** Returns the fractions of the segment that pass through the set region, as 1 dimensional pieces */\r\n public appendIntervalsFromSegment(segment: LineSegment3d, intervals: Segment1d[]) {\r\n for (const convexSet of this._convexSets) {\r\n convexSet.announceClippedSegmentIntervals(0.0, 1.0, segment.point0Ref, segment.point1Ref,\r\n (fraction0: number, fraction1: number) =>\r\n intervals.push(Segment1d.create(fraction0, fraction1)));\r\n }\r\n }\r\n /** apply `transform` to all the ConvexClipPlaneSet's */\r\n public transformInPlace(transform: Transform) {\r\n for (const convexSet of this._convexSets) {\r\n convexSet.transformInPlace(transform);\r\n }\r\n }\r\n\r\n /** Returns 1, 2, or 3 based on whether point is strongly inside, ambiguous, or strongly outside respectively */\r\n public classifyPointContainment(points: Point3d[], onIsOutside: boolean): number {\r\n for (const convexSet of this._convexSets) {\r\n const thisStatus = convexSet.classifyPointContainment(points, onIsOutside);\r\n if (thisStatus !== ClipPlaneContainment.StronglyOutside)\r\n return thisStatus;\r\n }\r\n return ClipPlaneContainment.StronglyOutside;\r\n }\r\n\r\n /** Clip a polygon using this ClipPlaneSet, returning new polygon boundaries. Note that each polygon may lie next to the previous, or be disconnected. */\r\n public polygonClip(input: GrowableXYZArray | Point3d[], output: GrowableXYZArray[]) {\r\n output.length = 0;\r\n if (Array.isArray(input))\r\n input = GrowableXYZArray.create(input);\r\n const work = new GrowableXYZArray();\r\n for (const convexSet of this._convexSets) {\r\n const convexSetOutput = new GrowableXYZArray();\r\n convexSet.polygonClip(input, convexSetOutput, work);\r\n if (convexSetOutput.length !== 0)\r\n output.push(convexSetOutput);\r\n }\r\n }\r\n\r\n /**\r\n * * announce clipSegment() for each convexSet in this ClipPlaneSet.\r\n * * all clipPlaneSets are inspected\r\n * * announced intervals are for each individual clipPlaneSet -- adjacent intervals are not consolidated.\r\n * @param f0 active interval start.\r\n * @param f1 active interval end\r\n * @param pointA line segment start\r\n * @param pointB line segment end\r\n * @param announce function to announce interval.\r\n * @returns Return true if any announcements are made.\r\n */\r\n public announceClippedSegmentIntervals(f0: number, f1: number, pointA: Point3d, pointB: Point3d, announce?: (fraction0: number, fraction1: number) => void): boolean {\r\n let numAnnounce = 0;\r\n for (const convexSet of this._convexSets) {\r\n if (convexSet.announceClippedSegmentIntervals(f0, f1, pointA, pointB, announce))\r\n numAnnounce++;\r\n }\r\n return numAnnounce > 0;\r\n }\r\n\r\n private static _clipArcFractionArray = new GrowableFloat64Array();\r\n /** Find parts of an arc that are inside any member clipper.\r\n * Announce each with `announce(startFraction, endFraction, this)`\r\n */\r\n public announceClippedArcIntervals(arc: Arc3d, announce?: AnnounceNumberNumberCurvePrimitive): boolean {\r\n const breaks = UnionOfConvexClipPlaneSets._clipArcFractionArray;\r\n breaks.clear();\r\n for (const convexSet of this._convexSets) {\r\n for (const clipPlane of convexSet.planes) {\r\n clipPlane.appendIntersectionRadians(arc, breaks);\r\n }\r\n }\r\n arc.sweep.radiansArrayToPositivePeriodicFractions(breaks);\r\n return ClipUtilities.selectIntervals01(arc, breaks, this, announce);\r\n }\r\n\r\n /**\r\n * Collect the output from computePlanePlanePlaneIntersections in all the contained convex sets.\r\n *\r\n * @param transform (optional) transform to apply to the points.\r\n * @param points (optional) array to which computed points are to be added.\r\n * @param range (optional) range to be extended by the computed points\r\n * @param transform (optional) transform to apply to the accepted points.\r\n * @param testContainment if true, test each point to see if it is within the convex set. (Send false if confident that the convex set is rectilinear set such as a slab. Send true if chiseled corners are possible)\r\n * @returns number of points.\r\n */\r\n public computePlanePlanePlaneIntersectionsInAllConvexSets(points: Point3d[] | undefined, rangeToExtend: Range3d | undefined, transform?: Transform, testContainment: boolean = true): number {\r\n let n = 0;\r\n for (const convexSet of this._convexSets) {\r\n n += convexSet.computePlanePlanePlaneIntersections(points, rangeToExtend, transform, testContainment);\r\n }\r\n return n;\r\n }\r\n /**\r\n * Multiply all ClipPlanes DPoint4d by matrix.\r\n * @param matrix matrix to apply.\r\n * @param invert if true, use in verse of the matrix.\r\n * @param transpose if true, use the transpose of the matrix (or inverse, per invert parameter)\r\n * * Note that if matrixA is applied to all of space, the matrix to send to this method to get a corresponding effect on the plane is the inverse transpose of matrixA\r\n * * Callers that will apply the same matrix to many planes should pre-invert the matrix for efficiency.\r\n * * Both params default to true to get the full effect of transforming space.\r\n * @param matrix matrix to apply\r\n */\r\n public multiplyPlanesByMatrix4d(matrix: Matrix4d, invert: boolean = true, transpose: boolean = true): boolean {\r\n if (invert) { // form inverse once here, reuse for all planes\r\n const inverse = matrix.createInverse();\r\n if (!inverse)\r\n return false;\r\n return this.multiplyPlanesByMatrix4d(inverse, false, transpose);\r\n }\r\n // (no inversion -- no failures possible)\r\n for (const convexSet of this._convexSets) {\r\n convexSet.multiplyPlanesByMatrix4d(matrix, false, transpose);\r\n }\r\n return true;\r\n }\r\n /** Recursively call `setInvisible` on all member convex sets. */\r\n public setInvisible(invisible: boolean) {\r\n for (const convexSet of this._convexSets) {\r\n convexSet.setInvisible(invisible);\r\n }\r\n }\r\n /** add convex sets that accept points below `zLow` and above `zHigh` */\r\n public addOutsideZClipSets(invisible: boolean, zLow?: number, zHigh?: number) {\r\n if (zLow) {\r\n const convexSet = ConvexClipPlaneSet.createEmpty();\r\n convexSet.addZClipPlanes(invisible, zLow);\r\n this._convexSets.push(convexSet);\r\n }\r\n if (zHigh) {\r\n const convexSet = ConvexClipPlaneSet.createEmpty();\r\n convexSet.addZClipPlanes(invisible, undefined, zHigh);\r\n this._convexSets.push(convexSet);\r\n }\r\n }\r\n /** move convex sets from source.*/\r\n public takeConvexSets(source: UnionOfConvexClipPlaneSets) {\r\n let convexSet;\r\n while ((undefined !== (convexSet = source._convexSets.pop()))) {\r\n this._convexSets.push(convexSet);\r\n }\r\n }\r\n /**\r\n *\r\n * @param xyz input polygon. This is not changed.\r\n * @param insideFragments Array to receive \"inside\" fragments. Each fragment is a GrowableXYZArray grabbed from the cache. This is NOT cleared.\r\n * @param outsideFragments Array to receive \"outside\" fragments. Each fragment is a GrowableXYZArray grabbed from the cache. This is NOT cleared.\r\n * @param arrayCache cache for reusable GrowableXYZArray.\r\n */\r\n public appendPolygonClip(\r\n xyz: GrowableXYZArray,\r\n insideFragments: GrowableXYZArray[],\r\n outsideFragments: GrowableXYZArray[],\r\n arrayCache: GrowableXYZArrayCache): void {\r\n const oldOutsideCount = outsideFragments.length;\r\n const oldInsideCount = insideFragments.length;\r\n let carryForwardA = [arrayCache.grabAndFill(xyz)];\r\n let carryForwardB: GrowableXYZArray[] = [];\r\n let tempAB;\r\n let shard;\r\n // At each convex set, carryForwardA is all the fragments that have been outside all previous convex sets.\r\n // Clip each such fragment to the current set, sending the outside parts to carryForwardB, which will got to the next clipper\r\n // The final surviving carryForward really is out.\r\n for (const c of this._convexSets) {\r\n while (undefined !== (shard = carryForwardA.pop())) {\r\n c.appendPolygonClip(shard, insideFragments, carryForwardB, arrayCache);\r\n arrayCache.dropToCache(shard);\r\n }\r\n tempAB = carryForwardB;\r\n carryForwardB = carryForwardA; // and that is empty\r\n carryForwardA = tempAB;\r\n }\r\n while (undefined !== (shard = carryForwardA.pop())) {\r\n outsideFragments.push(shard);\r\n }\r\n if (outsideFragments.length === oldOutsideCount)\r\n ClipUtilities.restoreSingletonInPlaceOfMultipleShards(insideFragments, oldInsideCount, xyz, arrayCache);\r\n else if (insideFragments.length === oldInsideCount)\r\n ClipUtilities.restoreSingletonInPlaceOfMultipleShards(outsideFragments, oldOutsideCount, xyz, arrayCache);\r\n }\r\n}\r\n\r\n/* FUNCTIONS SKIPPED DUE TO BSPLINES, VU, OR NON-USAGE IN NATIVE CODE----------------------------------------------------------------\r\n\r\nInvolves vu: skipping for now...\r\n public fromSweptPolygon(points: Point3d[], directions: Vector3d[]): ClipPlaneSet;\r\n public parseConcavePolygonPlanes(...)\r\n\r\nUses bsplines... skipping for now:\r\n public appendIntervalsClipPlaneSetFromCurve();\r\n\r\nUses bsplines... skipping for now:\r\n public isAnyPointInOrOnFrom();\r\n\r\nSkipped fromSweptPolygon(...), which is overloaded function from first, due to presence of vu\r\n public fromSweptPolygon(points: Point3d[], directions: Vector3d[], shapes: Point3d[])\r\n*/\r\n"]}
1
+ {"version":3,"file":"UnionOfConvexClipPlaneSets.js","sourceRoot":"","sources":["../../../src/clipping/UnionOfConvexClipPlaneSets.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 CartesianGeometry\r\n */\r\n\r\nimport { Arc3d } from \"../curve/Arc3d\";\r\nimport { AnnounceNumberNumberCurvePrimitive } from \"../curve/CurvePrimitive\";\r\nimport { LineSegment3d } from \"../curve/LineSegment3d\";\r\nimport { Geometry } from \"../Geometry\";\r\nimport { GrowableFloat64Array } from \"../geometry3d/GrowableFloat64Array\";\r\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\r\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Range1d, Range3d } from \"../geometry3d/Range\";\r\nimport { Ray3d } from \"../geometry3d/Ray3d\";\r\nimport { GrowableXYZArrayCache } from \"../geometry3d/ReusableObjectCache\";\r\nimport { Segment1d } from \"../geometry3d/Segment1d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { Matrix4d } from \"../geometry4d/Matrix4d\";\r\nimport { Clipper, ClipPlaneContainment, ClipUtilities, PolygonClipper } from \"./ClipUtils\";\r\nimport { ConvexClipPlaneSet, ConvexClipPlaneSetProps } from \"./ConvexClipPlaneSet\";\r\n\r\n/**\r\n * Wire format describing a [[UnionOfConvexClipPlaneSets]].\r\n * @public\r\n */\r\nexport type UnionOfConvexClipPlaneSetsProps = ConvexClipPlaneSetProps[];\r\n\r\n/**\r\n * A collection of ConvexClipPlaneSets.\r\n * * A point is \"in\" the clip plane set if it is \"in\" one or more of the ConvexClipPlaneSet\r\n * * Hence the boolean logic is that the ClipPlaneSet is a UNION of its constituents.\r\n * @public\r\n */\r\nexport class UnionOfConvexClipPlaneSets implements Clipper, PolygonClipper {\r\n private _convexSets: ConvexClipPlaneSet[];\r\n /** (property accessor) Return the (reference to the) array of `ConvexClipPlaneSet` */\r\n public get convexSets(): ConvexClipPlaneSet[] {\r\n return this._convexSets;\r\n }\r\n private constructor() {\r\n this._convexSets = [];\r\n }\r\n /** Return an array with the `toJSON` form of each `ConvexClipPlaneSet` */\r\n public toJSON(): UnionOfConvexClipPlaneSetsProps {\r\n const val: ConvexClipPlaneSetProps[] = [];\r\n for (const convex of this._convexSets)\r\n val.push(convex.toJSON());\r\n return val;\r\n }\r\n /** Convert json `UnionOfConvexClipPlaneSets`, using `setFromJSON`. */\r\n public static fromJSON(\r\n json: UnionOfConvexClipPlaneSetsProps | undefined, result?: UnionOfConvexClipPlaneSets,\r\n ): UnionOfConvexClipPlaneSets {\r\n result = result ? result : new UnionOfConvexClipPlaneSets();\r\n result._convexSets.length = 0;\r\n if (!Array.isArray(json))\r\n return result;\r\n\r\n for (const thisJson of json)\r\n result._convexSets.push(ConvexClipPlaneSet.fromJSON(thisJson));\r\n return result;\r\n }\r\n /** Create a `UnionOfConvexClipPlaneSets` with no members. */\r\n public static createEmpty(result?: UnionOfConvexClipPlaneSets): UnionOfConvexClipPlaneSets {\r\n if (result) {\r\n result._convexSets.length = 0;\r\n return result;\r\n }\r\n return new UnionOfConvexClipPlaneSets();\r\n }\r\n /**\r\n * Return true if all member convex sets are almostEqual to corresponding members of other. This includes\r\n * identical order in array.\r\n * @param other clip plane to compare.\r\n */\r\n public isAlmostEqual(other: UnionOfConvexClipPlaneSets): boolean {\r\n if (this._convexSets.length !== other._convexSets.length)\r\n return false;\r\n for (let i = 0; i < this._convexSets.length; i++)\r\n if (!this._convexSets[i].isAlmostEqual(other._convexSets[i]))\r\n return false;\r\n return true;\r\n }\r\n /** Create a `UnionOfConvexClipPlaneSets` with given `ConvexClipPlaneSet` members. */\r\n public static createConvexSets(\r\n convexSets: ConvexClipPlaneSet[], result?: UnionOfConvexClipPlaneSets,\r\n ): UnionOfConvexClipPlaneSets {\r\n result = result ? result : new UnionOfConvexClipPlaneSets();\r\n for (const set of convexSets)\r\n result._convexSets.push(set);\r\n return result;\r\n }\r\n /** Return a deep copy. */\r\n public clone(result?: UnionOfConvexClipPlaneSets): UnionOfConvexClipPlaneSets {\r\n result = result ? result : new UnionOfConvexClipPlaneSets();\r\n result._convexSets.length = 0;\r\n for (const convexSet of this._convexSets)\r\n result._convexSets.push(convexSet.clone());\r\n return result;\r\n }\r\n /**\r\n * Append `toAdd` to the array of `ConvexClipPlaneSet`.\r\n * * undefined toAdd is ignored.\r\n */\r\n public addConvexSet(toAdd: ConvexClipPlaneSet | undefined) {\r\n if (toAdd)\r\n this._convexSets.push(toAdd);\r\n }\r\n /**\r\n * Test if there is any intersection with a ray defined by origin and direction.\r\n * * Optionally record the range (null or otherwise) in caller-allocated result.\r\n * * If the ray is unbounded inside the clip, result can contain positive or negative\r\n * \"Geometry.largeCoordinateResult\" values.\r\n * * If no result is provide, there are no object allocations.\r\n * @param maximalRange optional Range1d to receive parameters along the ray.\r\n */\r\n public hasIntersectionWithRay(ray: Ray3d, maximalRange?: Range1d): boolean {\r\n if (maximalRange === undefined) {\r\n // if complete result is not requested, return after any hit.\r\n for (const planeSet of this._convexSets) {\r\n if (planeSet.hasIntersectionWithRay(ray))\r\n return true;\r\n }\r\n return false;\r\n }\r\n maximalRange.setNull();\r\n const rangeA = Range1d.createNull();\r\n for (const planeSet of this._convexSets) {\r\n if (planeSet.hasIntersectionWithRay(ray, rangeA))\r\n maximalRange.extendRange(rangeA);\r\n }\r\n return !maximalRange.isNull;\r\n }\r\n /**\r\n * Return true if true is returned for any contained convex set returns true for\r\n * `convexSet.isPointInside (point, tolerance)`.\r\n */\r\n public isPointInside(point: Point3d): boolean {\r\n for (const convexSet of this._convexSets) {\r\n if (convexSet.isPointInside(point)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /**\r\n * Return true if true is returned for any contained convex set returns true for\r\n * `convexSet.isPointOnOrInside (point, tolerance)`.\r\n */\r\n public isPointOnOrInside(point: Point3d, tolerance: number = Geometry.smallMetricDistance): boolean {\r\n for (const convexSet of this._convexSets) {\r\n if (convexSet.isPointOnOrInside(point, tolerance))\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**\r\n * Return true if true is returned for any contained convex set returns true for\r\n * `convexSet.isSphereOnOrInside (point, tolerance)`.\r\n */\r\n public isSphereInside(point: Point3d, radius: number) {\r\n for (const convexSet of this._convexSets) {\r\n if (convexSet.isSphereInside(point, radius))\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** Test if any part of a line segment is within the volume. */\r\n public isAnyPointInOrOnFromSegment(segment: LineSegment3d): boolean {\r\n for (const convexSet of this._convexSets) {\r\n if (convexSet.announceClippedSegmentIntervals(0.0, 1.0, segment.point0Ref, segment.point1Ref))\r\n return true;\r\n }\r\n return false;\r\n }\r\n // Intervals must be Segment1d array, as there may be multiple intervals along segment that pass through set regions,\r\n // and so splitting the intervals into segments aids in better organization\r\n /** Returns the fractions of the segment that pass through the set region, as 1 dimensional pieces. */\r\n public appendIntervalsFromSegment(segment: LineSegment3d, intervals: Segment1d[]) {\r\n for (const convexSet of this._convexSets) {\r\n convexSet.announceClippedSegmentIntervals(0.0, 1.0, segment.point0Ref, segment.point1Ref,\r\n (fraction0: number, fraction1: number) =>\r\n intervals.push(Segment1d.create(fraction0, fraction1)));\r\n }\r\n }\r\n /** Apply `transform` to all the ConvexClipPlaneSet's. */\r\n public transformInPlace(transform: Transform) {\r\n for (const convexSet of this._convexSets) {\r\n convexSet.transformInPlace(transform);\r\n }\r\n }\r\n /** Returns 1, 2, or 3 based on whether point is strongly inside, ambiguous, or strongly outside respectively. */\r\n public classifyPointContainment(points: Point3d[], onIsOutside: boolean): number {\r\n for (const convexSet of this._convexSets) {\r\n const thisStatus = convexSet.classifyPointContainment(points, onIsOutside);\r\n if (thisStatus !== ClipPlaneContainment.StronglyOutside)\r\n return thisStatus;\r\n }\r\n return ClipPlaneContainment.StronglyOutside;\r\n }\r\n /**\r\n * Clip a polygon using this ClipPlaneSet, returning new polygon boundaries. Note that each polygon may lie\r\n * next to the previous, or be disconnected.\r\n */\r\n public polygonClip(input: GrowableXYZArray | Point3d[], output: GrowableXYZArray[]) {\r\n output.length = 0;\r\n if (Array.isArray(input))\r\n input = GrowableXYZArray.create(input);\r\n const work = new GrowableXYZArray();\r\n for (const convexSet of this._convexSets) {\r\n const convexSetOutput = new GrowableXYZArray();\r\n convexSet.polygonClip(input, convexSetOutput, work);\r\n if (convexSetOutput.length !== 0)\r\n output.push(convexSetOutput);\r\n }\r\n }\r\n /**\r\n * Announce clipSegment() for each convexSet in this ClipPlaneSet.\r\n * * all clipPlaneSets are inspected.\r\n * * announced intervals are for each individual clipPlaneSet -- adjacent intervals are not consolidated.\r\n * @param f0 active interval start.\r\n * @param f1 active interval end.\r\n * @param pointA line segment start.\r\n * @param pointB line segment end.\r\n * @param announce function to announce interval.\r\n * @returns Return true if any announcements are made.\r\n */\r\n public announceClippedSegmentIntervals(\r\n f0: number, f1: number, pointA: Point3d, pointB: Point3d, announce?: (fraction0: number, fraction1: number) => void,\r\n ): boolean {\r\n let numAnnounce = 0;\r\n for (const convexSet of this._convexSets) {\r\n if (convexSet.announceClippedSegmentIntervals(f0, f1, pointA, pointB, announce))\r\n numAnnounce++;\r\n }\r\n return numAnnounce > 0;\r\n }\r\n private static _clipArcFractionArray = new GrowableFloat64Array();\r\n /**\r\n * Find parts of an arc that are inside any member clipper.\r\n * Announce each with `announce(startFraction, endFraction, this)`\r\n */\r\n public announceClippedArcIntervals(arc: Arc3d, announce?: AnnounceNumberNumberCurvePrimitive): boolean {\r\n const breaks = UnionOfConvexClipPlaneSets._clipArcFractionArray;\r\n breaks.clear();\r\n for (const convexSet of this._convexSets) {\r\n for (const clipPlane of convexSet.planes) {\r\n clipPlane.appendIntersectionRadians(arc, breaks);\r\n }\r\n }\r\n arc.sweep.radiansArrayToPositivePeriodicFractions(breaks);\r\n return ClipUtilities.selectIntervals01(arc, breaks, this, announce);\r\n }\r\n /**\r\n * Collect the output from computePlanePlanePlaneIntersections in all the contained convex sets.\r\n * @param transform (optional) transform to apply to the points.\r\n * @param points (optional) array to which computed points are to be added.\r\n * @param range (optional) range to be extended by the computed points.\r\n * @param transform (optional) transform to apply to the accepted points.\r\n * @param testContainment if true, test each point to see if it is within the convex set (send false if confident\r\n * that the convex set is rectilinear set such as a slab. Send true if chiseled corners are possible).\r\n * @returns number of points.\r\n */\r\n public computePlanePlanePlaneIntersectionsInAllConvexSets(\r\n points: Point3d[] | undefined, rangeToExtend: Range3d | undefined, transform?: Transform, testContainment: boolean = true,\r\n ): number {\r\n let n = 0;\r\n for (const convexSet of this._convexSets) {\r\n n += convexSet.computePlanePlanePlaneIntersections(points, rangeToExtend, transform, testContainment);\r\n }\r\n return n;\r\n }\r\n /**\r\n * Multiply all ClipPlanes DPoint4d by matrix.\r\n * @param matrix matrix to apply.\r\n * @param invert if true, use in verse of the matrix.\r\n * @param transpose if true, use the transpose of the matrix (or inverse, per invert parameter).\r\n * * Note that if matrixA is applied to all of space, the matrix to send to this method to get a corresponding effect\r\n * on the plane is the inverse transpose of matrixA.\r\n * * Callers that will apply the same matrix to many planes should pre-invert the matrix for efficiency.\r\n * * Both params default to true to get the full effect of transforming space.\r\n * @param matrix matrix to apply\r\n */\r\n public multiplyPlanesByMatrix4d(matrix: Matrix4d, invert: boolean = true, transpose: boolean = true): boolean {\r\n if (invert) { // form inverse once here, reuse for all planes\r\n const inverse = matrix.createInverse();\r\n if (!inverse)\r\n return false;\r\n return this.multiplyPlanesByMatrix4d(inverse, false, transpose);\r\n }\r\n // (no inversion -- no failures possible)\r\n for (const convexSet of this._convexSets) {\r\n convexSet.multiplyPlanesByMatrix4d(matrix, false, transpose);\r\n }\r\n return true;\r\n }\r\n /** Recursively call `setInvisible` on all member convex sets. */\r\n public setInvisible(invisible: boolean) {\r\n for (const convexSet of this._convexSets) {\r\n convexSet.setInvisible(invisible);\r\n }\r\n }\r\n /** add convex sets that accept points below `zLow` and above `zHigh` */\r\n public addOutsideZClipSets(invisible: boolean, zLow?: number, zHigh?: number) {\r\n if (zLow) {\r\n const convexSet = ConvexClipPlaneSet.createEmpty();\r\n convexSet.addZClipPlanes(invisible, zLow);\r\n this._convexSets.push(convexSet);\r\n }\r\n if (zHigh) {\r\n const convexSet = ConvexClipPlaneSet.createEmpty();\r\n convexSet.addZClipPlanes(invisible, undefined, zHigh);\r\n this._convexSets.push(convexSet);\r\n }\r\n }\r\n /** Move convex sets from source.*/\r\n public takeConvexSets(source: UnionOfConvexClipPlaneSets) {\r\n let convexSet;\r\n while ((undefined !== (convexSet = source._convexSets.pop()))) {\r\n this._convexSets.push(convexSet);\r\n }\r\n }\r\n /**\r\n *\r\n * @param xyz input polygon. This is not changed.\r\n * @param insideFragments Array to receive \"inside\" fragments. Each fragment is a GrowableXYZArray grabbed from\r\n * the cache. This is NOT cleared.\r\n * @param outsideFragments Array to receive \"outside\" fragments. Each fragment is a GrowableXYZArray grabbed from\r\n * the cache. This is NOT cleared.\r\n * @param arrayCache cache for reusable GrowableXYZArray.\r\n */\r\n public appendPolygonClip(\r\n xyz: GrowableXYZArray,\r\n insideFragments: GrowableXYZArray[],\r\n outsideFragments: GrowableXYZArray[],\r\n arrayCache: GrowableXYZArrayCache,\r\n ): void {\r\n const oldOutsideCount = outsideFragments.length;\r\n const oldInsideCount = insideFragments.length;\r\n let carryForwardA = [arrayCache.grabAndFill(xyz)];\r\n let carryForwardB: GrowableXYZArray[] = [];\r\n let tempAB;\r\n let shard;\r\n // At each convex set, carryForwardA is all the fragments that have been outside all previous convex sets.\r\n // Clip each such fragment to the current set, sending the outside parts to carryForwardB, which will got to the next clipper\r\n // The final surviving carryForward really is out.\r\n for (const c of this._convexSets) {\r\n while (undefined !== (shard = carryForwardA.pop())) {\r\n c.appendPolygonClip(shard, insideFragments, carryForwardB, arrayCache);\r\n arrayCache.dropToCache(shard);\r\n }\r\n tempAB = carryForwardB;\r\n carryForwardB = carryForwardA; // and that is empty\r\n carryForwardA = tempAB;\r\n }\r\n while (undefined !== (shard = carryForwardA.pop())) {\r\n outsideFragments.push(shard);\r\n }\r\n if (outsideFragments.length === oldOutsideCount)\r\n ClipUtilities.restoreSingletonInPlaceOfMultipleShards(insideFragments, oldInsideCount, xyz, arrayCache);\r\n else if (insideFragments.length === oldInsideCount)\r\n ClipUtilities.restoreSingletonInPlaceOfMultipleShards(outsideFragments, oldOutsideCount, xyz, arrayCache);\r\n }\r\n}\r\n\r\n/* FUNCTIONS SKIPPED DUE TO BSPLINES, VU, OR NON-USAGE IN NATIVE CODE----------------------------------------------------------------\r\n\r\nInvolves vu: skipping for now...\r\n public fromSweptPolygon(points: Point3d[], directions: Vector3d[]): ClipPlaneSet;\r\n public parseConcavePolygonPlanes(...)\r\n\r\nUses bsplines... skipping for now:\r\n public appendIntervalsClipPlaneSetFromCurve();\r\n\r\nUses bsplines... skipping for now:\r\n public isAnyPointInOrOnFrom();\r\n\r\nSkipped fromSweptPolygon(...), which is overloaded function from first, due to presence of vu\r\n public fromSweptPolygon(points: Point3d[], directions: Vector3d[], shapes: Point3d[])\r\n*/\r\n"]}
@@ -34,8 +34,8 @@ export declare class LineStringOffsetClipperContext {
34
34
  * @param points
35
35
  * @param positiveOffsetLeft offset to left. 0 is clip on the path.
36
36
  * @param positiveOffsetRight offset to the right. 0 is clip on the path.
37
- * @param z0 z for lower clipping plane. If undefined, unbounded in positive z
38
- * @param z1 z for upper clipping plane. If undefined, unbounded in negative z.
37
+ * @param z0 z for lower clipping plane. If undefined, unbounded in positive z
38
+ * @param z1 z for upper clipping plane. If undefined, unbounded in negative z.
39
39
  */
40
40
  static createClipBetweenOffsets(points: IndexedXYZCollection, positiveOffsetLeft: number, positiveOffsetRight: number, z0: number | undefined, z1: number | undefined): UnionOfConvexClipPlaneSets;
41
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LineStringOffsetClipperContext.d.ts","sourceRoot":"","sources":["../../../../src/clipping/internalContexts/LineStringOffsetClipperContext.ts"],"names":[],"mappings":"AAMA,OAAO,EAAW,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAG3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E;;;GAGG;AACH,qBAAa,8BAA8B;IACzC,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO;IAKP;;;;;;;;OAQG;WACW,UAAU,CAAC,MAAM,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAE,OAAc,GAAG,QAAQ,GAAG,SAAS;IA6BvI,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAKhC;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,uBAAuB;IA8C/B;;;;;;OAMG;WACW,wBAAwB,CAAC,MAAM,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,0BAA0B;CAwB1M"}
1
+ {"version":3,"file":"LineStringOffsetClipperContext.d.ts","sourceRoot":"","sources":["../../../../src/clipping/internalContexts/LineStringOffsetClipperContext.ts"],"names":[],"mappings":"AAMA,OAAO,EAAW,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAG3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E;;;GAGG;AACH,qBAAa,8BAA8B;IACzC,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO;IAKP;;;;;;;;OAQG;WACW,UAAU,CACtB,MAAM,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAE,OAAc,GACpF,QAAQ,GAAG,SAAS;IA6BvB,OAAO,CAAC,MAAM,CAAC,mBAAmB;IASlC;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,uBAAuB;IAyD/B;;;;;;OAMG;WACW,wBAAwB,CACpC,MAAM,EAAE,oBAAoB,EAC5B,kBAAkB,EAAE,MAAM,EAC1B,mBAAmB,EAAE,MAAM,EAC3B,EAAE,EAAE,MAAM,GAAG,SAAS,EACtB,EAAE,EAAE,MAAM,GAAG,SAAS,GACrB,0BAA0B;CAwB9B"}
@@ -129,8 +129,8 @@ export class LineStringOffsetClipperContext {
129
129
  * @param points
130
130
  * @param positiveOffsetLeft offset to left. 0 is clip on the path.
131
131
  * @param positiveOffsetRight offset to the right. 0 is clip on the path.
132
- * @param z0 z for lower clipping plane. If undefined, unbounded in positive z
133
- * @param z1 z for upper clipping plane. If undefined, unbounded in negative z.
132
+ * @param z0 z for lower clipping plane. If undefined, unbounded in positive z
133
+ * @param z1 z for upper clipping plane. If undefined, unbounded in negative z.
134
134
  */
135
135
  static createClipBetweenOffsets(points, positiveOffsetLeft, positiveOffsetRight, z0, z1) {
136
136
  const context = new LineStringOffsetClipperContext(positiveOffsetLeft, positiveOffsetRight);
@@ -1 +1 @@
1
- {"version":3,"file":"LineStringOffsetClipperContext.js","sourceRoot":"","sources":["../../../../src/clipping/internalContexts/LineStringOffsetClipperContext.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\r\nimport { Geometry } from \"../../Geometry\";\r\nimport { Point3d, Vector3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { UnionOfConvexClipPlaneSets } from \"../UnionOfConvexClipPlaneSets\";\r\nimport { ConvexClipPlaneSet } from \"../ConvexClipPlaneSet\";\r\nimport { ClipPlane } from \"../ClipPlane\";\r\nimport { IndexedXYZCollection } from \"../../geometry3d/IndexedXYZCollection\";\r\n/**\r\n * Class for building clip sets for offset regions.\r\n * @internal\r\n */\r\nexport class LineStringOffsetClipperContext {\r\n private _positiveOffsetLeft: number;\r\n private _positiveOffsetRight: number;\r\n private _turnDegrees: number;\r\n private constructor(positiveOffsetLeft: number, positiveOffsetRight: number) {\r\n this._positiveOffsetLeft = positiveOffsetLeft;\r\n this._positiveOffsetRight = positiveOffsetRight;\r\n this._turnDegrees = 60.0;\r\n }\r\n /**\r\n * Create a unit vector from point i to point i+1.\r\n * If closed, do point indexing with\r\n * * index less than 0 get final segment\r\n * * index at or beyond points.length-1 wraps to first segment\r\n * @param points\r\n * @param index0\r\n * @param closed indicates that first and last points are identical and need wrap logic.\r\n */\r\n public static createUnit(points: IndexedXYZCollection, index0: number, closed: boolean, xyOnly: boolean = true): Vector3d | undefined {\r\n // pick two indices of active points, allowing for wrap if needed:\r\n // normally use index0 and index0 + 1\r\n // but apply wrap if appropriate, and shift ahead of needed.\r\n let k0 = index0;\r\n let k1 = index0 + 1;\r\n const last = points.length - 1;\r\n if (closed) {\r\n if (index0 < 0) {\r\n k0 = last - 1; k1 = last;\r\n } else if (index0 >= last) {\r\n k0 = 0; k1 = 1;\r\n }\r\n } else {\r\n if (index0 === 0) {\r\n k0 = 0; k1 = 1;\r\n } else if (k1 > last) {\r\n k0 = last - 1;\r\n k1 = last;\r\n }\r\n }\r\n const result = points.vectorIndexIndex(k0, k1);\r\n if (result) {\r\n if (xyOnly)\r\n result.z = 0.0;\r\n return result.normalize(result);\r\n }\r\n return undefined;\r\n }\r\nprivate static createDirectedPlane(basePoint: Point3d, vector: Vector3d, shift: number, normalScale: number, interior: boolean = false) {\r\n return ClipPlane.createNormalAndPointXYZXYZ(\r\n vector.x * normalScale, vector.y * normalScale, vector.z * normalScale,\r\n basePoint.x + shift * vector.x, basePoint.y + shift * vector.y, basePoint.z + shift * vector.z, interior, interior);\r\n }\r\n /**\r\n * Create (if needed) the chamfer cutback plane for a turn.\r\n * @param clipSet set to receive the plane\r\n * @param point central point\r\n * @param unitA incoming vector\r\n * @param unitB outgoing vector\r\n */\r\n private createChamferCut(clipSet: ConvexClipPlaneSet, point: Point3d, unitA: Vector3d, unitB: Vector3d) {\r\n const degreesA = unitA.angleToXY(unitB).degrees;\r\n if (Math.abs(degreesA) > this._turnDegrees) {\r\n const perpAB = unitA.interpolate(0.5, unitB);\r\n perpAB.rotate90CCWXY(perpAB);\r\n perpAB.normalizeInPlace();\r\n if (degreesA > 0)\r\n clipSet.addPlaneToConvexSet(LineStringOffsetClipperContext.createDirectedPlane(point, perpAB, -this._positiveOffsetRight, 1.0, false));\r\n else\r\n clipSet.addPlaneToConvexSet(LineStringOffsetClipperContext.createDirectedPlane(point, perpAB, this._positiveOffsetLeft, -1.0, false));\r\n }\r\n }\r\n private createOffsetFromSegment(pointA: Point3d, pointB: Point3d,\r\n unitA: Vector3d | undefined,\r\n unitB: Vector3d | undefined,\r\n unitC: Vector3d | undefined): ConvexClipPlaneSet | undefined {\r\n if (unitB === undefined)\r\n return undefined;\r\n if (unitA === undefined)\r\n unitA = unitB;\r\n if (unitC === undefined)\r\n unitC = unitB;\r\n const unitAB = unitA.interpolate(0.5, unitB);\r\n unitAB.normalizeInPlace();\r\n const perpB = unitB.rotate90CCWXY();\r\n const unitBC = unitB.interpolate(0.5, unitC);\r\n unitBC.normalizeInPlace();\r\n const clipSet = ConvexClipPlaneSet.createEmpty();\r\n clipSet.addPlaneToConvexSet(LineStringOffsetClipperContext.createDirectedPlane(pointA, perpB, this._positiveOffsetLeft, -1.0, false));\r\n clipSet.addPlaneToConvexSet(LineStringOffsetClipperContext.createDirectedPlane(pointA, perpB, -this._positiveOffsetRight, 1.0, false));\r\n clipSet.addPlaneToConvexSet(LineStringOffsetClipperContext.createDirectedPlane(pointA, unitAB, 0, 1.0, true));\r\n clipSet.addPlaneToConvexSet(LineStringOffsetClipperContext.createDirectedPlane(pointB, unitBC, 0, -1.0, true));\r\n this.createChamferCut(clipSet, pointA, unitA, unitB);\r\n this.createChamferCut(clipSet, pointB, unitB, unitC);\r\n /*\r\n const degreesA = unitA.angleToXY(unitB).degrees;\r\n if (Math.abs(degreesA) > this._turnDegrees) {\r\n const perpAB = unitA.interpolate(0.5, unitB);\r\n perpAB.rotate90CCWXY(perpAB);\r\n perpAB.normalizeInPlace();\r\n if (degreesA > 0)\r\n clipSet.addPlaneToConvexSet(BuildingCodeRegionOffsetsOps.createDirectedPlane(pointA, perpAB, -this._positiveOffsetRight, 1.0));\r\n else\r\n clipSet.addPlaneToConvexSet(BuildingCodeRegionOffsetsOps.createDirectedPlane(pointA, perpAB, -this._positiveOffsetLeft, -1.0));\r\n }\r\n const degreesB = unitB.angleToXY(unitC).degrees;\r\n if (Math.abs(degreesB) > this._turnDegrees) {\r\n const perpBC = unitB.interpolate(0.5, unitC);\r\n perpBC.rotate90CCWXY(perpBC);\r\n perpBC.normalizeInPlace();\r\n if (degreesB > 0)\r\n clipSet.addPlaneToConvexSet(BuildingCodeRegionOffsetsOps.createDirectedPlane(pointB, perpBC, -this._positiveOffsetRight, 1.0));\r\n else\r\n clipSet.addPlaneToConvexSet(BuildingCodeRegionOffsetsOps.createDirectedPlane(pointB, perpBC, -this._positiveOffsetLeft, -1.0));\r\n }\r\n */\r\n return clipSet;\r\n }\r\n /**\r\n * @param points\r\n * @param positiveOffsetLeft offset to left. 0 is clip on the path.\r\n * @param positiveOffsetRight offset to the right. 0 is clip on the path.\r\n * @param z0 z for lower clipping plane. If undefined, unbounded in positive z\r\n * @param z1 z for upper clipping plane. If undefined, unbounded in negative z.\r\n */\r\n public static createClipBetweenOffsets(points: IndexedXYZCollection, positiveOffsetLeft: number, positiveOffsetRight: number, z0: number | undefined, z1: number | undefined): UnionOfConvexClipPlaneSets {\r\n const context = new LineStringOffsetClipperContext(positiveOffsetLeft, positiveOffsetRight);\r\n const result = UnionOfConvexClipPlaneSets.createEmpty();\r\n if (points.length > 1) {\r\n const closed = Geometry.isSmallMetricDistance(points.distanceIndexIndex(0, points.length - 1)!);\r\n for (let i = 0; i + 1 < points.length; i++) {\r\n const unitVectorA = this.createUnit(points, i - 1, closed);\r\n const unitVectorB = this.createUnit(points, i, closed);\r\n const unitVectorC = this.createUnit(points, i + 1, closed);\r\n const clipSet = context.createOffsetFromSegment(points.getPoint3dAtUncheckedPointIndex(i),\r\n points.getPoint3dAtUncheckedPointIndex(i + 1), unitVectorA, unitVectorB, unitVectorC);\r\n clipSet?.addZClipPlanes(false, z0, z1);\r\n if (clipSet)\r\n result.addConvexSet(clipSet);\r\n }\r\n } else {\r\n // make a singleton clipper with the z values.\r\n const clipSet = ConvexClipPlaneSet.createEmpty();\r\n clipSet?.addZClipPlanes(false, z0, z1);\r\n if (clipSet.planes.length > 0)\r\n result.addConvexSet(clipSet);\r\n }\r\n return result;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"LineStringOffsetClipperContext.js","sourceRoot":"","sources":["../../../../src/clipping/internalContexts/LineStringOffsetClipperContext.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\r\nimport { Geometry } from \"../../Geometry\";\r\nimport { Point3d, Vector3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { UnionOfConvexClipPlaneSets } from \"../UnionOfConvexClipPlaneSets\";\r\nimport { ConvexClipPlaneSet } from \"../ConvexClipPlaneSet\";\r\nimport { ClipPlane } from \"../ClipPlane\";\r\nimport { IndexedXYZCollection } from \"../../geometry3d/IndexedXYZCollection\";\r\n/**\r\n * Class for building clip sets for offset regions.\r\n * @internal\r\n */\r\nexport class LineStringOffsetClipperContext {\r\n private _positiveOffsetLeft: number;\r\n private _positiveOffsetRight: number;\r\n private _turnDegrees: number;\r\n private constructor(positiveOffsetLeft: number, positiveOffsetRight: number) {\r\n this._positiveOffsetLeft = positiveOffsetLeft;\r\n this._positiveOffsetRight = positiveOffsetRight;\r\n this._turnDegrees = 60.0;\r\n }\r\n /**\r\n * Create a unit vector from point i to point i+1.\r\n * If closed, do point indexing with\r\n * * index less than 0 get final segment\r\n * * index at or beyond points.length-1 wraps to first segment\r\n * @param points\r\n * @param index0\r\n * @param closed indicates that first and last points are identical and need wrap logic.\r\n */\r\n public static createUnit(\r\n points: IndexedXYZCollection, index0: number, closed: boolean, xyOnly: boolean = true,\r\n ): Vector3d | undefined {\r\n // pick two indices of active points, allowing for wrap if needed:\r\n // normally use index0 and index0 + 1\r\n // but apply wrap if appropriate, and shift ahead of needed.\r\n let k0 = index0;\r\n let k1 = index0 + 1;\r\n const last = points.length - 1;\r\n if (closed) {\r\n if (index0 < 0) {\r\n k0 = last - 1; k1 = last;\r\n } else if (index0 >= last) {\r\n k0 = 0; k1 = 1;\r\n }\r\n } else {\r\n if (index0 === 0) {\r\n k0 = 0; k1 = 1;\r\n } else if (k1 > last) {\r\n k0 = last - 1;\r\n k1 = last;\r\n }\r\n }\r\n const result = points.vectorIndexIndex(k0, k1);\r\n if (result) {\r\n if (xyOnly)\r\n result.z = 0.0;\r\n return result.normalize(result);\r\n }\r\n return undefined;\r\n }\r\n private static createDirectedPlane(\r\n basePoint: Point3d, vector: Vector3d, shift: number, normalScale: number, interior: boolean = false,\r\n ): ClipPlane | undefined {\r\n return ClipPlane.createNormalAndPointXYZXYZ(\r\n vector.x * normalScale, vector.y * normalScale, vector.z * normalScale,\r\n basePoint.x + shift * vector.x, basePoint.y + shift * vector.y, basePoint.z + shift * vector.z,\r\n interior, interior,\r\n );\r\n }\r\n /**\r\n * Create (if needed) the chamfer cutback plane for a turn.\r\n * @param clipSet set to receive the plane\r\n * @param point central point\r\n * @param unitA incoming vector\r\n * @param unitB outgoing vector\r\n */\r\n private createChamferCut(clipSet: ConvexClipPlaneSet, point: Point3d, unitA: Vector3d, unitB: Vector3d) {\r\n const degreesA = unitA.angleToXY(unitB).degrees;\r\n if (Math.abs(degreesA) > this._turnDegrees) {\r\n const perpAB = unitA.interpolate(0.5, unitB);\r\n perpAB.rotate90CCWXY(perpAB);\r\n perpAB.normalizeInPlace();\r\n if (degreesA > 0)\r\n clipSet.addPlaneToConvexSet(\r\n LineStringOffsetClipperContext.createDirectedPlane(point, perpAB, -this._positiveOffsetRight, 1.0, false),\r\n );\r\n else\r\n clipSet.addPlaneToConvexSet(\r\n LineStringOffsetClipperContext.createDirectedPlane(point, perpAB, this._positiveOffsetLeft, -1.0, false),\r\n );\r\n }\r\n }\r\n private createOffsetFromSegment(\r\n pointA: Point3d,\r\n pointB: Point3d,\r\n unitA: Vector3d | undefined,\r\n unitB: Vector3d | undefined,\r\n unitC: Vector3d | undefined,\r\n ): ConvexClipPlaneSet | undefined {\r\n if (unitB === undefined)\r\n return undefined;\r\n if (unitA === undefined)\r\n unitA = unitB;\r\n if (unitC === undefined)\r\n unitC = unitB;\r\n const unitAB = unitA.interpolate(0.5, unitB);\r\n unitAB.normalizeInPlace();\r\n const perpB = unitB.rotate90CCWXY();\r\n const unitBC = unitB.interpolate(0.5, unitC);\r\n unitBC.normalizeInPlace();\r\n const clipSet = ConvexClipPlaneSet.createEmpty();\r\n clipSet.addPlaneToConvexSet(\r\n LineStringOffsetClipperContext.createDirectedPlane(pointA, perpB, this._positiveOffsetLeft, -1.0, false),\r\n );\r\n clipSet.addPlaneToConvexSet(\r\n LineStringOffsetClipperContext.createDirectedPlane(pointA, perpB, -this._positiveOffsetRight, 1.0, false),\r\n );\r\n clipSet.addPlaneToConvexSet(\r\n LineStringOffsetClipperContext.createDirectedPlane(pointA, unitAB, 0, 1.0, true),\r\n );\r\n clipSet.addPlaneToConvexSet(\r\n LineStringOffsetClipperContext.createDirectedPlane(pointB, unitBC, 0, -1.0, true),\r\n );\r\n this.createChamferCut(clipSet, pointA, unitA, unitB);\r\n this.createChamferCut(clipSet, pointB, unitB, unitC);\r\n /*\r\n const degreesA = unitA.angleToXY(unitB).degrees;\r\n if (Math.abs(degreesA) > this._turnDegrees) {\r\n const perpAB = unitA.interpolate(0.5, unitB);\r\n perpAB.rotate90CCWXY(perpAB);\r\n perpAB.normalizeInPlace();\r\n if (degreesA > 0)\r\n clipSet.addPlaneToConvexSet(BuildingCodeRegionOffsetsOps.createDirectedPlane(pointA, perpAB, -this._positiveOffsetRight, 1.0));\r\n else\r\n clipSet.addPlaneToConvexSet(BuildingCodeRegionOffsetsOps.createDirectedPlane(pointA, perpAB, -this._positiveOffsetLeft, -1.0));\r\n }\r\n const degreesB = unitB.angleToXY(unitC).degrees;\r\n if (Math.abs(degreesB) > this._turnDegrees) {\r\n const perpBC = unitB.interpolate(0.5, unitC);\r\n perpBC.rotate90CCWXY(perpBC);\r\n perpBC.normalizeInPlace();\r\n if (degreesB > 0)\r\n clipSet.addPlaneToConvexSet(BuildingCodeRegionOffsetsOps.createDirectedPlane(pointB, perpBC, -this._positiveOffsetRight, 1.0));\r\n else\r\n clipSet.addPlaneToConvexSet(BuildingCodeRegionOffsetsOps.createDirectedPlane(pointB, perpBC, -this._positiveOffsetLeft, -1.0));\r\n }\r\n */\r\n return clipSet;\r\n }\r\n /**\r\n * @param points\r\n * @param positiveOffsetLeft offset to left. 0 is clip on the path.\r\n * @param positiveOffsetRight offset to the right. 0 is clip on the path.\r\n * @param z0 z for lower clipping plane. If undefined, unbounded in positive z\r\n * @param z1 z for upper clipping plane. If undefined, unbounded in negative z.\r\n */\r\n public static createClipBetweenOffsets(\r\n points: IndexedXYZCollection,\r\n positiveOffsetLeft: number,\r\n positiveOffsetRight: number,\r\n z0: number | undefined,\r\n z1: number | undefined,\r\n ): UnionOfConvexClipPlaneSets {\r\n const context = new LineStringOffsetClipperContext(positiveOffsetLeft, positiveOffsetRight);\r\n const result = UnionOfConvexClipPlaneSets.createEmpty();\r\n if (points.length > 1) {\r\n const closed = Geometry.isSmallMetricDistance(points.distanceIndexIndex(0, points.length - 1)!);\r\n for (let i = 0; i + 1 < points.length; i++) {\r\n const unitVectorA = this.createUnit(points, i - 1, closed);\r\n const unitVectorB = this.createUnit(points, i, closed);\r\n const unitVectorC = this.createUnit(points, i + 1, closed);\r\n const clipSet = context.createOffsetFromSegment(points.getPoint3dAtUncheckedPointIndex(i),\r\n points.getPoint3dAtUncheckedPointIndex(i + 1), unitVectorA, unitVectorB, unitVectorC);\r\n clipSet?.addZClipPlanes(false, z0, z1);\r\n if (clipSet)\r\n result.addConvexSet(clipSet);\r\n }\r\n } else {\r\n // make a singleton clipper with the z values.\r\n const clipSet = ConvexClipPlaneSet.createEmpty();\r\n clipSet?.addZClipPlanes(false, z0, z1);\r\n if (clipSet.planes.length > 0)\r\n result.addConvexSet(clipSet);\r\n }\r\n return result;\r\n }\r\n}\r\n"]}
@@ -41,12 +41,14 @@ import type { VariantCurveExtendParameter } from "./CurveExtendMode";
41
41
  */
42
42
  export type CurvePrimitiveType = "arc" | "lineSegment" | "lineString" | "bsplineCurve" | "bezierCurve" | "transitionSpiral" | "curveChainWithDistanceIndex" | "interpolationCurve" | "akimaCurve";
43
43
  /**
44
- * Union type for subclasses of [[CurvePrimitive]]. Specific subclasses can be discriminated at compile- or run-time using [[CurvePrimitive.curvePrimitiveType]].
44
+ * Union type for subclasses of [[CurvePrimitive]]. Specific subclasses can be discriminated at compile- or run-time
45
+ * using [[CurvePrimitive.curvePrimitiveType]].
45
46
  * @public
46
47
  */
47
48
  export type AnyCurvePrimitive = Arc3d | LineSegment3d | LineString3d | BSplineCurve3d | BezierCurve3d | DirectSpiral3d | IntegratedSpiral3d | CurveChainWithDistanceIndex | InterpolationCurve3d | AkimaCurve3d;
48
49
  /**
49
- * Function signature for callback which announces a pair of numbers, such as a fractional interval, along with a containing CurvePrimitive.
50
+ * Function signature for callback which announces a pair of numbers, such as a fractional interval, along with a
51
+ * containing CurvePrimitive.
50
52
  * @public
51
53
  */
52
54
  export type AnnounceNumberNumberCurvePrimitive = (a0: number, a1: number, cp: CurvePrimitive) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"CurvePrimitive.d.ts","sourceRoot":"","sources":["../../../src/curve/CurvePrimitive.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CurvePrimitive.d.ts","sourceRoot":"","sources":["../../../src/curve/CurvePrimitive.ts"],"names":[],"mappings":"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"}