@itwin/core-geometry 4.0.0-dev.6 → 4.0.0-dev.8

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 (119) hide show
  1. package/lib/cjs/Geometry.d.ts +3 -3
  2. package/lib/cjs/Geometry.d.ts.map +1 -1
  3. package/lib/cjs/Geometry.js +27 -11
  4. package/lib/cjs/Geometry.js.map +1 -1
  5. package/lib/cjs/curve/CurveCurve.d.ts +11 -8
  6. package/lib/cjs/curve/CurveCurve.d.ts.map +1 -1
  7. package/lib/cjs/curve/CurveCurve.js +16 -12
  8. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  9. package/lib/cjs/curve/CurveCurveIntersectXY.d.ts +5 -1
  10. package/lib/cjs/curve/CurveCurveIntersectXY.d.ts.map +1 -1
  11. package/lib/cjs/curve/CurveCurveIntersectXY.js +11 -10
  12. package/lib/cjs/curve/CurveCurveIntersectXY.js.map +1 -1
  13. package/lib/cjs/geometry3d/Angle.d.ts +18 -0
  14. package/lib/cjs/geometry3d/Angle.d.ts.map +1 -1
  15. package/lib/cjs/geometry3d/Angle.js +38 -0
  16. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  17. package/lib/cjs/geometry3d/CoincidentGeometryOps.d.ts +1 -0
  18. package/lib/cjs/geometry3d/CoincidentGeometryOps.d.ts.map +1 -1
  19. package/lib/cjs/geometry3d/CoincidentGeometryOps.js +3 -0
  20. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  21. package/lib/cjs/geometry3d/Matrix3d.d.ts +171 -118
  22. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  23. package/lib/cjs/geometry3d/Matrix3d.js +448 -417
  24. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  25. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +12 -13
  26. package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
  27. package/lib/cjs/geometry3d/Point3dVector3d.js +15 -13
  28. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  29. package/lib/cjs/geometry3d/Segment1d.d.ts +1 -1
  30. package/lib/cjs/geometry3d/Segment1d.js +1 -1
  31. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  32. package/lib/cjs/numerics/Polynomials.d.ts +12 -0
  33. package/lib/cjs/numerics/Polynomials.d.ts.map +1 -1
  34. package/lib/cjs/numerics/Polynomials.js +14 -0
  35. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  36. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +1 -0
  37. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  38. package/lib/cjs/polyface/PolyfaceBuilder.js +46 -6
  39. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  40. package/lib/cjs/polyface/PolyfaceQuery.d.ts +54 -0
  41. package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
  42. package/lib/cjs/polyface/PolyfaceQuery.js +71 -1
  43. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  44. package/lib/cjs/polyface/multiclip/OffsetMeshContext.d.ts +202 -0
  45. package/lib/cjs/polyface/multiclip/OffsetMeshContext.d.ts.map +1 -0
  46. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js +1038 -0
  47. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -0
  48. package/lib/cjs/serialization/GeometrySamples.d.ts +4 -1
  49. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  50. package/lib/cjs/serialization/GeometrySamples.js +14 -6
  51. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  52. package/lib/cjs/topology/Graph.d.ts +113 -7
  53. package/lib/cjs/topology/Graph.d.ts.map +1 -1
  54. package/lib/cjs/topology/Graph.js +185 -7
  55. package/lib/cjs/topology/Graph.js.map +1 -1
  56. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts +38 -0
  57. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts.map +1 -0
  58. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js +82 -0
  59. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -0
  60. package/lib/esm/Geometry.d.ts +3 -3
  61. package/lib/esm/Geometry.d.ts.map +1 -1
  62. package/lib/esm/Geometry.js +27 -11
  63. package/lib/esm/Geometry.js.map +1 -1
  64. package/lib/esm/curve/CurveCurve.d.ts +11 -8
  65. package/lib/esm/curve/CurveCurve.d.ts.map +1 -1
  66. package/lib/esm/curve/CurveCurve.js +16 -12
  67. package/lib/esm/curve/CurveCurve.js.map +1 -1
  68. package/lib/esm/curve/CurveCurveIntersectXY.d.ts +5 -1
  69. package/lib/esm/curve/CurveCurveIntersectXY.d.ts.map +1 -1
  70. package/lib/esm/curve/CurveCurveIntersectXY.js +11 -10
  71. package/lib/esm/curve/CurveCurveIntersectXY.js.map +1 -1
  72. package/lib/esm/geometry3d/Angle.d.ts +18 -0
  73. package/lib/esm/geometry3d/Angle.d.ts.map +1 -1
  74. package/lib/esm/geometry3d/Angle.js +38 -0
  75. package/lib/esm/geometry3d/Angle.js.map +1 -1
  76. package/lib/esm/geometry3d/CoincidentGeometryOps.d.ts +1 -0
  77. package/lib/esm/geometry3d/CoincidentGeometryOps.d.ts.map +1 -1
  78. package/lib/esm/geometry3d/CoincidentGeometryOps.js +3 -0
  79. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  80. package/lib/esm/geometry3d/Matrix3d.d.ts +171 -118
  81. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  82. package/lib/esm/geometry3d/Matrix3d.js +448 -417
  83. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  84. package/lib/esm/geometry3d/Point3dVector3d.d.ts +12 -13
  85. package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
  86. package/lib/esm/geometry3d/Point3dVector3d.js +15 -13
  87. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  88. package/lib/esm/geometry3d/Segment1d.d.ts +1 -1
  89. package/lib/esm/geometry3d/Segment1d.js +1 -1
  90. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  91. package/lib/esm/numerics/Polynomials.d.ts +12 -0
  92. package/lib/esm/numerics/Polynomials.d.ts.map +1 -1
  93. package/lib/esm/numerics/Polynomials.js +14 -0
  94. package/lib/esm/numerics/Polynomials.js.map +1 -1
  95. package/lib/esm/polyface/PolyfaceBuilder.d.ts +1 -0
  96. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  97. package/lib/esm/polyface/PolyfaceBuilder.js +46 -6
  98. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  99. package/lib/esm/polyface/PolyfaceQuery.d.ts +54 -0
  100. package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
  101. package/lib/esm/polyface/PolyfaceQuery.js +69 -0
  102. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  103. package/lib/esm/polyface/multiclip/OffsetMeshContext.d.ts +202 -0
  104. package/lib/esm/polyface/multiclip/OffsetMeshContext.d.ts.map +1 -0
  105. package/lib/esm/polyface/multiclip/OffsetMeshContext.js +1032 -0
  106. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -0
  107. package/lib/esm/serialization/GeometrySamples.d.ts +4 -1
  108. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  109. package/lib/esm/serialization/GeometrySamples.js +14 -6
  110. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  111. package/lib/esm/topology/Graph.d.ts +113 -7
  112. package/lib/esm/topology/Graph.d.ts.map +1 -1
  113. package/lib/esm/topology/Graph.js +185 -7
  114. package/lib/esm/topology/Graph.js.map +1 -1
  115. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts +38 -0
  116. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts.map +1 -0
  117. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js +78 -0
  118. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -0
  119. package/package.json +4 -4
