@itwin/core-geometry 3.4.0-dev.33 → 3.4.0-dev.36

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 (81) hide show
  1. package/lib/cjs/core-geometry.d.ts +1 -0
  2. package/lib/cjs/core-geometry.d.ts.map +1 -1
  3. package/lib/cjs/core-geometry.js +1 -0
  4. package/lib/cjs/core-geometry.js.map +1 -1
  5. package/lib/cjs/curve/LineString3d.d.ts +3 -0
  6. package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
  7. package/lib/cjs/curve/LineString3d.js +24 -0
  8. package/lib/cjs/curve/LineString3d.js.map +1 -1
  9. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts +4 -1
  10. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
  11. package/lib/cjs/curve/internalContexts/MultiChainCollector.js +26 -1
  12. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  13. package/lib/cjs/geometry3d/PointHelpers.d.ts +8 -1
  14. package/lib/cjs/geometry3d/PointHelpers.d.ts.map +1 -1
  15. package/lib/cjs/geometry3d/PointHelpers.js +37 -3
  16. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  17. package/lib/cjs/geometry3d/PolygonOps.d.ts +7 -0
  18. package/lib/cjs/geometry3d/PolygonOps.d.ts.map +1 -1
  19. package/lib/cjs/geometry3d/PolygonOps.js +35 -0
  20. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  21. package/lib/cjs/geometry3d/PolylineOps.d.ts +5 -0
  22. package/lib/cjs/geometry3d/PolylineOps.d.ts.map +1 -1
  23. package/lib/cjs/geometry3d/PolylineOps.js +20 -0
  24. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  25. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +1 -1
  26. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  27. package/lib/cjs/polyface/PolyfaceBuilder.js +5 -3
  28. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  29. package/lib/cjs/polyface/PolyfaceQuery.d.ts +68 -10
  30. package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
  31. package/lib/cjs/polyface/PolyfaceQuery.js +162 -14
  32. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  33. package/lib/cjs/serialization/GeometrySamples.d.ts +9 -0
  34. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  35. package/lib/cjs/serialization/GeometrySamples.js +31 -0
  36. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  37. package/lib/cjs/topology/SpaceTriangulation.d.ts +47 -0
  38. package/lib/cjs/topology/SpaceTriangulation.d.ts.map +1 -0
  39. package/lib/cjs/topology/SpaceTriangulation.js +135 -0
  40. package/lib/cjs/topology/SpaceTriangulation.js.map +1 -0
  41. package/lib/esm/core-geometry.d.ts +1 -0
  42. package/lib/esm/core-geometry.d.ts.map +1 -1
  43. package/lib/esm/core-geometry.js +1 -0
  44. package/lib/esm/core-geometry.js.map +1 -1
  45. package/lib/esm/curve/LineString3d.d.ts +3 -0
  46. package/lib/esm/curve/LineString3d.d.ts.map +1 -1
  47. package/lib/esm/curve/LineString3d.js +24 -0
  48. package/lib/esm/curve/LineString3d.js.map +1 -1
  49. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts +4 -1
  50. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
  51. package/lib/esm/curve/internalContexts/MultiChainCollector.js +26 -1
  52. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  53. package/lib/esm/geometry3d/PointHelpers.d.ts +8 -1
  54. package/lib/esm/geometry3d/PointHelpers.d.ts.map +1 -1
  55. package/lib/esm/geometry3d/PointHelpers.js +37 -3
  56. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  57. package/lib/esm/geometry3d/PolygonOps.d.ts +7 -0
  58. package/lib/esm/geometry3d/PolygonOps.d.ts.map +1 -1
  59. package/lib/esm/geometry3d/PolygonOps.js +35 -0
  60. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  61. package/lib/esm/geometry3d/PolylineOps.d.ts +5 -0
  62. package/lib/esm/geometry3d/PolylineOps.d.ts.map +1 -1
  63. package/lib/esm/geometry3d/PolylineOps.js +20 -0
  64. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  65. package/lib/esm/polyface/PolyfaceBuilder.d.ts +1 -1
  66. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  67. package/lib/esm/polyface/PolyfaceBuilder.js +5 -3
  68. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  69. package/lib/esm/polyface/PolyfaceQuery.d.ts +68 -10
  70. package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
  71. package/lib/esm/polyface/PolyfaceQuery.js +163 -15
  72. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  73. package/lib/esm/serialization/GeometrySamples.d.ts +9 -0
  74. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  75. package/lib/esm/serialization/GeometrySamples.js +31 -0
  76. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  77. package/lib/esm/topology/SpaceTriangulation.d.ts +47 -0
  78. package/lib/esm/topology/SpaceTriangulation.d.ts.map +1 -0
  79. package/lib/esm/topology/SpaceTriangulation.js +131 -0
  80. package/lib/esm/topology/SpaceTriangulation.js.map +1 -0
  81. package/package.json +4 -4
