@itwin/core-geometry 4.5.0-dev.4 → 4.5.0-dev.40

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 (519) hide show
  1. package/CHANGELOG.md +62 -1
  2. package/LICENSE.md +1 -1
  3. package/lib/cjs/Constant.js.map +1 -1
  4. package/lib/cjs/Geometry.d.ts +15 -0
  5. package/lib/cjs/Geometry.d.ts.map +1 -1
  6. package/lib/cjs/Geometry.js +27 -0
  7. package/lib/cjs/Geometry.js.map +1 -1
  8. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  9. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  10. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  11. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  12. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  13. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  14. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  15. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  16. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  17. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  18. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  19. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  20. package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
  21. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  22. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  23. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  24. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  25. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  26. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  27. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  28. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  29. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  30. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  31. package/lib/cjs/core-geometry.js.map +1 -1
  32. package/lib/cjs/curve/Arc3d.js.map +1 -1
  33. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  34. package/lib/cjs/curve/CoordinateXYZ.d.ts +10 -13
  35. package/lib/cjs/curve/CoordinateXYZ.d.ts.map +1 -1
  36. package/lib/cjs/curve/CoordinateXYZ.js +16 -15
  37. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  38. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  39. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  40. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  41. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  42. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  43. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  44. package/lib/cjs/curve/CurveOps.js.map +1 -1
  45. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  46. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  47. package/lib/cjs/curve/CurveTypes.js.map +1 -1
  48. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  49. package/lib/cjs/curve/GeometryQuery.d.ts +17 -17
  50. package/lib/cjs/curve/GeometryQuery.d.ts.map +1 -1
  51. package/lib/cjs/curve/GeometryQuery.js +16 -15
  52. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  53. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  54. package/lib/cjs/curve/LineString3d.js.map +1 -1
  55. package/lib/cjs/curve/Loop.js.map +1 -1
  56. package/lib/cjs/curve/OffsetOptions.js.map +1 -1
  57. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  58. package/lib/cjs/curve/Path.js.map +1 -1
  59. package/lib/cjs/curve/PointString3d.d.ts +17 -13
  60. package/lib/cjs/curve/PointString3d.d.ts.map +1 -1
  61. package/lib/cjs/curve/PointString3d.js +35 -20
  62. package/lib/cjs/curve/PointString3d.js.map +1 -1
  63. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  64. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  65. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  66. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  67. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  68. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  69. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  70. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  71. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  72. package/lib/cjs/curve/RegionOps.js.map +1 -1
  73. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  74. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  75. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  76. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  77. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  78. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  79. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  80. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  81. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  82. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  83. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  84. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  85. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  86. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  87. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  88. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  89. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  90. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  91. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  92. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  93. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  94. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  95. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  96. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  97. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  98. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  99. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  100. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  101. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js +1 -1
  102. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  103. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  104. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js +1 -1
  105. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  106. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  107. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  108. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  109. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  110. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  111. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  112. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  113. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  114. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  115. package/lib/cjs/geometry3d/FrameBuilder.d.ts.map +1 -1
  116. package/lib/cjs/geometry3d/FrameBuilder.js +3 -0
  117. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  118. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  119. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  120. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  121. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  122. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  123. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts +8 -2
  124. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  125. package/lib/cjs/geometry3d/GrowableXYZArray.js +11 -2
  126. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  127. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  128. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  129. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  130. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  131. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  132. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  133. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  134. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  135. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  136. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  137. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  138. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  139. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  140. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  141. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  142. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  143. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  144. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  145. package/lib/cjs/geometry3d/Range.js.map +1 -1
  146. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  147. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  148. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  149. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  150. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  151. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  152. package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
  153. package/lib/cjs/geometry3d/XYZProps.d.ts +16 -8
  154. package/lib/cjs/geometry3d/XYZProps.d.ts.map +1 -1
  155. package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
  156. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  157. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  158. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  159. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  160. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  161. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  162. package/lib/cjs/numerics/BandedSystem.js.map +1 -1
  163. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  164. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  165. package/lib/cjs/numerics/Complex.js.map +1 -1
  166. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  167. package/lib/cjs/numerics/Newton.js.map +1 -1
  168. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  169. package/lib/cjs/numerics/PolarData.js.map +1 -1
  170. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  171. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  172. package/lib/cjs/numerics/Range1dArray.js.map +1 -1
  173. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  174. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  175. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  176. package/lib/cjs/polyface/AuxData.js.map +1 -1
  177. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  178. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  179. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  180. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  181. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  182. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  183. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts +42 -50
  184. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  185. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js +81 -105
  186. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  187. package/lib/cjs/polyface/Polyface.d.ts +166 -120
  188. package/lib/cjs/polyface/Polyface.d.ts.map +1 -1
  189. package/lib/cjs/polyface/Polyface.js +251 -162
  190. package/lib/cjs/polyface/Polyface.js.map +1 -1
  191. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +18 -10
  192. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  193. package/lib/cjs/polyface/PolyfaceBuilder.js +27 -21
  194. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  195. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  196. package/lib/cjs/polyface/PolyfaceData.d.ts +142 -86
  197. package/lib/cjs/polyface/PolyfaceData.d.ts.map +1 -1
  198. package/lib/cjs/polyface/PolyfaceData.js +305 -164
  199. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  200. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  201. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  202. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  203. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  204. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  205. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  206. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  207. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  208. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  209. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  210. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  211. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  212. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  213. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  214. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  215. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  216. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  217. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  218. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  219. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  220. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  221. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  222. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  223. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  224. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  225. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  226. package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
  227. package/lib/cjs/solid/Box.js.map +1 -1
  228. package/lib/cjs/solid/Cone.js.map +1 -1
  229. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  230. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  231. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  232. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  233. package/lib/cjs/solid/Sphere.js.map +1 -1
  234. package/lib/cjs/solid/SweepContour.js.map +1 -1
  235. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  236. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  237. package/lib/cjs/topology/Graph.d.ts +2 -8
  238. package/lib/cjs/topology/Graph.d.ts.map +1 -1
  239. package/lib/cjs/topology/Graph.js +0 -3
  240. package/lib/cjs/topology/Graph.js.map +1 -1
  241. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  242. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  243. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  244. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  245. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  246. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  247. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  248. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  249. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  250. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  251. package/lib/cjs/topology/MaskManager.js.map +1 -1
  252. package/lib/cjs/topology/Merging.js.map +1 -1
  253. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  254. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  255. package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
  256. package/lib/cjs/topology/Triangulation.d.ts +18 -7
  257. package/lib/cjs/topology/Triangulation.d.ts.map +1 -1
  258. package/lib/cjs/topology/Triangulation.js +50 -9
  259. package/lib/cjs/topology/Triangulation.js.map +1 -1
  260. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  261. package/lib/esm/Constant.js.map +1 -1
  262. package/lib/esm/Geometry.d.ts +15 -0
  263. package/lib/esm/Geometry.d.ts.map +1 -1
  264. package/lib/esm/Geometry.js +27 -0
  265. package/lib/esm/Geometry.js.map +1 -1
  266. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  267. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  268. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  269. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  270. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  271. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  272. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  273. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  274. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  275. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  276. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  277. package/lib/esm/bspline/KnotVector.js.map +1 -1
  278. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  279. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  280. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  281. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  282. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  283. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  284. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  285. package/lib/esm/clipping/ClipVector.js.map +1 -1
  286. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  287. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  288. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  289. package/lib/esm/core-geometry.js.map +1 -1
  290. package/lib/esm/curve/Arc3d.js.map +1 -1
  291. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  292. package/lib/esm/curve/CoordinateXYZ.d.ts +10 -13
  293. package/lib/esm/curve/CoordinateXYZ.d.ts.map +1 -1
  294. package/lib/esm/curve/CoordinateXYZ.js +16 -15
  295. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  296. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  297. package/lib/esm/curve/CurveCollection.js.map +1 -1
  298. package/lib/esm/curve/CurveCurve.js.map +1 -1
  299. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  300. package/lib/esm/curve/CurveFactory.js.map +1 -1
  301. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  302. package/lib/esm/curve/CurveOps.js.map +1 -1
  303. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  304. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  305. package/lib/esm/curve/CurveTypes.js.map +1 -1
  306. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  307. package/lib/esm/curve/GeometryQuery.d.ts +17 -17
  308. package/lib/esm/curve/GeometryQuery.d.ts.map +1 -1
  309. package/lib/esm/curve/GeometryQuery.js +16 -15
  310. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  311. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  312. package/lib/esm/curve/LineString3d.js.map +1 -1
  313. package/lib/esm/curve/Loop.js.map +1 -1
  314. package/lib/esm/curve/OffsetOptions.js.map +1 -1
  315. package/lib/esm/curve/ParityRegion.js.map +1 -1
  316. package/lib/esm/curve/Path.js.map +1 -1
  317. package/lib/esm/curve/PointString3d.d.ts +17 -13
  318. package/lib/esm/curve/PointString3d.d.ts.map +1 -1
  319. package/lib/esm/curve/PointString3d.js +35 -20
  320. package/lib/esm/curve/PointString3d.js.map +1 -1
  321. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  322. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  323. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  324. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  325. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  326. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  327. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  328. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  329. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  330. package/lib/esm/curve/RegionOps.js.map +1 -1
  331. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  332. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  333. package/lib/esm/curve/UnionRegion.js.map +1 -1
  334. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  335. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  336. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  337. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  338. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  339. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  340. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  341. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  342. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  343. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  344. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  345. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  346. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  347. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  348. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  349. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  350. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  351. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  352. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  353. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  354. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  355. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  356. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  357. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  358. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  359. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js +1 -1
  360. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  361. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  362. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js +1 -1
  363. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  364. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  365. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  366. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  367. package/lib/esm/geometry3d/Angle.js.map +1 -1
  368. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  369. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  370. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  371. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  372. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  373. package/lib/esm/geometry3d/FrameBuilder.d.ts.map +1 -1
  374. package/lib/esm/geometry3d/FrameBuilder.js +3 -0
  375. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  376. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  377. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  378. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  379. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  380. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  381. package/lib/esm/geometry3d/GrowableXYZArray.d.ts +8 -2
  382. package/lib/esm/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  383. package/lib/esm/geometry3d/GrowableXYZArray.js +11 -2
  384. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  385. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  386. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  387. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  388. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  389. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  390. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  391. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  392. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  393. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  394. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  395. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  396. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  397. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  398. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  399. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  400. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  401. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  402. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  403. package/lib/esm/geometry3d/Range.js.map +1 -1
  404. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  405. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  406. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  407. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  408. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  409. package/lib/esm/geometry3d/Transform.js.map +1 -1
  410. package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
  411. package/lib/esm/geometry3d/XYZProps.d.ts +16 -8
  412. package/lib/esm/geometry3d/XYZProps.d.ts.map +1 -1
  413. package/lib/esm/geometry3d/XYZProps.js.map +1 -1
  414. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  415. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  416. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  417. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  418. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  419. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  420. package/lib/esm/numerics/BandedSystem.js.map +1 -1
  421. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  422. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  423. package/lib/esm/numerics/Complex.js.map +1 -1
  424. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  425. package/lib/esm/numerics/Newton.js.map +1 -1
  426. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  427. package/lib/esm/numerics/PolarData.js.map +1 -1
  428. package/lib/esm/numerics/Polynomials.js.map +1 -1
  429. package/lib/esm/numerics/Quadrature.js.map +1 -1
  430. package/lib/esm/numerics/Range1dArray.js.map +1 -1
  431. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  432. package/lib/esm/numerics/UnionFind.js.map +1 -1
  433. package/lib/esm/numerics/UsageSums.js.map +1 -1
  434. package/lib/esm/polyface/AuxData.js.map +1 -1
  435. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  436. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  437. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  438. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  439. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  440. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  441. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts +42 -50
  442. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  443. package/lib/esm/polyface/IndexedPolyfaceVisitor.js +80 -103
  444. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  445. package/lib/esm/polyface/Polyface.d.ts +166 -120
  446. package/lib/esm/polyface/Polyface.d.ts.map +1 -1
  447. package/lib/esm/polyface/Polyface.js +251 -162
  448. package/lib/esm/polyface/Polyface.js.map +1 -1
  449. package/lib/esm/polyface/PolyfaceBuilder.d.ts +18 -10
  450. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  451. package/lib/esm/polyface/PolyfaceBuilder.js +27 -21
  452. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  453. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  454. package/lib/esm/polyface/PolyfaceData.d.ts +142 -86
  455. package/lib/esm/polyface/PolyfaceData.d.ts.map +1 -1
  456. package/lib/esm/polyface/PolyfaceData.js +305 -164
  457. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  458. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  459. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  460. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  461. package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  462. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  463. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  464. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  465. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  466. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  467. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  468. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  469. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  470. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  471. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  472. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  473. package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  474. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  475. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  476. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  477. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  478. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  479. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  480. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  481. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  482. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  483. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  484. package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
  485. package/lib/esm/solid/Box.js.map +1 -1
  486. package/lib/esm/solid/Cone.js.map +1 -1
  487. package/lib/esm/solid/LinearSweep.js.map +1 -1
  488. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  489. package/lib/esm/solid/RuledSweep.js.map +1 -1
  490. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  491. package/lib/esm/solid/Sphere.js.map +1 -1
  492. package/lib/esm/solid/SweepContour.js.map +1 -1
  493. package/lib/esm/solid/TorusPipe.js.map +1 -1
  494. package/lib/esm/topology/ChainMerge.js.map +1 -1
  495. package/lib/esm/topology/Graph.d.ts +2 -8
  496. package/lib/esm/topology/Graph.d.ts.map +1 -1
  497. package/lib/esm/topology/Graph.js +0 -3
  498. package/lib/esm/topology/Graph.js.map +1 -1
  499. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  500. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  501. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  502. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  503. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  504. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  505. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  506. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  507. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  508. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  509. package/lib/esm/topology/MaskManager.js.map +1 -1
  510. package/lib/esm/topology/Merging.js.map +1 -1
  511. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  512. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  513. package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
  514. package/lib/esm/topology/Triangulation.d.ts +18 -7
  515. package/lib/esm/topology/Triangulation.d.ts.map +1 -1
  516. package/lib/esm/topology/Triangulation.js +50 -9
  517. package/lib/esm/topology/Triangulation.js.map +1 -1
  518. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  519. package/package.json +6 -4
