@itwin/core-geometry 4.1.0-dev.73 → 4.1.0-dev.75
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/core-geometry.d.ts +2 -0
- package/lib/cjs/core-geometry.d.ts.map +1 -1
- package/lib/cjs/core-geometry.js +2 -0
- package/lib/cjs/core-geometry.js.map +1 -1
- package/lib/cjs/curve/CurvePrimitive.d.ts +5 -0
- package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
- package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
- package/lib/cjs/geometry3d/PolygonOps.d.ts +5 -0
- package/lib/cjs/geometry3d/PolygonOps.d.ts.map +1 -1
- package/lib/cjs/geometry3d/PolygonOps.js +29 -19
- package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.d.ts +25 -7
- package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.js +61 -8
- package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.d.ts +27 -19
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.d.ts.map +1 -1
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js +30 -12
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.d.ts +12 -8
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.d.ts.map +1 -1
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js +18 -4
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
- package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.d.ts +3 -4
- package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.d.ts.map +1 -1
- package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js +3 -5
- package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
- package/lib/cjs/polyface/multiclip/Range2dSearchInterface.d.ts +15 -12
- package/lib/cjs/polyface/multiclip/Range2dSearchInterface.d.ts.map +1 -1
- package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
- package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.d.ts +27 -0
- package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.d.ts.map +1 -1
- package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js +30 -5
- package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
- package/lib/esm/core-geometry.d.ts +2 -0
- package/lib/esm/core-geometry.d.ts.map +1 -1
- package/lib/esm/core-geometry.js +2 -0
- package/lib/esm/core-geometry.js.map +1 -1
- package/lib/esm/curve/CurvePrimitive.d.ts +5 -0
- package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
- package/lib/esm/curve/CurvePrimitive.js.map +1 -1
- package/lib/esm/geometry3d/PolygonOps.d.ts +5 -0
- package/lib/esm/geometry3d/PolygonOps.d.ts.map +1 -1
- package/lib/esm/geometry3d/PolygonOps.js +29 -19
- package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.d.ts +25 -7
- package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.js +62 -9
- package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.d.ts +27 -19
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.d.ts.map +1 -1
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js +30 -12
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.d.ts +12 -8
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.d.ts.map +1 -1
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js +18 -4
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
- package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.d.ts +3 -4
- package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.d.ts.map +1 -1
- package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js +3 -5
- package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
- package/lib/esm/polyface/multiclip/Range2dSearchInterface.d.ts +15 -12
- package/lib/esm/polyface/multiclip/Range2dSearchInterface.d.ts.map +1 -1
- package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
- package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.d.ts +27 -0
- package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.d.ts.map +1 -1
- package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js +30 -6
- package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
- package/package.json +3 -3
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @module Polyface
|
|
3
3
|
*/
|
|
4
4
|
import { BagOfCurves, CurveCollection } from "../curve/CurveCollection";
|
|
5
|
-
import {
|
|
5
|
+
import { LinearCurvePrimitive } from "../curve/CurvePrimitive";
|
|
6
6
|
import { LineSegment3d } from "../curve/LineSegment3d";
|
|
7
7
|
import { LineString3d } from "../curve/LineString3d";
|
|
8
8
|
import { Loop } from "../curve/Loop";
|
|
@@ -16,6 +16,7 @@ import { MomentData } from "../geometry4d/MomentData";
|
|
|
16
16
|
import { HalfEdgeGraph } from "../topology/Graph";
|
|
17
17
|
import { FacetIntersectOptions, FacetLocationDetail } from "./FacetLocationDetail";
|
|
18
18
|
import { IndexedEdgeMatcher, SortableEdgeCluster } from "./IndexedEdgeMatcher";
|
|
19
|
+
import { Range2dSearchInterface } from "./multiclip/Range2dSearchInterface";
|
|
19
20
|
import { IndexedPolyface, Polyface, PolyfaceVisitor } from "./Polyface";
|
|
20
21
|
import { RangeLengthData } from "./RangeLengthData";
|
|
21
22
|
/**
|
|
@@ -353,21 +354,38 @@ export declare class PolyfaceQuery {
|
|
|
353
354
|
* @return collection of facet index arrays, one per connected component
|
|
354
355
|
*/
|
|
355
356
|
static partitionFacetIndicesByEdgeConnectedComponent(polyface: Polyface | PolyfaceVisitor, stopAtVisibleEdges?: boolean): number[][];
|
|
356
|
-
/** Find segments (within the
|
|
357
|
-
* * Assemble each segment
|
|
358
|
-
* *
|
|
357
|
+
/** Find segments (within the line string) which project to facets.
|
|
358
|
+
* * Assemble each input segment paired with its projected segment/point as a quad/triangle facet in a new polyface.
|
|
359
|
+
* * Input facets are ASSUMED to be convex and planar, and not overlap in the z direction.
|
|
359
360
|
*/
|
|
360
|
-
static sweepLineStringToFacetsXYReturnSweptFacets(
|
|
361
|
+
static sweepLineStringToFacetsXYReturnSweptFacets(lineStringPoints: GrowableXYZArray, polyface: Polyface): Polyface;
|
|
361
362
|
/** @deprecated in 4.x. Use sweepLineStringToFacetsXYReturnSweptFacets instead. */
|
|
362
363
|
static sweepLinestringToFacetsXYreturnSweptFacets(linestringPoints: GrowableXYZArray, polyface: Polyface): Polyface;
|
|
363
364
|
/**
|
|
364
|
-
*
|
|
365
|
+
* Sweep the line string to intersections with a mesh.
|
|
365
366
|
* * Return collected line segments.
|
|
366
367
|
* * If no options are given, the default sweep direction is the z-axis, and chains are assembled and returned.
|
|
367
368
|
* * See [[SweepLineStringToFacetsOptions]] for input and output options, including filtering by forward/side/rear facets.
|
|
368
369
|
* * Facets are ASSUMED to be convex and planar, and not overlap in the sweep direction.
|
|
369
370
|
*/
|
|
370
|
-
static sweepLineStringToFacets(linestringPoints: GrowableXYZArray,
|
|
371
|
+
static sweepLineStringToFacets(linestringPoints: GrowableXYZArray, polyfaceOrVisitor: Polyface | PolyfaceVisitor, options?: SweepLineStringToFacetsOptions): LinearCurvePrimitive[];
|
|
372
|
+
/**
|
|
373
|
+
* Sweep the line string in the z-direction to intersections with a mesh, using a search object for speedup.
|
|
374
|
+
* @param lineStringPoints input line string to drape on the mesh
|
|
375
|
+
* @param polyfaceOrVisitor mesh, or mesh visitor to traverse only part of a mesh
|
|
376
|
+
* @param searchByReadIndex object for searching facet 2D ranges tagged by mesh read index
|
|
377
|
+
* @example Using a 5x5 indexed search grid:
|
|
378
|
+
* ```
|
|
379
|
+
* const xyRange = Range2d.createFrom(myPolyface.range());
|
|
380
|
+
* const searcher = GriddedRaggedRange2dSetWithOverflow.create<number>(xyRange, 5, 5)!;
|
|
381
|
+
* for (const visitor = myPolyface.createVisitor(0); visitor.moveToNextFacet();) {
|
|
382
|
+
* searcher.addRange(visitor.point.getRange(), visitor.currentReadIndex());
|
|
383
|
+
* }
|
|
384
|
+
* const drapedLineStrings = PolyfaceQuery.sweepLineStringToFacetsXY(lineString, myPolyface, searcher);
|
|
385
|
+
* ```
|
|
386
|
+
* @returns collected line strings
|
|
387
|
+
*/
|
|
388
|
+
static sweepLineStringToFacetsXY(lineStringPoints: GrowableXYZArray | Point3d[], polyfaceOrVisitor: Polyface | PolyfaceVisitor, searchByReadIndex: Range2dSearchInterface<number>): LineString3d[];
|
|
371
389
|
/** Find segments (within the linestring) which project to facets.
|
|
372
390
|
* * Return collected line segments.
|
|
373
391
|
* * This calls [[sweepLineStringToFacets]] with options created by
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolyfaceQuery.d.ts","sourceRoot":"","sources":["../../../src/polyface/PolyfaceQuery.ts"],"names":[],"mappings":"AAKA;;GAEG;AAIH,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAGxE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"PolyfaceQuery.d.ts","sourceRoot":"","sources":["../../../src/polyface/PolyfaceQuery.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,7 @@ import { Geometry } from "../Geometry";
|
|
|
17
17
|
import { Angle } from "../geometry3d/Angle";
|
|
18
18
|
import { BarycentricTriangle } from "../geometry3d/BarycentricTriangle";
|
|
19
19
|
import { FrameBuilder } from "../geometry3d/FrameBuilder";
|
|
20
|
+
import { Point3dArrayCarrier } from "../geometry3d/Point3dArrayCarrier";
|
|
20
21
|
import { Point3d, Vector3d } from "../geometry3d/Point3dVector3d";
|
|
21
22
|
import { Point3dArray } from "../geometry3d/PointHelpers";
|
|
22
23
|
import { PolygonOps } from "../geometry3d/PolygonOps";
|
|
@@ -36,7 +37,7 @@ import { IndexedEdgeMatcher, SortableEdge } from "./IndexedEdgeMatcher";
|
|
|
36
37
|
import { IndexedPolyfaceSubsetVisitor } from "./IndexedPolyfaceVisitor";
|
|
37
38
|
import { BuildAverageNormalsContext } from "./multiclip/BuildAverageNormalsContext";
|
|
38
39
|
import { OffsetMeshContext } from "./multiclip/OffsetMeshContext";
|
|
39
|
-
import { ClipSweptLineStringContext, SweepLineStringToFacetContext } from "./multiclip/SweepLineStringToFacetContext";
|
|
40
|
+
import { ClipSweptLineStringContext, EdgeClipData, SweepLineStringToFacetContext } from "./multiclip/SweepLineStringToFacetContext";
|
|
40
41
|
import { XYPointBuckets } from "./multiclip/XYPointBuckets";
|
|
41
42
|
import { Polyface } from "./Polyface";
|
|
42
43
|
import { PolyfaceBuilder } from "./PolyfaceBuilder";
|
|
@@ -879,13 +880,13 @@ class PolyfaceQuery {
|
|
|
879
880
|
matcher.sortAndCollectClusters(allEdges, allEdges, allEdges, allEdges);
|
|
880
881
|
return this.partitionFacetIndicesBySortableEdgeClusters(allEdges, numFacets);
|
|
881
882
|
}
|
|
882
|
-
/** Find segments (within the
|
|
883
|
-
* * Assemble each segment
|
|
884
|
-
* *
|
|
883
|
+
/** Find segments (within the line string) which project to facets.
|
|
884
|
+
* * Assemble each input segment paired with its projected segment/point as a quad/triangle facet in a new polyface.
|
|
885
|
+
* * Input facets are ASSUMED to be convex and planar, and not overlap in the z direction.
|
|
885
886
|
*/
|
|
886
|
-
static sweepLineStringToFacetsXYReturnSweptFacets(
|
|
887
|
+
static sweepLineStringToFacetsXYReturnSweptFacets(lineStringPoints, polyface) {
|
|
887
888
|
const builder = PolyfaceBuilder.create();
|
|
888
|
-
this.announceSweepLinestringToConvexPolyfaceXY(
|
|
889
|
+
this.announceSweepLinestringToConvexPolyfaceXY(lineStringPoints, polyface, (_linestring, _segmentIndex, _polyface, _facetIndex, points) => {
|
|
889
890
|
if (points.length === 4)
|
|
890
891
|
builder.addQuadFacet(points);
|
|
891
892
|
else if (points.length === 3)
|
|
@@ -898,13 +899,13 @@ class PolyfaceQuery {
|
|
|
898
899
|
return this.sweepLineStringToFacetsXYReturnSweptFacets(linestringPoints, polyface);
|
|
899
900
|
}
|
|
900
901
|
/**
|
|
901
|
-
*
|
|
902
|
+
* Sweep the line string to intersections with a mesh.
|
|
902
903
|
* * Return collected line segments.
|
|
903
904
|
* * If no options are given, the default sweep direction is the z-axis, and chains are assembled and returned.
|
|
904
905
|
* * See [[SweepLineStringToFacetsOptions]] for input and output options, including filtering by forward/side/rear facets.
|
|
905
906
|
* * Facets are ASSUMED to be convex and planar, and not overlap in the sweep direction.
|
|
906
907
|
*/
|
|
907
|
-
static sweepLineStringToFacets(linestringPoints,
|
|
908
|
+
static sweepLineStringToFacets(linestringPoints, polyfaceOrVisitor, options) {
|
|
908
909
|
let result = [];
|
|
909
910
|
// setup default options:
|
|
910
911
|
if (options === undefined)
|
|
@@ -916,7 +917,11 @@ class PolyfaceQuery {
|
|
|
916
917
|
chainContext = ChainMergeContext.create();
|
|
917
918
|
const context = ClipSweptLineStringContext.create(linestringPoints, options.vectorToEye);
|
|
918
919
|
if (context) {
|
|
919
|
-
|
|
920
|
+
let visitor;
|
|
921
|
+
if (polyfaceOrVisitor instanceof Polyface)
|
|
922
|
+
visitor = polyfaceOrVisitor.createVisitor(0);
|
|
923
|
+
else
|
|
924
|
+
visitor = polyfaceOrVisitor;
|
|
920
925
|
const workNormal = Vector3d.createZero();
|
|
921
926
|
for (visitor.reset(); visitor.moveToNextFacet();) {
|
|
922
927
|
if (options.collectFromThisFacetNormal(PolygonOps.areaNormalGo(visitor.point, workNormal))) {
|
|
@@ -935,6 +940,54 @@ class PolyfaceQuery {
|
|
|
935
940
|
}
|
|
936
941
|
return result;
|
|
937
942
|
}
|
|
943
|
+
/**
|
|
944
|
+
* Sweep the line string in the z-direction to intersections with a mesh, using a search object for speedup.
|
|
945
|
+
* @param lineStringPoints input line string to drape on the mesh
|
|
946
|
+
* @param polyfaceOrVisitor mesh, or mesh visitor to traverse only part of a mesh
|
|
947
|
+
* @param searchByReadIndex object for searching facet 2D ranges tagged by mesh read index
|
|
948
|
+
* @example Using a 5x5 indexed search grid:
|
|
949
|
+
* ```
|
|
950
|
+
* const xyRange = Range2d.createFrom(myPolyface.range());
|
|
951
|
+
* const searcher = GriddedRaggedRange2dSetWithOverflow.create<number>(xyRange, 5, 5)!;
|
|
952
|
+
* for (const visitor = myPolyface.createVisitor(0); visitor.moveToNextFacet();) {
|
|
953
|
+
* searcher.addRange(visitor.point.getRange(), visitor.currentReadIndex());
|
|
954
|
+
* }
|
|
955
|
+
* const drapedLineStrings = PolyfaceQuery.sweepLineStringToFacetsXY(lineString, myPolyface, searcher);
|
|
956
|
+
* ```
|
|
957
|
+
* @returns collected line strings
|
|
958
|
+
*/
|
|
959
|
+
static sweepLineStringToFacetsXY(lineStringPoints, polyfaceOrVisitor, searchByReadIndex) {
|
|
960
|
+
const chainContext = ChainMergeContext.create();
|
|
961
|
+
const sweepVector = Vector3d.create(0, 0, 1);
|
|
962
|
+
const searchRange = Range3d.create();
|
|
963
|
+
let visitor;
|
|
964
|
+
if (polyfaceOrVisitor instanceof Polyface)
|
|
965
|
+
visitor = polyfaceOrVisitor.createVisitor(0);
|
|
966
|
+
else
|
|
967
|
+
visitor = polyfaceOrVisitor;
|
|
968
|
+
let lineStringSource;
|
|
969
|
+
if (Array.isArray(lineStringPoints))
|
|
970
|
+
lineStringSource = new Point3dArrayCarrier(lineStringPoints);
|
|
971
|
+
else
|
|
972
|
+
lineStringSource = lineStringPoints;
|
|
973
|
+
for (let i = 1; i < lineStringSource.length; i++) {
|
|
974
|
+
const point0 = lineStringSource.getPoint3dAtUncheckedPointIndex(i - 1);
|
|
975
|
+
const point1 = lineStringSource.getPoint3dAtUncheckedPointIndex(i);
|
|
976
|
+
const edgeClipper = EdgeClipData.createPointPointSweep(point0, point1, sweepVector);
|
|
977
|
+
if (edgeClipper !== undefined) {
|
|
978
|
+
Range3d.createNull(searchRange);
|
|
979
|
+
searchRange.extendPoint(point0);
|
|
980
|
+
searchRange.extendPoint(point1);
|
|
981
|
+
searchByReadIndex.searchRange2d(searchRange, (_facetRange, readIndex) => {
|
|
982
|
+
if (visitor.moveToReadIndex(readIndex))
|
|
983
|
+
edgeClipper.processPolygon(visitor.point, (pointA, pointB) => chainContext.addSegment(pointA, pointB));
|
|
984
|
+
return true;
|
|
985
|
+
});
|
|
986
|
+
}
|
|
987
|
+
}
|
|
988
|
+
chainContext.clusterAndMergeVerticesXYZ();
|
|
989
|
+
return chainContext.collectMaximalChains();
|
|
990
|
+
}
|
|
938
991
|
/** Find segments (within the linestring) which project to facets.
|
|
939
992
|
* * Return collected line segments.
|
|
940
993
|
* * This calls [[sweepLineStringToFacets]] with options created by
|