@@ -0,0 +1,47 @@
1
+ /** @packageDocumentation
2
+ * @module Topology
3
+ */
4
+ import { LineString3d } from "../curve/LineString3d";
5
+ import { Point3d } from "../geometry3d/Point3dVector3d";
6
+ declare type AnnounceLoopAndTrianglesFunction = (loop: Point3d[], triangles: Point3d[][]) => void;
7
+ /**
8
+ * Class with static methods to triangulate various forms of possibly non-planar polygons.
9
+ * @public
10
+ */
11
+ export declare class SpacePolygonTriangulation {
12
+ /**
13
+ * * Return a number which is:
14
+ * * 0 for collapsed (zero area) triangle
15
+ * * positive for non-zero area
16
+ * * larger is "better"
17
+ * * Specifically, return (if well defined) the area divided by summed squares of edge lengths.
18
+ * @param point0
19
+ * @param point1
20
+ * @param point2
21
+ */
22
+ static spaceTriangleAspectRatio(point0: Point3d, point1: Point3d, point2: Point3d): number;
23
+ /**
24
+ * * Treat a space quad as two triangles with interior diagonal from point0 to point2
25
+ * * Return the smaller of the aspect ratios of the two triangles.
26
+ * * The quad edges proceed in the order [point0, point1, point2, point3]
27
+ * @param point0 first point of quad
28
+ * @param point1 second point of quad (diagonally opposite of point3)
29
+ * @param point2 third point (diagonally opposite point0)
30
+ * @param point3 fourth point
31
+ */
32
+ static spaceQuadDiagonalAspectRatio(point0: Point3d, point1: Point3d, point2: Point3d, point3: Point3d): number;
33
+ /** "Triangulate" by cutting of the ear with best aspect ratio. Reject if successive normals have negative dot product with PolygonOps.AreaNormal */
34
+ static triangulateGreedyEarCut(points: Point3d[], announceLoopAndTriangles: AnnounceLoopAndTrianglesFunction): boolean;
35
+ private static triangulateSimplestSpaceLoopGo;
36
+ /**
37
+ * * Emit triangles for a (possibly non-planar) loop for various simple cases:
38
+ * * only 3 points: just emit that triangle.
39
+ * * only 4 points: split across a diagonal, choosing the one with better aspect ratios of its two triangles.
40
+ * * BUT
41
+ * * do not complete the triangulation if perimeter is larger than maxPerimeter (i.e. only consider small areas)
42
+ * * Hence it is expected that the caller will use this as the first attempt, possibly followed by calls to other more adventurous methods.
43
+ */
44
+ static triangulateSimplestSpaceLoop(loop: Point3d[] | LineString3d, announceLoopAndTriangles: AnnounceLoopAndTrianglesFunction, maxPerimeter?: number): boolean;
45
+ }
46
+ export {};
47
+ //# sourceMappingURL=SpaceTriangulation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpaceTriangulation.d.ts","sourceRoot":"","sources":["../../../src/topology/SpaceTriangulation.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAIxD,aAAK,gCAAgC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,KAAK,IAAI,CAAC;AAE1F;;;GAGG;AACH,qBAAa,yBAAyB;IAEpC;;;;;;;;;OASG;WACW,wBAAwB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM;IAMjG;;;;;;;;OAQG;WACW,4BAA4B,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM;IAKtH,qJAAqJ;WACvI,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,wBAAwB,EAAE,gCAAgC,GAAG,OAAO;IAsC7H,OAAO,CAAC,MAAM,CAAC,8BAA8B;IA8B7C;;;;;;;OAOG;WACW,4BAA4B,CAAC,IAAI,EAAE,OAAO,EAAG,GAAG,YAAY,EACxE,wBAAwB,EAAE,gCAAgC,EAC1D,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO;CAOlC"}
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.SpacePolygonTriangulation = void 0;
8
+ /** @packageDocumentation
9
+ * @module Topology
10
+ */
11
+ const LineString3d_1 = require("../curve/LineString3d");
12
+ const Geometry_1 = require("../Geometry");
13
+ const PointHelpers_1 = require("../geometry3d/PointHelpers");
14
+ const PolygonOps_1 = require("../geometry3d/PolygonOps");
15
+ const PolylineOps_1 = require("../geometry3d/PolylineOps");
16
+ /**
17
+ * Class with static methods to triangulate various forms of possibly non-planar polygons.
18
+ * @public
19
+ */
20
+ class SpacePolygonTriangulation {
21
+ /**
22
+ * * Return a number which is:
23
+ * * 0 for collapsed (zero area) triangle
24
+ * * positive for non-zero area
25
+ * * larger is "better"
26
+ * * Specifically, return (if well defined) the area divided by summed squares of edge lengths.
27
+ * @param point0
28
+ * @param point1
29
+ * @param point2
30
+ */
31
+ static spaceTriangleAspectRatio(point0, point1, point2) {
32
+ const crossProduct = point0.crossProductToPoints(point1, point2);
33
+ const area = 0.5 * crossProduct.magnitude();
34
+ const summedEdgeSquares = point0.distanceSquared(point1) + point1.distanceSquared(point2) + point2.distanceSquared(point0);
35
+ return Geometry_1.Geometry.safeDivideFraction(area, summedEdgeSquares, 0.0);
36
+ }
37
+ /**
38
+ * * Treat a space quad as two triangles with interior diagonal from point0 to point2
39
+ * * Return the smaller of the aspect ratios of the two triangles.
40
+ * * The quad edges proceed in the order [point0, point1, point2, point3]
41
+ * @param point0 first point of quad
42
+ * @param point1 second point of quad (diagonally opposite of point3)
43
+ * @param point2 third point (diagonally opposite point0)
44
+ * @param point3 fourth point
45
+ */
46
+ static spaceQuadDiagonalAspectRatio(point0, point1, point2, point3) {
47
+ const q012 = this.spaceTriangleAspectRatio(point0, point1, point2);
48
+ const q023 = this.spaceTriangleAspectRatio(point0, point2, point3);
49
+ return Math.max(q012, q023);
50
+ }
51
+ /** "Triangulate" by cutting of the ear with best aspect ratio. Reject if successive normals have negative dot product with PolygonOps.AreaNormal */
52
+ static triangulateGreedyEarCut(points, announceLoopAndTriangles) {
53
+ const normalA = PolygonOps_1.PolygonOps.areaNormal(points);
54
+ const triangles = [];
55
+ const myPoints = points.slice();
56
+ PolylineOps_1.PolylineOps.removeClosurePoint(myPoints);
57
+ // first pass deals with entire array.
58
+ // each pass lops off one point.
59
+ for (; myPoints.length > 2;) {
60
+ // Find the ear candidate whose cross product vector has largest dot product (large area, best alignment with overall).
61
+ let bestRatio = -1.0;
62
+ let bestRatioIndex0 = 0;
63
+ let i0 = myPoints.length - 2;
64
+ let i1 = myPoints.length - 1;
65
+ let i2;
66
+ for (i2 = 0; i2 < myPoints.length; i0 = i1, i1 = i2, i2++) {
67
+ const ratio = this.spaceTriangleAspectRatio(myPoints[i0], myPoints[i1], myPoints[i2]);
68
+ const normalB = myPoints[i0].crossProductToPoints(myPoints[i1], myPoints[i2]);
69
+ if (normalB.dotProduct(normalA) > 0 && ratio > bestRatio) {
70
+ bestRatio = ratio;
71
+ bestRatioIndex0 = i0;
72
+ }
73
+ }
74
+ if (bestRatio <= 0.0)
75
+ return false;
76
+ // add the ear to the result
77
+ i0 = bestRatioIndex0;
78
+ i1 = (i0 + 1) % myPoints.length;
79
+ i2 = (i1 + 1) % myPoints.length;
80
+ const t = [];
81
+ t.push(myPoints[i0], myPoints[i1], myPoints[i2]);
82
+ // remove the middle point
83
+ myPoints.splice(i1, 1);
84
+ triangles.push(t);
85
+ }
86
+ announceLoopAndTriangles(points, triangles);
87
+ return true;
88
+ }
89
+ static triangulateSimplestSpaceLoopGo(points, announceLoopAndTriangles, maxPerimeter) {
90
+ const n = PointHelpers_1.Point3dArray.countNonDuplicates(points);
91
+ if (maxPerimeter !== undefined && PointHelpers_1.Point3dArray.sumEdgeLengths(points, true, n) > maxPerimeter)
92
+ return false;
93
+ if (n < 3)
94
+ return false;
95
+ if (n === 3) {
96
+ if (this.spaceTriangleAspectRatio(points[0], points[1], points[2]) === 0)
97
+ return false;
98
+ // already a triangle . . .
99
+ announceLoopAndTriangles(points, [points.slice()]);
100
+ return true;
101
+ }
102
+ if (n === 4) {
103
+ const d02 = this.spaceQuadDiagonalAspectRatio(points[0], points[1], points[2], points[3]);
104
+ const d13 = this.spaceQuadDiagonalAspectRatio(points[1], points[2], points[3], points[0]);
105
+ if (d02 === 0.0 && d13 === 0.0)
106
+ return false;
107
+ // announce the two triangles with better aspect ratios ....
108
+ if (d02 > d13) {
109
+ announceLoopAndTriangles(points, [[points[0], points[1], points[2]], [points[2], points[3], points[0]]]);
110
+ return true;
111
+ }
112
+ else {
113
+ announceLoopAndTriangles(points, [[points[0], points[1], points[3]], [points[3], points[1], points[2]]]);
114
+ return true;
115
+ }
116
+ }
117
+ return this.triangulateGreedyEarCut(points, announceLoopAndTriangles);
118
+ }
119
+ /**
120
+ * * Emit triangles for a (possibly non-planar) loop for various simple cases:
121
+ * * only 3 points: just emit that triangle.
122
+ * * only 4 points: split across a diagonal, choosing the one with better aspect ratios of its two triangles.
123
+ * * BUT
124
+ * * do not complete the triangulation if perimeter is larger than maxPerimeter (i.e. only consider small areas)
125
+ * * Hence it is expected that the caller will use this as the first attempt, possibly followed by calls to other more adventurous methods.
126
+ */
127
+ static triangulateSimplestSpaceLoop(loop, announceLoopAndTriangles, maxPerimeter) {
128
+ if (loop instanceof LineString3d_1.LineString3d)
129
+ return this.triangulateSimplestSpaceLoopGo(loop.points, announceLoopAndTriangles, maxPerimeter);
130
+ // (array case by exhaustion)
131
+ return this.triangulateSimplestSpaceLoopGo(loop, announceLoopAndTriangles, maxPerimeter);
132
+ }
133
+ }
134
+ exports.SpacePolygonTriangulation = SpacePolygonTriangulation;
135
+ //# sourceMappingURL=SpaceTriangulation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpaceTriangulation.js","sourceRoot":"","sources":["../../../src/topology/SpaceTriangulation.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AAEH,wDAAqD;AACrD,0CAAuC;AAEvC,6DAA0D;AAC1D,yDAAoD;AACpD,2DAAsD;AAGtD;;;GAGG;AACH,MAAa,yBAAyB;IAEpC;;;;;;;;;OASG;IACI,MAAM,CAAC,wBAAwB,CAAC,MAAe,EAAE,MAAe,EAAE,MAAe;QACpF,MAAM,YAAY,GAAG,MAAM,CAAC,oBAAoB,CAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,GAAG,GAAG,YAAY,CAAC,SAAS,EAAG,CAAC;QAC7C,MAAM,iBAAiB,GAAG,MAAM,CAAC,eAAe,CAAE,MAAM,CAAC,GAAG,MAAM,CAAC,eAAe,CAAE,MAAM,CAAC,GAAG,MAAM,CAAC,eAAe,CAAE,MAAM,CAAC,CAAC;QAC9H,OAAO,mBAAQ,CAAC,kBAAkB,CAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,CAAC,CAAC;IACtE,CAAC;IACD;;;;;;;;OAQG;IACI,MAAM,CAAC,4BAA4B,CAAC,MAAe,EAAE,MAAe,EAAE,MAAe,EAAE,MAAe;QAC3G,MAAM,IAAI,GAAG,IAAI,CAAC,wBAAwB,CAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACpE,MAAM,IAAI,GAAG,IAAI,CAAC,wBAAwB,CAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC,GAAG,CAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,qJAAqJ;IAC9I,MAAM,CAAC,uBAAuB,CAAC,MAAiB,EAAE,wBAA0D;QACjH,MAAM,OAAO,GAAG,uBAAU,CAAC,UAAU,CAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAgB,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,EAAG,CAAC;QACjC,yBAAW,CAAC,kBAAkB,CAAE,QAAQ,CAAC,CAAC;QAC1C,sCAAsC;QACtC,gCAAgC;QAChC,OAAM,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAE;YACzB,uHAAuH;YACvH,IAAI,SAAS,GAAG,CAAC,GAAG,CAAC;YACrB,IAAI,eAAe,GAAG,CAAC,CAAC;YACxB,IAAI,EAAE,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YAC7B,IAAI,EAAE,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YAC7B,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAC;gBACxD,MAAM,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;gBACvF,MAAM,OAAO,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC/E,IAAI,OAAO,CAAC,UAAU,CAAE,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,SAAS,EAAC;oBACxD,SAAS,GAAG,KAAK,CAAC;oBAClB,eAAe,GAAG,EAAE,CAAC;iBACtB;aACF;YACD,IAAI,SAAS,IAAI,GAAG;gBAClB,OAAO,KAAK,CAAC;YACf,4BAA4B;YAC5B,EAAE,GAAG,eAAe,CAAC;YACrB,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;YAChC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;YAChC,MAAM,CAAC,GAAG,EAAE,CAAC;YACb,CAAC,CAAC,IAAI,CAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;YAClD,0BAA0B;YAC1B,QAAQ,CAAC,MAAM,CAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YACxB,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACnB;QACD,wBAAwB,CAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,MAAM,CAAC,8BAA8B,CAAC,MAAiB,EAAE,wBAA0D,EACzH,YAAgC;QAChC,MAAM,CAAC,GAAG,2BAAY,CAAC,kBAAkB,CAAE,MAAM,CAAC,CAAC;QACrD,IAAI,YAAY,KAAK,SAAS,IAAI,2BAAY,CAAC,cAAc,CAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,YAAY;YAC1F,OAAO,KAAK,CAAC;QACjB,IAAI,CAAC,GAAG,CAAC;YACP,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,KAAK,CAAC,EAAC;YACV,IAAI,IAAI,CAAC,wBAAwB,CAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBACvE,OAAO,KAAK,CAAC;YACf,2BAA2B;YAC3B,wBAAwB,CAAE,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,EAAG,CAAC,CAAC,CAAC;YACrD,OAAO,IAAI,CAAC;SACb;QACD,IAAI,CAAC,KAAK,CAAC,EAAC;YACV,MAAM,GAAG,GAAG,IAAI,CAAC,4BAA4B,CAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3F,MAAM,GAAG,GAAG,IAAI,CAAC,4BAA4B,CAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3F,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG;gBAC5B,OAAO,KAAK,CAAC;YACf,4DAA4D;YAC5D,IAAI,GAAG,GAAG,GAAG,EAAC;gBACZ,wBAAwB,CAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1G,OAAO,IAAI,CAAC;aACb;iBAAM;gBACL,wBAAwB,CAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1G,OAAO,IAAI,CAAC;aACb;SACF;QACD,OAAO,IAAI,CAAC,uBAAuB,CAAE,MAAM,EAAE,wBAAwB,CAAC,CAAC;IACvE,CAAC;IACD;;;;;;;OAOG;IACI,MAAM,CAAC,4BAA4B,CAAC,IAA+B,EACxE,wBAA0D,EAC1D,YAAqB;QACrB,IAAI,IAAI,YAAY,2BAAY;YAC9B,OAAO,IAAI,CAAC,8BAA8B,CAAE,IAAI,CAAC,MAAM,EAAE,wBAAwB,EAAE,YAAY,CAAC,CAAC;QACjG,6BAA6B;QAC/B,OAAO,IAAI,CAAC,8BAA8B,CAAE,IAAI,EAAE,wBAAwB,EAAE,YAAY,CAAC,CAAC;IAC5F,CAAC;CAEF;AAtHD,8DAsHC","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\n/** @packageDocumentation\r\n * @module Topology\r\n */\r\n\r\nimport { LineString3d } from \"../curve/LineString3d\";\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Point3dArray } from \"../geometry3d/PointHelpers\";\r\nimport {PolygonOps} from \"../geometry3d/PolygonOps\";\r\nimport {PolylineOps} from \"../geometry3d/PolylineOps\";\r\ntype AnnounceLoopAndTrianglesFunction = (loop: Point3d[], triangles: Point3d[][]) => void;\r\n\r\n/**\r\n * Class with static methods to triangulate various forms of possibly non-planar polygons.\r\n * @public\r\n */\r\nexport class SpacePolygonTriangulation {\r\n\r\n /**\r\n * * Return a number which is:\r\n * * 0 for collapsed (zero area) triangle\r\n * * positive for non-zero area\r\n * * larger is \"better\"\r\n * * Specifically, return (if well defined) the area divided by summed squares of edge lengths.\r\n * @param point0\r\n * @param point1\r\n * @param point2\r\n */\r\n public static spaceTriangleAspectRatio(point0: Point3d, point1: Point3d, point2: Point3d): number {\r\n const crossProduct = point0.crossProductToPoints (point1, point2);\r\n const area = 0.5 * crossProduct.magnitude ();\r\n const summedEdgeSquares = point0.distanceSquared (point1) + point1.distanceSquared (point2) + point2.distanceSquared (point0);\r\n return Geometry.safeDivideFraction (area, summedEdgeSquares, 0.0);\r\n }\r\n /**\r\n * * Treat a space quad as two triangles with interior diagonal from point0 to point2\r\n * * Return the smaller of the aspect ratios of the two triangles.\r\n * * The quad edges proceed in the order [point0, point1, point2, point3]\r\n * @param point0 first point of quad\r\n * @param point1 second point of quad (diagonally opposite of point3)\r\n * @param point2 third point (diagonally opposite point0)\r\n * @param point3 fourth point\r\n */\r\n public static spaceQuadDiagonalAspectRatio(point0: Point3d, point1: Point3d, point2: Point3d, point3: Point3d): number{\r\n const q012 = this.spaceTriangleAspectRatio (point0, point1, point2);\r\n const q023 = this.spaceTriangleAspectRatio (point0, point2, point3);\r\n return Math.max (q012, q023);\r\n }\r\n /** \"Triangulate\" by cutting of the ear with best aspect ratio. Reject if successive normals have negative dot product with PolygonOps.AreaNormal */\r\n public static triangulateGreedyEarCut(points: Point3d[], announceLoopAndTriangles: AnnounceLoopAndTrianglesFunction): boolean{\r\n const normalA = PolygonOps.areaNormal (points);\r\n const triangles: Point3d[][] = [];\r\n const myPoints = points.slice ();\r\n PolylineOps.removeClosurePoint (myPoints);\r\n // first pass deals with entire array.\r\n // each pass lops off one point.\r\n for (;myPoints.length > 2;){\r\n // Find the ear candidate whose cross product vector has largest dot product (large area, best alignment with overall).\r\n let bestRatio = -1.0;\r\n let bestRatioIndex0 = 0;\r\n let i0 = myPoints.length - 2;\r\n let i1 = myPoints.length - 1;\r\n let i2;\r\n for (i2 = 0; i2 < myPoints.length; i0 = i1, i1 = i2, i2++){\r\n const ratio = this.spaceTriangleAspectRatio (myPoints[i0], myPoints[i1], myPoints[i2]);\r\n const normalB = myPoints[i0].crossProductToPoints (myPoints[i1], myPoints[i2]);\r\n if (normalB.dotProduct (normalA) > 0 && ratio > bestRatio){\r\n bestRatio = ratio;\r\n bestRatioIndex0 = i0;\r\n }\r\n }\r\n if (bestRatio <= 0.0)\r\n return false;\r\n // add the ear to the result\r\n i0 = bestRatioIndex0;\r\n i1 = (i0 + 1) % myPoints.length;\r\n i2 = (i1 + 1) % myPoints.length;\r\n const t = [];\r\n t.push (myPoints[i0], myPoints[i1], myPoints[i2]);\r\n // remove the middle point\r\n myPoints.splice (i1, 1);\r\n triangles.push(t);\r\n }\r\n announceLoopAndTriangles (points, triangles);\r\n return true;\r\n }\r\n\r\n private static triangulateSimplestSpaceLoopGo(points: Point3d[], announceLoopAndTriangles: AnnounceLoopAndTrianglesFunction,\r\n maxPerimeter: number | undefined): boolean{\r\n const n = Point3dArray.countNonDuplicates (points);\r\n if (maxPerimeter !== undefined && Point3dArray.sumEdgeLengths (points, true, n) > maxPerimeter)\r\n return false;\r\n if (n < 3)\r\n return false;\r\n if (n === 3){\r\n if (this.spaceTriangleAspectRatio (points[0], points[1], points[2]) === 0)\r\n return false;\r\n // already a triangle . . .\r\n announceLoopAndTriangles (points, [points.slice ()]);\r\n return true;\r\n }\r\n if (n === 4){\r\n const d02 = this.spaceQuadDiagonalAspectRatio (points[0], points[1], points[2], points[3]);\r\n const d13 = this.spaceQuadDiagonalAspectRatio (points[1], points[2], points[3], points[0]);\r\n if (d02 === 0.0 && d13 === 0.0)\r\n return false;\r\n // announce the two triangles with better aspect ratios ....\r\n if (d02 > d13){\r\n announceLoopAndTriangles (points, [[points[0], points[1], points[2]], [points[2], points[3], points[0]]]);\r\n return true;\r\n } else {\r\n announceLoopAndTriangles (points, [[points[0], points[1], points[3]], [points[3], points[1], points[2]]]);\r\n return true;\r\n }\r\n }\r\n return this.triangulateGreedyEarCut (points, announceLoopAndTriangles);\r\n }\r\n /**\r\n * * Emit triangles for a (possibly non-planar) loop for various simple cases:\r\n * * only 3 points: just emit that triangle.\r\n * * only 4 points: split across a diagonal, choosing the one with better aspect ratios of its two triangles.\r\n * * BUT\r\n * * do not complete the triangulation if perimeter is larger than maxPerimeter (i.e. only consider small areas)\r\n * * Hence it is expected that the caller will use this as the first attempt, possibly followed by calls to other more adventurous methods.\r\n */\r\n public static triangulateSimplestSpaceLoop(loop: Point3d [] | LineString3d,\r\n announceLoopAndTriangles: AnnounceLoopAndTrianglesFunction,\r\n maxPerimeter?: number): boolean{\r\n if (loop instanceof LineString3d)\r\n return this.triangulateSimplestSpaceLoopGo (loop.points, announceLoopAndTriangles, maxPerimeter);\r\n // (array case by exhaustion)\r\n return this.triangulateSimplestSpaceLoopGo (loop, announceLoopAndTriangles, maxPerimeter);\r\n }\r\n\r\n}\r\n"]}
@@ -221,6 +221,7 @@ export * from "./polyface/PolyfaceClip";
221
221
  export * from "./polyface/TaggedNumericData";