@@ -15,35 +15,28 @@ import { Range3d } from "../geometry3d/Range";
15
15
  import { ClusterableArray } from "../numerics/ClusterableArray";
16
16
  import { PolyfaceAuxData } from "./AuxData";
17
17
  import { TaggedNumericData } from "./TaggedNumericData";
18
+ // cspell:word internaldocs
18
19
  /**
19
- * PolyfaceData carries data arrays for point, normal, param, color and their indices.
20
- *
21
- * * IndexedPolyface carries a PolyfaceData as a member. (NOT as a base class -- it already has GeometryQuery as base)
22
- * * IndexedPolyfaceVisitor uses PolyfaceData as a base class. In this use there is only a single facet in the polyfaceData.
23
- * * PolyfaceData does not know (!!!) what indices range constitute a facet. That is managed by derived class or carrier class.
20
+ * `PolyfaceData` carries data arrays for point, normal, uv-parameters, and color, and index arrays for each.
21
+ * * Normal, uv-parameter, and color data are optional.
22
+ * * A given data array is defined if and only if its corresponding index array is defined.
23
+ * * All defined index arrays have parallel face loop order and structure, and thus the same length.
24
+ * * `IndexedPolyface` carries a PolyfaceData as a member (NOT as a base class; it already has `GeometryQuery` as base).
25
+ * * `IndexedPolyfaceVisitor` uses PolyfaceData as a base class. In this use, there is only a single facet in `PolyfaceData`.
26
+ * * `PolyfaceData` does not know what index range constitutes a given facet. This is managed by a derived/carrier class.
24
27
  * @public
25
28
  */
