@itwin/core-geometry 3.0.0-dev.84 → 3.0.0-dev.88
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1049 -1049
- package/LICENSE.md +9 -9
- package/README.md +17 -17
- package/lib/cjs/Constant.js.map +1 -1
- package/lib/cjs/clipping/ClipVector.d.ts +0 -1
- package/lib/cjs/clipping/ClipVector.d.ts.map +1 -1
- package/lib/cjs/clipping/ClipVector.js +0 -1
- package/lib/cjs/clipping/ClipVector.js.map +1 -1
- package/lib/cjs/core-geometry.js.map +1 -1
- package/lib/cjs/geometry3d/Point3dArrayCarrier.d.ts +2 -2
- package/lib/cjs/geometry3d/Point3dArrayCarrier.js +2 -2
- package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
- package/lib/cjs/topology/ChainMerge.js.map +1 -1
- package/lib/cjs/topology/Graph.d.ts +35 -6
- package/lib/cjs/topology/Graph.d.ts.map +1 -1
- package/lib/cjs/topology/Graph.js +90 -10
- package/lib/cjs/topology/Graph.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
- package/lib/cjs/topology/MaskManager.js.map +1 -1
- package/lib/cjs/topology/Merging.d.ts +44 -9
- package/lib/cjs/topology/Merging.d.ts.map +1 -1
- package/lib/cjs/topology/Merging.js +110 -22
- package/lib/cjs/topology/Merging.js.map +1 -1
- package/lib/cjs/topology/RegularizeFace.js.map +1 -1
- package/lib/cjs/topology/Triangulation.js.map +1 -1
- package/lib/esm/Constant.js.map +1 -1
- package/lib/esm/clipping/ClipVector.d.ts +0 -1
- package/lib/esm/clipping/ClipVector.d.ts.map +1 -1
- package/lib/esm/clipping/ClipVector.js +0 -1
- package/lib/esm/clipping/ClipVector.js.map +1 -1
- package/lib/esm/core-geometry.js.map +1 -1
- package/lib/esm/geometry3d/Point3dArrayCarrier.d.ts +2 -2
- package/lib/esm/geometry3d/Point3dArrayCarrier.js +2 -2
- package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
- package/lib/esm/topology/ChainMerge.js.map +1 -1
- package/lib/esm/topology/Graph.d.ts +35 -6
- package/lib/esm/topology/Graph.d.ts.map +1 -1
- package/lib/esm/topology/Graph.js +90 -10
- package/lib/esm/topology/Graph.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
- package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
- package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
- package/lib/esm/topology/MaskManager.js.map +1 -1
- package/lib/esm/topology/Merging.d.ts +44 -9
- package/lib/esm/topology/Merging.d.ts.map +1 -1
- package/lib/esm/topology/Merging.js +110 -22
- package/lib/esm/topology/Merging.js.map +1 -1
- package/lib/esm/topology/RegularizeFace.js.map +1 -1
- package/lib/esm/topology/Triangulation.js.map +1 -1
- package/package.json +5 -5
|
@@ -20,8 +20,8 @@ import { XAndY, XYAndZ } from "../geometry3d/XYZProps";
|
|
|
20
20
|
export declare enum HalfEdgeMask {
|
|
21
21
|
/** Mask commonly set consistently around exterior faces.
|
|
22
22
|
* * A boundary edge with interior to one side, exterior to the other will have EXTERIOR only on the outside.
|
|
23
|
-
* * An an edge inserted "within a purely exterior face" can have EXTERIOR on both
|
|
24
|
-
* * An interior
|
|
23
|
+
* * An an edge inserted "within a purely exterior face" can have EXTERIOR on both sides.
|
|
24
|
+
* * An interior edge (such as added during triangulation) will have no EXTERIOR bits.
|
|
25
25
|
*/
|
|
26
26
|
EXTERIOR = 1,
|
|
27
27
|
/** Mask commonly set (on both sides) of original geometry edges that are transition from outside from to inside.
|
|
@@ -217,10 +217,14 @@ export declare class HalfEdge {
|
|
|
217
217
|
clearMaskAroundEdge(mask: HalfEdgeMask): void;
|
|
218
218
|
/** Returns the number of edges around this face. */
|
|
219
219
|
countEdgesAroundFace(): number;
|
|
220
|
-
/** Return true
|
|
220
|
+
/** Return true if other is in the vertex loop around this. */
|
|
221
221
|
findAroundVertex(other: HalfEdge): boolean;
|
|
222
|
-
/** Return true
|
|
222
|
+
/** Return true if other is in the face loop around this. */
|
|
223
223
|
findAroundFace(other: HalfEdge): boolean;
|
|
224
|
+
/**
|
|
225
|
+
* @return whether the mask is set (or unset) on all nodes of the face loop
|
|
226
|
+
*/
|
|
227
|
+
isMaskedAroundFace(mask: HalfEdgeMask, value?: boolean): boolean;
|
|
224
228
|
/**
|
|
225
229
|
* Apply a edgeTag and mask to all edges around a face.
|
|
226
230
|
* optionally apply it to all edge mates.
|
|
@@ -320,6 +324,26 @@ export declare class HalfEdge {
|
|
|
320
324
|
/** Return cross product (2d) of vectors from nodeA to nodeB and nodeB to nodeC
|
|
321
325
|
*/
|
|
322
326
|
static crossProductXYAlongChain(nodeA: HalfEdge, nodeB: HalfEdge, nodeC: HalfEdge): number;
|
|
327
|
+
/**
|
|
328
|
+
* @return whether the sector represented by the 2D vectors from nodeA to nodeB and nodeB to nodeC is convex.
|
|
329
|
+
*/
|
|
330
|
+
static isSectorConvex(nodeA: HalfEdge, nodeB: HalfEdge, nodeC: HalfEdge): boolean;
|
|
331
|
+
/**
|
|
332
|
+
* @return whether the sector of the face is convex.
|
|
333
|
+
*/
|
|
334
|
+
isSectorConvex(): boolean;
|
|
335
|
+
/**
|
|
336
|
+
* @return whether the face is convex.
|
|
337
|
+
*/
|
|
338
|
+
isFaceConvex(): boolean;
|
|
339
|
+
/**
|
|
340
|
+
* Isolate the edge from the graph by yanking each end from its vertex loop.
|
|
341
|
+
*/
|
|
342
|
+
isolateEdge(): void;
|
|
343
|
+
/**
|
|
344
|
+
* @return whether this edge is isolated from the rest of the graph.
|
|
345
|
+
*/
|
|
346
|
+
get isIsolatedEdge(): boolean;
|
|
323
347
|
/** Return true if `this` is lexically below `other`, comparing y first then x. */
|
|
324
348
|
belowYX(other: HalfEdge): boolean;
|
|
325
349
|
/** Returns Returns true if the node does NOT have Mask.EXTERIOR_MASK set. */
|
|
@@ -583,9 +607,14 @@ export declare class HalfEdgeGraph {
|
|
|
583
607
|
transformInPlace(transform: Transform): void;
|
|
584
608
|
/**
|
|
585
609
|
* disconnect and delete all nodes that satisfy a filter condition.
|
|
586
|
-
* @param deleteThisNode returns true to delete the
|
|
587
|
-
* @returns the number of nodes deleted.
|
|
610
|
+
* @param deleteThisNode returns true to delete the corresponding edge. Should act symmetrically on the edgeMate.
|
|
611
|
+
* @returns the number of nodes deleted (twice the number of deleted edges).
|
|
588
612
|
*/
|
|
589
613
|
yankAndDeleteEdges(deleteThisNode: NodeFunction): number;
|
|
614
|
+
/**
|
|
615
|
+
* Delete all isolated edges.
|
|
616
|
+
* @return the number of nodes deleted (twice the number of deleted edges).
|
|
617
|
+
*/
|
|
618
|
+
deleteIsolatedEdges(): number;
|
|
590
619
|
}
|
|
591
620
|
//# sourceMappingURL=Graph.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Graph.d.ts","sourceRoot":"","sources":["../../../src/topology/Graph.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Graph.d.ts","sourceRoot":"","sources":["../../../src/topology/Graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,8 +35,8 @@ var HalfEdgeMask;
|
|
|
35
35
|
(function (HalfEdgeMask) {
|
|
36
36
|
/** Mask commonly set consistently around exterior faces.
|
|
37
37
|
* * A boundary edge with interior to one side, exterior to the other will have EXTERIOR only on the outside.
|
|
38
|
-
* * An an edge inserted "within a purely exterior face" can have EXTERIOR on both
|
|
39
|
-
* * An interior
|
|
38
|
+
* * An an edge inserted "within a purely exterior face" can have EXTERIOR on both sides.
|
|
39
|
+
* * An interior edge (such as added during triangulation) will have no EXTERIOR bits.
|
|
40
40
|
*/
|
|
41
41
|
HalfEdgeMask[HalfEdgeMask["EXTERIOR"] = 1] = "EXTERIOR";
|
|
42
42
|
/** Mask commonly set (on both sides) of original geometry edges that are transition from outside from to inside.
|
|
@@ -321,7 +321,7 @@ class HalfEdge {
|
|
|
321
321
|
} while (node !== this);
|
|
322
322
|
return count;
|
|
323
323
|
}
|
|
324
|
-
/** Return true
|
|
324
|
+
/** Return true if other is in the vertex loop around this. */
|
|
325
325
|
findAroundVertex(other) {
|
|
326
326
|
let node = this;
|
|
327
327
|
do {
|
|
@@ -331,7 +331,7 @@ class HalfEdge {
|
|
|
331
331
|
} while (node !== this);
|
|
332
332
|
return false;
|
|
333
333
|
}
|
|
334
|
-
/** Return true
|
|
334
|
+
/** Return true if other is in the face loop around this. */
|
|
335
335
|
findAroundFace(other) {
|
|
336
336
|
let node = this;
|
|
337
337
|
do {
|
|
@@ -341,6 +341,27 @@ class HalfEdge {
|
|
|
341
341
|
} while (node !== this);
|
|
342
342
|
return false;
|
|
343
343
|
}
|
|
344
|
+
/**
|
|
345
|
+
* @return whether the mask is set (or unset) on all nodes of the face loop
|
|
346
|
+
*/
|
|
347
|
+
isMaskedAroundFace(mask, value = true) {
|
|
348
|
+
let node = this;
|
|
349
|
+
if (value) {
|
|
350
|
+
do {
|
|
351
|
+
if (!node.isMaskSet(mask))
|
|
352
|
+
return false;
|
|
353
|
+
node = node.faceSuccessor;
|
|
354
|
+
} while (node !== this);
|
|
355
|
+
}
|
|
356
|
+
else {
|
|
357
|
+
do {
|
|
358
|
+
if (node.isMaskSet(mask))
|
|
359
|
+
return false;
|
|
360
|
+
node = node.faceSuccessor;
|
|
361
|
+
} while (node !== this);
|
|
362
|
+
}
|
|
363
|
+
return true;
|
|
364
|
+
}
|
|
344
365
|
/**
|
|
345
366
|
* Apply a edgeTag and mask to all edges around a face.
|
|
346
367
|
* optionally apply it to all edge mates.
|
|
@@ -601,6 +622,51 @@ class HalfEdge {
|
|
|
601
622
|
static crossProductXYAlongChain(nodeA, nodeB, nodeC) {
|
|
602
623
|
return Geometry_1.Geometry.crossProductXYXY(nodeB.x - nodeA.x, nodeB.y - nodeA.y, nodeC.x - nodeB.x, nodeC.y - nodeB.y);
|
|
603
624
|
}
|
|
625
|
+
/**
|
|
626
|
+
* @return whether the sector represented by the 2D vectors from nodeA to nodeB and nodeB to nodeC is convex.
|
|
627
|
+
*/
|
|
628
|
+
static isSectorConvex(nodeA, nodeB, nodeC) {
|
|
629
|
+
const cross = HalfEdge.crossProductXYAlongChain(nodeA, nodeB, nodeC);
|
|
630
|
+
if (cross > 0.0)
|
|
631
|
+
return true;
|
|
632
|
+
if (cross < 0.0)
|
|
633
|
+
return false;
|
|
634
|
+
return HalfEdge.dotProductNodeToNodeVectorsXY(nodeA, nodeB, nodeB, nodeC) > 0.0;
|
|
635
|
+
}
|
|
636
|
+
/**
|
|
637
|
+
* @return whether the sector of the face is convex.
|
|
638
|
+
*/
|
|
639
|
+
// eslint-disable-next-line @itwin/prefer-get
|
|
640
|
+
isSectorConvex() {
|
|
641
|
+
return HalfEdge.isSectorConvex(this.facePredecessor, this, this.faceSuccessor);
|
|
642
|
+
}
|
|
643
|
+
/**
|
|
644
|
+
* @return whether the face is convex.
|
|
645
|
+
*/
|
|
646
|
+
// eslint-disable-next-line @itwin/prefer-get
|
|
647
|
+
isFaceConvex() {
|
|
648
|
+
let node = this;
|
|
649
|
+
do {
|
|
650
|
+
if (!node.isSectorConvex())
|
|
651
|
+
return false;
|
|
652
|
+
node = node.faceSuccessor;
|
|
653
|
+
} while (node !== this);
|
|
654
|
+
return true;
|
|
655
|
+
}
|
|
656
|
+
/**
|
|
657
|
+
* Isolate the edge from the graph by yanking each end from its vertex loop.
|
|
658
|
+
*/
|
|
659
|
+
isolateEdge() {
|
|
660
|
+
const mate = this.edgeMate;
|
|
661
|
+
this.yankFromVertexLoop();
|
|
662
|
+
mate.yankFromVertexLoop();
|
|
663
|
+
}
|
|
664
|
+
/**
|
|
665
|
+
* @return whether this edge is isolated from the rest of the graph.
|
|
666
|
+
*/
|
|
667
|
+
get isIsolatedEdge() {
|
|
668
|
+
return this === this.vertexSuccessor && this.edgeMate === this.edgeMate.vertexSuccessor;
|
|
669
|
+
}
|
|
604
670
|
/** Return true if `this` is lexically below `other`, comparing y first then x. */
|
|
605
671
|
belowYX(other) {
|
|
606
672
|
// Check y's
|
|
@@ -1135,8 +1201,8 @@ class HalfEdgeGraph {
|
|
|
1135
1201
|
}
|
|
1136
1202
|
/**
|
|
1137
1203
|
* disconnect and delete all nodes that satisfy a filter condition.
|
|
1138
|
-
* @param deleteThisNode returns true to delete the
|
|
1139
|
-
* @returns the number of nodes deleted.
|
|
1204
|
+
* @param deleteThisNode returns true to delete the corresponding edge. Should act symmetrically on the edgeMate.
|
|
1205
|
+
* @returns the number of nodes deleted (twice the number of deleted edges).
|
|
1140
1206
|
*/
|
|
1141
1207
|
yankAndDeleteEdges(deleteThisNode) {
|
|
1142
1208
|
const numTotal = this.allHalfEdges.length;
|
|
@@ -1146,10 +1212,24 @@ class HalfEdgeGraph {
|
|
|
1146
1212
|
if (!deleteThisNode(candidate)) {
|
|
1147
1213
|
this.allHalfEdges[numAccepted++] = candidate;
|
|
1148
1214
|
}
|
|
1149
|
-
else
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1215
|
+
else
|
|
1216
|
+
candidate.isolateEdge();
|
|
1217
|
+
}
|
|
1218
|
+
const numDeleted = numTotal - numAccepted;
|
|
1219
|
+
this.allHalfEdges.length = numAccepted;
|
|
1220
|
+
return numDeleted;
|
|
1221
|
+
}
|
|
1222
|
+
/**
|
|
1223
|
+
* Delete all isolated edges.
|
|
1224
|
+
* @return the number of nodes deleted (twice the number of deleted edges).
|
|
1225
|
+
*/
|
|
1226
|
+
deleteIsolatedEdges() {
|
|
1227
|
+
const numTotal = this.allHalfEdges.length;
|
|
1228
|
+
let numAccepted = 0;
|
|
1229
|
+
for (let i = 0; i < numTotal; i++) {
|
|
1230
|
+
const candidate = this.allHalfEdges[i];
|
|
1231
|
+
if (!candidate.isIsolatedEdge) {
|
|
1232
|
+
this.allHalfEdges[numAccepted++] = candidate;
|
|
1153
1233
|
}
|
|
1154
1234
|
}
|
|
1155
1235
|
const numDeleted = numTotal - numAccepted;
|