@@ -0,0 +1,202 @@
1
+ /** @packageDocumentation
2
+ * @module Polyface
3
+ */
4
+ import { GrowableXYZArray } from "../../geometry3d/GrowableXYZArray";
5
+ import { Point3d, Vector3d } from "../../geometry3d/Point3dVector3d";
6
+ import { Ray3d } from "../../geometry3d/Ray3d";
7
+ import { HalfEdge, HalfEdgeGraph, HalfEdgeMask } from "../../topology/Graph";
8
+ import { IndexedPolyface } from "../Polyface";
9
+ import { PolyfaceBuilder } from "../PolyfaceBuilder";
10
+ import { XYAndZ } from "../../geometry3d/XYZProps";
11
+ import { OffsetMeshOptions } from "../PolyfaceQuery";
12
+ /**
13
+ * Function to be called for debugging observations at key times during offset computation.
14
+ */
15
+ declare type FacetOffsetGraphDebugFunction = (message: string, Graph: HalfEdgeGraph, breakMaskA: HalfEdgeMask, breakMaskB: HalfEdgeMask) => void;
16
+ declare type FacetOffsetDebugString = (message: string) => void;
17
+ export declare class FacetOffsetProperties {
18
+ constructor(facetIndex: number, normal: Ray3d);
19
+ facetIndex: number;
20
+ facetNormal: Ray3d;
21
+ }
22
+ /**
23
+ * Sector properties during offset.
24
+ * * this.normal may be initially assigned as the facet normal but can mutate by
25
+ * averaging with neighbors.
26
+ * * this.xyz is initially the base mesh xyz but is expected to move along the normal.
27
+ * * this.count is used locally in computations.
28
+ */
29
+ export declare class SectorOffsetProperties {
30
+ constructor(normal: Vector3d, xyz: Point3d);
31
+ normal: Vector3d;
32
+ xyz: Point3d;
33
+ count: number;
34
+ /**
35
+ * Compute the angle between plane normals on opposite sides of the edge.
36
+ * * parallel normals have zero angle.
37
+ * * if the edge cuts inward to the volume behind the faces, the angle is negative.
38
+ * * if the edge is outward (a convex edge) the the volume, the angle is positive.
39
+ * @param edgeNodeA node on one side of the edge
40
+ * @param edgeVector pre-allocated vector to receive vector along edge.
41
+ * @param averageNormal pre-allocated vector to receive the average normal for a chamfer of the offset edge.
42
+ * @param offsetDistance distance of offset being constructed. The sign of this resolves angle ambiguity.
43
+ * @param radiansTolerance tolerance for large angle between normals.
44
+ * @returns true if this edge has SectorOffsetProperties on both sides and the angle between normals angle exceeds radiansTolerance.
45
+ */
46
+ static edgeHasLargeExteriorAngleBetweenNormals(edgeNodeA: HalfEdge, edgeVector: Vector3d, averageNormal: Vector3d, offsetDistance: number, radiansTolerance?: number): boolean;
47
+ static almostEqualNormals(sectorA: SectorOffsetProperties, sectorB: SectorOffsetProperties, radiansTolerance?: number): boolean;
48
+ static radiansBetweenNormals(sectorA: SectorOffsetProperties, sectorB: SectorOffsetProperties): number;
49
+ setOffsetPointAtDistanceAtHalfEdge(halfEdge: HalfEdge, distance: number): void;
50
+ static setXYZAtHalfEdge(halfEdge: HalfEdge, xyz: Vector3d | undefined): void;
51
+ setXYAndZ(xyz: XYAndZ): void;
52
+ static setNormalAtHalfEdge(halfEdge: HalfEdge, uvw: Vector3d, distance?: number): void;
53
+ static sweepRadiansAroundNormal(nodeA: HalfEdge, upVector: Vector3d): number | undefined;
54
+ static getSectorPointAtHalfEdge(halfEdge: HalfEdge, xyz: Point3d | undefined, xyzArray: GrowableXYZArray | undefined): boolean;
55
+ static pushXYZ(xyzArray: GrowableXYZArray, halfEdge: HalfEdge): SectorOffsetProperties;
56
+ static accumulateScaledNormalAtHalfEdge(halfEdge: HalfEdge, scale: number, accumulatingVector: Vector3d): void;
57
+ }
58
+ export declare class OffsetMeshContext {
59
+ private constructor();
60
+ private _basePolyface;
61
+ private _baseGraph;
62
+ /** "Exterior" side of a bare edge of the mesh */
63
+ get exteriorMask(): HalfEdgeMask;
64
+ private _exteriorMask;
65
+ /** Mask indicating a a sector's coordinates have been reassigned at offset distance. */
66
+ private _offsetCoordinatesReassigned;
67
+ /** "First" sector of a smooth sequence. */
68
+ get breakMaskA(): HalfEdgeMask;
69
+ private _breakMaskA;
70
+ /** "Last" sector of a smooth sequence. */
71
+ get breakMaskB(): HalfEdgeMask;
72
+ private _breakMaskB;
73
+ /** This edge is on a chamfered face, and along the original edge */
74
+ get insideOfChamferFace(): HalfEdgeMask;
75
+ private _insideOfChamferFace;
76
+ /** This is the original edge of a chamfer face */
77
+ get outsideOfChamferFace(): HalfEdgeMask;
78
+ private _outsideOfChamferFace;
79
+ /** This edge is on a chamfered face, and at the end -- other side may be a sling */
80
+ get insideChamferSling(): HalfEdgeMask;
81
+ private _insideChamferSling;
82
+ /** This is the outside of the end of a chamfer face -- i.e. the inside of a new face-at-vertex */
83
+ get outsideEndOfChamferFace(): HalfEdgeMask;
84
+ private _outsideEndOfChamferFace;
85
+ private _smoothRadiansBetweenNormals;
86
+ private _smoothAccumulatedRadiansBetweenNormals;
87
+ private _chamferTurnRadians;
88
+ static graphDebugFunction?: FacetOffsetGraphDebugFunction;
89
+ static stringDebugFunction?: FacetOffsetDebugString;
90
+ private applyFaceNormalOffsetsToSectorData;
91
+ /**
92
+ * * build a mesh offset by given distance.
93
+ * * output the mesh to the given builder.
94
+ * @param basePolyface original mesh
95
+ * @param builder polyface builder to receive the new mesh.
96
+ * @param distance signed offset distance.
97
+ */
98
+ static buildOffsetMeshWithEdgeChamfers(basePolyface: IndexedPolyface, builder: PolyfaceBuilder, distance: number, options: OffsetMeshOptions): void;
99
+ /**
100
+ * For each face of the graph, shift vertices by offsetDistance and emit to the builder as a facet
101
+ * @param polyfaceBuilder
102
+ */
103
+ announceSimpleOffsetFromFaces(polyfaceBuilder: PolyfaceBuilder, offsetDistance: number): void;
104
+ /**
105
+ * For each face of the graph, output the xyz of the sector data
106
+ * @param polyfaceBuilder
107
+ */
108
+ announceFacetsWithSectorCoordinatesAroundFaces(polyfaceBuilder: PolyfaceBuilder): void;
109
+ private countBits;
110
+ /**
111
+ * For each edge of the graph . .
112
+ * * Collect coordinates in 4 sectors going around the edge
113
+ * * Compress with tight tolerance so adjacent sectors with clean point match reduce to a single point.
114
+ * * Emit as a facet.
115
+ * @param polyfaceBuilder
116
+ */
117
+ announceFacetsWithSectorCoordinatesAroundEdges(polyfaceBuilder: PolyfaceBuilder): void;
118
+ private getCoordinateString;
119
+ private inspectMasks;
120
+ /**
121
+ * For each face of the graph, output the xyz of the sector data
122
+ * @param polyfaceBuilder
123
+ */
124
+ announceFacetsWithSectorCoordinatesAroundVertices(polyfaceBuilder: PolyfaceBuilder): void;
125
+ /**
126
+ * * Exterior half edges have HalfEdgeMask.EXTERIOR
127
+ * * All interior half edge around a facet have facetTag pointing to a facetProperties object for that facet.
128
+ * * the facetOffsetProperties object has the simple facet normal.
129
+ * * Each half edge has edgeTag pointing to to a sectorOffsetProperties object
130
+ * * the sectorOffsetProperties has a copy of the facet normal.
131
+ * @param polyface
132
+ * @returns graph
133
+ */
134
+ static buildBaseGraph(polyface: IndexedPolyface): HalfEdgeGraph | undefined;
135
+ private setOffsetAtDistanceAroundVertex;
136
+ private setOffsetXYAndZAroundVertex;
137
+ /**
138
+ * * start at vertexSeed.
139
+ * * set the offset point at up to (and including) one with (a) this._breakMaskB or (b) this._exteriorMask
140
+ * *
141
+ * @param vertexSeed first node to mark.
142
+ * @param f function to call to announce each node and its sector properties.
143
+ * @returns number of nodes marked.
144
+ */
145
+ private announceNodeAndSectorPropertiesInSmoothSector;
146
+ private computeAverageNormalAndMaxDeviationAroundVertex;
147
+ private assignOffsetByAverageNormalAroundVertex;
148
+ /** Search around a vertex for a sector which has a different normal from its vertexPredecessor.
149
+ * * The seed will be the first candidate considered
150
+ */
151
+ private markBreakEdgesAndSaveAverageNormalsAroundVertex;
152
+ /** Compute the point of intersection of the planes in the sectors of 3 half edges */
153
+ private compute3SectorIntersection;
154
+ /** Compute the point of intersection of the planes in the sectors of 3 half edges */
155
+ private compute3SectorIntersectionDebug;
156
+ /** Compute the point of intersection of the planes in the sectors of 2 half edges, using cross product of their normals to resolve */
157
+ private compute2SectorIntersection;
158
+ /**
159
+ * * at input, graph has all original faces and edges
160
+ * * each sector points to a faceProperties with original facet normal
161
+ * * at exit:
162
+ * * new "chamfer faces" are added outside of edges with angle between normal sin excess of options.chamferTurnAngleBetweenNormals
163
+ * * the original edge is split along its length to create space
164
+ * * one edge "along" each direction inside the slit.
165
+ * * a sling edge at each end of the slit.
166
+ * * outside of the sling is part of the slit face loop.
167
+ * * inside is a single-node face
168
+ * * thus the slit itself has 4 nodes.
169
+ * * the two nodes at each end can thus contain the two distinct points at that end of the chamfer.
170
+ * * all 4 nodes of the slit face point to a new FacetOffsetProperties with the average normal.
171
+ * * the inside of each sling face has
172
+ * * original vertex coordinates in the node
173
+ * * face properties with a normal pointing outward from that end of the original edge -- hence define a plane that can clip the chamfer
174
+ * * the two points at each end of the chamfer are computed as the intersection of
175
+ * * chamfer plane
176
+ * * sling plane
177
+ * * adjacent plane of the face on the other side of the edge being chamfered.
178
+ * @param distance distance to offset. The sign of this is important in the chamfer construction.
179
+ */
180
+ private addChamferTopologyToAllEdges;
181
+ /**
182
+ * * at input:
183
+ * * Each node points to sectorOffsetProperties with previously computed XYZ (presumably mismatched)
184
+ * * at exit:
185
+ * * Each sectorOffsetProperties has an offset point computed with consideration of offset planes in the neighborhood.
186
+ * @param distance distance to offset.
187
+ */
188
+ private computeOffsetFacetIntersections;
189
+ private isInsideSling;
190
+ private isInsideChamferOrSling;
191
+ private isOffsetAssigned;
192
+ /**
193
+ *
194
+ * @param sourceNode node with good xyz
195
+ * @param destinationStartNode first of a sequence of nodes to set (delimited by masks)
196
+ * @param description string for debug
197
+ * @param workPoint point to use for coordinate transfer.
198
+ */
199
+ private transferXYZFromNodeToSmoothSector;
200
+ }
201
+ export {};
202
+ //# sourceMappingURL=OffsetMeshContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OffsetMeshContext.d.ts","sourceRoot":"","sources":["../../../../src/polyface/multiclip/OffsetMeshContext.ts"],"names":[],"mappings":"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"}