26
29
  class PolyfaceData {
27
- /** boolean tag indicating if the facets are viewable from the back */
28
- get twoSided() { return this._twoSided; }
29
- set twoSided(value) { this._twoSided = value; }
30
- /** set the `taggedNumericData` member */
31
- setTaggedNumericData(data) {
32
- this.taggedNumericData = data;
33
- }
34
- /** boolean tag indicating if the facets are viewable from the back */
35
- get expectedClosure() { return this._expectedClosure; }
36
- set expectedClosure(value) { this._expectedClosure = value; }
37
- /** Constructor for facets.
38
- * * The various params control whether respective arrays are to be allocated.
39
- * * If arrayData is provided, all other params are IGNORED.
40
- * *
30
+ /**
31
+ * Constructor for facets.
32
+ * @param needNormals `true` to allocate empty normal data and index arrays; `false` (default) to leave undefined.
33
+ * @param needParams `true` to allocate empty uv parameter data and index arrays; `false` (default) to leave undefined.
34
+ * @param needColors `true` to allocate empty color data and index arrays; `false` (default) to leave undefined.
35
+ * @param twoSided `true` if the facets are to be considered viewable from the back; `false` (default) if not.
41
36
  */
42
37
  constructor(needNormals = false, needParams = false, needColors = false, twoSided = false) {
43
- this.face = [];
44
38
  this.point = new GrowableXYZArray();
45
39
  this.pointIndex = [];
46
- this.edgeVisible = [];
47
40
  if (needNormals) {
48
41
  this.normal = new GrowableXYZArray();
49
42
  this.normalIndex = [];
@@ -56,6 +49,8 @@ class PolyfaceData {
56
49
  this.color = [];
57
50
  this.colorIndex = [];
58
51
  }
52
+ this.face = [];
53
+ this.edgeVisible = [];
59
54
  this._twoSided = twoSided;
60
55
  this._expectedClosure = 0;
61
56
  }
@@ -64,30 +59,29 @@ class PolyfaceData {
64
59
  const result = new PolyfaceData();
65
60
  result.point = this.point.clone();
66
61
  result.pointIndex = this.pointIndex.slice();
67
- result.edgeVisible = this.edgeVisible.slice();
68
- result.face = this.face.slice();
69
- result.twoSided = this.twoSided;
70
- result.expectedClosure = this.expectedClosure;
71
62
  if (this.normal)
72
63
  result.normal = this.normal.clone();
73
- if (this.param)
74
- result.param = this.param.clone();
75
- if (this.color)
76
- result.color = this.color.slice();
77
64
  if (this.normalIndex)
78
65
  result.normalIndex = this.normalIndex.slice();
66
+ if (this.param)
67
+ result.param = this.param.clone();
79
68
  if (this.paramIndex)
80
69
  result.paramIndex = this.paramIndex.slice();
70
+ if (this.color)
71
+ result.color = this.color.slice();
81
72
  if (this.colorIndex)
82
73
  result.colorIndex = this.colorIndex.slice();
74
+ result.face = this.face.slice();
83
75
  if (this.auxData)
84
76
  result.auxData = this.auxData.clone();
85
- if (this.taggedNumericData) {
77
+ if (this.taggedNumericData)
86
78
  result.taggedNumericData = this.taggedNumericData.clone();
87
- }
79
+ result.edgeVisible = this.edgeVisible.slice();
80
+ result.twoSided = this.twoSided;
81
+ result.expectedClosure = this.expectedClosure;
88
82
  return result;
89
83
  }
90
- /** Test for equal indices and nearly equal coordinates */
84
+ /** Test for equal indices and nearly equal coordinates. */
91
85
  isAlmostEqual(other) {
92
86
  if (!GrowableXYZArray.isAlmostEqual(this.point, other.point))
93
87
  return false;
@@ -105,77 +99,133 @@ class PolyfaceData {
105
99
  return false;
106
100
  if (!NumberArray.isExactEqual(this.colorIndex, other.colorIndex))
107
101
  return false;
108
- if (!NumberArray.isExactEqual(this.edgeVisible, other.edgeVisible))
109
- return false;
110
102
  if (!PolyfaceAuxData.isAlmostEqual(this.auxData, other.auxData))
111
103
  return false;
104
+ if (!TaggedNumericData.areAlmostEqual(this.taggedNumericData, other.taggedNumericData))
105
+ return false;
106
+ if (!NumberArray.isExactEqual(this.edgeVisible, other.edgeVisible))
107
+ return false;
112
108
  if (this.twoSided !== other.twoSided)
113
109
  return false;
114
110
  if (this.expectedClosure !== other.expectedClosure)
115
111
  return false;
116
- if (!TaggedNumericData.areAlmostEqual(this.taggedNumericData, other.taggedNumericData))
117
- return false;
118
112
  return true;
119
113
  }
120
114
  /** Ask if normals are required in this mesh. */
121
- get requireNormals() { return undefined !== this.normal; }
115
+ get requireNormals() {
116
+ return undefined !== this.normal;
117
+ }
118
+ /** Ask if params are required in this mesh. */
119
+ get requireParams() {
120
+ return undefined !== this.param;
121
+ }
122
+ /** Ask if colors are required in this mesh. */
123
+ get requireColors() {
124
+ return undefined !== this.color;
125
+ }
122
126
  /** Get the point count */
123
- get pointCount() { return this.point.length; }
127
+ get pointCount() {
128
+ return this.point.length;
129
+ }
124
130
  /** Get the normal count */
125
- get normalCount() { return this.normal ? this.normal.length : 0; }
131
+ get normalCount() {
132
+ return this.normal ? this.normal.length : 0;
133
+ }
126
134
  /** Get the param count */
127
- get paramCount() { return this.param ? this.param.length : 0; }
135
+ get paramCount() {
136
+ return this.param ? this.param.length : 0;
137
+ }
128
138
  /** Get the color count */
129
- get colorCount() { return this.color ? this.color.length : 0; }
130
- /** Get the index count. Note that there is one count, and all index arrays (point, normal, param, color) must match */
131
- get indexCount() { return this.pointIndex.length; } // ALWAYS INDEXED ... all index vectors must have same length.
132
- /** Get the number of faces.
139
+ get colorCount() {
140
+ return this.color ? this.color.length : 0;
141
+ }
142
+ /** Get the index count. Note that the point array is always indexed, and index arrays all have the same length. */
143
+ get indexCount() {
144
+ return this.pointIndex.length;
145
+ }
146
+ /**
147
+ * Get the number of faces.
133
148
  * * Note that a "face" is not a facet.
134
- * * A "face" is a subset of facets grouped for application purposes.
149
+ * * A face is a subset of the Polyface's facets grouped for application purposes.
135
150
  */
136
- get faceCount() { return this.face.length; }
137
- /** return indexed point. This is a copy of the coordinates, not a reference. */
138
- getPoint(i, out) {
139
- return this.point.getPoint3dAtCheckedPointIndex(i, out);
140
- }
141
- /** return indexed normal. This is the COPY to the normal, not a reference. */
142
- getNormal(i) { return this.normal ? this.normal.getVector3dAtCheckedVectorIndex(i) : undefined; }
143
- /** return indexed param. This is the COPY of the coordinates, not a reference. */
144
- getParam(i) { return this.param ? this.param.getPoint2dAtCheckedPointIndex(i) : undefined; }
145
- /** return indexed color */
146
- getColor(i) { return this.color ? this.color[i] : 0; }
147
- /** return indexed visibility */
148
- getEdgeVisible(i) { return this.edgeVisible[i]; }
149
- /** Copy the contents (not pointer) of point[i] into dest. */
150
- copyPointTo(i, dest) { this.point.getPoint3dAtUncheckedPointIndex(i, dest); }
151
- /** Copy the contents (not pointer) of normal[i] into dest. */
152
- copyNormalTo(i, dest) { if (this.normal)
153
- this.normal.getVector3dAtCheckedVectorIndex(i, dest); }
154
- /** Copy the contents (not pointer) of param[i] into dest. */
155
- copyParamTo(i, dest) { if (this.param)
156
- this.param.getPoint2dAtCheckedPointIndex(i, dest); }
157
- /** test if normal at a specified index matches uv */
158
- isAlmostEqualParamIndexUV(index, u, v) {
159
- if (this.param !== undefined && index >= 0 && index < this.param.length)
160
- return Geometry.isSameCoordinate(u, this.param.getXAtUncheckedPointIndex(index))
161
- && Geometry.isSameCoordinate(v, this.param.getYAtUncheckedPointIndex(index));
151
+ get faceCount() {
152
+ return this.face.length;
153
+ }
154
+ /** Return indexed point at index `i`. This is a COPY of the coordinates, not a reference. */
155
+ getPoint(i, result) {
156
+ return this.point.getPoint3dAtCheckedPointIndex(i, result);
157
+ }
158
+ /** Return indexed normal at index `i`. This is a COPY of the normal, not a reference. */
159
+ getNormal(i, result) {
160
+ return this.normal ? this.normal.getVector3dAtCheckedVectorIndex(i, result) : undefined;
161
+ }
162
+ /** Return indexed param at index `i`. This is a COPY of the coordinates, not a reference. */
163
+ getParam(i, result) {
164
+ return this.param ? this.param.getPoint2dAtCheckedPointIndex(i, result) : undefined;
165
+ }
166
+ /** Return indexed color at index `i`. Index `i` is not checked for validity. */
167
+ getColor(i) {
168
+ return this.color ? this.color[i] : 0;
169
+ }
170
+ /** Return indexed visibility. at index `i`. Index `i` is not checked for validity. */
171
+ getEdgeVisible(i) {
172
+ return this.edgeVisible[i];
173
+ }
174
+ /** Get boolean tag indicating if the facets are to be considered viewable from the back. */
175
+ get twoSided() {
176
+ return this._twoSided;
177
+ }
178
+ set twoSided(value) {
179
+ this._twoSided = value;
180
+ }
181
+ /** Get flag indicating if the mesh closure is unknown (0), open sheet (1), closed solid (2). */
182
+ get expectedClosure() {
183
+ return this._expectedClosure;
184
+ }
185
+ set expectedClosure(value) {
186
+ this._expectedClosure = value;
187
+ }
188
+ /** Set the tagged geometry data. */
189
+ setTaggedNumericData(data) {
190
+ this.taggedNumericData = data;
191
+ }
192
+ /** Copy the contents (not pointer) of `point[i]` into `dest`. Index `i` is not checked for validity. */
193
+ copyPointTo(i, dest) {
194
+ this.point.getPoint3dAtUncheckedPointIndex(i, dest);
195
+ }
196
+ /** Copy the contents (not pointer) of `normal[i]` into `dest`. Index `i` is not checked for validity. */
197
+ copyNormalTo(i, dest) {
198
+ if (this.normal)
199
+ this.normal.getVector3dAtUncheckedVectorIndex(i, dest);
200
+ }
201
+ /** Copy the contents (not pointer) of `param[i]` into `dest`. Index `i` is not checked for validity. */
202
+ copyParamTo(i, dest) {
203
+ if (this.param)
204
+ this.param.getPoint2dAtUncheckedPointIndex(i, dest);
205
+ }
206
+ /** Test if param at a index `i` matches the given uv */
207
+ isAlmostEqualParamIndexUV(i, u, v) {
208
+ if (this.param !== undefined && i >= 0 && i < this.param.length)
209
+ return Geometry.isSameCoordinate(u, this.param.getXAtUncheckedPointIndex(i))
210
+ && Geometry.isSameCoordinate(v, this.param.getYAtUncheckedPointIndex(i));
162
211
  return false;
163
212
  }
164
213
  /**
165
- * * Copy data from other to this.
214
+ * Copy data from `other` to `this`.
166
215
  * * This is the essence of transferring coordinates spread throughout a large polyface into a visitor's single facet.
167
- * * "other" is the large polyface
168
- * * "this" is the visitor
169
- * * does NOT copy face data - visitors reference the FacetFaceData array for the whole polyface!!
216
+ * * Common usage: "other" is a Polyface, "this" is a PolyfaceVisitor to receive data from a single facet of the Polyface.
217
+ * * Does NOT copy face data - visitors reference the FacetFaceData array for the whole polyface.
170
218
  * @param other polyface data being mined.
171
- * @param index0 start index in other's index arrays
172
- * @param index1 end index (one beyond last data accessed0 in other's index arrays
219
+ * @param index0 start index in other's index arrays.
220
+ * @param index1 end index (one beyond last data accessed) in other's index arrays.
173
221
  * @param numWrap number of points to replicate as wraparound.
174
222
  */
175
223
  gatherIndexedData(other, index0, index1, numWrap) {
176
224
  const numEdge = index1 - index0;
225
+ if (numWrap > numEdge)
226
+ numWrap = numEdge;
177
227
  const numTotal = numEdge + numWrap;
178
- this.resizeAllDataArrays(numTotal);
228
+ this.resizeAllArrays(numTotal);
179
229
  // copy wrapped points
180
230
  for (let i = 0; i < numEdge; i++)
181
231
  this.point.transferFromGrowableXYZArray(i, other.point, other.pointIndex[index0 + i]);
@@ -186,41 +236,48 @@ class PolyfaceData {
186
236
  this.pointIndex[i] = other.pointIndex[index0 + i];
187
237
  for (let i = 0; i < numWrap; i++)
188
238
  this.pointIndex[numEdge + i] = this.pointIndex[i];
189
- // copy wrapped edge visibility
190
- for (let i = 0; i < numEdge; i++)
191
- this.edgeVisible[i] = other.edgeVisible[index0 + i];
192
- for (let i = 0; i < numWrap; i++)
193
- this.edgeVisible[numEdge + i] = this.edgeVisible[i];
239
+ // copy wrapped normals
194
240
  if (this.normal && this.normalIndex && other.normal && other.normalIndex) {
195
241
  for (let i = 0; i < numEdge; i++)
196
242
  this.normal.transferFromGrowableXYZArray(i, other.normal, other.normalIndex[index0 + i]);
197
243
  for (let i = 0; i < numWrap; i++)
198
244
  this.normal.transferFromGrowableXYZArray(numEdge + i, this.normal, i);
245
+ // copy wrapped normalIndex
199
246
  for (let i = 0; i < numEdge; i++)
200
247
  this.normalIndex[i] = other.normalIndex[index0 + i];
201
248
  for (let i = 0; i < numWrap; i++)
202
249
  this.normalIndex[numEdge + i] = this.normalIndex[i];
203
250
  }
251
+ // copy wrapped params
204
252
  if (this.param && this.paramIndex && other.param && other.paramIndex) {
205
253
  for (let i = 0; i < numEdge; i++)
206
254
  this.param.transferFromGrowableXYArray(i, other.param, other.paramIndex[index0 + i]);
207
255
  for (let i = 0; i < numWrap; i++)
208
256
  this.param.transferFromGrowableXYArray(numEdge + i, this.param, i);
257
+ // copy wrapped paramIndex
209
258
  for (let i = 0; i < numEdge; i++)
210
259
  this.paramIndex[i] = other.paramIndex[index0 + i];
211
260
  for (let i = 0; i < numWrap; i++)
212
261
  this.paramIndex[numEdge + i] = this.paramIndex[i];
213
262
  }
263
+ // copy wrapped colors
214
264
  if (this.color && this.colorIndex && other.color && other.colorIndex) {
215
265
  for (let i = 0; i < numEdge; i++)
216
266
  this.color[i] = other.color[other.colorIndex[index0 + i]];
217
267
  for (let i = 0; i < numWrap; i++)
218
268
  this.color[numEdge + i] = this.color[i];
269
+ // copy wrapped colorIndex
219
270
  for (let i = 0; i < numEdge; i++)
220
271
  this.colorIndex[i] = other.colorIndex[index0 + i];
221
272
  for (let i = 0; i < numWrap; i++)
222
273
  this.colorIndex[numEdge + i] = this.colorIndex[i];
223
274
  }
275
+ // copy wrapped edge visibility
276
+ for (let i = 0; i < numEdge; i++)
277
+ this.edgeVisible[i] = other.edgeVisible[index0 + i];
278
+ for (let i = 0; i < numWrap; i++)
279
+ this.edgeVisible[numEdge + i] = this.edgeVisible[i];
280
+ // copy wrapped auxData
224
281
  if (this.auxData && other.auxData && this.auxData.channels.length === other.auxData.channels.length) {
225
282
  for (let iChannel = 0; iChannel < this.auxData.channels.length; iChannel++) {
226
283
  const thisChannel = this.auxData.channels[iChannel];
@@ -237,15 +294,20 @@ class PolyfaceData {
237
294
  }
238
295
  }
239
296
  }
297
+ // copy wrapped auxData index
240
298
  for (let i = 0; i < numEdge; i++)
241
299
  this.auxData.indices[i] = other.auxData.indices[index0 + i];
242
300
  for (let i = 0; i < numWrap; i++)
243
301
  this.auxData.indices[numEdge + i] = this.auxData.indices[i];
244
302
  }
245
303
  }
246
- static trimArray(data, length) { if (data && length < data.length)
247
- data.length = length; }
248
- /** Trim all index arrays to stated length.
304
+ /** Trim the `data` arrays to the stated `length`. */
305
+ static trimArray(data, length) {
306
+ if (data && length < data.length)
307
+ data.length = length;
308
+ }
309
+ /**
310
+ * Trim all index arrays to the stated `length`.
249
311
  * * This is called by PolyfaceBuilder to clean up after an aborted construction sequence.
250
312
  */
251
313
  trimAllIndexArrays(length) {
@@ -262,7 +324,78 @@ class PolyfaceData {
262
324
  }
263
325
  }
264
326
  }
265
- /** Resize all data arrays to specified length */
327
+ /**
328
+ * Resize all data and index arrays to the specified `length`.
329
+ * * This is used by visitors, whose data and index arrays are all parallel.
330
+ */
331
+ resizeAllArrays(length) {
332
+ if (length > this.point.length) {
333
+ while (this.point.length < length)
334
+ this.point.push(Point3d.create());
335
+ while (this.pointIndex.length < length)
336
+ this.pointIndex.push(-1);
337
+ if (this.normal)
338
+ while (this.normal.length < length)
339
+ this.normal.push(Vector3d.create());
340
+ if (this.normalIndex)
341
+ while (this.normalIndex.length < length)
342
+ this.normalIndex.push(-1);
343
+ if (this.param)
344
+ while (this.param.length < length)
345
+ this.param.push(Point2d.create());
346
+ if (this.paramIndex)
347
+ while (this.paramIndex.length < length)
348
+ this.paramIndex.push(-1);
349
+ if (this.color)
350
+ while (this.color.length < length)
351
+ this.color.push(0);
352
+ if (this.colorIndex)
353
+ while (this.colorIndex.length < length)
354
+ this.colorIndex.push(-1);
355
+ while (this.edgeVisible.length < length)
356
+ this.edgeVisible.push(false);
357
+ if (this.auxData) {
358
+ for (const channel of this.auxData.channels) {
359
+ for (const channelData of channel.data) {
360
+ while (channelData.values.length < length * channel.entriesPerValue)
361
+ channelData.values.push(0);
362
+ }
363
+ }
364
+ if (this.auxData.indices)
365
+ this.auxData.indices.push(-1);
366
+ }
367
+ }
368
+ else if (length < this.point.length) {
369
+ this.point.resize(length);
370
+ this.pointIndex.length = length;
371
+ if (this.normal)
372
+ this.normal.resize(length);
373
+ if (this.normalIndex)
374
+ this.normalIndex.length = length;
375
+ if (this.param)
376
+ this.param.resize(length);
377
+ if (this.paramIndex)
378
+ this.paramIndex.length = length;
379
+ if (this.color)
380
+ this.color.length = length;
381
+ if (this.colorIndex)
382
+ this.colorIndex.length = length;
383
+ this.edgeVisible.length = length;
384
+ if (this.auxData) {
385
+ for (const channel of this.auxData.channels) {
386
+ for (const channelData of channel.data) {
387
+ channelData.values.length = length * channel.entriesPerValue;
388
+ }
389
+ }
390
+ if (this.auxData.indices)
391
+ this.auxData.indices.length = length;
392
+ }
393
+ }
394
+ }
395
+ /**
396
+ * Resize all data arrays to the specified `length`.
397
+ * @deprecated in 4.x because name is misleading. Call [[PolyfaceData.resizeAllArrays]] instead.
398
+ */
266
399
  resizeAllDataArrays(length) {
267
400
  if (length > this.point.length) {
268
401
  while (this.point.length < length)
@@ -308,56 +441,16 @@ class PolyfaceData {
308
441
  }
309
442
  }
310
443
  }
311
- /** Return the range of the point array (optionally transformed) */
444
+ /** Return the range of the point array (optionally transformed). */
312
445
  range(result, transform) {
313
446
  result = result ? result : Range3d.createNull();
314
447
  result.extendArray(this.point, transform);
315
448
  return result;
316
449
  }
317
- /** reverse indices facet-by-facet, with the given facetStartIndex array delimiting faces.
318
- *
319
- * * facetStartIndex[0] == 0 always -- start of facet zero.
320
- * * facet k has indices from facetStartIndex[k] <= i < facetStartIndex[k+1]
321
- * * hence for "internal" k, facetStartIndex[k] is both the upper limit of facet k-1 and the start of facet k.
322
- * *
323
- */
324
- reverseIndices(facetStartIndex) {
325
- if (facetStartIndex && PolyfaceData.isValidFacetStartIndexArray(facetStartIndex)) {
326
- PolyfaceData.reverseIndices(facetStartIndex, this.pointIndex, true);
327
- if (this.normalIndex !== this.pointIndex)
328
- PolyfaceData.reverseIndices(facetStartIndex, this.normalIndex, true);
329
- if (this.paramIndex !== this.pointIndex)
330
- PolyfaceData.reverseIndices(facetStartIndex, this.paramIndex, true);
331
- if (this.colorIndex !== this.pointIndex)
332
- PolyfaceData.reverseIndices(facetStartIndex, this.colorIndex, true);
333
- PolyfaceData.reverseIndices(facetStartIndex, this.edgeVisible, false);
334
- }
335
- }
336
- /** reverse indices facet-by-facet, with the given facetStartIndex array delimiting faces.
337
- *
338
- * * facetStartIndex[0] == 0 always -- start of facet zero.
339
- * * facet k has indices from facetStartIndex[k] <= i < facetStartIndex[k+1]
340
- * * hence for "internal" k, facetStartIndex[k] is both the upper limit of facet k-1 and the start of facet k.
341
- * *
342
- */
343
- reverseIndicesSingleFacet(facetId, facetStartIndex) {
344
- PolyfaceData.reverseIndicesSingleFacet(facetId, facetStartIndex, this.pointIndex, true);
345
- if (this.normalIndex !== this.pointIndex)
346
- PolyfaceData.reverseIndicesSingleFacet(facetId, facetStartIndex, this.normalIndex, true);
347
- if (this.paramIndex !== this.pointIndex)
348
- PolyfaceData.reverseIndicesSingleFacet(facetId, facetStartIndex, this.paramIndex, true);
349
- if (this.colorIndex !== this.pointIndex)
350
- PolyfaceData.reverseIndicesSingleFacet(facetId, facetStartIndex, this.colorIndex, true);
351
- PolyfaceData.reverseIndicesSingleFacet(facetId, facetStartIndex, this.edgeVisible, false);
352
- }
353
- /** Scale all the normals by -1 */
354
- reverseNormals() {
355
- if (this.normal)
356
- this.normal.scaleInPlace(-1.0);
357
- }
358
- /** Apply `transform` to point and normal arrays and to auxData.
359
- * * IMPORTANT This base class is just a data carrier. It does not know if the index order and normal directions have special meaning.
360
- * * i.e. caller must separately reverse index order and normal direction if needed.
450
+ /**
451
+ * Apply `transform` to point and normal arrays and to auxData.
452
+ * * IMPORTANT This base class is just a data carrier. It does not know if the index order and normal directions
453
+ * have special meaning, i.e., caller must separately reverse index order and normal direction if needed.
361
454
  */
362
455
  tryTransformInPlace(transform) {
363
456
  this.point.multiplyTransformInPlace(transform);
@@ -370,13 +463,14 @@ class PolyfaceData {
370
463
  * * Search for duplicates within points, normals, params, and colors.
371
464
  * * Compress each data array.
372
465
  * * Revise all indexing for the relocated data.
373
- * @param tolerance optional tolerance for clustering mesh vertices. Default is [[Geometry.smallMetricDistance]].
466
+ * @param tolerance (optional) tolerance for clustering mesh vertices. Default is [[Geometry.smallMetricDistance]].
374
467
  */
375
468
  compress(tolerance = Geometry.smallMetricDistance) {
469
+ // more info can be found at geometry/internaldocs/Polyface.md
376
470
  const packedPoints = ClusterableArray.clusterGrowablePoint3dArray(this.point, tolerance);
377
471
  this.point = packedPoints.growablePackedPoints;
378
472
  packedPoints.updateIndices(this.pointIndex);
379
- // for now, normals, params, and colors use the default tolerance for clustering...
473
+ // for now, normals, params, and colors use the default tolerance for clustering
380
474
  if (this.normalIndex && this.normal) {
381
475
  const packedNormals = ClusterableArray.clusterGrowablePoint3dArray(this.normal);
382
476
  this.normal = packedNormals.growablePackedPoints;
@@ -394,10 +488,11 @@ class PolyfaceData {
394
488
  }
395
489
  }
396
490
  /**
397
- * Test if facetStartIndex is (minimally!) valid:
398
- * * length must be nonzero (recall that for "no facets" the facetStartIndexArray still must contain a 0)
491
+ * Test if `facetStartIndex` is (minimally) valid.
492
+ * * Length must be nonzero (recall that for "no facets", the `facetStartIndex` array still must contain a 0).
399
493
  * * Each entry must be strictly smaller than the one that follows.
400
- * @param facetStartIndex array of facetStart data. facet `i` has indices at `facetsStartIndex[i]` to (one before) `facetStartIndex[i+1]`
494
+ * @param facetStartIndex start indices of all facets. Facet k starts at facetStartIndex[k] up to (but not including)
495
+ * `facetStartIndex[k + 1]`
401
496
  */
402
497
  static isValidFacetStartIndexArray(facetStartIndex) {
403
498
  // facetStartIndex for empty facets has a single entry "0" -- empty array is not allowed
@@ -408,8 +503,14 @@ class PolyfaceData {
408
503
  return false;
409
504
  return true;
410
505
  }
411
- /** Reverse data in entire facet indexing arrays.
412
- * * parameterized over type T so non-number data -- e.g. boolean visibility flags -- can be reversed.
506
+ /**
507
+ * Reverse the indices for the specified facets in the given index array.
508
+ * * Parameterized over type T so non-number data (e.g., boolean visibility flags) can be reversed.
509
+ * @param facetStartIndex start indices of *consecutive* facets to be reversed, e.g., an IndexedPolyface's _facetStart
510
+ * array. See the non-static [[reverseIndices]].
511
+ * @param indices the index array, e.g., pointIndex, normalIndex, etc.
512
+ * @param preserveStart `true` to preserve the start index of each facet (e.g., facet [1,2,3,4] becomes [1,4,3,2]);
513
+ * `false` to reverse all indices (e.g., facet [1,2,3,4] becomes [4,3,2,1]).
413
514
  */
414
515
  static reverseIndices(facetStartIndex, indices, preserveStart) {
415
516
  if (!indices || indices.length === 0)
@@ -419,8 +520,7 @@ class PolyfaceData {
419
520
  for (let i = 0; i + 1 < facetStartIndex.length; i++) {
420
521
  let index0 = facetStartIndex[i];
421
522
  let index1 = facetStartIndex[i + 1];
422
- if (preserveStart) {
423
- // leave [index0] as is so reversed facet starts at same vertex
523
+ if (preserveStart) { // leave "index0" as is so reversed facet starts at same vertex
424
524
  while (index1 > index0 + 2) {
425
525
  index1--;
426
526
  index0++;
@@ -429,8 +529,7 @@ class PolyfaceData {
429
529
  indices[index1] = a;
430
530
  }
431
531
  }
432
- else {
433
- // reverse all
532
+ else { // reverse all
434
533
  while (index1 > index0 + 1) {
435
534
  index1--;
436
535
  const a = indices[index0];
@@ -445,19 +544,26 @@ class PolyfaceData {
445
544
  }
446
545
  return false;
447
546
  }
448
- /** Reverse data in entire facet indexing arrays.
449
- * * parameterized over type T so non-number data -- e.g. boolean visibility flags -- can be reversed.
547
+ /**
548
+ * Reverse the indices for the specified facet in the specified index array.
549
+ * * Parameterized over type T so non-number data (e.g., boolean visibility flags) can be reversed.
550
+ * @param facetIndex index of the facet to reverse. The entries of `indices` to be reversed are found at
551
+ * `facetStartIndex[facetIndex] <= i < facetStartIndex[facetIndex + 1]`.
552
+ * @param facetStartIndex start indices of *consecutive* facets, e.g., an IndexedPolyface's _facetStart array.
553
+ * See [[reverseIndices]].
554
+ * @param indices the index array, e.g., pointIndex, normalIndex, etc.
555
+ * @param preserveStart `true` to preserve the start index of each facet (e.g., facet [1,2,3,4] becomes [1,4,3,2]);
556
+ * `false` to reverse all indices (e.g., facet [1,2,3,4] becomes [4,3,2,1]).
450
557
  */
451
- static reverseIndicesSingleFacet(facetId, facetStartIndex, indices, preserveStart) {
558
+ static reverseIndicesSingleFacet(facetIndex, facetStartIndex, indices, preserveStart) {
452
559
  if (!indices || indices.length === 0)
453
560
  return true; // empty case
454
561
  if (indices.length > 0) {
455
562
  if (facetStartIndex[facetStartIndex.length - 1] === indices.length
456
- && facetId >= 0 && facetId + 1 < facetStartIndex.length) {
457
- let index0 = facetStartIndex[facetId];
458
- let index1 = facetStartIndex[facetId + 1];
459
- if (preserveStart) {
460
- // leave [index0] as is so reversed facet starts at same vertex
563
+ && facetIndex >= 0 && facetIndex + 1 < facetStartIndex.length) {
564
+ let index0 = facetStartIndex[facetIndex];
565
+ let index1 = facetStartIndex[facetIndex + 1];
566
+ if (preserveStart) { // leave "index0" as is so reversed facet starts at same vertex
461
567
  while (index1 > index0 + 2) {
462
568
  index1--;
463
569
  index0++;
@@ -466,8 +572,7 @@ class PolyfaceData {
466
572
  indices[index1] = a;
467
573
  }
468
574
  }
469
- else {
470
- // reverse all
575
+ else { // reverse all
471
576
  while (index1 > index0 + 1) {
472
577
  index1--;
473
578
  const a = indices[index0];
@@ -481,19 +586,55 @@ class PolyfaceData {
481
586
  }
482
587
  return false;
483
588
  }
589
+ /**
590
+ * Reverse the indices for the specified facets in the index arrays (pointIndex, normalIndex, paramIndex, colorIndex,
591
+ * and edgeVisible).
592
+ * @param facetStartIndex start indices of *consecutive* facets to be reversed.
593
+ * * Consecutive indices in this array define where a given facet is represented in each of the parallel index arrays.
594
+ * * The indices for facet k are `facetStartIndex[k]` up to (but not including) `facetStartIndex[k + 1]`.
595
+ * * This implies `facetStartIndex[k + 1]` is both the upper limit of facet k's indices, and the start index of facet k+1.
596
+ * * For example, passing an IndexedPolyface's _facetStart array into this method reverses every facet.
597
+ */
598
+ reverseIndices(facetStartIndex) {
599
+ if (facetStartIndex && PolyfaceData.isValidFacetStartIndexArray(facetStartIndex)) {
600
+ PolyfaceData.reverseIndices(facetStartIndex, this.pointIndex, true);
601
+ if (this.normalIndex !== this.pointIndex)
602
+ PolyfaceData.reverseIndices(facetStartIndex, this.normalIndex, true);
603
+ if (this.paramIndex !== this.pointIndex)
604
+ PolyfaceData.reverseIndices(facetStartIndex, this.paramIndex, true);
605
+ if (this.colorIndex !== this.pointIndex)
606
+ PolyfaceData.reverseIndices(facetStartIndex, this.colorIndex, true);
607
+ PolyfaceData.reverseIndices(facetStartIndex, this.edgeVisible, false);
608
+ }
609
+ }
610
+ /**
611
+ * Reverse the indices for the specified facet in the index arrays (pointIndex, normalIndex, paramIndex, colorIndex,
612
+ * and edgeVisible).
613
+ * @param facetIndex index of the facet to reverse. The entries of each index array to be reversed are found at
614
+ * `facetStartIndex[facetIndex] <= i < facetStartIndex[facetIndex + 1]`.
615
+ * @param facetStartIndex start indices of *consecutive* facets, e.g., an IndexedPolyface's _facetStart array.
616
+ * See [[reverseIndices]].
617
+ */
618
+ reverseIndicesSingleFacet(facetIndex, facetStartIndex) {
619
+ PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.pointIndex, true);
620
+ if (this.normalIndex !== this.pointIndex)
621
+ PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.normalIndex, true);
622
+ if (this.paramIndex !== this.pointIndex)
623
+ PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.paramIndex, true);
624
+ if (this.colorIndex !== this.pointIndex)
625
+ PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.colorIndex, true);
626
+ PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.edgeVisible, false);
627
+ }
628
+ /** Scale all the normals by -1. */
629
+ reverseNormals() {
630
+ if (this.normal)
631
+ this.normal.scaleInPlace(-1.0);
632
+ }
484
633
  }
485
- // <ul
486
- // <li>optional arrays (normal, uv, color) must be indicated at constructor time.
487
- // <li>all arrays are (independently) indexed.
488
- // <li>with regret, the point, param, normal, and color arrays are exposed publicly.
489
- // <li>getX methods are "trusting" -- no bounds check
490
- // <li>getX methods return references to X.
491
- // <li> EXCEPT -- for optional arrays, the return 000.
492
- // <li>copyX methods move data to caller-supplied result..
493
- // </ul>
494
- /** Relative tolerance used in tests for planar facets
634
+ /**
635
+ * Relative tolerance used in tests for planar facets.
495
636
  * @internal
496
- */
637
+ */
497
638
  PolyfaceData.planarityLocalRelTol = 1.0e-13;
498
639
  export { PolyfaceData };
499
640
  //# sourceMappingURL=PolyfaceData.js.map