222
222
  export * from "./topology/Graph";
223
223
  export * from "./topology/Triangulation";
224
+ export * from "./topology/SpaceTriangulation";
224
225
  export * from "./serialization/IModelJsonSchema";
225
226
  export * from "./serialization/DeepCompare";
226
227
  export * from "./serialization/GeometrySamples";
@@ -1 +1 @@
1
- {"version":3,"file":"core-geometry.d.ts","sourceRoot":"","sources":["../../src/core-geometry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core-geometry.d.ts","sourceRoot":"","sources":["../../src/core-geometry.ts"],"names":[],"mappings":"AAKA;;GAEG;AASH;;;GAGG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH;;;;;;;;;GASG;AAGH;;;;;;;;GAQG;AAGH;;;;;;;;;;;;GAYG;AAEH;;;GAGG;AAEH;;;GAGG;AAEH;;;;GAIG;AAEH;;;;;;;;;;GAUG;AAEH;;;GAGG;AAEH;;;GAGG;AACH,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wCAAwC,CAAC;AACvD,cAAc,kCAAkC,CAAC;AACjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wCAAwC,CAAC;AACvD,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC;AAClD,cAAc,uBAAuB,CAAC;AACtC,cAAc,oCAAoC,CAAC;AACnD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,wCAAwC,CAAC;AACvD,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kCAAkC,CAAC;AACjD,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,iCAAiC,CAAC;AAEhD,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uCAAuC,CAAC;AACtD,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wCAAwC,CAAC;AACvD,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAE7C,cAAc,eAAe,CAAC;AAC9B,cAAc,qCAAqC,CAAC;AACpD,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qCAAqC,CAAC;AACpD,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,+CAA+C,CAAC;AAC9D,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,OAAO,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC"}
@@ -240,6 +240,7 @@ export * from "./polyface/PolyfaceClip";
240
240
  export * from "./polyface/TaggedNumericData";
241
241
  export * from "./topology/Graph";
242
242
  export * from "./topology/Triangulation";
243
+ export * from "./topology/SpaceTriangulation";
243
244
  export * from "./serialization/IModelJsonSchema";
244
245
  export * from "./serialization/DeepCompare";
245
246
  export * from "./serialization/GeometrySamples";
@@ -1 +1 @@
1
- {"version":3,"file":"core-geometry.js","sourceRoot":"","sources":["../../src/core-geometry.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\n/** @packageDocumentation\r\n * @module Utility\r\n */\r\n\r\n// REMARK:\r\n// The docs-group-description comments are followed by empty classes with names corresponding to the doc-group.\r\n// Normally (in committed code) these are commented out.\r\n// The comments have distinctive strings so that simple search and replace can make the \"real\".\r\n// This is useful when working on the documentation: When the empty classes are present, VSCode will format the doc comments\r\n// for and display them when the mouse hovers over the class name.\r\n\r\n/**\r\n * @docs-package-description\r\n * The core-geometry package contains classes for working with geometry: points, vectors, curves, surfaces, and analytic solids\r\n */\r\n/**\r\n * @docs-group-description CartesianGeometry\r\n * Points, Vectors, Planes, and Transformations for x,y,z geometry.\r\n * * Fundamental cartesian geometry objects:\r\n * * Point2d, Point3d -- points with x,y,z coordinates\r\n * * Vector2d, Vector3d -- vectors with x,y,z coordinates\r\n * * Matrix3d -- 3x3 matrix\r\n * * * commonly used for pure rotations\r\n * * * scale and skew entries are also allowed.\r\n * * Transform -- an origin and axes.\r\n * * Range1d, Range2d, Range3d -- subsets of 1d, 2d, and 3d space bounded by low and high values.\r\n * * Ray3d -- a ray defined by origin and direction vector\r\n * * Plane3dByOriginAndUnitNormal -- a plane defined by an origin and a single vector which is perpendicular to the plane\r\n * * plane3dByOriginAndVectors -- a plane defined by an origin and two vectors in the plane.\r\n * * Angles\r\n * * Angle -- a strongly typed angle object whose method names make it clear whether input and outputs are degrees or radians.\r\n * * AngleSweep -- an angular interval\r\n * * LatitudeLongitudeNumber -- carrier for position and altitude on sphere or ellipsoid\r\n * * YawPitchAndRollAngles -- 3 angles that define a rotated coordinate system.\r\n * * Utility classes\r\n * * FrameBuilder -- construction of coordinate frames from mixed data sources.\r\n * * ClipPlane -- a single plane\r\n * * ConvexClipPlaneSet -- an array of planes bounding a convex volume\r\n * * ClipPlaneSet -- an array of ConvexClipPlaneSet, defining the union of their volumes\r\n * * BilinearPatch -- twisted quadrilateral defined by 4 points\r\n * * BarycentricTriangle -- triangle defined by 3 points.\r\n * * Constant -- various numeric values exported as readonly constants\r\n */\r\n// doc:export class CartesianGeometryDoc { }\r\n/**\r\n * @docs-group-description ArraysAndInterfaces\r\n * These classes support array operations and inheritance-based algorithms.\r\n * * Arrays\r\n * * GrowableArray -- A carrier for a Float64Array, with methods that hide reallocation of the underlying array as contents are added.\r\n * * Point2dArray, Point3dArray, Point4dArray, Vector3dArray -- miscellaneous operations on arrays of 2d and 3d points.\r\n * * Interfaces\r\n * * GeometryHandler -- a double-dispatch protocol used for efficient implementation of algorithms that work on many geometry types.\r\n *\r\n */\r\n// doc:export class ArraysAndInterfacesDoc { }\r\n\r\n/**\r\n * @docs-group-description Bspline\r\n * A bspline curve or surface is used for curved freeform geometry defined by controls points (sometimes called poles).\r\n * * BSplineCurve -- a curve defined by control points (which are not on the curve)\r\n * * InterpolationCurve -- a curve defined by passthrough points, with \"good\" visual properties\r\n * * BSplineSurfaceXYZ -- a surface with XYZ\r\n * * BsplineSurfaceXYZW -- a surface with weighted (rational) XYZ coordinates\r\n * * KnotVector -- vector of breakpoints in bspline definitions.\r\n */\r\n// doc:export class BsplineDoc { }\r\n\r\n/**\r\n * @docs-group-description Curve\r\n * Curves in the GeometryQuery hierarchy: LineSegment3d, LineString3d, Arc3d, TransitionSpiral3d\r\n * * CurvePrimitive -- base class for parametric curves\r\n * * LineSegment3d -- a (bounded) portion of an unbounded line\r\n * * Arc3d -- a circular or elliptic arc\r\n * * LineString3d -- a sequence of points joined by line segments\r\n * * TransitionSpiral -- controlled transition between curvatures\r\n * * Support classes\r\n * * PointString3d -- a sequence of isolated points\r\n * * StrokeOptions -- tolerances to describe stroking accuracy\r\n * * RecursiveCurveProcessor, RecursiveCurveProcessorWithStack -- algorithmic support for trees with CurvePrimitives at the leaf level.\r\n */\r\n// doc:export class CurveDoc { }\r\n/**\r\n * @docs-group-description Numerics\r\n * The Numerics classes have geometric and numeric methods used during large algorithms in other classes.\r\n */\r\n// doc:export class NumericsDoc { }\r\n/**\r\n * @docs-group-description Polyface\r\n * A Polyface is a mesh structure with arrays of points that are shared among multiple incident facets.\r\n */\r\n// doc:export class PolyfaceDoc { }\r\n/**\r\n * @docs-group-description Serialization\r\n * These classes are related to serialization of geometry classes.\r\n * * IModelJson.Reader, IModelJson.Writer -- Conversion of in-memory geometry objects to json objects for persistence and transmission.\r\n */\r\n// doc:export class SerializationDoc { }\r\n/**\r\n * @docs-group-description Solid\r\n * Analytic Solids in the GeometryQuery hierarchy: Box, Sphere, Cone, TorusPipe, LinearSweep, RotationalSweep, RuledSweep\r\n * * Box -- a box solid. This is usually rectangular on all faces, but can in one directly like a view frustum\r\n * * Sphere -- a sphere\r\n * * Cone -- a cone or cylinder\r\n * * TorusPipe -- a pipe elbow\r\n * * LinearSweep -- a linear sweep of a base contour\r\n * * RotationalSweep -- a rotational sweep of a base contour\r\n * * RuledSweep -- two or more similarly structured contours joined by linear rule lines.\r\n */\r\n// doc:export class SolidDOc { }\r\n/**\r\n * @docs-group-description Topology\r\n * The Topology classes provide adjacency structures used in triangulations.\r\n */\r\n// doc:export class TopologyDoc { }\r\n/**\r\n * @docs-group-description RangeSearch\r\n * Support classes for searching collections of ranges.\r\n */\r\nexport * from \"./geometry3d/Angle\";\r\nexport * from \"./geometry3d/AngleSweep\";\r\nexport * from \"./geometry3d/LongitudeLatitudeAltitude\";\r\nexport * from \"./geometry3d/BarycentricTriangle\";\r\nexport * from \"./geometry3d/BilinearPatch\";\r\nexport * from \"./geometry3d/Ellipsoid\";\r\nexport * from \"./geometry3d/FrameBuilder\";\r\nexport * from \"./geometry3d/FrustumAnimation\";\r\nexport * from \"./geometry3d/GeometryHandler\";\r\nexport * from \"./geometry3d/GrowableBlockedArray\";\r\nexport * from \"./geometry3d/GrowableFloat64Array\";\r\nexport * from \"./geometry3d/GrowableXYArray\";\r\nexport * from \"./geometry3d/GrowableXYZArray\";\r\nexport * from \"./geometry3d/IndexedCollectionInterval\";\r\nexport * from \"./geometry3d/IndexedXYCollection\";\r\nexport * from \"./geometry3d/IndexedXYZCollection\";\r\nexport * from \"./geometry3d/Matrix3d\";\r\nexport * from \"./geometry3d/OrderedRotationAngles\";\r\nexport * from \"./geometry3d/Plane3dByOriginAndUnitNormal\";\r\nexport * from \"./geometry3d/Plane3dByOriginAndVectors\";\r\nexport * from \"./geometry3d/Point2dArrayCarrier\";\r\nexport * from \"./geometry3d/Point2dVector2d\";\r\nexport * from \"./geometry3d/Point3dVector3d\";\r\nexport * from \"./geometry3d/PointHelpers\";\r\nexport * from \"./geometry3d/Point3dArrayCarrier\";\r\nexport * from \"./geometry3d/PolylineOps\";\r\nexport * from \"./geometry3d/PolygonOps\";\r\nexport * from \"./geometry3d/Range\";\r\nexport * from \"./geometry3d/Ray3d\";\r\nexport * from \"./geometry3d/Segment1d\";\r\nexport * from \"./geometry3d/Transform\";\r\nexport * from \"./geometry3d/UVSurfaceOps\";\r\nexport * from \"./geometry3d/XYZProps\";\r\nexport * from \"./geometry3d/YawPitchRollAngles\";\r\n\r\nexport * from \"./Geometry\";\r\nexport * from \"./Constant\";\r\nexport * from \"./clipping/BooleanClipFactory\";\r\nexport * from \"./clipping/ClipPlane\";\r\nexport * from \"./clipping/ConvexClipPlaneSet\";\r\nexport * from \"./clipping/UnionOfConvexClipPlaneSets\";\r\nexport * from \"./clipping/ClipPrimitive\";\r\nexport * from \"./clipping/ClipVector\";\r\nexport * from \"./clipping/ClipUtils\";\r\nexport * from \"./numerics/ConvexPolygon2d\";\r\nexport * from \"./geometry4d/PlaneByOriginAndVectors4d\";\r\nexport * from \"./geometry4d/Point4d\";\r\nexport * from \"./geometry4d/Matrix4d\";\r\nexport * from \"./geometry4d/Map4d\";\r\nexport * from \"./geometry4d/MomentData\";\r\nexport * from \"./numerics/BezierPolynomials\";\r\nexport * from \"./numerics/ClusterableArray\";\r\nexport * from \"./numerics/Newton\";\r\nexport * from \"./numerics/Complex\";\r\nexport * from \"./numerics/ConvexPolygon2d\";\r\nexport * from \"./numerics/Newton\";\r\nexport * from \"./numerics/PascalCoefficients\";\r\nexport * from \"./numerics/Polynomials\";\r\nexport * from \"./numerics/Quadrature\";\r\nexport * from \"./numerics/Range1dArray\";\r\nexport * from \"./numerics/TriDiagonalSystem\";\r\n\r\nexport * from \"./curve/Arc3d\";\r\nexport * from \"./curve/ConstructCurveBetweenCurves\";\r\nexport * from \"./curve/CoordinateXYZ\";\r\nexport * from \"./curve/CurveChain\";\r\nexport * from \"./curve/CurveChainWithDistanceIndex\";\r\nexport * from \"./curve/CurveExtendMode\";\r\nexport * from \"./curve/CurveCollection\";\r\nexport * from \"./curve/CurveCurve\";\r\nexport * from \"./curve/CurveCurveIntersectXY\";\r\nexport * from \"./curve/CurveCurveIntersectXYZ\";\r\nexport * from \"./curve/CurveLocationDetail\";\r\nexport * from \"./curve/CurveFactory\";\r\nexport * from \"./curve/CurvePrimitive\";\r\nexport * from \"./curve/CurveProcessor\";\r\nexport * from \"./curve/GeometryQuery\";\r\nexport * from \"./curve/LineSegment3d\";\r\nexport * from \"./curve/LineString3d\";\r\nexport * from \"./curve/Loop\";\r\nexport * from \"./curve/ParityRegion\";\r\nexport * from \"./curve/Path\";\r\nexport * from \"./curve/RegionMomentsXY\";\r\nexport * from \"./curve/RegionOps\";\r\nexport * from \"./curve/internalContexts/PolygonOffsetContext\";\r\nexport * from \"./curve/PointString3d\";\r\nexport * from \"./curve/ProxyCurve\";\r\nexport * from \"./curve/StrokeOptions\";\r\nexport * from \"./curve/spiral/TransitionSpiral3d\";\r\nexport * from \"./curve/spiral/IntegratedSpiral3d\";\r\nexport * from \"./curve/spiral/DirectSpiral3d\";\r\nexport * from \"./curve/UnionRegion\";\r\nexport * from \"./curve/Query/StrokeCountMap\";\r\nexport * from \"./solid/Box\";\r\nexport * from \"./solid/Cone\";\r\nexport * from \"./solid/LinearSweep\";\r\nexport * from \"./solid/RotationalSweep\";\r\nexport * from \"./solid/RuledSweep\";\r\nexport * from \"./solid/SolidPrimitive\";\r\nexport * from \"./solid/Sphere\";\r\nexport * from \"./solid/SweepContour\";\r\nexport * from \"./solid/TorusPipe\";\r\nexport * from \"./bspline/AkimaCurve3d\";\r\nexport * from \"./bspline/Bezier1dNd\";\r\nexport * from \"./bspline/BezierCurveBase\";\r\nexport * from \"./bspline/BezierCurve3d\";\r\nexport * from \"./bspline/BezierCurve3dH\";\r\nexport * from \"./bspline/BSplineCurve\";\r\nexport * from \"./bspline/BSplineCurveOps\";\r\nexport * from \"./bspline/BSpline1dNd\";\r\nexport * from \"./bspline/BSplineCurve3dH\";\r\nexport * from \"./bspline/BSplineSurface\";\r\nexport * from \"./bspline/InterpolationCurve3d\";\r\nexport * from \"./bspline/KnotVector\";\r\nexport * from \"./polyface/AuxData\";\r\nexport * from \"./polyface/BoxTopology\";\r\nexport * from \"./polyface/FacetFaceData\";\r\nexport * from \"./polyface/Polyface\";\r\nexport * from \"./polyface/IndexedPolyfaceVisitor\";\r\nexport * from \"./polyface/PolyfaceBuilder\";\r\nexport * from \"./polyface/PolyfaceData\";\r\nexport * from \"./polyface/PolyfaceQuery\";\r\nexport * from \"./polyface/PolyfaceClip\";\r\nexport * from \"./polyface/TaggedNumericData\";\r\nexport * from \"./topology/Graph\";\r\nexport * from \"./topology/Triangulation\";\r\nexport * from \"./serialization/IModelJsonSchema\";\r\nexport * from \"./serialization/DeepCompare\";\r\nexport * from \"./serialization/GeometrySamples\";\r\nexport { BentleyGeometryFlatBuffer } from \"./serialization/BentleyGeometryFlatBuffer\";\r\n"]}
1
+ {"version":3,"file":"core-geometry.js","sourceRoot":"","sources":["../../src/core-geometry.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\n/** @packageDocumentation\r\n * @module Utility\r\n */\r\n\r\n// REMARK:\r\n// The docs-group-description comments are followed by empty classes with names corresponding to the doc-group.\r\n// Normally (in committed code) these are commented out.\r\n// The comments have distinctive strings so that simple search and replace can make the \"real\".\r\n// This is useful when working on the documentation: When the empty classes are present, VSCode will format the doc comments\r\n// for and display them when the mouse hovers over the class name.\r\n\r\n/**\r\n * @docs-package-description\r\n * The core-geometry package contains classes for working with geometry: points, vectors, curves, surfaces, and analytic solids\r\n */\r\n/**\r\n * @docs-group-description CartesianGeometry\r\n * Points, Vectors, Planes, and Transformations for x,y,z geometry.\r\n * * Fundamental cartesian geometry objects:\r\n * * Point2d, Point3d -- points with x,y,z coordinates\r\n * * Vector2d, Vector3d -- vectors with x,y,z coordinates\r\n * * Matrix3d -- 3x3 matrix\r\n * * * commonly used for pure rotations\r\n * * * scale and skew entries are also allowed.\r\n * * Transform -- an origin and axes.\r\n * * Range1d, Range2d, Range3d -- subsets of 1d, 2d, and 3d space bounded by low and high values.\r\n * * Ray3d -- a ray defined by origin and direction vector\r\n * * Plane3dByOriginAndUnitNormal -- a plane defined by an origin and a single vector which is perpendicular to the plane\r\n * * plane3dByOriginAndVectors -- a plane defined by an origin and two vectors in the plane.\r\n * * Angles\r\n * * Angle -- a strongly typed angle object whose method names make it clear whether input and outputs are degrees or radians.\r\n * * AngleSweep -- an angular interval\r\n * * LatitudeLongitudeNumber -- carrier for position and altitude on sphere or ellipsoid\r\n * * YawPitchAndRollAngles -- 3 angles that define a rotated coordinate system.\r\n * * Utility classes\r\n * * FrameBuilder -- construction of coordinate frames from mixed data sources.\r\n * * ClipPlane -- a single plane\r\n * * ConvexClipPlaneSet -- an array of planes bounding a convex volume\r\n * * ClipPlaneSet -- an array of ConvexClipPlaneSet, defining the union of their volumes\r\n * * BilinearPatch -- twisted quadrilateral defined by 4 points\r\n * * BarycentricTriangle -- triangle defined by 3 points.\r\n * * Constant -- various numeric values exported as readonly constants\r\n */\r\n// doc:export class CartesianGeometryDoc { }\r\n/**\r\n * @docs-group-description ArraysAndInterfaces\r\n * These classes support array operations and inheritance-based algorithms.\r\n * * Arrays\r\n * * GrowableArray -- A carrier for a Float64Array, with methods that hide reallocation of the underlying array as contents are added.\r\n * * Point2dArray, Point3dArray, Point4dArray, Vector3dArray -- miscellaneous operations on arrays of 2d and 3d points.\r\n * * Interfaces\r\n * * GeometryHandler -- a double-dispatch protocol used for efficient implementation of algorithms that work on many geometry types.\r\n *\r\n */\r\n// doc:export class ArraysAndInterfacesDoc { }\r\n\r\n/**\r\n * @docs-group-description Bspline\r\n * A bspline curve or surface is used for curved freeform geometry defined by controls points (sometimes called poles).\r\n * * BSplineCurve -- a curve defined by control points (which are not on the curve)\r\n * * InterpolationCurve -- a curve defined by passthrough points, with \"good\" visual properties\r\n * * BSplineSurfaceXYZ -- a surface with XYZ\r\n * * BsplineSurfaceXYZW -- a surface with weighted (rational) XYZ coordinates\r\n * * KnotVector -- vector of breakpoints in bspline definitions.\r\n */\r\n// doc:export class BsplineDoc { }\r\n\r\n/**\r\n * @docs-group-description Curve\r\n * Curves in the GeometryQuery hierarchy: LineSegment3d, LineString3d, Arc3d, TransitionSpiral3d\r\n * * CurvePrimitive -- base class for parametric curves\r\n * * LineSegment3d -- a (bounded) portion of an unbounded line\r\n * * Arc3d -- a circular or elliptic arc\r\n * * LineString3d -- a sequence of points joined by line segments\r\n * * TransitionSpiral -- controlled transition between curvatures\r\n * * Support classes\r\n * * PointString3d -- a sequence of isolated points\r\n * * StrokeOptions -- tolerances to describe stroking accuracy\r\n * * RecursiveCurveProcessor, RecursiveCurveProcessorWithStack -- algorithmic support for trees with CurvePrimitives at the leaf level.\r\n */\r\n// doc:export class CurveDoc { }\r\n/**\r\n * @docs-group-description Numerics\r\n * The Numerics classes have geometric and numeric methods used during large algorithms in other classes.\r\n */\r\n// doc:export class NumericsDoc { }\r\n/**\r\n * @docs-group-description Polyface\r\n * A Polyface is a mesh structure with arrays of points that are shared among multiple incident facets.\r\n */\r\n// doc:export class PolyfaceDoc { }\r\n/**\r\n * @docs-group-description Serialization\r\n * These classes are related to serialization of geometry classes.\r\n * * IModelJson.Reader, IModelJson.Writer -- Conversion of in-memory geometry objects to json objects for persistence and transmission.\r\n */\r\n// doc:export class SerializationDoc { }\r\n/**\r\n * @docs-group-description Solid\r\n * Analytic Solids in the GeometryQuery hierarchy: Box, Sphere, Cone, TorusPipe, LinearSweep, RotationalSweep, RuledSweep\r\n * * Box -- a box solid. This is usually rectangular on all faces, but can in one directly like a view frustum\r\n * * Sphere -- a sphere\r\n * * Cone -- a cone or cylinder\r\n * * TorusPipe -- a pipe elbow\r\n * * LinearSweep -- a linear sweep of a base contour\r\n * * RotationalSweep -- a rotational sweep of a base contour\r\n * * RuledSweep -- two or more similarly structured contours joined by linear rule lines.\r\n */\r\n// doc:export class SolidDOc { }\r\n/**\r\n * @docs-group-description Topology\r\n * The Topology classes provide adjacency structures used in triangulations.\r\n */\r\n// doc:export class TopologyDoc { }\r\n/**\r\n * @docs-group-description RangeSearch\r\n * Support classes for searching collections of ranges.\r\n */\r\nexport * from \"./geometry3d/Angle\";\r\nexport * from \"./geometry3d/AngleSweep\";\r\nexport * from \"./geometry3d/LongitudeLatitudeAltitude\";\r\nexport * from \"./geometry3d/BarycentricTriangle\";\r\nexport * from \"./geometry3d/BilinearPatch\";\r\nexport * from \"./geometry3d/Ellipsoid\";\r\nexport * from \"./geometry3d/FrameBuilder\";\r\nexport * from \"./geometry3d/FrustumAnimation\";\r\nexport * from \"./geometry3d/GeometryHandler\";\r\nexport * from \"./geometry3d/GrowableBlockedArray\";\r\nexport * from \"./geometry3d/GrowableFloat64Array\";\r\nexport * from \"./geometry3d/GrowableXYArray\";\r\nexport * from \"./geometry3d/GrowableXYZArray\";\r\nexport * from \"./geometry3d/IndexedCollectionInterval\";\r\nexport * from \"./geometry3d/IndexedXYCollection\";\r\nexport * from \"./geometry3d/IndexedXYZCollection\";\r\nexport * from \"./geometry3d/Matrix3d\";\r\nexport * from \"./geometry3d/OrderedRotationAngles\";\r\nexport * from \"./geometry3d/Plane3dByOriginAndUnitNormal\";\r\nexport * from \"./geometry3d/Plane3dByOriginAndVectors\";\r\nexport * from \"./geometry3d/Point2dArrayCarrier\";\r\nexport * from \"./geometry3d/Point2dVector2d\";\r\nexport * from \"./geometry3d/Point3dVector3d\";\r\nexport * from \"./geometry3d/PointHelpers\";\r\nexport * from \"./geometry3d/Point3dArrayCarrier\";\r\nexport * from \"./geometry3d/PolylineOps\";\r\nexport * from \"./geometry3d/PolygonOps\";\r\nexport * from \"./geometry3d/Range\";\r\nexport * from \"./geometry3d/Ray3d\";\r\nexport * from \"./geometry3d/Segment1d\";\r\nexport * from \"./geometry3d/Transform\";\r\nexport * from \"./geometry3d/UVSurfaceOps\";\r\nexport * from \"./geometry3d/XYZProps\";\r\nexport * from \"./geometry3d/YawPitchRollAngles\";\r\n\r\nexport * from \"./Geometry\";\r\nexport * from \"./Constant\";\r\nexport * from \"./clipping/BooleanClipFactory\";\r\nexport * from \"./clipping/ClipPlane\";\r\nexport * from \"./clipping/ConvexClipPlaneSet\";\r\nexport * from \"./clipping/UnionOfConvexClipPlaneSets\";\r\nexport * from \"./clipping/ClipPrimitive\";\r\nexport * from \"./clipping/ClipVector\";\r\nexport * from \"./clipping/ClipUtils\";\r\nexport * from \"./numerics/ConvexPolygon2d\";\r\nexport * from \"./geometry4d/PlaneByOriginAndVectors4d\";\r\nexport * from \"./geometry4d/Point4d\";\r\nexport * from \"./geometry4d/Matrix4d\";\r\nexport * from \"./geometry4d/Map4d\";\r\nexport * from \"./geometry4d/MomentData\";\r\nexport * from \"./numerics/BezierPolynomials\";\r\nexport * from \"./numerics/ClusterableArray\";\r\nexport * from \"./numerics/Newton\";\r\nexport * from \"./numerics/Complex\";\r\nexport * from \"./numerics/ConvexPolygon2d\";\r\nexport * from \"./numerics/Newton\";\r\nexport * from \"./numerics/PascalCoefficients\";\r\nexport * from \"./numerics/Polynomials\";\r\nexport * from \"./numerics/Quadrature\";\r\nexport * from \"./numerics/Range1dArray\";\r\nexport * from \"./numerics/TriDiagonalSystem\";\r\n\r\nexport * from \"./curve/Arc3d\";\r\nexport * from \"./curve/ConstructCurveBetweenCurves\";\r\nexport * from \"./curve/CoordinateXYZ\";\r\nexport * from \"./curve/CurveChain\";\r\nexport * from \"./curve/CurveChainWithDistanceIndex\";\r\nexport * from \"./curve/CurveExtendMode\";\r\nexport * from \"./curve/CurveCollection\";\r\nexport * from \"./curve/CurveCurve\";\r\nexport * from \"./curve/CurveCurveIntersectXY\";\r\nexport * from \"./curve/CurveCurveIntersectXYZ\";\r\nexport * from \"./curve/CurveLocationDetail\";\r\nexport * from \"./curve/CurveFactory\";\r\nexport * from \"./curve/CurvePrimitive\";\r\nexport * from \"./curve/CurveProcessor\";\r\nexport * from \"./curve/GeometryQuery\";\r\nexport * from \"./curve/LineSegment3d\";\r\nexport * from \"./curve/LineString3d\";\r\nexport * from \"./curve/Loop\";\r\nexport * from \"./curve/ParityRegion\";\r\nexport * from \"./curve/Path\";\r\nexport * from \"./curve/RegionMomentsXY\";\r\nexport * from \"./curve/RegionOps\";\r\nexport * from \"./curve/internalContexts/PolygonOffsetContext\";\r\nexport * from \"./curve/PointString3d\";\r\nexport * from \"./curve/ProxyCurve\";\r\nexport * from \"./curve/StrokeOptions\";\r\nexport * from \"./curve/spiral/TransitionSpiral3d\";\r\nexport * from \"./curve/spiral/IntegratedSpiral3d\";\r\nexport * from \"./curve/spiral/DirectSpiral3d\";\r\nexport * from \"./curve/UnionRegion\";\r\nexport * from \"./curve/Query/StrokeCountMap\";\r\nexport * from \"./solid/Box\";\r\nexport * from \"./solid/Cone\";\r\nexport * from \"./solid/LinearSweep\";\r\nexport * from \"./solid/RotationalSweep\";\r\nexport * from \"./solid/RuledSweep\";\r\nexport * from \"./solid/SolidPrimitive\";\r\nexport * from \"./solid/Sphere\";\r\nexport * from \"./solid/SweepContour\";\r\nexport * from \"./solid/TorusPipe\";\r\nexport * from \"./bspline/AkimaCurve3d\";\r\nexport * from \"./bspline/Bezier1dNd\";\r\nexport * from \"./bspline/BezierCurveBase\";\r\nexport * from \"./bspline/BezierCurve3d\";\r\nexport * from \"./bspline/BezierCurve3dH\";\r\nexport * from \"./bspline/BSplineCurve\";\r\nexport * from \"./bspline/BSplineCurveOps\";\r\nexport * from \"./bspline/BSpline1dNd\";\r\nexport * from \"./bspline/BSplineCurve3dH\";\r\nexport * from \"./bspline/BSplineSurface\";\r\nexport * from \"./bspline/InterpolationCurve3d\";\r\nexport * from \"./bspline/KnotVector\";\r\nexport * from \"./polyface/AuxData\";\r\nexport * from \"./polyface/BoxTopology\";\r\nexport * from \"./polyface/FacetFaceData\";\r\nexport * from \"./polyface/Polyface\";\r\nexport * from \"./polyface/IndexedPolyfaceVisitor\";\r\nexport * from \"./polyface/PolyfaceBuilder\";\r\nexport * from \"./polyface/PolyfaceData\";\r\nexport * from \"./polyface/PolyfaceQuery\";\r\nexport * from \"./polyface/PolyfaceClip\";\r\nexport * from \"./polyface/TaggedNumericData\";\r\nexport * from \"./topology/Graph\";\r\nexport * from \"./topology/Triangulation\";\r\nexport * from \"./topology/SpaceTriangulation\";\r\nexport * from \"./serialization/IModelJsonSchema\";\r\nexport * from \"./serialization/DeepCompare\";\r\nexport * from \"./serialization/GeometrySamples\";\r\nexport { BentleyGeometryFlatBuffer } from \"./serialization/BentleyGeometryFlatBuffer\";\r\n"]}
@@ -303,6 +303,9 @@ export declare class LineString3d extends CurvePrimitive implements BeJSONFuncti
303
303
  * * if fraction is given, "duplicate" considers both point and fraction.
304
304
  */
305
305
  appendStrokePoint(point: Point3d, fraction?: number): void;
306
+ /** Compress out duplicate points (according to point.isAlmostEqual)
307
+ */
308
+ removeDuplicatePoints(tolerance?: number): void;
306
309
  /** Append a suitable evaluation of a curve ..
307
310
  * * always append the curve point
308
311
  * * if fraction array is present, append the fraction
@@ -1 +1 @@
1
- {"version":3,"file":"LineString3d.d.ts","sourceRoot":"","sources":["../../../src/curve/LineString3d.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LineString3d.d.ts","sourceRoot":"","sources":["../../../src/curve/LineString3d.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAa,eAAe,EAAY,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAE3F,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,OAAO,EAAE,4BAA4B,EAAE,MAAM,4CAA4C,CAAC;AAC1F,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAsB,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAqB,mBAAmB,EAAqB,MAAM,uBAAuB,CAAC;AAClG,OAAO,EAAE,kCAAkC,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAyChD;;;;;;;;;GASG;AACH,qBAAa,YAAa,SAAQ,cAAe,YAAW,eAAe;IACzE,wCAAwC;IACxC,SAAgB,kBAAkB,gBAAgB;IAElD,OAAO,CAAC,MAAM,CAAC,WAAW,CAAoB;IAC9C,OAAO,CAAC,MAAM,CAAC,WAAW,CAAoB;IAC9C,OAAO,CAAC,MAAM,CAAC,WAAW,CAAoB;IAC9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAuB;IAC9C,uDAAuD;IAChD,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;IACzD;;OAEG;IACH,IAAoB,yBAAyB,IAAI,OAAO,CAAiB;IAEzE,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,UAAU,CAAC,CAAuB;IAC1C,OAAO,CAAC,SAAS,CAAC,CAAkB;IACpC,OAAO,CAAC,YAAY,CAAC,CAAmB;IACxC,OAAO,CAAC,eAAe,CAAC,CAAmB;IAE3C,OAAO,CAAC,aAAa,CAAC,CAAuB;IAC7C,OAAO,CAAC,UAAU,CAAC,CAAuB;IAC1C,OAAO,CAAC,cAAc,CAAC,CAAuB;IAE9C,wCAAwC;IACxC,IAAW,MAAM,IAAI,OAAO,EAAE,CAA2C;IACzE,mEAAmE;IACnE,IAAW,YAAY,IAAI,gBAAgB,CAAyB;IACpE;;;OAGG;IACH,IAAW,SAAS,IAAI,oBAAoB,GAAG,SAAS,CAA4B;IACpF,wHAAwH;IACxH,IAAW,iBAAiB,IAAI,gBAAgB,GAAG,SAAS,CAA8B;IAC1F,sHAAsH;IACtH,IAAW,cAAc,IAAI,eAAe,GAAG,SAAS,CAA2B;IACnF,4HAA4H;IAC5H,IAAW,oBAAoB,IAAI,gBAAgB,GAAG,SAAS,CAAiC;IAChG,2HAA2H;IAC3H,IAAW,aAAa,IAAI,oBAAoB,GAAG,SAAS,CAAgC;IAC5F,0HAA0H;IAC1H,IAAW,YAAY,IAAI,oBAAoB,GAAG,SAAS,CAA4B;IACvF,0HAA0H;IAC1H,IAAW,YAAY,IAAI,oBAAoB,GAAG,SAAS,CAA+B;IAE1F,OAAO;IAOP,yEAAyE;IAClE,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,YAAY;IAK3D;;OAEG;WACW,MAAM,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,YAAY;IAKpD;;OAEG;WACW,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,YAAY;IAKnE,kFAAkF;WACpE,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,cAAc,GAAE,OAAe,GAAG,YAAY;IAkBjG;;;;;;;;OAQG;IACI,SAAS,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE;IAGjC,uFAAuF;IAChF,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAInG;;;OAGG;IACI,QAAQ,CAAC,KAAK,EAAE,OAAO;IAG9B;;;OAGG;IACI,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAE,MAAU;IAGtD;;;OAGG;IACI,WAAW,CAAC,QAAQ,EAAE,MAAM;IAMnC,4GAA4G;IACrG,oBAAoB,IAAI,oBAAoB;IAUnD,0GAA0G;IACnG,mBAAmB,IAAI,eAAe;IAU7C,+GAA+G;IACxG,yBAAyB,IAAI,gBAAgB;IAWpD,+GAA+G;IACxG,sBAAsB,IAAI,gBAAgB;IAWjD,+GAA+G;IACxG,wBAAwB,IAAI,oBAAoB;IAWvD,+GAA+G;IACxG,oBAAoB,IAAI,oBAAoB;IAWnD,+GAA+G;IACxG,uBAAuB,IAAI,oBAAoB;IAWtD;;;OAGG;IACI,UAAU,CAAC,OAAO,EAAE,KAAK;IAMhC;;;OAGG;IACI,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAM1C;;;OAGG;IACI,aAAa,CAAC,MAAM,EAAE,QAAQ;IAMrC;;;OAGG;IACI,gBAAgB,CAAC,MAAM,EAAE,QAAQ;IAMxC;;OAEG;IACI,eAAe;IAKtB,wEAAwE;IACjE,QAAQ;IAGf,0FAA0F;IACnF,yBAAyB,CAAC,SAAS,EAAE,SAAS;IAGrD;;;;;;;;;;OAUG;WACW,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,GAAE,OAAc,GAAG,YAAY;IAe9G;;;;;;OAMG;WACW,sBAAsB,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAE,OAAc,GAAG,YAAY;IAqBxI;;;;;;;;;OASG;IACI,OAAO,CAAC,KAAK,EAAE,YAAY;IAmBlC,mDAAmD;WACrC,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY;IAO3D,uFAAuF;WACzE,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,UAAU,GAAE,OAAe,GAAG,YAAY;IAShH,0EAA0E;WAC5D,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,YAAY;IAMrE,yCAAyC;IAClC,KAAK,IAAI,YAAY;IAK5B;;;OAGG;IACI,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG;IAQ7B;;;OAGG;IACI,MAAM,IAAI,GAAG;IASpB;;OAEG;WACW,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,YAAY;IAGhD;;;;;OAKG;IACI,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAenE;;;;;OAKG;IACI,4BAA4B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK;IAsC5E,2EAA2E;IACpE,8BAA8B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,yBAAyB,GAAG,yBAAyB;IAKtH;;;;OAIG;IACI,4CAA4C,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM;IAMjG,sEAAsE;IACtD,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS;IA+CtF,kDAAkD;IAClC,UAAU;IAK1B,gDAAgD;IACzC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;IAKhE;OACG;IACI,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS;IAGnF,mEAAmE;IAC5D,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS;IAMvE,sEAAsE;IAC/D,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS;IAK1E,sDAAsD;IAC/C,SAAS,IAAI,MAAM;IAC1B,gDAAgD;IAChC,QAAQ;IAKxB,gDAAgD;IACzC,cAAc,IAAI,IAAI;IAO7B,0DAA0D;IACnD,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IASzD,wDAAwD;IACxC,WAAW,IAAI,MAAM;IACrC,gFAAgF;IAChE,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAyB3F,kFAAkF;IAClE,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO;IA0BzG;;;;;;;;;OASG;IACa,8BAA8B,CAAC,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,mBAAmB,GAAG,mBAAmB;IAwCvK,2EAA2E;IACpE,WAAW,IAAI,MAAM;IAC5B;;;;;;;OAOG;IACI,eAAe,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS;IAU/D,wGAAwG;IACxF,YAAY,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,2BAA2B,EAAE,MAAM,CAAC,EAAE,mBAAmB,GAAG,mBAAmB;IAgCzI,2DAA2D;IACpD,SAAS,CAAC,KAAK,EAAE,4BAA4B,GAAG,OAAO;IAI9D;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAa5B;;;OAGG;IACa,6BAA6B,CAAC,KAAK,EAAE,sBAAsB,EAAE,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM;IA+BnH,uEAAuE;IAChE,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI;IACvE,+FAA+F;IAC/E,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;IAM5D;;;OAGG;IACI,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM;IAmB1D;OACG;IACK,qBAAqB,CAAC,SAAS,GAAE,MAAqC;IAuB9E;;;;;OAKG;IACI,qBAAqB,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM;IAgBpE;;;;;OAKG;IACI,KAAK;IAOZ;;;;;OAKG;WACW,gBAAgB,CAAC,QAAQ,oBAAY,EAAE,OAAO,EAAE,aAAa,GAAG,SAAS,GAAG,YAAY;IAiBtG;;;;;;OAMG;IACI,4BAA4B,CACjC,KAAK,EAAE,cAAc,EACrB,UAAU,EAAE,MAAM,EAClB,SAAS,GAAE,MAAU,EACrB,SAAS,GAAE,MAAU,EACrB,SAAS,GAAE,OAAc,GAAG,IAAI;IAclC;;;;;OAKG;IACI,8BAA8B,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;IAcrH,iDAAiD;IAC1C,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI;IA2BrE;;;OAGG;IACI,kBAAkB,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI;IAsBjF;;;OAGG;IACI,4BAA4B,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM;IAYpE;;;;OAIG;IACa,qCAAqC,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,eAAe,CAAC,EAAE,cAAc;IAW/G,+EAA+E;IACxE,yBAAyB,CAAC,OAAO,EAAE,eAAe,GAAG,GAAG;IAK/D;;;;;OAKG;IACa,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,kCAAkC,GAAG,OAAO;IAwB/G,OAAO,CAAC,MAAM,CAAC,WAAW,CAAoB;IAC9C,OAAO,CAAC,gBAAgB;IAiBxB;;;;OAIG;IACa,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY;IA0DrF,gEAAgE;IACzD,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAKlE;;OAEG;IACH,IAAW,kBAAkB,IAAI,OAAO,CAEvC;IAED;;;;;;;OAOG;IACa,8BAA8B,CAAC,GAAG,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,GAAG,MAAM;IA+BzG;;;;;OAKG;WACW,yBAAyB,CAAC,IAAI,EAAE,0BAA0B,GAAG,YAAY,EAAE;IAWzF;;;;;;OAMG;IACa,wBAAwB,CAAC,cAAc,EAAE,cAAc,EAAE,EAAE,2BAA2B,EAAE,OAAO,EAAE,kBAAkB,GAAE,OAAe;IAUpJ;;;;OAIG;IACa,iBAAiB,CAAC,uBAAuB,EAAE,MAAM,GAAG,aAAa,GAAG,cAAc,GAAG,cAAc,EAAE,GAAG,SAAS;CAclI;AACD;;;GAGG;AACH,qBAAa,qBAAqB;IAChC,4CAA4C;IACrC,UAAU,CAAC,EAAE,oBAAoB,CAAC;IACzC,uGAAuG;IAChG,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IACnC,8DAA8D;IACvD,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAClC,8DAA8D;IACvD,OAAO,CAAC,EAAE,gBAAgB,CAAC;CACnC"}
@@ -869,6 +869,30 @@ export class LineString3d extends CurvePrimitive {
869
869
  this.addFraction(fraction);
870
870
  }
871
871
  }
872
+ /** Compress out duplicate points (according to point.isAlmostEqual)
873
+ */
874
+ removeDuplicatePoints(tolerance = Geometry.smallMetricDistance) {
875
+ const n = this._points.length;
876
+ if (n < 2)
877
+ return;
878
+ let n1 = 1;
879
+ for (let i = 1; i < n; i++) {
880
+ const q = this._points.distanceIndexIndex(i, n1 - 1);
881
+ if (q !== undefined && q > tolerance) {
882
+ this._points.moveIndexToIndex(i, n1);
883
+ if (this._fractions !== undefined)
884
+ this._fractions.setAtUncheckedIndex(n1, this._fractions.atUncheckedIndex(i));
885
+ if (this._derivatives)
886
+ this._derivatives.moveIndexToIndex(i, n1);
887
+ n1++;
888
+ }
889
+ }
890
+ this._points.resize(n1);
891
+ if (this._fractions)
892
+ this._fractions.resize(n1);
893
+ if (this._derivatives)
894
+ this._derivatives.resize(n1);
895
+ }
872
896
  /** Append a suitable evaluation of a curve ..
873
897
  * * always append the curve point
874
898
  * * if fraction array is present, append the fraction