@itwin/core-geometry 5.4.0-dev.5 → 5.4.0-dev.6

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 (451) hide show
  1. package/lib/cjs/Constant.js.map +1 -1
  2. package/lib/cjs/Geometry.js.map +1 -1
  3. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  4. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  5. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  6. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  7. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  8. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  9. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  10. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  11. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  12. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  13. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  14. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  15. package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
  16. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  17. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  18. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  19. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  20. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  21. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  22. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  23. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  24. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  25. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  26. package/lib/cjs/core-geometry.js.map +1 -1
  27. package/lib/cjs/curve/Arc3d.js.map +1 -1
  28. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  29. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  30. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  31. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  32. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  33. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  34. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  35. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  36. package/lib/cjs/curve/CurveOps.js.map +1 -1
  37. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  38. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  39. package/lib/cjs/curve/CurveTypes.js.map +1 -1
  40. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  41. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  42. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  43. package/lib/cjs/curve/LineString3d.js.map +1 -1
  44. package/lib/cjs/curve/Loop.js.map +1 -1
  45. package/lib/cjs/curve/OffsetOptions.js.map +1 -1
  46. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  47. package/lib/cjs/curve/Path.js.map +1 -1
  48. package/lib/cjs/curve/PointString3d.js.map +1 -1
  49. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  50. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  51. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  52. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  53. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  54. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  55. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  56. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  57. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  58. package/lib/cjs/curve/RegionOps.js.map +1 -1
  59. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  60. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  61. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  62. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  63. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  64. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  65. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  66. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  67. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  68. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  69. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  70. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  71. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  72. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  73. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  74. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  75. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  76. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  77. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  78. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  79. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  80. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  81. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.js.map +1 -1
  82. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  83. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  84. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  85. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  86. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  87. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  88. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  89. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  90. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  91. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  92. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  93. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  94. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  95. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  96. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  97. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  98. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  99. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  100. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  101. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  102. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  103. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  104. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  105. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  106. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  107. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  108. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  109. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  110. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  111. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  112. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  113. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  114. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  115. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  116. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  117. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  118. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  119. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  120. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  121. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  122. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  123. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  124. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  125. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  126. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  127. package/lib/cjs/geometry3d/Range.js.map +1 -1
  128. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  129. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  130. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  131. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  132. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  133. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  134. package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
  135. package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
  136. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  137. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  138. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  139. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  140. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  141. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  142. package/lib/cjs/numerics/BandedSystem.js.map +1 -1
  143. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  144. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  145. package/lib/cjs/numerics/Complex.js.map +1 -1
  146. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  147. package/lib/cjs/numerics/Newton.js.map +1 -1
  148. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  149. package/lib/cjs/numerics/PolarData.js.map +1 -1
  150. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  151. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  152. package/lib/cjs/numerics/Range1dArray.js.map +1 -1
  153. package/lib/cjs/numerics/SmallSystem.js.map +1 -1
  154. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  155. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  156. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  157. package/lib/cjs/polyface/AuxData.js.map +1 -1
  158. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  159. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  160. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  161. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  162. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  163. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  164. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  165. package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -1
  166. package/lib/cjs/polyface/Polyface.js.map +1 -1
  167. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  168. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  169. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  170. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  171. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  172. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  173. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  174. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  175. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  176. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  177. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  178. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  179. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  180. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  181. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  182. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  183. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  184. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  185. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  186. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  187. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  188. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  189. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  190. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  191. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  192. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  193. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  194. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  195. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  196. package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
  197. package/lib/cjs/solid/Box.js.map +1 -1
  198. package/lib/cjs/solid/Cone.js.map +1 -1
  199. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  200. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  201. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  202. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  203. package/lib/cjs/solid/Sphere.js.map +1 -1
  204. package/lib/cjs/solid/SweepContour.js.map +1 -1
  205. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  206. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  207. package/lib/cjs/topology/Graph.js.map +1 -1
  208. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  209. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  210. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  211. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  212. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  213. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  214. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  215. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  216. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  217. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  218. package/lib/cjs/topology/MaskManager.js.map +1 -1
  219. package/lib/cjs/topology/Merging.js.map +1 -1
  220. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  221. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  222. package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
  223. package/lib/cjs/topology/Triangulation.js.map +1 -1
  224. package/lib/cjs/topology/Voronoi.js.map +1 -1
  225. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  226. package/lib/esm/Constant.js.map +1 -1
  227. package/lib/esm/Geometry.js.map +1 -1
  228. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  229. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  230. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  231. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  232. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  233. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  234. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  235. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  236. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  237. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  238. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  239. package/lib/esm/bspline/KnotVector.js.map +1 -1
  240. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  241. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  242. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  243. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  244. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  245. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  246. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  247. package/lib/esm/clipping/ClipVector.js.map +1 -1
  248. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  249. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  250. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  251. package/lib/esm/core-geometry.js.map +1 -1
  252. package/lib/esm/curve/Arc3d.js.map +1 -1
  253. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  254. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  255. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  256. package/lib/esm/curve/CurveCollection.js.map +1 -1
  257. package/lib/esm/curve/CurveCurve.js.map +1 -1
  258. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  259. package/lib/esm/curve/CurveFactory.js.map +1 -1
  260. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  261. package/lib/esm/curve/CurveOps.js.map +1 -1
  262. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  263. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  264. package/lib/esm/curve/CurveTypes.js.map +1 -1
  265. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  266. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  267. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  268. package/lib/esm/curve/LineString3d.js.map +1 -1
  269. package/lib/esm/curve/Loop.js.map +1 -1
  270. package/lib/esm/curve/OffsetOptions.js.map +1 -1
  271. package/lib/esm/curve/ParityRegion.js.map +1 -1
  272. package/lib/esm/curve/Path.js.map +1 -1
  273. package/lib/esm/curve/PointString3d.js.map +1 -1
  274. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  275. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  276. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  277. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  278. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  279. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  280. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  281. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  282. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  283. package/lib/esm/curve/RegionOps.js.map +1 -1
  284. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  285. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  286. package/lib/esm/curve/UnionRegion.js.map +1 -1
  287. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  288. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  289. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  290. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  291. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  292. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  293. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  294. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  295. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  296. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  297. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  298. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  299. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  300. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  301. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  302. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  303. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  304. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  305. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  306. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.js.map +1 -1
  307. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  308. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  309. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  310. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  311. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  312. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  313. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  314. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  315. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  316. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  317. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  318. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  319. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  320. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  321. package/lib/esm/geometry3d/Angle.js.map +1 -1
  322. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  323. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  324. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  325. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  326. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  327. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  328. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  329. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  330. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  331. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  332. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  333. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  334. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  335. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  336. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  337. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  338. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  339. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  340. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  341. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  342. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  343. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  344. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  345. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  346. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  347. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  348. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  349. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  350. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  351. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  352. package/lib/esm/geometry3d/Range.js.map +1 -1
  353. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  354. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  355. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  356. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  357. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  358. package/lib/esm/geometry3d/Transform.js.map +1 -1
  359. package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
  360. package/lib/esm/geometry3d/XYZProps.js.map +1 -1
  361. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  362. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  363. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  364. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  365. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  366. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  367. package/lib/esm/numerics/BandedSystem.js.map +1 -1
  368. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  369. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  370. package/lib/esm/numerics/Complex.js.map +1 -1
  371. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  372. package/lib/esm/numerics/Newton.js.map +1 -1
  373. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  374. package/lib/esm/numerics/PolarData.js.map +1 -1
  375. package/lib/esm/numerics/Polynomials.js.map +1 -1
  376. package/lib/esm/numerics/Quadrature.js.map +1 -1
  377. package/lib/esm/numerics/Range1dArray.js.map +1 -1
  378. package/lib/esm/numerics/SmallSystem.js.map +1 -1
  379. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  380. package/lib/esm/numerics/UnionFind.js.map +1 -1
  381. package/lib/esm/numerics/UsageSums.js.map +1 -1
  382. package/lib/esm/polyface/AuxData.js.map +1 -1
  383. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  384. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  385. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  386. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  387. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  388. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  389. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  390. package/lib/esm/polyface/IndexedPolyfaceWalker.js.map +1 -1
  391. package/lib/esm/polyface/Polyface.js.map +1 -1
  392. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  393. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  394. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  395. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  396. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  397. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  398. package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  399. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  400. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  401. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  402. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  403. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  404. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  405. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  406. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  407. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  408. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  409. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  410. package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  411. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  412. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  413. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  414. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  415. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  416. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  417. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  418. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  419. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  420. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  421. package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
  422. package/lib/esm/solid/Box.js.map +1 -1
  423. package/lib/esm/solid/Cone.js.map +1 -1
  424. package/lib/esm/solid/LinearSweep.js.map +1 -1
  425. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  426. package/lib/esm/solid/RuledSweep.js.map +1 -1
  427. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  428. package/lib/esm/solid/Sphere.js.map +1 -1
  429. package/lib/esm/solid/SweepContour.js.map +1 -1
  430. package/lib/esm/solid/TorusPipe.js.map +1 -1
  431. package/lib/esm/topology/ChainMerge.js.map +1 -1
  432. package/lib/esm/topology/Graph.js.map +1 -1
  433. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  434. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  435. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  436. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  437. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  438. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  439. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  440. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  441. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  442. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  443. package/lib/esm/topology/MaskManager.js.map +1 -1
  444. package/lib/esm/topology/Merging.js.map +1 -1
  445. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  446. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  447. package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
  448. package/lib/esm/topology/Triangulation.js.map +1 -1
  449. package/lib/esm/topology/Voronoi.js.map +1 -1
  450. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  451. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"IModelJsonSchema.js","sourceRoot":"","sources":["../../../src/serialization/IModelJsonSchema.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Serialization\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { AkimaCurve3d } from \"../bspline/AkimaCurve3d\";\nimport { BezierCurve3d } from \"../bspline/BezierCurve3d\";\nimport { BezierCurve3dH } from \"../bspline/BezierCurve3dH\";\nimport { BSplineCurve3d } from \"../bspline/BSplineCurve\";\nimport { BSplineCurve3dH } from \"../bspline/BSplineCurve3dH\";\nimport { BSplineCurveOps } from \"../bspline/BSplineCurveOps\";\nimport { BSplineSurface3d, BSplineSurface3dH, UVSelect, WeightStyle } from \"../bspline/BSplineSurface\";\nimport { InterpolationCurve3d as InterpolationCurve3d, InterpolationCurve3dProps } from \"../bspline/InterpolationCurve3d\";\nimport { BSplineWrapMode } from \"../bspline/KnotVector\";\nimport { Arc3d } from \"../curve/Arc3d\";\nimport { CoordinateXYZ } from \"../curve/CoordinateXYZ\";\nimport { BagOfCurves, CurveCollection } from \"../curve/CurveCollection\";\nimport { AnyGeometryQuery, GeometryQuery } from \"../curve/GeometryQuery\";\nimport { LineSegment3d } from \"../curve/LineSegment3d\";\nimport { LineString3d } from \"../curve/LineString3d\";\nimport { Loop } from \"../curve/Loop\";\nimport { ParityRegion } from \"../curve/ParityRegion\";\nimport { Path } from \"../curve/Path\";\nimport { PointString3d } from \"../curve/PointString3d\";\nimport { DirectSpiral3d } from \"../curve/spiral/DirectSpiral3d\";\nimport { IntegratedSpiral3d } from \"../curve/spiral/IntegratedSpiral3d\";\nimport { TransitionSpiral3d } from \"../curve/spiral/TransitionSpiral3d\";\nimport { UnionRegion } from \"../curve/UnionRegion\";\nimport { AngleProps, AngleSweepProps, AxisOrder, Geometry } from \"../Geometry\";\nimport { Angle } from \"../geometry3d/Angle\";\nimport { AngleSweep } from \"../geometry3d/AngleSweep\";\nimport { GeometryHandler } from \"../geometry3d/GeometryHandler\";\nimport { Matrix3d } from \"../geometry3d/Matrix3d\";\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\nimport { Point3d, Vector3d, XYZ } from \"../geometry3d/Point3dVector3d\";\nimport { Ray3d } from \"../geometry3d/Ray3d\";\nimport { Segment1d } from \"../geometry3d/Segment1d\";\nimport { Transform } from \"../geometry3d/Transform\";\nimport { XYProps, XYZProps } from \"../geometry3d/XYZProps\";\nimport { YawPitchRollAngles, YawPitchRollProps } from \"../geometry3d/YawPitchRollAngles\";\nimport { AuxChannel, AuxChannelData, AuxChannelDataType, PolyfaceAuxData } from \"../polyface/AuxData\";\nimport { IndexedPolyface } from \"../polyface/Polyface\";\nimport { TaggedNumericData } from \"../polyface/TaggedNumericData\";\nimport { Box } from \"../solid/Box\";\nimport { Cone } from \"../solid/Cone\";\nimport { LinearSweep } from \"../solid/LinearSweep\";\nimport { RotationalSweep } from \"../solid/RotationalSweep\";\nimport { RuledSweep } from \"../solid/RuledSweep\";\nimport { Sphere } from \"../solid/Sphere\";\nimport { TorusPipe } from \"../solid/TorusPipe\";\nimport { SerializationHelpers } from \"./SerializationHelpers\";\n\n/**\n * `IModelJson` namespace has classes for serializing and deserialization json objects\n * @public\n */\nexport namespace IModelJson {\n /**\n * Property rules for json objects that can be deserialized to various Curve and Solid objects\n * @public\n */\n export interface GeometryProps extends CurvePrimitiveProps, SolidPrimitiveProps, CurveCollectionProps {\n /** `{indexedMesh:...}` */\n indexedMesh?: IndexedMeshProps;\n /** `{point:...}` */\n point?: XYZProps;\n /** `{bsurf:...}` */\n bsurf?: BSplineSurfaceProps;\n /** `{pointString:...}` */\n pointString?: XYZProps[];\n }\n /**\n * Property rules for json objects that can be deserialized to various CurvePrimitives\n * * Only one of these is allowed in each instance.\n * @public\n */\n export interface CurvePrimitiveProps {\n /** `{lineSegment:...}` */\n lineSegment?: [XYZProps, XYZProps];\n /** `{lineString:...}` */\n lineString?: XYZProps[];\n /** `{bcurve:...}` */\n bcurve?: BcurveProps;\n /** `{transitionSpiral:...}` */\n transitionSpiral?: TransitionSpiralProps;\n /** `{arc:...}` */\n arc?: ArcByVectorProps | [XYZProps, XYZProps, XYZProps];\n /** `{interpolationCurve:...}~ */\n interpolationCurve?: InterpolationCurve3dProps;\n }\n\n /**\n * Property rules for json objects that can be deserialized to single point\n * @public\n */\n export interface PointProps {\n /** `{point:...}` */\n point?: XYZProps;\n }\n\n /**\n * Property rules for json objects that can be deserialized to a BsplineSurface\n * See `BCurveProps` for discussion of knot and pole counts.\n * @public\n */\n export interface BSplineSurfaceProps {\n /** polynomial order (one more than degree) in the u parameter direction */\n orderU: number;\n /** polynomial order (one more than degree) in the v parameter direction */\n orderV: number;\n /** Square grid of control points (aka poles) in row major order (row is along the u direction) */\n points: [[[number]]]; // each inner array is xyz or xyzw for a single control point. each middle array is a row of control points.\n /** Array of knots for the u direction bspline */\n uKnots: [number];\n /** Array of knots for the v direction bspline */\n vKnots: [number];\n /** optional flag for periodic data in the u parameter direction */\n closedU?: boolean;\n /** optional flag for periodic data in the v parameter direction */\n closedV?: boolean;\n }\n\n /**\n * Interface for a collection of curves, e.g. as used as a swept contour.\n * @public\n */\n export interface CurveCollectionProps extends PlanarRegionProps {\n /** A sequence of curves joined head to tail. */\n path?: [CurvePrimitiveProps];\n // cspell:word bagof\n /**\n * A collection of curves with no required structure or connections\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Instead use bagOfCurves, which has correct capitalization and type. The old name has never been persisted.\n */\n bagofCurves?: [CurveCollectionProps];\n /** A collection of curves with no required structure or connections. */\n bagOfCurves?: [CurveCollectionProps | CurvePrimitiveProps];\n }\n\n /**\n * Interface for a collection of curves that bound a planar region\n * @public\n */\n export interface PlanarRegionProps {\n /** `{loop:...}`\n * * A sequence of curves which connect head to tail, with the final connecting back to the first\n */\n loop?: [CurvePrimitiveProps];\n /** `{parityRegion:...}`\n * * A collection of loops, with composite inside/outside determined by parity rules.\n * * (The single outer boundary with one or more holes is a parityRegion)\n */\n parityRegion?: [{ loop: [CurvePrimitiveProps] }];\n /** `{unionRegion:...}`\n * * A collection of loops and parityRegions\n */\n unionRegion?: [PlanarRegionProps];\n }\n /**\n * Interface for solid primitives: box, sphere, cylinder, cone, torusPipe, linear sweep, rotational sweep, ruled sweep.\n * @public\n */\n export interface SolidPrimitiveProps {\n /** `{cylinder:...}` */\n cylinder?: CylinderProps;\n /** `{box:...}` */\n box?: BoxProps;\n /** `{sphere:............}` */\n sphere?: SphereProps;\n /** `{cone:............}` */\n cone?: ConeProps;\n /** `{torusPipe:............}` */\n torusPipe?: TorusPipeProps;\n /** `{linearSweep:.........}` */\n linearSweep?: LinearSweepProps;\n /** `{rotationalSweep:...}` */\n rotationalSweep?: RotationalSweepProps;\n /** `{ruledSweep:...}` */\n ruledSweep?: RuledSweepProps;\n }\n\n /**\n * Ways to specify an object's local coordinate frame.\n * * Most objects that implement AxesProps specify their local coordinate frame by a right-handed\n * rotation matrix (`yawPitchRollAngles`, `xyVectors`, `zxVectors`).\n * * A general invertible matrix can be specified by `xyzVectors`.\n * * An object that implements AxesProps typically specifies only one variant, or none for Identity.\n * @public\n */\n export interface AxesProps {\n /**\n * A rotation specified by yaw, pitch, roll angles.\n * * Cases where only one of these angles is nonzero are intuitive.\n * * Cases where more than one is nonzero have difficult interactions and order issues.\n * * See [[YawPitchRollAngles]] for further information.\n * @public\n */\n yawPitchRollAngles?: YawPitchRollProps;\n /**\n * A rotation specified by an array of two vectors [xAxis, yAxis].\n * * The first vector gives the local x-axis direction; the second determines the local xy-plane.\n * * A third implied axis is perpendicular to these.\n * * The implied rotation is `Matrix3d.createRigidFromColumns(xAxis, yAxis, AxisOrder.XYZ)`.\n */\n xyVectors?: [XYZProps, XYZProps];\n /**\n * A rotation specified by an array of two vectors [zAxis, xAxis].\n * * The first vector gives the local z-axis direction; the second determines the local zx-plane.\n * * A third implied axis is perpendicular to these.\n * * The implied rotation is `Matrix3d.createRigidFromColumns(zAxis, xAxis, AxisOrder.ZXY)`.\n */\n zxVectors?: [XYZProps, XYZProps];\n /**\n * A local coordinate system specified by an array of three vectors [xAxis, yAxis, zAxis].\n * * The vectors should have positive length and be linearly independent, but otherwise they are unrestricted.\n * * This allows skew coordinate systems, left-handed frames, and non-uniform scaling.\n * * The implied matrix is `Matrix3d.createColumns(xAxis, yAxis, zAxis)`.\n */\n xyzVectors?: [XYZProps, XYZProps, XYZProps];\n }\n\n /**\n * Interface for Arc3d value defined by center, vectorX, vectorY and sweepStartEnd.\n * @public\n */\n export interface ArcByVectorProps {\n /** Arc center point */\n center: XYZProps;\n /** Vector from center to 0-degree point (commonly called major axis vector) */\n vectorX: XYZProps;\n /** Vector from center to 90-degree point (common called minor axis vector) */\n vectorY: XYZProps;\n /** Start and end angles in parameterization `X=C+cos(theta) * vectorX + sin(theta) * vectorY` */\n sweepStartEnd: AngleSweepProps;\n }\n\n /**\n * Interface for a [[Cone]], defined by two centers and radii.\n * * A Cone typically has circular sections perpendicular to the axis line between centers.\n * * The cross section xy-plane is specified by an [[IModelJson.AxesProps]]:\n * * Typically this is an `xyVectors`.\n * * Elliptical cross sections can be specified with `xyzVectors`, which admits skew vectors\n * and/or vectors of different lengths. Elliptical cross sections are scaled by radius.\n * @public\n */\n export interface ConeProps extends AxesProps {\n /** Point on axis at center of start section. */\n start: XYZProps;\n /** Point on axis at center of end section. */\n end: XYZProps;\n\n /** Radius of the section at `start` if circular, or scale factor if elliptical. */\n startRadius?: number;\n /** Radius of the section at `end` if circular, or scale factor if elliptical. */\n endRadius?: number;\n /** Constant radius of all sections if circular, or scale factor if elliptical. */\n radius?: number;\n\n /**\n * Optional section x-axis.\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. This property has never been written. Optional axes are specified by an AxesProps.\n */\n vectorX?: XYZProps;\n /**\n * Optional section y-axis.\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. This property has never been written. Optional axes are specified by an AxesProps.\n */\n vectorY?: XYZProps;\n\n /** flag for circular end caps. */\n capped?: boolean;\n }\n\n /**\n * Interface for cylinder defined by a radius and axis start and end centers.\n * @public\n */\n export interface CylinderProps {\n /** axis point at start */\n start: XYZProps;\n /** axis point at end */\n end: XYZProps;\n /** cylinder radius */\n radius: number;\n /** flag for circular end caps. */\n capped?: boolean;\n }\n\n /**\n * Interface for a linear sweep of a base curve or region.\n * @public\n */\n export interface LinearSweepProps {\n /** The swept curve or region. Any curve collection */\n contour: CurveCollectionProps;\n /** The sweep vector */\n vector: XYZProps;\n /** flag for circular end caps. */\n capped?: boolean;\n }\n\n /**\n * Interface for a rotational sweep of a base curve or region around an axis.\n * @public\n */\n export interface RotationalSweepProps {\n /** The swept curve or region. Any curve collection */\n contour: CurveCollectionProps;\n /** any point on the axis of rotation. */\n center: XYZProps;\n /** The axis of rotation */\n axis: XYZProps;\n /** sweep angle */\n sweepAngle: AngleProps;\n /** flag for circular end caps. */\n capped?: boolean;\n }\n\n /**\n * Interface for a surface with rule lines between corresponding curves on successive contours\n * @public\n */\n export interface RuledSweepProps {\n /** An array of swept curves or regions. */\n contour: [CurveCollectionProps];\n /** Optional capping flag. */\n capped?: boolean;\n }\n\n /**\n * Interface for spiral\n * * Any 4 (but not 5) of the 5 values `[startBearing, endBearing, startRadius, endRadius, length]`\n * may be defined.\n * * In radius data, zero radius indicates straight line (infinite radius)\n * * Note that the inherited AxesProps allows multiple ways to specify orientation of the placement..\n * @public\n */\n export interface TransitionSpiralProps extends AxesProps {\n\n /** origin of the coordinate system. */\n origin: XYZProps;\n /** angle at departure from origin. */\n startBearing?: AngleProps;\n /** End bearing. */\n endBearing?: AngleProps;\n /** Radius at start (0 for straight line) */\n startRadius?: number;\n /** Radius at end (0 for straight line) */\n endRadius?: number;\n /** length along curve.\n */\n length?: number;\n /** Fractional part of active interval.\n * * There has been name confusion between native and typescript .... accept any variant ..\n * * native (July 2020) emits activeFractionInterval\n */\n activeFractionInterval?: number[];\n /** TransitionSpiral type.\n * * expected names are given in `IntegratedSpiralTypeName` and `DirectSpiralTypeName`\n */\n type?: string;\n }\n\n /**\n * Interface for bspline curve (aka bcurve)\n * @public\n */\n export interface BcurveProps {\n /** control points */\n points: [XYZProps];\n /** knots. */\n knots: [number];\n /** order of polynomial\n * * The order is the number of basis functions that are in effect at any knot value.\n * * The order is the number of points that affect the curve at any knot value,\n * i.e. the size of the \"local support\" set\n * * `order=2` is lines (degree 1)\n * * `order=3` is quadratic (degree 2)\n * * `order=4` is cubic (degree 3)\n * * The number of knots follows the convention \"poles+order= knots\".\n * * In this convention (for example), a clamped cubic with knots `[0,0,0,0, 1,2,3,4,4,4,4]`\n * has:\n * * * 4 (`order`) copies of the start and end knot (0 and 4) and\n * * * 3 interior knots\n * * Hence expect 7 poles.\n */\n order: number;\n /** optional flag for periodic data. */\n closed?: boolean;\n }\n\n /**\n * Interface for Box (or frustum with all rectangular sections parallel to primary xy section).\n * * Orientation may be given in any `AxesProps` way (`yawPitchRollAngles`, `xyVectors`, `zxVectors`).\n * * If `topX` or `topY` are omitted, each defaults to its `baseX` or `baseY` peer.\n * * If `topOrigin` is given, `height` is unused.\n * * If `topOrigin` is omitted and `height` is given, `topOrigin` is computed along the z axis at distance `height`.\n * * If both `topOrigin` and `height` are omitted, `height` defaults to `baseX`, and `topOrigin` is computed as above.\n * @public\n */\n export interface BoxProps extends AxesProps {\n /** Origin of the box coordinate system (required) */\n origin: XYZProps;\n /** A previous mismatch existed between native and TypeScript code: TypeScript used \"origin\" where native used \"baseOrigin\".\n * Now both native and TypeScript will output both and accept either, preferring \"origin\".\n * \"baseOrigin\" is undocumented in TypeScript; it should not be used.\n * @internal\n */\n baseOrigin?: XYZProps;\n /** base x size (required) */\n baseX: number;\n /** base y size.\n * * if omitted, baseX is used.\n */\n baseY?: number;\n /** top origin.\n * * This is NOT required to be on the z axis.\n * * If omitted, it is computed along the z axis at distance `height`.\n */\n topOrigin?: XYZProps;\n /** optional height. This is only used if `topOrigin` is omitted.\n * * If omitted, `baseX` is used.\n */\n height?: number;\n /** x size on top section.\n * * If omitted, `baseX` is used.\n */\n topX?: number;\n /** y size on top section.\n * * If omitted, `baseY` is used.\n */\n topY?: number;\n /** optional capping flag. */\n capped?: boolean;\n }\n\n /**\n * Interface for a [[Sphere]].\n * * Local coordinate frame is supplied by an [[IModelJson.AxesProps]]:\n * * Typically this is a `zxVectors`.\n * * Skew axes can be specified with `xyzVectors`, in which case any specified radii scale these axes;\n * all other AxesProps specify a right-handed orthonormal triad.\n * @public\n */\n export interface SphereProps extends AxesProps {\n /** Center of the sphere coordinate system */\n center: XYZProps;\n\n /** primary radius */\n radius?: number;\n /** optional x radius */\n radiusX?: number;\n /** optional y radius */\n radiusY?: number;\n /** optional z radius */\n radiusZ?: number;\n\n /** optional sweep range for latitude. Default latitude limits are [-90,90 ] degrees. */\n latitudeStartEnd?: AngleSweepProps;\n /** optional capping flag. If missing, implied false */\n capped?: boolean;\n }\n\n /**\n * Interface for TorusPipe data\n * * Orientation may be given in any `AxesProp`s way (yawPitchRoll, xyVectors, zxVectors)\n * * Both radii are required.\n * * axes are required\n * * Axis definition is\n * * xy plane contains the major circle\n * * x axis points from donut hole center to flow center at start of pipe.\n * * z axis points through the hole.\n * @public\n */\n export interface TorusPipeProps extends AxesProps {\n /** Center of the full torus coordinate system. (donut hole center) */\n center: XYZProps;\n\n /** primary radius (elbow radius) */\n majorRadius: number;\n /** pipe radius */\n minorRadius: number;\n /** sweep angle.\n * * if omitted, full 360 degree sweep.\n */\n sweepAngle?: AngleProps;\n /** optional capping flag. If missing, implied false */\n capped?: boolean;\n }\n\n /**\n * Interface for the analytical data in a channel at a single input value.\n * See `AuxChannelData` for further information.\n * @public\n */\n export interface AuxChannelDataProps {\n /** The input value for this data. */\n input: number;\n /** The vertex values for this data. A single value per vertex for scalar and distance types and 3 values (x,y,z) for normal or vector channels. */\n values: number[];\n }\n /**\n * Interface for a channel of analytical mesh data.\n * See `AuxChannel` for further information.\n * @public\n */\n export interface AuxChannelProps {\n /** An array of analytical data at one or more input values. */\n data: AuxChannelDataProps[];\n /** The type of data stored in this channel. */\n dataType: AuxChannelDataType;\n /** Optional channel name. */\n name?: string;\n /** Optional input name. */\n inputName?: string;\n }\n /**\n * Interface for analytical mesh data.\n * See `PolyfaceAuxData` for further information.\n * @public\n */\n export interface AuxDataProps {\n /** Array with one or more channels of auxiliary data. */\n channels: AuxChannelProps[];\n /** Indices mapping channel data to the mesh facets (must be parallel to mesh indices). */\n indices: number[];\n }\n /**\n * Interface for extra data attached to an indexed mesh.\n * See `TaggedNumericData` for further information (e.g. value `tagA` and `tagB` values)\n * @public\n */\n export interface TaggedNumericDataProps {\n /** integer tag identifying the meaning of this tag. */\n tagA: number;\n /** Second integer tag. */\n tagB: number;\n /** application specific integer data */\n intData?: number[];\n /** application specific doubles */\n doubleData?: number[];\n }\n /**\n * Interface for an indexed mesh.\n * * IMPORTANT: All indices are one-based.\n * * i.e. vertex index given as 11 appears at index 10 in the data array.\n * * This is to allow a negated index to mean \"don't draw the following edge\"\n * * Although negative indices are not allowed for normalIndex, colorIndex, or paramIndex, the \"one based\" style\n * is used for them so that all indices within the indexedMesh json object are handled similarly.\n * * In all index arrays, a ZERO indicates \"end of facet\".\n * @public\n */\n export interface IndexedMeshProps {\n /** vertex coordinates */\n point: [XYZProps];\n /** surface normals */\n normal?: [XYZProps];\n /** texture space (uv parameter) coordinates */\n param?: [XYProps];\n /** 32 bit color values */\n color?: [number];\n\n /** SIGNED ONE BASED ZERO TERMINATED array of point indices. */\n pointIndex: [number];\n /** ONE BASED ZERO TERMINATED array of param indices. ZERO is terminator for single facet. */\n paramIndex?: [number];\n /** ONE BASED ZERO TERMINATED array of normal indices. ZERO is terminator for single facet. */\n normalIndex?: [number];\n /** ONE BASED ZERO TERMINATED array of color indices. ZERO is terminator for single facet. */\n colorIndex?: [number];\n\n /**\n * Optional fixed block size for indices.\n * If defined, each facet is represented by `numPerFace` 1-based indices, with appended zeroes if the facet has fewer edges.\n * If undefined, mesh indices are 1-based, 0-terminated, variable-sized face loops.\n */\n numPerFace?: number;\n /** Indicates if mesh closure is unknown (0 | undefined), open sheet (1), or closed solid (2). */\n expectedClosure?: number;\n /**\n * The [[PolyfaceData.twoSided]] flag.\n */\n twoSided?: boolean;\n /** Optional analytical data at the vertices of the mesh */\n auxData?: AuxDataProps;\n /** Optional array of tagged geometry (such as to request subdivision surface) */\n tags?: TaggedNumericDataProps;\n\n /**\n * Optional edge -> edgeMate map, parallel to the other index arrays.\n * * Each entry is a zero-based index, or -1 face loop terminator, or -2 to indicate \"no edge mate\".\n */\n edgeMateIndex?: [number];\n }\n /** parser services for \"iModelJson\" schema\n * * 1: create a reader with `new ImodelJsonReader`\n * * 2: parse json fragment to strongly typed geometry: `const g = reader.parse (fragment)`\n * @public\n */\n export class Reader {\n\n public constructor() { // empty ctor\n }\n\n private static parseVector3dProperty(json: any, propertyName: string, defaultValue?: Vector3d | undefined): Vector3d | undefined {\n if (json.hasOwnProperty(propertyName)) {\n const value = json[propertyName];\n if (Geometry.isNumberArray(value, 3))\n return Vector3d.create(value[0], value[1], value[2]);\n if (Geometry.isNumberArray(value, 2))\n return Vector3d.create(value[0], value[1]);\n if (XYZ.isXAndY(value))\n return Vector3d.fromJSON(value);\n }\n return defaultValue;\n }\n\n private static parsePoint3dProperty(json: any, propertyName: string, defaultValue?: Point3d | undefined): Point3d | undefined {\n if (json.hasOwnProperty(propertyName)) {\n const value = json[propertyName];\n if (Geometry.isNumberArray(value, 3))\n return Point3d.create(value[0], value[1], value[2]);\n if (Geometry.isNumberArray(value, 2))\n return Point3d.create(value[0], value[1]);\n if (XYZ.isXAndY(value))\n return Point3d.fromJSON(value);\n }\n return defaultValue;\n }\n\n private static parseSegment1dProperty(json: any, propertyName: string, defaultValue?: Segment1d | undefined): Segment1d | undefined {\n if (json.hasOwnProperty(propertyName)) {\n const value = json[propertyName];\n if (Geometry.isNumberArray(value, 2))\n return Segment1d.create(value[0], value[1]);\n }\n return defaultValue;\n }\n\n private static parseNumberProperty(json: any, propertyName: string, defaultValue?: number | undefined): number | undefined {\n if (json.hasOwnProperty(propertyName)) {\n const value = json[propertyName];\n if (Number.isFinite(value))\n return value as number;\n }\n return defaultValue;\n }\n /**\n * @internal\n */\n public static parseTaggedNumericProps(json: any): TaggedNumericData | undefined {\n const tagA = this.parseNumberProperty(json, \"tagA\");\n const tagB = this.parseNumberProperty(json, \"tagB\", 0);\n if (tagA !== undefined) {\n const result = new TaggedNumericData(tagA, tagB);\n if (json.hasOwnProperty(\"intData\"))\n result.intData = this.parseNumberArrayProperty(json, \"intData\", 0, undefined);\n if (json.hasOwnProperty(\"doubleData\"))\n result.doubleData = this.parseNumberArrayProperty(json, \"doubleData\", 0, undefined);\n return result;\n }\n return undefined;\n }\n\n private static parseNumberArrayProperty(json: any, propertyName: string, minValues: number, maxValues: number | undefined, defaultValue?: number[] | undefined): number[] | undefined {\n if (json.hasOwnProperty(propertyName)) {\n const value = json[propertyName];\n if (Array.isArray(value)\n && value.length >= minValues && (undefined === maxValues || value.length <= maxValues)) {\n const result = [];\n for (const a of value) {\n result.push(a);\n }\n return result;\n }\n }\n return defaultValue;\n }\n\n private static parseAngleProperty(json: any, propertyName: string, defaultValue?: Angle | undefined): Angle | undefined {\n if (json.hasOwnProperty(propertyName)) {\n const value = json[propertyName];\n return Angle.fromJSON(value);\n }\n return defaultValue;\n }\n /**\n * @param defaultFunction function to call if needed to produce a default value\n */\n private static parseAngleSweepProps(json: any, propertyName: string, defaultFunction?: () => AngleSweep): AngleSweep | undefined {\n if (json.hasOwnProperty(propertyName)) {\n const value = json[propertyName];\n return AngleSweep.fromJSON(value);\n }\n if (defaultFunction === undefined)\n return undefined;\n return defaultFunction();\n }\n\n private static parseBooleanProperty(json: any, propertyName: string, defaultValue?: boolean | undefined): boolean | undefined {\n if (json.hasOwnProperty(propertyName)) {\n const value = json[propertyName];\n if (value === true) return true;\n if (value === false) return false;\n }\n return defaultValue;\n }\n\n private static loadContourArray(json: any, propertyName: string): CurveCollection[] | undefined {\n if (json.hasOwnProperty(propertyName)) {\n const value = json[propertyName];\n if (Array.isArray(value)) {\n const result = [];\n for (const contourData of value) {\n const contour = Reader.parse(contourData);\n if (contour instanceof CurveCollection) {\n result.push(contour);\n }\n }\n if (result.length > 0)\n return result;\n }\n }\n return undefined;\n }\n\n private static parseYawPitchRollAnglesToMatrix3d(json: YawPitchRollProps): Matrix3d | undefined {\n const ypr = YawPitchRollAngles.fromJSON(json);\n return ypr.toMatrix3d();\n }\n\n private static parseStringProperty(json: any, propertyName: string, defaultValue?: string | undefined): string | undefined {\n if (json.hasOwnProperty(propertyName)) {\n const value = json[propertyName];\n // if (value instanceof string)\n return value;\n }\n return defaultValue;\n }\n\n private static parseAxesFromVectors(json: any, axisOrder: AxisOrder, createDefaultIdentity: boolean): Matrix3d | undefined {\n if (Array.isArray(json)) {\n let matrix: Matrix3d | undefined;\n if (json.length === 2) { // square and normalize\n const xVector = Vector3d.fromJSON(json[0]);\n const yVector = Vector3d.fromJSON(json[1]);\n matrix = Matrix3d.createRigidFromColumns(xVector, yVector, axisOrder);\n }\n else if (json.length === 3) { // preserve axes\n const xVector = Vector3d.fromJSON(json[0]);\n const yVector = Vector3d.fromJSON(json[1]);\n const zVector = Vector3d.fromJSON(json[2]);\n matrix = Matrix3d.createColumnsInAxisOrder(axisOrder, xVector, yVector, zVector);\n }\n if (matrix)\n return matrix;\n }\n if (createDefaultIdentity)\n return Matrix3d.createIdentity();\n return undefined;\n }\n\n /**\n * Look for orientation data and convert to Matrix3d.\n * * Search order and interpretation:\n * * * xyzVectors - general matrix, axes preserved\n * * * yawPitchRollAngles - right-handed rotation via axial rotations\n * * * xyVectors - right-handed rotation, xy-plane specified, axes squared and normalized\n * * * zxVectors - right-handed rotation, zx-plane specified, axes squared and normalized\n * @param json [in] json source data\n * @param createDefaultIdentity [in] If true and no orientation is present, return an identity matrix. If false and no orientation is present, return undefined.\n */\n private static parseOrientation(json: any, createDefaultIdentity: boolean): Matrix3d | undefined {\n if (json.xyzVectors)\n return Reader.parseAxesFromVectors(json.xyzVectors, AxisOrder.XYZ, createDefaultIdentity);\n if (json.yawPitchRollAngles)\n return Reader.parseYawPitchRollAnglesToMatrix3d(json.yawPitchRollAngles);\n if (json.xyVectors)\n return Reader.parseAxesFromVectors(json.xyVectors, AxisOrder.XYZ, createDefaultIdentity);\n if (json.zxVectors)\n return Reader.parseAxesFromVectors(json.zxVectors, AxisOrder.ZXY, createDefaultIdentity);\n if (createDefaultIdentity)\n return Matrix3d.createIdentity();\n return undefined;\n }\n\n private static parseArcByVectorProps(data?: ArcByVectorProps): Arc3d | undefined {\n if (data\n && data.center !== undefined\n && data.vectorX !== undefined\n && data.vectorY !== undefined\n && data.sweepStartEnd !== undefined\n ) {\n return Arc3d.create(\n Point3d.fromJSON(data.center),\n Vector3d.fromJSON(data.vectorX),\n Vector3d.fromJSON(data.vectorY),\n AngleSweep.fromJSON(data.sweepStartEnd));\n }\n return undefined;\n }\n // remark: Returns LineString3d as last default when give points are colinear.\n private static parseArcBy3Points(data?: ArcByVectorProps): Arc3d | LineString3d | undefined {\n if (Array.isArray(data) && data.length > 2) {\n const pointA = Point3d.fromJSON(data[0]);\n const pointB = Point3d.fromJSON(data[1]);\n const pointC = Point3d.fromJSON(data[2]);\n return Arc3d.createCircularStartMiddleEnd(pointA, pointB, pointC);\n }\n return undefined;\n }\n\n private static parseArcObject(data?: ArcByVectorProps): Arc3d | LineString3d | undefined {\n let arc: Arc3d | LineString3d | undefined = Reader.parseArcByVectorProps(data);\n if (arc)\n return arc;\n arc = Reader.parseArcBy3Points(data);\n return arc; // possibly undefined.\n }\n /** Parse point content (right side) `[1,2,3]` to a CoordinateXYZ object. */\n public static parseCoordinate(data?: any): CoordinateXYZ | undefined {\n const point = Point3d.fromJSON(data);\n if (point)\n return CoordinateXYZ.create(point);\n return undefined;\n }\n /** Parse `transitionSpiral` content (right side) to TransitionSpiral3d. */\n public static parseTransitionSpiral(data?: TransitionSpiralProps): TransitionSpiral3d | undefined {\n const axes = Reader.parseOrientation(data, true)!;\n const origin = Reader.parsePoint3dProperty(data, \"origin\");\n // the create method will juggle any 4 out of these 5 inputs to define the other ..\n const startBearing = Reader.parseAngleProperty(data, \"startBearing\");\n const endBearing = Reader.parseAngleProperty(data, \"endBearing\");\n const startRadius = Reader.parseNumberProperty(data, \"startRadius\");\n const endRadius = Reader.parseNumberProperty(data, \"endRadius\");\n let length = Reader.parseNumberProperty(data, \"length\", undefined);\n if (length === undefined)\n length = Reader.parseNumberProperty(data, \"curveLength\", undefined);\n\n let interval = Reader.parseSegment1dProperty(data, \"activeFractionInterval\", undefined);\n if (!interval)\n interval = Reader.parseSegment1dProperty(data, \"fractionInterval\", undefined);\n if (!interval)\n interval = Reader.parseSegment1dProperty(data, \"activeInterval\", undefined);\n const spiralType = Reader.parseStringProperty(data, \"type\", \"clothoid\")!;\n // REMARK: Our job is to parse and pass data along -- inscrutable validation happens in the implementation classes . . .\n if (origin) {\n let candidate: TransitionSpiral3d | undefined;\n candidate = IntegratedSpiral3d.createFrom4OutOf5(\n spiralType,\n startRadius, endRadius,\n startBearing, endBearing,\n length,\n interval,\n Transform.createOriginAndMatrix(origin, axes));\n if (candidate)\n return candidate;\n candidate = DirectSpiral3d.createFromLengthAndRadius(\n spiralType,\n startRadius, endRadius,\n startBearing, endBearing,\n length,\n interval,\n Transform.createOriginAndMatrix(origin, axes));\n if (candidate)\n return candidate;\n }\n return undefined;\n }\n\n /** Parse `bcurve` content to BSplineCurve3d or BSplineCurve3dH object. */\n public static parseBcurve(data?: any): BSplineCurve3d | BSplineCurve3dH | undefined {\n let newCurve: BSplineCurve3d | BSplineCurve3dH | undefined;\n let dim: number;\n if (data !== undefined\n && data.hasOwnProperty(\"knots\") && Array.isArray(data.knots)\n && data.hasOwnProperty(\"order\") && Number.isFinite(data.order)\n && data.hasOwnProperty(\"points\") && Array.isArray(data.points) && Array.isArray(data.points[0])\n && (dim = data.points[0].length) >= 3 && dim <= 4\n ) {\n const myData = SerializationHelpers.createBSplineCurveData(data.points, dim, data.knots, data.points.length, data.order);\n if (data.hasOwnProperty(\"closed\") && true === data.closed)\n myData.params.closed = true;\n if (SerializationHelpers.Import.prepareBSplineCurveData(myData)) {\n if (dim === 3)\n newCurve = BSplineCurve3d.create(myData.poles, myData.params.knots, myData.params.order);\n else\n newCurve = BSplineCurve3dH.create(myData.poles, myData.params.knots, myData.params.order);\n if (undefined !== newCurve) {\n if (undefined !== myData.params.wrapMode)\n newCurve.setWrappable(myData.params.wrapMode);\n }\n }\n }\n return newCurve;\n }\n\n /** Parse `interpolationCurve` content to an InterpolationCurve3d object. */\n public static parseInterpolationCurve(data?: any): InterpolationCurve3d | undefined {\n if (data === undefined)\n return undefined;\n return InterpolationCurve3d.create(data);\n }\n\n /** Parse `akimaCurve` content to an Akima curve object. */\n public static parseAkimaCurve3d(data?: any): AkimaCurve3d | undefined {\n if (data === undefined)\n return undefined;\n return AkimaCurve3d.create(data);\n }\n\n /** Parse array of json objects to array of instances. */\n public static parseArray(data?: any): any[] | undefined {\n if (Array.isArray(data)) {\n const myArray = [];\n let c;\n for (c of data) {\n const g = Reader.parse(c);\n if (g !== undefined)\n myArray.push(g);\n }\n return myArray;\n }\n return undefined;\n }\n\n /** parse polyface aux data content to PolyfaceAuxData instance */\n public static parsePolyfaceAuxData(data: any = undefined, numPerFace: number = 0): PolyfaceAuxData | undefined {\n\n if (!Array.isArray(data.channels) || !Array.isArray(data.indices))\n return undefined;\n\n const outChannels: AuxChannel[] = [];\n for (const inChannel of data.channels) {\n if (Array.isArray(inChannel.data) && inChannel.hasOwnProperty(\"dataType\")) {\n const outChannelData: AuxChannelData[] = [];\n for (const inChannelData of inChannel.data) {\n if (inChannelData.hasOwnProperty(\"input\") && Array.isArray(inChannelData.values))\n outChannelData.push(new AuxChannelData(inChannelData.input, inChannelData.values));\n }\n outChannels.push(new AuxChannel(outChannelData, inChannel.dataType as AuxChannelDataType, inChannel.name, inChannel.inputName));\n }\n }\n\n const auxData = new PolyfaceAuxData(outChannels, []);\n SerializationHelpers.announceZeroBasedIndicesFromSignedOneBasedIndices(data.indices, numPerFace, (x: number) => { auxData.indices.push(x); });\n\n return auxData;\n }\n\n /** parse indexed mesh content to an IndexedPolyface instance */\n public static parseIndexedMesh(data?: any): IndexedPolyface | undefined {\n // {Coord:[[x,y,z],. . . ], -- simple xyz for each point\n // CoordIndex[1,2,3,0] -- zero-terminated, one based !!!\n if (data.hasOwnProperty(\"point\") && Array.isArray(data.point)\n && data.hasOwnProperty(\"pointIndex\") && Array.isArray(data.pointIndex)) {\n const polyface = IndexedPolyface.create();\n const numPerFace = data.hasOwnProperty(\"numPerFace\") ? data.numPerFace : 0;\n\n // default value is true!!\n polyface.twoSided = this.parseBooleanProperty(data, \"twoSided\", true) ?? true;\n\n if (data.hasOwnProperty(\"expectedClosure\")) {\n const q = data.expectedClosure;\n if (Number.isFinite(q)) {\n polyface.expectedClosure = q;\n }\n }\n\n if (data.hasOwnProperty(\"normal\") && Array.isArray(data.normal) && data.hasOwnProperty(\"normalIndex\")) {\n // For normals, addNormal() is overeager to detect the (common) case of duplicate normals in sequence.\n // Use addNormalXYZ which always creates a new one. Likewise for params.\n for (const uvw of data.normal) {\n if (Geometry.isNumberArray(uvw, 3))\n polyface.addNormalXYZ(uvw[0], uvw[1], uvw[2]);\n }\n SerializationHelpers.announceZeroBasedIndicesFromSignedOneBasedIndices(data.normalIndex, numPerFace,\n (x: number) => { polyface.addNormalIndex(x); });\n }\n if (data.hasOwnProperty(\"param\") && Array.isArray(data.param) && data.hasOwnProperty(\"paramIndex\")) {\n for (const uv of data.param) {\n if (Geometry.isNumberArray(uv, 2))\n polyface.addParamUV(uv[0], uv[1]);\n }\n SerializationHelpers.announceZeroBasedIndicesFromSignedOneBasedIndices(data.paramIndex, numPerFace,\n (x: number) => { polyface.addParamIndex(x); });\n }\n if (data.hasOwnProperty(\"color\") && Array.isArray(data.color) && data.hasOwnProperty(\"colorIndex\")) {\n for (const c of data.color)\n polyface.addColor(c);\n SerializationHelpers.announceZeroBasedIndicesFromSignedOneBasedIndices(data.colorIndex, numPerFace,\n (x: number) => { polyface.addColorIndex(x); });\n }\n\n for (const p of data.point)\n polyface.addPointXYZ(p[0], p[1], p[2]);\n SerializationHelpers.announceZeroBasedIndicesFromSignedOneBasedIndices(data.pointIndex, numPerFace,\n (i: number, v?: boolean) => { polyface.addPointIndex(i, v); },\n () => { polyface.terminateFacet(false); });\n\n if (data.hasOwnProperty(\"edgeMateIndex\") && Array.isArray(data.edgeMateIndex)) {\n const edgeMateIndex: Array<number | undefined> = [];\n if (SerializationHelpers.announceCompressedZeroBasedReflexiveIndices(data.edgeMateIndex, numPerFace,\n SerializationHelpers.EdgeMateIndex.BlockSeparator, SerializationHelpers.EdgeMateIndex.NoEdgeMate,\n (i: number | undefined) => edgeMateIndex.push(i),\n )) {\n polyface.data.edgeMateIndex = edgeMateIndex;\n }\n }\n\n if (!polyface.validateAllIndices())\n return undefined;\n\n if (data.hasOwnProperty(\"auxData\"))\n polyface.data.auxData = Reader.parsePolyfaceAuxData(data.auxData, numPerFace);\n\n if (data.hasOwnProperty(\"tags\"))\n polyface.data.taggedNumericData = Reader.parseTaggedNumericProps(data.tags);\n\n // NOTE: faceData is ignored\n return polyface;\n }\n return undefined;\n }\n /** parse contents of a curve collection to a CurveCollection instance */\n public static parseCurveCollectionMembers(result: CurveCollection, data?: any): CurveCollection | undefined {\n if (data && Array.isArray(data)) {\n for (const c of data) {\n const g = Reader.parse(c);\n if (g instanceof GeometryQuery && (\"curveCollection\" === g.geometryCategory || \"curvePrimitive\" === g.geometryCategory))\n result.tryAddChild(g);\n }\n return result;\n }\n return undefined;\n }\n\n /** Parse content of `bsurf` to BSplineSurface3d or BSplineSurface3dH */\n public static parseBsurf(data?: any): BSplineSurface3d | BSplineSurface3dH | undefined {\n let newSurface: BSplineSurface3d | BSplineSurface3dH | undefined;\n let dim: number;\n if (data !== undefined\n && data.hasOwnProperty(\"uKnots\") && Array.isArray(data.uKnots)\n && data.hasOwnProperty(\"vKnots\") && Array.isArray(data.vKnots)\n && data.hasOwnProperty(\"orderU\") && Number.isFinite(data.orderU)\n && data.hasOwnProperty(\"orderV\") && Number.isFinite(data.orderV)\n && data.hasOwnProperty(\"points\") && Array.isArray(data.points) && Array.isArray(data.points[0]) && Array.isArray(data.points[0][0])\n && (dim = data.points[0][0].length) >= 3 && dim <= 4\n ) {\n const myData = SerializationHelpers.createBSplineSurfaceData(data.points, dim, data.uKnots, data.points[0].length, data.orderU, data.vKnots, data.points.length, data.orderV);\n if (data.hasOwnProperty(\"closedU\") && true === data.closedU)\n myData.uParams.closed = true;\n if (data.hasOwnProperty(\"closedV\") && true === data.closedV)\n myData.vParams.closed = true;\n if (SerializationHelpers.Import.prepareBSplineSurfaceData(myData, { jsonPoles: true })) {\n if (dim === 3)\n newSurface = BSplineSurface3d.createGrid(myData.poles as number[][][], myData.uParams.order, myData.uParams.knots, myData.vParams.order, myData.vParams.knots);\n else\n newSurface = BSplineSurface3dH.createGrid(myData.poles as number[][][], WeightStyle.WeightsAlreadyAppliedToCoordinates, myData.uParams.order, myData.uParams.knots, myData.vParams.order, myData.vParams.knots);\n if (undefined !== newSurface) {\n if (undefined !== myData.uParams.wrapMode)\n newSurface.setWrappable(UVSelect.uDirection, myData.uParams.wrapMode);\n if (undefined !== myData.vParams.wrapMode)\n newSurface.setWrappable(UVSelect.vDirection, myData.vParams.wrapMode);\n }\n }\n }\n return newSurface;\n }\n\n /** Parse `cone` contents to `Cone` instance */\n public static parseConeProps(json?: ConeProps): Cone | undefined {\n const axes = Reader.parseOrientation(json, false);\n const start = Reader.parsePoint3dProperty(json, \"start\");\n const end = Reader.parsePoint3dProperty(json, \"end\");\n const radius = Reader.parseNumberProperty(json, \"radius\");\n const startRadius = Reader.parseNumberProperty(json, \"startRadius\", radius);\n const endRadius = Reader.parseNumberProperty(json, \"endRadius\", startRadius);\n const capped = Reader.parseBooleanProperty(json, \"capped\");\n\n if (start && end && startRadius !== undefined && endRadius !== undefined) {\n if (axes === undefined) {\n const axisVector = Vector3d.createStartEnd(start, end);\n const frame = Matrix3d.createRigidHeadsUp(axisVector, AxisOrder.ZXY);\n const vectorX = frame.columnX();\n const vectorY = frame.columnY();\n return Cone.createBaseAndTarget(start, end, vectorX, vectorY, startRadius, endRadius, capped);\n }\n return Cone.createBaseAndTarget(start, end, axes.columnX(), axes.columnY(), startRadius, endRadius, capped);\n }\n return undefined;\n }\n\n /** Parse `cylinder` content to `Cone` instance */\n public static parseCylinderProps(json?: CylinderProps): Cone | undefined {\n const start = Reader.parsePoint3dProperty(json, \"start\");\n const end = Reader.parsePoint3dProperty(json, \"end\");\n const radius = Reader.parseNumberProperty(json, \"radius\");\n\n const capped = Reader.parseBooleanProperty(json, \"capped\", false) as boolean;\n\n if (start\n && end\n && radius !== undefined) {\n return Cone.createAxisPoints(start, end, radius, radius, capped);\n }\n return undefined;\n }\n /** Parse line segment (array of 2 points) properties to `LineSegment3d` instance */\n private static parseLineSegmentProps(value: any[]): LineSegment3d | undefined {\n if (Array.isArray(value) && value.length > 1)\n return LineSegment3d.create(Point3d.fromJSON(value[0]), Point3d.fromJSON(value[1]));\n else\n return undefined;\n }\n /** Parse linear sweep content to `LinearSweep` instance. */\n public static parseLinearSweep(json?: any): LinearSweep | undefined {\n const contour = Reader.parse(json.contour);\n const capped = Reader.parseBooleanProperty(json, \"capped\");\n const extrusionVector = Reader.parseVector3dProperty(json, \"vector\");\n if (contour instanceof GeometryQuery\n && \"curveCollection\" === contour.geometryCategory\n && capped !== undefined\n && extrusionVector\n ) {\n return LinearSweep.create(contour, extrusionVector, capped);\n }\n return undefined;\n }\n /** Parse rotational sweep contents to `RotationalSweep` instance */\n public static parseRotationalSweep(json?: RotationalSweepProps): RotationalSweep | undefined {\n if (json === undefined)\n return undefined;\n const contour = Reader.parse(json.contour);\n const capped = Reader.parseBooleanProperty(json, \"capped\");\n const axisVector = Reader.parseVector3dProperty(json, \"axis\");\n const center = Reader.parsePoint3dProperty(json, \"center\");\n const sweepDegrees = Reader.parseNumberProperty(json, \"sweepAngle\");\n if (contour instanceof GeometryQuery\n && \"curveCollection\" === contour.geometryCategory\n && sweepDegrees !== undefined\n && capped !== undefined\n && axisVector\n && center\n ) {\n return RotationalSweep.create(\n contour,\n Ray3d.createCapture(center, axisVector),\n Angle.createDegrees(sweepDegrees),\n capped);\n }\n return undefined;\n }\n /** Parse box contents to `Box` instance */\n public static parseBox(json?: BoxProps): Box | undefined {\n const capped = Reader.parseBooleanProperty(json, \"capped\", false);\n\n // A mismatch between native and TypeScript code: TypeScript used \"origin\" where native used \"baseOrigin\".\n // Native now outputs and accepts either, preferring \"origin\"; TypeScript continues to expose only \"origin\".\n const origin = Reader.parsePoint3dProperty(json, \"origin\") ?? Reader.parsePoint3dProperty(json, \"baseOrigin\");\n const baseX = Reader.parseNumberProperty(json, \"baseX\");\n const baseY = Reader.parseNumberProperty(json, \"baseY\", baseX);\n let topOrigin = Reader.parsePoint3dProperty(json, \"topOrigin\");\n const topX = Reader.parseNumberProperty(json, \"topX\", baseX);\n const topY = Reader.parseNumberProperty(json, \"topY\", baseY);\n const height = Reader.parseNumberProperty(json, \"height\", baseX);\n const axes = Reader.parseOrientation(json, true)!;\n\n if (origin && !topOrigin && height)\n topOrigin = Matrix3d.xyzPlusMatrixTimesXYZ(origin, axes, Vector3d.create(0, 0, height));\n\n if (capped !== undefined\n && baseX !== undefined\n && baseY !== undefined\n && topY !== undefined\n && topX !== undefined\n && axes\n && origin\n && topOrigin\n ) {\n return Box.createDgnBoxWithAxes(origin, axes, topOrigin, baseX, baseY, topX, topY, capped);\n }\n return undefined;\n }\n\n /** Parse `SphereProps` to `Sphere` instance. */\n public static parseSphere(json?: SphereProps): Sphere | undefined {\n const center = Reader.parsePoint3dProperty(json, \"center\");\n const radius = Reader.parseNumberProperty(json, \"radius\");\n const radiusX = Reader.parseNumberProperty(json, \"radiusX\", radius);\n const radiusY = Reader.parseNumberProperty(json, \"radiusY\", radiusX);\n const radiusZ = Reader.parseNumberProperty(json, \"radiusZ\", radiusY);\n const latitudeStartEnd = Reader.parseAngleSweepProps(json, \"latitudeStartEnd\");\n const axes = Reader.parseOrientation(json, false);\n const capped = Reader.parseBooleanProperty(json, \"capped\");\n\n if (center && radiusX && radiusY && radiusZ)\n return Sphere.createFromAxesAndScales(center, axes, radiusX, radiusY, radiusZ, latitudeStartEnd, capped);\n\n return undefined;\n }\n /** Parse RuledSweepProps to RuledSweep instance. */\n public static parseRuledSweep(json?: RuledSweepProps): RuledSweep | undefined {\n const capped = Reader.parseBooleanProperty(json, \"capped\", false);\n const contours = this.loadContourArray(json, \"contour\");\n if (contours !== undefined\n && capped !== undefined) {\n return RuledSweep.create(contours, capped);\n }\n return undefined;\n }\n /** Parse TorusPipe props to TorusPipe instance. */\n public static parseTorusPipe(json?: TorusPipeProps): TorusPipe | undefined {\n const axes = Reader.parseOrientation(json, true)!; // force frame to be pure rotation (no scale or mirror)!\n const center = Reader.parsePoint3dProperty(json, \"center\");\n const radiusA = Reader.parseNumberProperty(json, \"majorRadius\");\n const radiusB = Reader.parseNumberProperty(json, \"minorRadius\");\n const sweepAngle = Reader.parseAngleProperty(json, \"sweepAngle\", undefined);\n const capped = Reader.parseBooleanProperty(json, \"capped\", false)!;\n if (center\n && radiusA !== undefined\n && radiusB !== undefined) {\n return TorusPipe.createDgnTorusPipe(center, axes.columnX(), axes.columnY(),\n radiusA, radiusB,\n sweepAngle ? sweepAngle : Angle.createDegrees(360), capped);\n }\n return undefined;\n }\n /** Parse an array object to array of Point3d instances. */\n public static parsePointArray(json?: any[]): Point3d[] {\n const points = [];\n if (json && Array.isArray(json)) {\n for (const member of json) {\n if (XYZ.isXAndY(member)) {\n points.push(Point3d.fromJSON(member));\n } else if (Geometry.isNumberArray(member, 2)) {\n points.push(Point3d.fromJSON(member));\n }\n }\n }\n return points;\n }\n /** Deserialize `json` to `GeometryQuery` instances. */\n public static parse(json?: any): AnyGeometryQuery | any[] | undefined {\n if (json !== undefined && json as object) {\n if (json.lineSegment !== undefined) {\n return Reader.parseLineSegmentProps(json.lineSegment);\n } else if (json.lineString !== undefined) {\n return LineString3d.create(Reader.parsePointArray(json.lineString));\n } else if (json.arc !== undefined) {\n return Reader.parseArcObject(json.arc);\n } else if (json.hasOwnProperty(\"point\")) {\n return Reader.parseCoordinate(json.point);\n } else if (json.hasOwnProperty(\"bcurve\")) {\n return Reader.parseBcurve(json.bcurve);\n } else if (json.hasOwnProperty(\"interpolationCurve\")) {\n return Reader.parseInterpolationCurve(json.interpolationCurve);\n } else if (json.hasOwnProperty(\"akimaCurve\")) {\n return Reader.parseAkimaCurve3d(json.akimaCurve);\n } else if (json.hasOwnProperty(\"path\")) {\n return Reader.parseCurveCollectionMembers(new Path(), json.path);\n } else if (json.hasOwnProperty(\"loop\")) {\n return Reader.parseCurveCollectionMembers(new Loop(), json.loop);\n } else if (json.hasOwnProperty(\"parityRegion\")) {\n return Reader.parseCurveCollectionMembers(new ParityRegion(), json.parityRegion);\n } else if (json.hasOwnProperty(\"unionRegion\")) {\n return Reader.parseCurveCollectionMembers(new UnionRegion(), json.unionRegion);\n } else if (json.hasOwnProperty(\"bagOfCurves\")) {\n return Reader.parseCurveCollectionMembers(new BagOfCurves(), json.bagOfCurves);\n } else if (json.hasOwnProperty(\"indexedMesh\")) {\n return Reader.parseIndexedMesh(json.indexedMesh);\n } else if (json.hasOwnProperty(\"bsurf\")) {\n return Reader.parseBsurf(json.bsurf);\n } else if (json.hasOwnProperty(\"cone\")) {\n return Reader.parseConeProps(json.cone);\n } else if (json.hasOwnProperty(\"cylinder\")) {\n return Reader.parseCylinderProps(json.cylinder);\n } else if (json.hasOwnProperty(\"sphere\")) {\n return Reader.parseSphere(json.sphere);\n } else if (json.hasOwnProperty(\"linearSweep\")) {\n return Reader.parseLinearSweep(json.linearSweep);\n } else if (json.hasOwnProperty(\"box\")) {\n return Reader.parseBox(json.box);\n } else if (json.hasOwnProperty(\"rotationalSweep\")) {\n return Reader.parseRotationalSweep(json.rotationalSweep);\n } else if (json.hasOwnProperty(\"ruledSweep\")) {\n return Reader.parseRuledSweep(json.ruledSweep);\n } else if (json.hasOwnProperty(\"torusPipe\")) {\n return Reader.parseTorusPipe(json.torusPipe);\n } else if (json.hasOwnProperty(\"pointString\")) {\n return PointString3d.create(Reader.parsePointArray(json.pointString));\n } else if (json.hasOwnProperty(\"transitionSpiral\")) {\n return Reader.parseTransitionSpiral(json.transitionSpiral);\n } else if (Array.isArray(json))\n return Reader.parseArray(json);\n }\n return undefined;\n }\n }\n\n /**\n * Class to deserialize json objects into GeometryQuery objects\n * @public\n */\n export class Writer extends GeometryHandler {\n\n public handleTaggedNumericData(data: TaggedNumericData): TaggedNumericDataProps {\n const result: TaggedNumericDataProps = { tagA: data.tagA, tagB: data.tagB };\n if (data.intData !== undefined && data.intData.length > 0)\n result.intData = data.intData.slice();\n if (data.doubleData !== undefined && data.doubleData.length > 0)\n result.doubleData = data.doubleData.slice();\n return result;\n }\n /** Convert strongly typed instance to tagged json */\n public handleLineSegment3d(data: LineSegment3d): any {\n return { lineSegment: [data.point0Ref.toJSON(), data.point1Ref.toJSON()] };\n }\n /** Convert strongly typed instance to tagged json */\n public handleCoordinateXYZ(data: CoordinateXYZ): any {\n return { point: data.point.toJSON() };\n }\n\n /** Convert strongly typed instance to tagged json */\n public handleArc3d(data: Arc3d): any {\n return {\n arc: {\n center: data.center.toJSON(),\n vectorX: data.vector0.toJSON(),\n vectorY: data.vector90.toJSON(),\n sweepStartEnd: [data.sweep.startDegrees, data.sweep.endDegrees],\n },\n };\n }\n /**\n * Insert orientation description to a data object.\n * @param matrix matrix with orientation\n * @param omitIfIdentity omit the axis data if the matrix is an identity.\n * @param data AxesProps object to be annotated.\n */\n private static insertOrientationFromMatrix(data: AxesProps, matrix: Matrix3d | undefined, omitIfIdentity: boolean) {\n if (omitIfIdentity) {\n if (matrix === undefined)\n return;\n if (matrix.isIdentity)\n return;\n }\n if (matrix)\n data.xyVectors = [matrix.columnX().toJSON(), matrix.columnY().toJSON()];\n else\n data.xyVectors = [[1, 0, 0], [0, 1, 0]];\n }\n private static isIdentityXY(xVector: Vector3d, yVector: Vector3d): boolean {\n return xVector.isAlmostEqualXYZ(1, 0, 0) && yVector.isAlmostEqualXYZ(0, 1, 0);\n }\n\n /**\n * Insert orientation description to a data object.\n * @param matrix matrix with orientation\n * @param omitIfIdentity omit the axis data if the matrix is an identity.\n * @param data AxesProps object to be annotated.\n */\n private static insertOrientationFromXYVectors(data: AxesProps, vectorX: Vector3d, vectorY: Vector3d, omitIfIdentity: boolean) {\n if (omitIfIdentity && Writer.isIdentityXY(vectorX, vectorY))\n return;\n data.xyVectors = [vectorX.toJSON(), vectorY.toJSON()];\n }\n\n /**\n * Insert orientation description to a data object, with orientation defined by u and v direction\n * vectors.\n * @param vectorX u direction\n * @param vectorV v direction\n * @param omitIfIdentity omit the axis data if the vectorU and vectorV are global x and y vectors.\n * @param data AxesProps object to be annotated.\n */\n private static insertXYOrientation(data: AxesProps, vectorU: Vector3d, vectorV: Vector3d, omitIfIdentity: boolean) {\n if (omitIfIdentity) {\n if (vectorU.isAlmostEqualXYZ(1, 0, 0) && vectorV.isAlmostEqualXYZ(0, 1, 0))\n return;\n }\n data.xyVectors = [vectorU.toJSON(), vectorV.toJSON()];\n }\n /** Parse properties of a TransitionSpiral. */\n public handleTransitionSpiral(data: TransitionSpiral3d): any {\n // TODO: HANDLE NONRIGID TRANSFORM !!\n // the spiral may have indication of how it was defined. If so, use defined/undefined state of the original data\n // as indication of what current data to use. (Current data may have changed due to transforms.)\n if (data instanceof DirectSpiral3d) {\n const value: TransitionSpiralProps = {\n origin: data.localToWorld.origin.toJSON(),\n type: data.spiralType,\n };\n Writer.insertOrientationFromMatrix(value, data.localToWorld.matrix, true);\n\n if (!data.activeFractionInterval.isExact01)\n value.activeFractionInterval = [data.activeFractionInterval.x0, data.activeFractionInterval.x1];\n // Object.defineProperty(value, \"fractionInterval\", { value: [data.activeFractionInterval.x0, data.activeFractionInterval.x1] });\n value.startRadius = 0;\n value.endRadius = data.nominalR1;\n value.length = data.nominalL1;\n return { transitionSpiral: value };\n\n } else if (data instanceof IntegratedSpiral3d) {\n // TODO: HANDLE NONRIGID TRANSFORM !!\n // the spiral may have indication of how it was defined. If so, use defined/undefined state of the original data\n // as indication of what current data to use. (Current data may have changed due to transforms.)\n const originalProperties = data.designProperties;\n\n const value: TransitionSpiralProps = {\n origin: data.localToWorld.origin.toJSON(),\n type: data.spiralType,\n };\n Writer.insertOrientationFromMatrix(value, data.localToWorld.matrix, true);\n\n if (!data.activeFractionInterval.isExact01)\n value.activeFractionInterval = [data.activeFractionInterval.x0, data.activeFractionInterval.x1];\n // Object.defineProperty(value, \"fractionInterval\", { value: [data.activeFractionInterval.x0, data.activeFractionInterval.x1] });\n\n // if possible, do selective output of defining data (omit exactly one out of the 5, matching original definition)\n // EXCEPT do not omit final radius .. readers want it?\n if (originalProperties !== undefined && originalProperties.numDefinedProperties() === 4) {\n if (originalProperties.radius0 !== undefined)\n value.startRadius = data.radius01.x0;\n if (originalProperties.radius1 !== undefined)\n value.endRadius = data.radius01.x1;\n if (originalProperties.bearing0 !== undefined)\n value.startBearing = data.bearing01.startAngle.toJSON();\n if (originalProperties.bearing1 !== undefined)\n value.endBearing = data.bearing01.endAngle.toJSON();\n if (originalProperties.curveLength !== undefined)\n value.length = data.curveLength();\n if (value.endRadius === undefined)\n value.endRadius = data.radius01.x1;\n } else {\n // uh oh ... no original data, but the spiral itself knows all 5 values. We don't know which to consider primary.\n // DECISION -- put everything out, let readers make sense if they can. (It should be consistent ?)\n value.startRadius = data.radius01.x0;\n value.endRadius = data.radius01.x1;\n value.startBearing = data.bearing01.startAngle.toJSON();\n value.endBearing = data.bearing01.endAngle.toJSON();\n value.length = data.curveLength();\n }\n return { transitionSpiral: value };\n }\n return undefined;\n }\n\n /** Convert strongly typed instance to tagged json */\n public handleCone(data: Cone): any {\n const radiusA = data.getRadiusA();\n const radiusB = data.getRadiusB();\n const centerA = data.getCenterA();\n const centerB = data.getCenterB();\n const vectorX = data.getVectorX();\n const vectorY = data.getVectorY();\n const xMag = vectorX.magnitude();\n const yMag = vectorY.magnitude();\n const xySameLength = Geometry.isSameCoordinate(xMag, yMag);\n const axisVector = Vector3d.createStartEnd(centerA, centerB);\n\n // special case of cylinder\n if (Geometry.isSameCoordinate(radiusA, radiusB)\n && vectorX.isPerpendicularTo(axisVector)\n && vectorY.isPerpendicularTo(axisVector)\n && xySameLength\n && Geometry.isSameCoordinate(xMag, 1.0)) {\n return {\n cylinder: {\n capped: data.capped,\n start: centerA.toJSON(),\n end: centerB.toJSON(),\n radius: radiusA,\n },\n };\n }\n\n const coneProps: ConeProps = {\n capped: data.capped,\n start: centerA.toJSON(),\n end: centerB.toJSON(),\n };\n\n if (Geometry.isSameCoordinate(radiusA, radiusB)) {\n coneProps.radius = radiusA;\n } else {\n coneProps.startRadius = radiusA;\n coneProps.endRadius = radiusB;\n }\n\n // always specify an orthogonal frame for backwards compatibility\n Writer.insertOrientationFromXYVectors(coneProps, vectorX, vectorY, false);\n\n // specify a general matrix if elliptical sections\n const ellipticalSections = !xySameLength || !vectorX.isPerpendicularTo(vectorY, true);\n if (ellipticalSections)\n coneProps.xyzVectors = [vectorX.toJSON(), vectorY.toJSON(), axisVector.toJSON()];\n\n return { cone: coneProps };\n }\n\n /** Convert strongly typed instance to tagged json */\n public handleSphere(data: Sphere): any {\n const xData = data.cloneVectorX().normalizeWithLength();\n const yData = data.cloneVectorY().normalizeWithLength();\n const zData = data.cloneVectorZ().normalizeWithLength();\n if (!xData.v || !yData.v || !zData.v)\n return undefined;\n\n const rigid = Matrix3d.createIdentity();\n const skew = Matrix3d.createIdentity();\n if (!data.cloneLocalToWorld().matrix.factorRigidSkew(rigid, skew))\n return undefined;\n\n const value: SphereProps = { center: data.cloneCenter().toJSON() };\n\n // always specify an orthogonal frame if !identity for backwards compatibility\n if (!rigid.isIdentity)\n value.zxVectors = [zData.v.toJSON(), xData.v.toJSON()];\n\n // specify a general matrix if skew/mirror local frame\n if (!skew.isDiagonal || skew.determinant() < 0.0)\n value.xyzVectors = [xData.v.toJSON(), yData.v.toJSON(), zData.v.toJSON()];\n\n const latitudeSweep = data.cloneLatitudeSweep();\n const fullSweep = latitudeSweep.isFullLatitudeSweep;\n if (data.capped && !fullSweep)\n value.capped = data.capped;\n if (!fullSweep)\n value.latitudeStartEnd = latitudeSweep.toJSON();\n\n const rX = xData.mag;\n const rY = yData.mag;\n const rZ = zData.mag;\n if (Geometry.isSameCoordinate(rX, rY)) {\n if (Geometry.isSameCoordinate(rX, rZ))\n value.radius = rX;\n else { // radiusY will pick up radiusX\n value.radiusX = rX;\n value.radiusZ = rZ;\n }\n } else {\n value.radiusX = rX;\n value.radiusY = rY;\n value.radiusZ = rZ;\n }\n return { sphere: value };\n }\n\n /** Convert strongly typed instance to tagged json */\n public handleTorusPipe(data: TorusPipe): any {\n const vectorX = data.cloneVectorX();\n const vectorY = data.cloneVectorY();\n const radiusA = data.getMajorRadius();\n const radiusB = data.getMinorRadius();\n const sweep = data.getSweepAngle();\n if (data.getIsReversed()) {\n // the TorusPipe was created with negative sweep that was forced positive; restore original values\n vectorY.scaleInPlace(-1.0);\n sweep.setRadians(-sweep.radians);\n }\n const value: TorusPipeProps = {\n center: data.cloneCenter().toJSON(),\n majorRadius: radiusA,\n minorRadius: radiusB,\n xyVectors: [vectorX.toJSON(), vectorY.toJSON()],\n };\n if (!sweep.isFullCircle) {\n value.sweepAngle = sweep.degrees;\n value.capped = data.capped;\n }\n return { torusPipe: value };\n }\n\n /** Convert strongly typed instance to tagged json */\n public handleLineString3d(data: LineString3d): any {\n const pointsA = data.points;\n const pointsB = [];\n if (pointsA)\n for (const p of pointsA) pointsB.push(p.toJSON());\n return { lineString: pointsB };\n }\n\n /** Convert strongly typed instance to tagged json */\n public handlePointString3d(data: PointString3d): any {\n const pointsA = data.points;\n const pointsB = [];\n if (pointsA)\n for (const p of pointsA) pointsB.push(p.toJSON());\n return { pointString: pointsB };\n }\n\n /** Convert strongly typed instance to tagged json */\n public override handlePath(data: Path): any {\n return { path: this.collectChildren(data) };\n }\n /** Convert strongly typed instance to tagged json */\n public override handleLoop(data: Loop): any {\n return { loop: this.collectChildren(data) };\n }\n\n /** Convert strongly typed instance to tagged json */\n public override handleParityRegion(data: ParityRegion): any {\n return { parityRegion: this.collectChildren(data) };\n }\n\n /** Convert strongly typed instance to tagged json */\n public override handleUnionRegion(data: UnionRegion): any {\n return { unionRegion: this.collectChildren(data) };\n }\n\n /** Convert strongly typed instance to tagged json */\n public override handleBagOfCurves(data: BagOfCurves): any {\n return { bagOfCurves: this.collectChildren(data) };\n }\n\n private collectChildren(data: CurveCollection): any[] {\n const children = [];\n if (data.children && Array.isArray(data.children)) {\n for (const child of data.children) {\n const cdata = child.dispatchToGeometryHandler(this);\n if (cdata)\n children.push(cdata);\n }\n }\n return children;\n }\n\n /** Convert strongly typed instance to tagged json */\n public handleLinearSweep(data: LinearSweep): any {\n const extrusionVector = data.cloneSweepVector();\n const curves = data.getCurvesRef();\n const capped = data.capped;\n if (extrusionVector\n && curves\n && capped !== undefined) {\n return {\n linearSweep: {\n contour: curves.dispatchToGeometryHandler(this),\n capped,\n vector: extrusionVector.toJSON(),\n },\n };\n }\n return undefined;\n }\n\n /** Convert strongly typed instance to tagged json */\n public handleRuledSweep(data: RuledSweep): any {\n const contours = data.cloneContours();\n const capped = data.capped;\n if (contours\n && contours.length > 1\n && capped !== undefined) {\n const jsonContours = [];\n for (const c of contours) {\n jsonContours.push(this.emit(c));\n }\n return {\n ruledSweep: {\n contour: jsonContours,\n capped,\n },\n };\n }\n return undefined;\n }\n\n /** Convert strongly typed instance to tagged json */\n public handleRotationalSweep(data: RotationalSweep): any {\n const axisRay = data.cloneAxisRay();\n const curves = data.getCurves();\n const capped = data.capped;\n const sweepAngle = data.getSweep();\n return {\n rotationalSweep: {\n axis: axisRay.direction.toJSON(),\n contour: curves.dispatchToGeometryHandler(this),\n capped,\n center: axisRay.origin.toJSON(),\n sweepAngle: sweepAngle.degrees,\n },\n };\n }\n\n /** Convert strongly typed instance to tagged json */\n public handleBox(box: Box): any {\n const out: SolidPrimitiveProps = {\n box: {\n origin: box.getBaseOrigin().toJSON(),\n baseOrigin: box.getBaseOrigin().toJSON(),\n baseX: box.getBaseX(),\n baseY: box.getBaseY(),\n capped: box.capped,\n topOrigin: box.getTopOrigin().toJSON(),\n },\n };\n\n const outBox = out.box!;\n Writer.insertXYOrientation(outBox, box.getVectorX(), box.getVectorY(), true);\n if (!Geometry.isSameCoordinate(box.getTopX(), box.getBaseX()))\n outBox.topX = box.getTopX();\n if (!Geometry.isSameCoordinate(box.getTopY(), box.getBaseY()))\n outBox.topY = box.getTopY();\n\n return out;\n }\n\n private handlePolyfaceAuxData(auxData: PolyfaceAuxData, pf: IndexedPolyface): AuxDataProps {\n assert(auxData === pf.data.auxData);\n const contents: AuxDataProps = { indices: [], channels: [] };\n const visitor = pf.createVisitor(0);\n while (visitor.moveToNextFacet()) {\n for (let i = 0; i < visitor.indexCount; i++)\n contents.indices.push(visitor.auxData!.indices[i] + 1);\n contents.indices.push(0); // facet terminator.\n }\n for (const inChannel of auxData.channels) {\n const outChannel: AuxChannelProps = { data: [], dataType: inChannel.dataType, name: inChannel.name, inputName: inChannel.inputName };\n for (const inData of inChannel.data) {\n const outData: AuxChannelDataProps = { input: inData.input, values: inData.values.slice(0) };\n outChannel.data.push(outData);\n }\n contents.channels.push(outChannel);\n }\n return contents;\n }\n\n /** Convert strongly typed instance to tagged json */\n public handleIndexedPolyface(pf: IndexedPolyface): any {\n const points = [];\n const pointIndex: number[] = [];\n const normals = [];\n const params = [];\n const colors = [];\n {\n const p = Point3d.create();\n for (let i = 0; pf.data.point.getPoint3dAtCheckedPointIndex(i, p); i++)\n points.push(p.toJSON());\n }\n if (pf.data.normal) {\n const numNormal = pf.data.normal.length;\n const normal = Vector3d.create();\n for (let i = 0; i < numNormal; i++) {\n pf.data.normal.getVector3dAtCheckedVectorIndex(i, normal);\n normals.push(normal.toJSON());\n }\n\n }\n\n if (pf.data.param) {\n const uv = Point2d.create();\n for (let i = 0; pf.data.param.getPoint2dAtCheckedPointIndex(i, uv); i++)\n params.push(uv.toJSON());\n }\n\n if (pf.data.color) {\n for (const value of pf.data.color) colors.push(value);\n }\n\n const visitor = pf.createVisitor(0);\n let indexCounter = 0;\n\n const normalIndex: number[] = [];\n const paramIndex: number[] = [];\n const colorIndex: number[] = [];\n let n;\n while (visitor.moveToNextFacet()) {\n n = visitor.indexCount;\n // All meshes have point and point index ...\n for (let i = 0; i < n; i++) {\n // Change sign of value to be pushed based on whether or not the edge was originally visible or not\n const toPush = pf.data.edgeVisible[indexCounter + i] ? visitor.pointIndex[i] + 1 : - (visitor.clientPointIndex(i) + 1);\n pointIndex.push(toPush);\n }\n pointIndex.push(0); // facet terminator.\n indexCounter += visitor.indexCount;\n\n if (visitor.normalIndex) {\n for (let i = 0; i < n; i++) normalIndex.push(1 + visitor.clientNormalIndex(i));\n normalIndex.push(0);\n }\n if (visitor.paramIndex) {\n for (let i = 0; i < n; i++) paramIndex.push(1 + visitor.clientParamIndex(i));\n paramIndex.push(0);\n }\n if (visitor.colorIndex) {\n for (let i = 0; i < n; i++) colorIndex.push(1 + visitor.clientColorIndex(i));\n colorIndex.push(0);\n }\n }\n\n let taggedNumericData;\n if (pf.data.taggedNumericData) {\n taggedNumericData = this.handleTaggedNumericData(pf.data.taggedNumericData);\n }\n\n let edgeMateIndex: number[] | undefined;\n if (pf.data.edgeMateIndex) {\n edgeMateIndex = [];\n if (!SerializationHelpers.announceUncompressedZeroBasedReflexiveIndices(pf.data.edgeMateIndex, pf.facetStart,\n SerializationHelpers.EdgeMateIndex.BlockSeparator, SerializationHelpers.EdgeMateIndex.NoEdgeMate,\n (i: number) => edgeMateIndex!.push(i),\n )) {\n edgeMateIndex = undefined;\n }\n }\n\n const contents: { [k: string]: any } = {};\n\n if (pf.expectedClosure !== 0)\n contents.expectedClosure = pf.expectedClosure;\n\n contents.twoSided = pf.twoSided;\n\n if (pf.data.auxData)\n contents.auxData = this.handlePolyfaceAuxData(pf.data.auxData, pf);\n\n if (pf.data.color)\n contents.color = colors;\n if (pf.data.colorIndex)\n contents.colorIndex = colorIndex;\n\n if (pf.data.normal)\n contents.normal = normals;\n if (pf.data.normalIndex)\n contents.normalIndex = normalIndex;\n\n if (pf.data.param)\n contents.param = params;\n if (pf.data.paramIndex)\n contents.paramIndex = paramIndex;\n\n contents.point = points;\n contents.pointIndex = pointIndex;\n\n if (taggedNumericData)\n contents.tags = taggedNumericData;\n\n if (pf.data.edgeMateIndex)\n contents.edgeMateIndex = edgeMateIndex;\n\n // NOTE: pf.data.face is not persistent\n return { indexedMesh: contents };\n }\n\n private handleBSplineCurve(curve: BSplineCurve3d | BSplineCurve3dH): any {\n const data = SerializationHelpers.createBSplineCurveData(curve.polesRef, curve.poleDimension, curve.knotsRef, curve.numPoles, curve.order);\n\n const wrapMode = curve.getWrappable();\n if (BSplineWrapMode.None !== wrapMode)\n data.params.wrapMode = wrapMode;\n\n if (!SerializationHelpers.Export.prepareBSplineCurveData(data, { jsonPoles: true, jsonKnots: true }))\n return undefined;\n\n return {\n bcurve: {\n points: data.poles as number[][],\n knots: data.params.knots as number[],\n order: data.params.order,\n closed: data.params.closed ? true : undefined,\n },\n };\n }\n\n /** Convert strongly typed instance to tagged json */\n public handleBSplineCurve3d(curve: BSplineCurve3d): any {\n return this.handleBSplineCurve(curve);\n }\n\n /** Convert strongly typed instance to tagged json */\n public handleInterpolationCurve3d(curve: InterpolationCurve3d): any {\n const props = curve.cloneProps();\n BSplineCurveOps.C2CubicFit.convertToJsonKnots(props);\n return { interpolationCurve: props };\n }\n\n /** Convert strongly typed instance to tagged json */\n public handleAkimaCurve3d(curve: AkimaCurve3d): any {\n return { akimaCurve: curve.cloneProps() };\n }\n\n /** Convert strongly typed instance to tagged json */\n public handleBezierCurve3d(curve: BezierCurve3d): any {\n const knots = [];\n const order = curve.order;\n for (let i = 0; i < order; i++) knots.push(0.0);\n for (let i = 0; i < order; i++) knots.push(1.0);\n return {\n bcurve: {\n points: curve.copyPolesAsJsonArray(),\n knots,\n order: curve.order,\n },\n };\n }\n\n /** Convert strongly typed instance to tagged json */\n public handleBSplineCurve3dH(curve: BSplineCurve3dH): any {\n return this.handleBSplineCurve(curve);\n }\n\n /** Convert strongly typed instance to tagged json */\n public handleBSplineSurface3d(surface: BSplineSurface3d): any {\n return this.handleBSplineSurface(surface);\n }\n\n /** Convert strongly typed instance to tagged json */\n public handleBezierCurve3dH(curve: BezierCurve3dH): any {\n const knots = [];\n const order = curve.order;\n for (let i = 0; i < order; i++) knots.push(0.0);\n for (let i = 0; i < order; i++) knots.push(1.0);\n return {\n bcurve: {\n points: curve.copyPolesAsJsonArray(),\n knots,\n order: curve.order,\n },\n };\n }\n\n /** Convert strongly typed instance to tagged json */\n private handleBSplineSurface(surface: BSplineSurface3d | BSplineSurface3dH): any {\n const data = SerializationHelpers.createBSplineSurfaceData(surface.coffs, surface.poleDimension,\n surface.knots[UVSelect.uDirection].knots, surface.numPolesUV(UVSelect.uDirection), surface.orderUV(UVSelect.uDirection),\n surface.knots[UVSelect.vDirection].knots, surface.numPolesUV(UVSelect.vDirection), surface.orderUV(UVSelect.vDirection));\n\n const wrapModeU = surface.getWrappable(UVSelect.uDirection);\n const wrapModeV = surface.getWrappable(UVSelect.vDirection);\n if (BSplineWrapMode.None !== wrapModeU)\n data.uParams.wrapMode = wrapModeU;\n if (BSplineWrapMode.None !== wrapModeV)\n data.vParams.wrapMode = wrapModeV;\n\n if (!SerializationHelpers.Export.prepareBSplineSurfaceData(data, { jsonPoles: true, jsonKnots: true }))\n return undefined;\n\n return {\n bsurf: {\n points: data.poles as number[][][],\n uKnots: data.uParams.knots as number[],\n vKnots: data.vParams.knots as number[],\n orderU: data.uParams.order,\n orderV: data.vParams.order,\n closedU: data.uParams.closed ? true : undefined,\n closedV: data.vParams.closed ? true : undefined,\n },\n };\n }\n\n /** Convert strongly typed instance to tagged json */\n public handleBSplineSurface3dH(surface: BSplineSurface3dH): any {\n return this.handleBSplineSurface(surface);\n }\n\n /** Convert an array of strongly typed instances to an array of tagged json */\n public emitArray(data: object[]): any {\n const members = [];\n for (const c of data) {\n const toPush = this.emit(c);\n members.push(toPush);\n }\n return members;\n }\n /** Convert GeometryQuery data (array or single instance) to instance to tagged json */\n public emit(data: any): any {\n if (Array.isArray(data))\n return this.emitArray(data);\n\n if (data instanceof GeometryQuery) {\n return data.dispatchToGeometryHandler(this);\n } else if (data instanceof TaggedNumericData) {\n return this.handleTaggedNumericData(data);\n }\n return undefined;\n }\n /** One-step static method to create a writer and emit a json object */\n public static toIModelJson(data: any): any {\n const writer = new Writer();\n return writer.emit(data);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"IModelJsonSchema.js","sourceRoot":"","sources":["../../../src/serialization/IModelJsonSchema.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Serialization\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { AkimaCurve3d } from \"../bspline/AkimaCurve3d\";\r\nimport { BezierCurve3d } from \"../bspline/BezierCurve3d\";\r\nimport { BezierCurve3dH } from \"../bspline/BezierCurve3dH\";\r\nimport { BSplineCurve3d } from \"../bspline/BSplineCurve\";\r\nimport { BSplineCurve3dH } from \"../bspline/BSplineCurve3dH\";\r\nimport { BSplineCurveOps } from \"../bspline/BSplineCurveOps\";\r\nimport { BSplineSurface3d, BSplineSurface3dH, UVSelect, WeightStyle } from \"../bspline/BSplineSurface\";\r\nimport { InterpolationCurve3d as InterpolationCurve3d, InterpolationCurve3dProps } from \"../bspline/InterpolationCurve3d\";\r\nimport { BSplineWrapMode } from \"../bspline/KnotVector\";\r\nimport { Arc3d } from \"../curve/Arc3d\";\r\nimport { CoordinateXYZ } from \"../curve/CoordinateXYZ\";\r\nimport { BagOfCurves, CurveCollection } from \"../curve/CurveCollection\";\r\nimport { AnyGeometryQuery, GeometryQuery } from \"../curve/GeometryQuery\";\r\nimport { LineSegment3d } from \"../curve/LineSegment3d\";\r\nimport { LineString3d } from \"../curve/LineString3d\";\r\nimport { Loop } from \"../curve/Loop\";\r\nimport { ParityRegion } from \"../curve/ParityRegion\";\r\nimport { Path } from \"../curve/Path\";\r\nimport { PointString3d } from \"../curve/PointString3d\";\r\nimport { DirectSpiral3d } from \"../curve/spiral/DirectSpiral3d\";\r\nimport { IntegratedSpiral3d } from \"../curve/spiral/IntegratedSpiral3d\";\r\nimport { TransitionSpiral3d } from \"../curve/spiral/TransitionSpiral3d\";\r\nimport { UnionRegion } from \"../curve/UnionRegion\";\r\nimport { AngleProps, AngleSweepProps, AxisOrder, Geometry } from \"../Geometry\";\r\nimport { Angle } from \"../geometry3d/Angle\";\r\nimport { AngleSweep } from \"../geometry3d/AngleSweep\";\r\nimport { GeometryHandler } from \"../geometry3d/GeometryHandler\";\r\nimport { Matrix3d } from \"../geometry3d/Matrix3d\";\r\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Point3d, Vector3d, XYZ } from \"../geometry3d/Point3dVector3d\";\r\nimport { Ray3d } from \"../geometry3d/Ray3d\";\r\nimport { Segment1d } from \"../geometry3d/Segment1d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { XYProps, XYZProps } from \"../geometry3d/XYZProps\";\r\nimport { YawPitchRollAngles, YawPitchRollProps } from \"../geometry3d/YawPitchRollAngles\";\r\nimport { AuxChannel, AuxChannelData, AuxChannelDataType, PolyfaceAuxData } from \"../polyface/AuxData\";\r\nimport { IndexedPolyface } from \"../polyface/Polyface\";\r\nimport { TaggedNumericData } from \"../polyface/TaggedNumericData\";\r\nimport { Box } from \"../solid/Box\";\r\nimport { Cone } from \"../solid/Cone\";\r\nimport { LinearSweep } from \"../solid/LinearSweep\";\r\nimport { RotationalSweep } from \"../solid/RotationalSweep\";\r\nimport { RuledSweep } from \"../solid/RuledSweep\";\r\nimport { Sphere } from \"../solid/Sphere\";\r\nimport { TorusPipe } from \"../solid/TorusPipe\";\r\nimport { SerializationHelpers } from \"./SerializationHelpers\";\r\n\r\n/**\r\n * `IModelJson` namespace has classes for serializing and deserialization json objects\r\n * @public\r\n */\r\nexport namespace IModelJson {\r\n /**\r\n * Property rules for json objects that can be deserialized to various Curve and Solid objects\r\n * @public\r\n */\r\n export interface GeometryProps extends CurvePrimitiveProps, SolidPrimitiveProps, CurveCollectionProps {\r\n /** `{indexedMesh:...}` */\r\n indexedMesh?: IndexedMeshProps;\r\n /** `{point:...}` */\r\n point?: XYZProps;\r\n /** `{bsurf:...}` */\r\n bsurf?: BSplineSurfaceProps;\r\n /** `{pointString:...}` */\r\n pointString?: XYZProps[];\r\n }\r\n /**\r\n * Property rules for json objects that can be deserialized to various CurvePrimitives\r\n * * Only one of these is allowed in each instance.\r\n * @public\r\n */\r\n export interface CurvePrimitiveProps {\r\n /** `{lineSegment:...}` */\r\n lineSegment?: [XYZProps, XYZProps];\r\n /** `{lineString:...}` */\r\n lineString?: XYZProps[];\r\n /** `{bcurve:...}` */\r\n bcurve?: BcurveProps;\r\n /** `{transitionSpiral:...}` */\r\n transitionSpiral?: TransitionSpiralProps;\r\n /** `{arc:...}` */\r\n arc?: ArcByVectorProps | [XYZProps, XYZProps, XYZProps];\r\n /** `{interpolationCurve:...}~ */\r\n interpolationCurve?: InterpolationCurve3dProps;\r\n }\r\n\r\n /**\r\n * Property rules for json objects that can be deserialized to single point\r\n * @public\r\n */\r\n export interface PointProps {\r\n /** `{point:...}` */\r\n point?: XYZProps;\r\n }\r\n\r\n /**\r\n * Property rules for json objects that can be deserialized to a BsplineSurface\r\n * See `BCurveProps` for discussion of knot and pole counts.\r\n * @public\r\n */\r\n export interface BSplineSurfaceProps {\r\n /** polynomial order (one more than degree) in the u parameter direction */\r\n orderU: number;\r\n /** polynomial order (one more than degree) in the v parameter direction */\r\n orderV: number;\r\n /** Square grid of control points (aka poles) in row major order (row is along the u direction) */\r\n points: [[[number]]]; // each inner array is xyz or xyzw for a single control point. each middle array is a row of control points.\r\n /** Array of knots for the u direction bspline */\r\n uKnots: [number];\r\n /** Array of knots for the v direction bspline */\r\n vKnots: [number];\r\n /** optional flag for periodic data in the u parameter direction */\r\n closedU?: boolean;\r\n /** optional flag for periodic data in the v parameter direction */\r\n closedV?: boolean;\r\n }\r\n\r\n /**\r\n * Interface for a collection of curves, e.g. as used as a swept contour.\r\n * @public\r\n */\r\n export interface CurveCollectionProps extends PlanarRegionProps {\r\n /** A sequence of curves joined head to tail. */\r\n path?: [CurvePrimitiveProps];\r\n // cspell:word bagof\r\n /**\r\n * A collection of curves with no required structure or connections\r\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Instead use bagOfCurves, which has correct capitalization and type. The old name has never been persisted.\r\n */\r\n bagofCurves?: [CurveCollectionProps];\r\n /** A collection of curves with no required structure or connections. */\r\n bagOfCurves?: [CurveCollectionProps | CurvePrimitiveProps];\r\n }\r\n\r\n /**\r\n * Interface for a collection of curves that bound a planar region\r\n * @public\r\n */\r\n export interface PlanarRegionProps {\r\n /** `{loop:...}`\r\n * * A sequence of curves which connect head to tail, with the final connecting back to the first\r\n */\r\n loop?: [CurvePrimitiveProps];\r\n /** `{parityRegion:...}`\r\n * * A collection of loops, with composite inside/outside determined by parity rules.\r\n * * (The single outer boundary with one or more holes is a parityRegion)\r\n */\r\n parityRegion?: [{ loop: [CurvePrimitiveProps] }];\r\n /** `{unionRegion:...}`\r\n * * A collection of loops and parityRegions\r\n */\r\n unionRegion?: [PlanarRegionProps];\r\n }\r\n /**\r\n * Interface for solid primitives: box, sphere, cylinder, cone, torusPipe, linear sweep, rotational sweep, ruled sweep.\r\n * @public\r\n */\r\n export interface SolidPrimitiveProps {\r\n /** `{cylinder:...}` */\r\n cylinder?: CylinderProps;\r\n /** `{box:...}` */\r\n box?: BoxProps;\r\n /** `{sphere:............}` */\r\n sphere?: SphereProps;\r\n /** `{cone:............}` */\r\n cone?: ConeProps;\r\n /** `{torusPipe:............}` */\r\n torusPipe?: TorusPipeProps;\r\n /** `{linearSweep:.........}` */\r\n linearSweep?: LinearSweepProps;\r\n /** `{rotationalSweep:...}` */\r\n rotationalSweep?: RotationalSweepProps;\r\n /** `{ruledSweep:...}` */\r\n ruledSweep?: RuledSweepProps;\r\n }\r\n\r\n /**\r\n * Ways to specify an object's local coordinate frame.\r\n * * Most objects that implement AxesProps specify their local coordinate frame by a right-handed\r\n * rotation matrix (`yawPitchRollAngles`, `xyVectors`, `zxVectors`).\r\n * * A general invertible matrix can be specified by `xyzVectors`.\r\n * * An object that implements AxesProps typically specifies only one variant, or none for Identity.\r\n * @public\r\n */\r\n export interface AxesProps {\r\n /**\r\n * A rotation specified by yaw, pitch, roll angles.\r\n * * Cases where only one of these angles is nonzero are intuitive.\r\n * * Cases where more than one is nonzero have difficult interactions and order issues.\r\n * * See [[YawPitchRollAngles]] for further information.\r\n * @public\r\n */\r\n yawPitchRollAngles?: YawPitchRollProps;\r\n /**\r\n * A rotation specified by an array of two vectors [xAxis, yAxis].\r\n * * The first vector gives the local x-axis direction; the second determines the local xy-plane.\r\n * * A third implied axis is perpendicular to these.\r\n * * The implied rotation is `Matrix3d.createRigidFromColumns(xAxis, yAxis, AxisOrder.XYZ)`.\r\n */\r\n xyVectors?: [XYZProps, XYZProps];\r\n /**\r\n * A rotation specified by an array of two vectors [zAxis, xAxis].\r\n * * The first vector gives the local z-axis direction; the second determines the local zx-plane.\r\n * * A third implied axis is perpendicular to these.\r\n * * The implied rotation is `Matrix3d.createRigidFromColumns(zAxis, xAxis, AxisOrder.ZXY)`.\r\n */\r\n zxVectors?: [XYZProps, XYZProps];\r\n /**\r\n * A local coordinate system specified by an array of three vectors [xAxis, yAxis, zAxis].\r\n * * The vectors should have positive length and be linearly independent, but otherwise they are unrestricted.\r\n * * This allows skew coordinate systems, left-handed frames, and non-uniform scaling.\r\n * * The implied matrix is `Matrix3d.createColumns(xAxis, yAxis, zAxis)`.\r\n */\r\n xyzVectors?: [XYZProps, XYZProps, XYZProps];\r\n }\r\n\r\n /**\r\n * Interface for Arc3d value defined by center, vectorX, vectorY and sweepStartEnd.\r\n * @public\r\n */\r\n export interface ArcByVectorProps {\r\n /** Arc center point */\r\n center: XYZProps;\r\n /** Vector from center to 0-degree point (commonly called major axis vector) */\r\n vectorX: XYZProps;\r\n /** Vector from center to 90-degree point (common called minor axis vector) */\r\n vectorY: XYZProps;\r\n /** Start and end angles in parameterization `X=C+cos(theta) * vectorX + sin(theta) * vectorY` */\r\n sweepStartEnd: AngleSweepProps;\r\n }\r\n\r\n /**\r\n * Interface for a [[Cone]], defined by two centers and radii.\r\n * * A Cone typically has circular sections perpendicular to the axis line between centers.\r\n * * The cross section xy-plane is specified by an [[IModelJson.AxesProps]]:\r\n * * Typically this is an `xyVectors`.\r\n * * Elliptical cross sections can be specified with `xyzVectors`, which admits skew vectors\r\n * and/or vectors of different lengths. Elliptical cross sections are scaled by radius.\r\n * @public\r\n */\r\n export interface ConeProps extends AxesProps {\r\n /** Point on axis at center of start section. */\r\n start: XYZProps;\r\n /** Point on axis at center of end section. */\r\n end: XYZProps;\r\n\r\n /** Radius of the section at `start` if circular, or scale factor if elliptical. */\r\n startRadius?: number;\r\n /** Radius of the section at `end` if circular, or scale factor if elliptical. */\r\n endRadius?: number;\r\n /** Constant radius of all sections if circular, or scale factor if elliptical. */\r\n radius?: number;\r\n\r\n /**\r\n * Optional section x-axis.\r\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. This property has never been written. Optional axes are specified by an AxesProps.\r\n */\r\n vectorX?: XYZProps;\r\n /**\r\n * Optional section y-axis.\r\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. This property has never been written. Optional axes are specified by an AxesProps.\r\n */\r\n vectorY?: XYZProps;\r\n\r\n /** flag for circular end caps. */\r\n capped?: boolean;\r\n }\r\n\r\n /**\r\n * Interface for cylinder defined by a radius and axis start and end centers.\r\n * @public\r\n */\r\n export interface CylinderProps {\r\n /** axis point at start */\r\n start: XYZProps;\r\n /** axis point at end */\r\n end: XYZProps;\r\n /** cylinder radius */\r\n radius: number;\r\n /** flag for circular end caps. */\r\n capped?: boolean;\r\n }\r\n\r\n /**\r\n * Interface for a linear sweep of a base curve or region.\r\n * @public\r\n */\r\n export interface LinearSweepProps {\r\n /** The swept curve or region. Any curve collection */\r\n contour: CurveCollectionProps;\r\n /** The sweep vector */\r\n vector: XYZProps;\r\n /** flag for circular end caps. */\r\n capped?: boolean;\r\n }\r\n\r\n /**\r\n * Interface for a rotational sweep of a base curve or region around an axis.\r\n * @public\r\n */\r\n export interface RotationalSweepProps {\r\n /** The swept curve or region. Any curve collection */\r\n contour: CurveCollectionProps;\r\n /** any point on the axis of rotation. */\r\n center: XYZProps;\r\n /** The axis of rotation */\r\n axis: XYZProps;\r\n /** sweep angle */\r\n sweepAngle: AngleProps;\r\n /** flag for circular end caps. */\r\n capped?: boolean;\r\n }\r\n\r\n /**\r\n * Interface for a surface with rule lines between corresponding curves on successive contours\r\n * @public\r\n */\r\n export interface RuledSweepProps {\r\n /** An array of swept curves or regions. */\r\n contour: [CurveCollectionProps];\r\n /** Optional capping flag. */\r\n capped?: boolean;\r\n }\r\n\r\n /**\r\n * Interface for spiral\r\n * * Any 4 (but not 5) of the 5 values `[startBearing, endBearing, startRadius, endRadius, length]`\r\n * may be defined.\r\n * * In radius data, zero radius indicates straight line (infinite radius)\r\n * * Note that the inherited AxesProps allows multiple ways to specify orientation of the placement..\r\n * @public\r\n */\r\n export interface TransitionSpiralProps extends AxesProps {\r\n\r\n /** origin of the coordinate system. */\r\n origin: XYZProps;\r\n /** angle at departure from origin. */\r\n startBearing?: AngleProps;\r\n /** End bearing. */\r\n endBearing?: AngleProps;\r\n /** Radius at start (0 for straight line) */\r\n startRadius?: number;\r\n /** Radius at end (0 for straight line) */\r\n endRadius?: number;\r\n /** length along curve.\r\n */\r\n length?: number;\r\n /** Fractional part of active interval.\r\n * * There has been name confusion between native and typescript .... accept any variant ..\r\n * * native (July 2020) emits activeFractionInterval\r\n */\r\n activeFractionInterval?: number[];\r\n /** TransitionSpiral type.\r\n * * expected names are given in `IntegratedSpiralTypeName` and `DirectSpiralTypeName`\r\n */\r\n type?: string;\r\n }\r\n\r\n /**\r\n * Interface for bspline curve (aka bcurve)\r\n * @public\r\n */\r\n export interface BcurveProps {\r\n /** control points */\r\n points: [XYZProps];\r\n /** knots. */\r\n knots: [number];\r\n /** order of polynomial\r\n * * The order is the number of basis functions that are in effect at any knot value.\r\n * * The order is the number of points that affect the curve at any knot value,\r\n * i.e. the size of the \"local support\" set\r\n * * `order=2` is lines (degree 1)\r\n * * `order=3` is quadratic (degree 2)\r\n * * `order=4` is cubic (degree 3)\r\n * * The number of knots follows the convention \"poles+order= knots\".\r\n * * In this convention (for example), a clamped cubic with knots `[0,0,0,0, 1,2,3,4,4,4,4]`\r\n * has:\r\n * * * 4 (`order`) copies of the start and end knot (0 and 4) and\r\n * * * 3 interior knots\r\n * * Hence expect 7 poles.\r\n */\r\n order: number;\r\n /** optional flag for periodic data. */\r\n closed?: boolean;\r\n }\r\n\r\n /**\r\n * Interface for Box (or frustum with all rectangular sections parallel to primary xy section).\r\n * * Orientation may be given in any `AxesProps` way (`yawPitchRollAngles`, `xyVectors`, `zxVectors`).\r\n * * If `topX` or `topY` are omitted, each defaults to its `baseX` or `baseY` peer.\r\n * * If `topOrigin` is given, `height` is unused.\r\n * * If `topOrigin` is omitted and `height` is given, `topOrigin` is computed along the z axis at distance `height`.\r\n * * If both `topOrigin` and `height` are omitted, `height` defaults to `baseX`, and `topOrigin` is computed as above.\r\n * @public\r\n */\r\n export interface BoxProps extends AxesProps {\r\n /** Origin of the box coordinate system (required) */\r\n origin: XYZProps;\r\n /** A previous mismatch existed between native and TypeScript code: TypeScript used \"origin\" where native used \"baseOrigin\".\r\n * Now both native and TypeScript will output both and accept either, preferring \"origin\".\r\n * \"baseOrigin\" is undocumented in TypeScript; it should not be used.\r\n * @internal\r\n */\r\n baseOrigin?: XYZProps;\r\n /** base x size (required) */\r\n baseX: number;\r\n /** base y size.\r\n * * if omitted, baseX is used.\r\n */\r\n baseY?: number;\r\n /** top origin.\r\n * * This is NOT required to be on the z axis.\r\n * * If omitted, it is computed along the z axis at distance `height`.\r\n */\r\n topOrigin?: XYZProps;\r\n /** optional height. This is only used if `topOrigin` is omitted.\r\n * * If omitted, `baseX` is used.\r\n */\r\n height?: number;\r\n /** x size on top section.\r\n * * If omitted, `baseX` is used.\r\n */\r\n topX?: number;\r\n /** y size on top section.\r\n * * If omitted, `baseY` is used.\r\n */\r\n topY?: number;\r\n /** optional capping flag. */\r\n capped?: boolean;\r\n }\r\n\r\n /**\r\n * Interface for a [[Sphere]].\r\n * * Local coordinate frame is supplied by an [[IModelJson.AxesProps]]:\r\n * * Typically this is a `zxVectors`.\r\n * * Skew axes can be specified with `xyzVectors`, in which case any specified radii scale these axes;\r\n * all other AxesProps specify a right-handed orthonormal triad.\r\n * @public\r\n */\r\n export interface SphereProps extends AxesProps {\r\n /** Center of the sphere coordinate system */\r\n center: XYZProps;\r\n\r\n /** primary radius */\r\n radius?: number;\r\n /** optional x radius */\r\n radiusX?: number;\r\n /** optional y radius */\r\n radiusY?: number;\r\n /** optional z radius */\r\n radiusZ?: number;\r\n\r\n /** optional sweep range for latitude. Default latitude limits are [-90,90 ] degrees. */\r\n latitudeStartEnd?: AngleSweepProps;\r\n /** optional capping flag. If missing, implied false */\r\n capped?: boolean;\r\n }\r\n\r\n /**\r\n * Interface for TorusPipe data\r\n * * Orientation may be given in any `AxesProp`s way (yawPitchRoll, xyVectors, zxVectors)\r\n * * Both radii are required.\r\n * * axes are required\r\n * * Axis definition is\r\n * * xy plane contains the major circle\r\n * * x axis points from donut hole center to flow center at start of pipe.\r\n * * z axis points through the hole.\r\n * @public\r\n */\r\n export interface TorusPipeProps extends AxesProps {\r\n /** Center of the full torus coordinate system. (donut hole center) */\r\n center: XYZProps;\r\n\r\n /** primary radius (elbow radius) */\r\n majorRadius: number;\r\n /** pipe radius */\r\n minorRadius: number;\r\n /** sweep angle.\r\n * * if omitted, full 360 degree sweep.\r\n */\r\n sweepAngle?: AngleProps;\r\n /** optional capping flag. If missing, implied false */\r\n capped?: boolean;\r\n }\r\n\r\n /**\r\n * Interface for the analytical data in a channel at a single input value.\r\n * See `AuxChannelData` for further information.\r\n * @public\r\n */\r\n export interface AuxChannelDataProps {\r\n /** The input value for this data. */\r\n input: number;\r\n /** The vertex values for this data. A single value per vertex for scalar and distance types and 3 values (x,y,z) for normal or vector channels. */\r\n values: number[];\r\n }\r\n /**\r\n * Interface for a channel of analytical mesh data.\r\n * See `AuxChannel` for further information.\r\n * @public\r\n */\r\n export interface AuxChannelProps {\r\n /** An array of analytical data at one or more input values. */\r\n data: AuxChannelDataProps[];\r\n /** The type of data stored in this channel. */\r\n dataType: AuxChannelDataType;\r\n /** Optional channel name. */\r\n name?: string;\r\n /** Optional input name. */\r\n inputName?: string;\r\n }\r\n /**\r\n * Interface for analytical mesh data.\r\n * See `PolyfaceAuxData` for further information.\r\n * @public\r\n */\r\n export interface AuxDataProps {\r\n /** Array with one or more channels of auxiliary data. */\r\n channels: AuxChannelProps[];\r\n /** Indices mapping channel data to the mesh facets (must be parallel to mesh indices). */\r\n indices: number[];\r\n }\r\n /**\r\n * Interface for extra data attached to an indexed mesh.\r\n * See `TaggedNumericData` for further information (e.g. value `tagA` and `tagB` values)\r\n * @public\r\n */\r\n export interface TaggedNumericDataProps {\r\n /** integer tag identifying the meaning of this tag. */\r\n tagA: number;\r\n /** Second integer tag. */\r\n tagB: number;\r\n /** application specific integer data */\r\n intData?: number[];\r\n /** application specific doubles */\r\n doubleData?: number[];\r\n }\r\n /**\r\n * Interface for an indexed mesh.\r\n * * IMPORTANT: All indices are one-based.\r\n * * i.e. vertex index given as 11 appears at index 10 in the data array.\r\n * * This is to allow a negated index to mean \"don't draw the following edge\"\r\n * * Although negative indices are not allowed for normalIndex, colorIndex, or paramIndex, the \"one based\" style\r\n * is used for them so that all indices within the indexedMesh json object are handled similarly.\r\n * * In all index arrays, a ZERO indicates \"end of facet\".\r\n * @public\r\n */\r\n export interface IndexedMeshProps {\r\n /** vertex coordinates */\r\n point: [XYZProps];\r\n /** surface normals */\r\n normal?: [XYZProps];\r\n /** texture space (uv parameter) coordinates */\r\n param?: [XYProps];\r\n /** 32 bit color values */\r\n color?: [number];\r\n\r\n /** SIGNED ONE BASED ZERO TERMINATED array of point indices. */\r\n pointIndex: [number];\r\n /** ONE BASED ZERO TERMINATED array of param indices. ZERO is terminator for single facet. */\r\n paramIndex?: [number];\r\n /** ONE BASED ZERO TERMINATED array of normal indices. ZERO is terminator for single facet. */\r\n normalIndex?: [number];\r\n /** ONE BASED ZERO TERMINATED array of color indices. ZERO is terminator for single facet. */\r\n colorIndex?: [number];\r\n\r\n /**\r\n * Optional fixed block size for indices.\r\n * If defined, each facet is represented by `numPerFace` 1-based indices, with appended zeroes if the facet has fewer edges.\r\n * If undefined, mesh indices are 1-based, 0-terminated, variable-sized face loops.\r\n */\r\n numPerFace?: number;\r\n /** Indicates if mesh closure is unknown (0 | undefined), open sheet (1), or closed solid (2). */\r\n expectedClosure?: number;\r\n /**\r\n * The [[PolyfaceData.twoSided]] flag.\r\n */\r\n twoSided?: boolean;\r\n /** Optional analytical data at the vertices of the mesh */\r\n auxData?: AuxDataProps;\r\n /** Optional array of tagged geometry (such as to request subdivision surface) */\r\n tags?: TaggedNumericDataProps;\r\n\r\n /**\r\n * Optional edge -> edgeMate map, parallel to the other index arrays.\r\n * * Each entry is a zero-based index, or -1 face loop terminator, or -2 to indicate \"no edge mate\".\r\n */\r\n edgeMateIndex?: [number];\r\n }\r\n /** parser services for \"iModelJson\" schema\r\n * * 1: create a reader with `new ImodelJsonReader`\r\n * * 2: parse json fragment to strongly typed geometry: `const g = reader.parse (fragment)`\r\n * @public\r\n */\r\n export class Reader {\r\n\r\n public constructor() { // empty ctor\r\n }\r\n\r\n private static parseVector3dProperty(json: any, propertyName: string, defaultValue?: Vector3d | undefined): Vector3d | undefined {\r\n if (json.hasOwnProperty(propertyName)) {\r\n const value = json[propertyName];\r\n if (Geometry.isNumberArray(value, 3))\r\n return Vector3d.create(value[0], value[1], value[2]);\r\n if (Geometry.isNumberArray(value, 2))\r\n return Vector3d.create(value[0], value[1]);\r\n if (XYZ.isXAndY(value))\r\n return Vector3d.fromJSON(value);\r\n }\r\n return defaultValue;\r\n }\r\n\r\n private static parsePoint3dProperty(json: any, propertyName: string, defaultValue?: Point3d | undefined): Point3d | undefined {\r\n if (json.hasOwnProperty(propertyName)) {\r\n const value = json[propertyName];\r\n if (Geometry.isNumberArray(value, 3))\r\n return Point3d.create(value[0], value[1], value[2]);\r\n if (Geometry.isNumberArray(value, 2))\r\n return Point3d.create(value[0], value[1]);\r\n if (XYZ.isXAndY(value))\r\n return Point3d.fromJSON(value);\r\n }\r\n return defaultValue;\r\n }\r\n\r\n private static parseSegment1dProperty(json: any, propertyName: string, defaultValue?: Segment1d | undefined): Segment1d | undefined {\r\n if (json.hasOwnProperty(propertyName)) {\r\n const value = json[propertyName];\r\n if (Geometry.isNumberArray(value, 2))\r\n return Segment1d.create(value[0], value[1]);\r\n }\r\n return defaultValue;\r\n }\r\n\r\n private static parseNumberProperty(json: any, propertyName: string, defaultValue?: number | undefined): number | undefined {\r\n if (json.hasOwnProperty(propertyName)) {\r\n const value = json[propertyName];\r\n if (Number.isFinite(value))\r\n return value as number;\r\n }\r\n return defaultValue;\r\n }\r\n /**\r\n * @internal\r\n */\r\n public static parseTaggedNumericProps(json: any): TaggedNumericData | undefined {\r\n const tagA = this.parseNumberProperty(json, \"tagA\");\r\n const tagB = this.parseNumberProperty(json, \"tagB\", 0);\r\n if (tagA !== undefined) {\r\n const result = new TaggedNumericData(tagA, tagB);\r\n if (json.hasOwnProperty(\"intData\"))\r\n result.intData = this.parseNumberArrayProperty(json, \"intData\", 0, undefined);\r\n if (json.hasOwnProperty(\"doubleData\"))\r\n result.doubleData = this.parseNumberArrayProperty(json, \"doubleData\", 0, undefined);\r\n return result;\r\n }\r\n return undefined;\r\n }\r\n\r\n private static parseNumberArrayProperty(json: any, propertyName: string, minValues: number, maxValues: number | undefined, defaultValue?: number[] | undefined): number[] | undefined {\r\n if (json.hasOwnProperty(propertyName)) {\r\n const value = json[propertyName];\r\n if (Array.isArray(value)\r\n && value.length >= minValues && (undefined === maxValues || value.length <= maxValues)) {\r\n const result = [];\r\n for (const a of value) {\r\n result.push(a);\r\n }\r\n return result;\r\n }\r\n }\r\n return defaultValue;\r\n }\r\n\r\n private static parseAngleProperty(json: any, propertyName: string, defaultValue?: Angle | undefined): Angle | undefined {\r\n if (json.hasOwnProperty(propertyName)) {\r\n const value = json[propertyName];\r\n return Angle.fromJSON(value);\r\n }\r\n return defaultValue;\r\n }\r\n /**\r\n * @param defaultFunction function to call if needed to produce a default value\r\n */\r\n private static parseAngleSweepProps(json: any, propertyName: string, defaultFunction?: () => AngleSweep): AngleSweep | undefined {\r\n if (json.hasOwnProperty(propertyName)) {\r\n const value = json[propertyName];\r\n return AngleSweep.fromJSON(value);\r\n }\r\n if (defaultFunction === undefined)\r\n return undefined;\r\n return defaultFunction();\r\n }\r\n\r\n private static parseBooleanProperty(json: any, propertyName: string, defaultValue?: boolean | undefined): boolean | undefined {\r\n if (json.hasOwnProperty(propertyName)) {\r\n const value = json[propertyName];\r\n if (value === true) return true;\r\n if (value === false) return false;\r\n }\r\n return defaultValue;\r\n }\r\n\r\n private static loadContourArray(json: any, propertyName: string): CurveCollection[] | undefined {\r\n if (json.hasOwnProperty(propertyName)) {\r\n const value = json[propertyName];\r\n if (Array.isArray(value)) {\r\n const result = [];\r\n for (const contourData of value) {\r\n const contour = Reader.parse(contourData);\r\n if (contour instanceof CurveCollection) {\r\n result.push(contour);\r\n }\r\n }\r\n if (result.length > 0)\r\n return result;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n private static parseYawPitchRollAnglesToMatrix3d(json: YawPitchRollProps): Matrix3d | undefined {\r\n const ypr = YawPitchRollAngles.fromJSON(json);\r\n return ypr.toMatrix3d();\r\n }\r\n\r\n private static parseStringProperty(json: any, propertyName: string, defaultValue?: string | undefined): string | undefined {\r\n if (json.hasOwnProperty(propertyName)) {\r\n const value = json[propertyName];\r\n // if (value instanceof string)\r\n return value;\r\n }\r\n return defaultValue;\r\n }\r\n\r\n private static parseAxesFromVectors(json: any, axisOrder: AxisOrder, createDefaultIdentity: boolean): Matrix3d | undefined {\r\n if (Array.isArray(json)) {\r\n let matrix: Matrix3d | undefined;\r\n if (json.length === 2) { // square and normalize\r\n const xVector = Vector3d.fromJSON(json[0]);\r\n const yVector = Vector3d.fromJSON(json[1]);\r\n matrix = Matrix3d.createRigidFromColumns(xVector, yVector, axisOrder);\r\n }\r\n else if (json.length === 3) { // preserve axes\r\n const xVector = Vector3d.fromJSON(json[0]);\r\n const yVector = Vector3d.fromJSON(json[1]);\r\n const zVector = Vector3d.fromJSON(json[2]);\r\n matrix = Matrix3d.createColumnsInAxisOrder(axisOrder, xVector, yVector, zVector);\r\n }\r\n if (matrix)\r\n return matrix;\r\n }\r\n if (createDefaultIdentity)\r\n return Matrix3d.createIdentity();\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Look for orientation data and convert to Matrix3d.\r\n * * Search order and interpretation:\r\n * * * xyzVectors - general matrix, axes preserved\r\n * * * yawPitchRollAngles - right-handed rotation via axial rotations\r\n * * * xyVectors - right-handed rotation, xy-plane specified, axes squared and normalized\r\n * * * zxVectors - right-handed rotation, zx-plane specified, axes squared and normalized\r\n * @param json [in] json source data\r\n * @param createDefaultIdentity [in] If true and no orientation is present, return an identity matrix. If false and no orientation is present, return undefined.\r\n */\r\n private static parseOrientation(json: any, createDefaultIdentity: boolean): Matrix3d | undefined {\r\n if (json.xyzVectors)\r\n return Reader.parseAxesFromVectors(json.xyzVectors, AxisOrder.XYZ, createDefaultIdentity);\r\n if (json.yawPitchRollAngles)\r\n return Reader.parseYawPitchRollAnglesToMatrix3d(json.yawPitchRollAngles);\r\n if (json.xyVectors)\r\n return Reader.parseAxesFromVectors(json.xyVectors, AxisOrder.XYZ, createDefaultIdentity);\r\n if (json.zxVectors)\r\n return Reader.parseAxesFromVectors(json.zxVectors, AxisOrder.ZXY, createDefaultIdentity);\r\n if (createDefaultIdentity)\r\n return Matrix3d.createIdentity();\r\n return undefined;\r\n }\r\n\r\n private static parseArcByVectorProps(data?: ArcByVectorProps): Arc3d | undefined {\r\n if (data\r\n && data.center !== undefined\r\n && data.vectorX !== undefined\r\n && data.vectorY !== undefined\r\n && data.sweepStartEnd !== undefined\r\n ) {\r\n return Arc3d.create(\r\n Point3d.fromJSON(data.center),\r\n Vector3d.fromJSON(data.vectorX),\r\n Vector3d.fromJSON(data.vectorY),\r\n AngleSweep.fromJSON(data.sweepStartEnd));\r\n }\r\n return undefined;\r\n }\r\n // remark: Returns LineString3d as last default when give points are colinear.\r\n private static parseArcBy3Points(data?: ArcByVectorProps): Arc3d | LineString3d | undefined {\r\n if (Array.isArray(data) && data.length > 2) {\r\n const pointA = Point3d.fromJSON(data[0]);\r\n const pointB = Point3d.fromJSON(data[1]);\r\n const pointC = Point3d.fromJSON(data[2]);\r\n return Arc3d.createCircularStartMiddleEnd(pointA, pointB, pointC);\r\n }\r\n return undefined;\r\n }\r\n\r\n private static parseArcObject(data?: ArcByVectorProps): Arc3d | LineString3d | undefined {\r\n let arc: Arc3d | LineString3d | undefined = Reader.parseArcByVectorProps(data);\r\n if (arc)\r\n return arc;\r\n arc = Reader.parseArcBy3Points(data);\r\n return arc; // possibly undefined.\r\n }\r\n /** Parse point content (right side) `[1,2,3]` to a CoordinateXYZ object. */\r\n public static parseCoordinate(data?: any): CoordinateXYZ | undefined {\r\n const point = Point3d.fromJSON(data);\r\n if (point)\r\n return CoordinateXYZ.create(point);\r\n return undefined;\r\n }\r\n /** Parse `transitionSpiral` content (right side) to TransitionSpiral3d. */\r\n public static parseTransitionSpiral(data?: TransitionSpiralProps): TransitionSpiral3d | undefined {\r\n const axes = Reader.parseOrientation(data, true)!;\r\n const origin = Reader.parsePoint3dProperty(data, \"origin\");\r\n // the create method will juggle any 4 out of these 5 inputs to define the other ..\r\n const startBearing = Reader.parseAngleProperty(data, \"startBearing\");\r\n const endBearing = Reader.parseAngleProperty(data, \"endBearing\");\r\n const startRadius = Reader.parseNumberProperty(data, \"startRadius\");\r\n const endRadius = Reader.parseNumberProperty(data, \"endRadius\");\r\n let length = Reader.parseNumberProperty(data, \"length\", undefined);\r\n if (length === undefined)\r\n length = Reader.parseNumberProperty(data, \"curveLength\", undefined);\r\n\r\n let interval = Reader.parseSegment1dProperty(data, \"activeFractionInterval\", undefined);\r\n if (!interval)\r\n interval = Reader.parseSegment1dProperty(data, \"fractionInterval\", undefined);\r\n if (!interval)\r\n interval = Reader.parseSegment1dProperty(data, \"activeInterval\", undefined);\r\n const spiralType = Reader.parseStringProperty(data, \"type\", \"clothoid\")!;\r\n // REMARK: Our job is to parse and pass data along -- inscrutable validation happens in the implementation classes . . .\r\n if (origin) {\r\n let candidate: TransitionSpiral3d | undefined;\r\n candidate = IntegratedSpiral3d.createFrom4OutOf5(\r\n spiralType,\r\n startRadius, endRadius,\r\n startBearing, endBearing,\r\n length,\r\n interval,\r\n Transform.createOriginAndMatrix(origin, axes));\r\n if (candidate)\r\n return candidate;\r\n candidate = DirectSpiral3d.createFromLengthAndRadius(\r\n spiralType,\r\n startRadius, endRadius,\r\n startBearing, endBearing,\r\n length,\r\n interval,\r\n Transform.createOriginAndMatrix(origin, axes));\r\n if (candidate)\r\n return candidate;\r\n }\r\n return undefined;\r\n }\r\n\r\n /** Parse `bcurve` content to BSplineCurve3d or BSplineCurve3dH object. */\r\n public static parseBcurve(data?: any): BSplineCurve3d | BSplineCurve3dH | undefined {\r\n let newCurve: BSplineCurve3d | BSplineCurve3dH | undefined;\r\n let dim: number;\r\n if (data !== undefined\r\n && data.hasOwnProperty(\"knots\") && Array.isArray(data.knots)\r\n && data.hasOwnProperty(\"order\") && Number.isFinite(data.order)\r\n && data.hasOwnProperty(\"points\") && Array.isArray(data.points) && Array.isArray(data.points[0])\r\n && (dim = data.points[0].length) >= 3 && dim <= 4\r\n ) {\r\n const myData = SerializationHelpers.createBSplineCurveData(data.points, dim, data.knots, data.points.length, data.order);\r\n if (data.hasOwnProperty(\"closed\") && true === data.closed)\r\n myData.params.closed = true;\r\n if (SerializationHelpers.Import.prepareBSplineCurveData(myData)) {\r\n if (dim === 3)\r\n newCurve = BSplineCurve3d.create(myData.poles, myData.params.knots, myData.params.order);\r\n else\r\n newCurve = BSplineCurve3dH.create(myData.poles, myData.params.knots, myData.params.order);\r\n if (undefined !== newCurve) {\r\n if (undefined !== myData.params.wrapMode)\r\n newCurve.setWrappable(myData.params.wrapMode);\r\n }\r\n }\r\n }\r\n return newCurve;\r\n }\r\n\r\n /** Parse `interpolationCurve` content to an InterpolationCurve3d object. */\r\n public static parseInterpolationCurve(data?: any): InterpolationCurve3d | undefined {\r\n if (data === undefined)\r\n return undefined;\r\n return InterpolationCurve3d.create(data);\r\n }\r\n\r\n /** Parse `akimaCurve` content to an Akima curve object. */\r\n public static parseAkimaCurve3d(data?: any): AkimaCurve3d | undefined {\r\n if (data === undefined)\r\n return undefined;\r\n return AkimaCurve3d.create(data);\r\n }\r\n\r\n /** Parse array of json objects to array of instances. */\r\n public static parseArray(data?: any): any[] | undefined {\r\n if (Array.isArray(data)) {\r\n const myArray = [];\r\n let c;\r\n for (c of data) {\r\n const g = Reader.parse(c);\r\n if (g !== undefined)\r\n myArray.push(g);\r\n }\r\n return myArray;\r\n }\r\n return undefined;\r\n }\r\n\r\n /** parse polyface aux data content to PolyfaceAuxData instance */\r\n public static parsePolyfaceAuxData(data: any = undefined, numPerFace: number = 0): PolyfaceAuxData | undefined {\r\n\r\n if (!Array.isArray(data.channels) || !Array.isArray(data.indices))\r\n return undefined;\r\n\r\n const outChannels: AuxChannel[] = [];\r\n for (const inChannel of data.channels) {\r\n if (Array.isArray(inChannel.data) && inChannel.hasOwnProperty(\"dataType\")) {\r\n const outChannelData: AuxChannelData[] = [];\r\n for (const inChannelData of inChannel.data) {\r\n if (inChannelData.hasOwnProperty(\"input\") && Array.isArray(inChannelData.values))\r\n outChannelData.push(new AuxChannelData(inChannelData.input, inChannelData.values));\r\n }\r\n outChannels.push(new AuxChannel(outChannelData, inChannel.dataType as AuxChannelDataType, inChannel.name, inChannel.inputName));\r\n }\r\n }\r\n\r\n const auxData = new PolyfaceAuxData(outChannels, []);\r\n SerializationHelpers.announceZeroBasedIndicesFromSignedOneBasedIndices(data.indices, numPerFace, (x: number) => { auxData.indices.push(x); });\r\n\r\n return auxData;\r\n }\r\n\r\n /** parse indexed mesh content to an IndexedPolyface instance */\r\n public static parseIndexedMesh(data?: any): IndexedPolyface | undefined {\r\n // {Coord:[[x,y,z],. . . ], -- simple xyz for each point\r\n // CoordIndex[1,2,3,0] -- zero-terminated, one based !!!\r\n if (data.hasOwnProperty(\"point\") && Array.isArray(data.point)\r\n && data.hasOwnProperty(\"pointIndex\") && Array.isArray(data.pointIndex)) {\r\n const polyface = IndexedPolyface.create();\r\n const numPerFace = data.hasOwnProperty(\"numPerFace\") ? data.numPerFace : 0;\r\n\r\n // default value is true!!\r\n polyface.twoSided = this.parseBooleanProperty(data, \"twoSided\", true) ?? true;\r\n\r\n if (data.hasOwnProperty(\"expectedClosure\")) {\r\n const q = data.expectedClosure;\r\n if (Number.isFinite(q)) {\r\n polyface.expectedClosure = q;\r\n }\r\n }\r\n\r\n if (data.hasOwnProperty(\"normal\") && Array.isArray(data.normal) && data.hasOwnProperty(\"normalIndex\")) {\r\n // For normals, addNormal() is overeager to detect the (common) case of duplicate normals in sequence.\r\n // Use addNormalXYZ which always creates a new one. Likewise for params.\r\n for (const uvw of data.normal) {\r\n if (Geometry.isNumberArray(uvw, 3))\r\n polyface.addNormalXYZ(uvw[0], uvw[1], uvw[2]);\r\n }\r\n SerializationHelpers.announceZeroBasedIndicesFromSignedOneBasedIndices(data.normalIndex, numPerFace,\r\n (x: number) => { polyface.addNormalIndex(x); });\r\n }\r\n if (data.hasOwnProperty(\"param\") && Array.isArray(data.param) && data.hasOwnProperty(\"paramIndex\")) {\r\n for (const uv of data.param) {\r\n if (Geometry.isNumberArray(uv, 2))\r\n polyface.addParamUV(uv[0], uv[1]);\r\n }\r\n SerializationHelpers.announceZeroBasedIndicesFromSignedOneBasedIndices(data.paramIndex, numPerFace,\r\n (x: number) => { polyface.addParamIndex(x); });\r\n }\r\n if (data.hasOwnProperty(\"color\") && Array.isArray(data.color) && data.hasOwnProperty(\"colorIndex\")) {\r\n for (const c of data.color)\r\n polyface.addColor(c);\r\n SerializationHelpers.announceZeroBasedIndicesFromSignedOneBasedIndices(data.colorIndex, numPerFace,\r\n (x: number) => { polyface.addColorIndex(x); });\r\n }\r\n\r\n for (const p of data.point)\r\n polyface.addPointXYZ(p[0], p[1], p[2]);\r\n SerializationHelpers.announceZeroBasedIndicesFromSignedOneBasedIndices(data.pointIndex, numPerFace,\r\n (i: number, v?: boolean) => { polyface.addPointIndex(i, v); },\r\n () => { polyface.terminateFacet(false); });\r\n\r\n if (data.hasOwnProperty(\"edgeMateIndex\") && Array.isArray(data.edgeMateIndex)) {\r\n const edgeMateIndex: Array<number | undefined> = [];\r\n if (SerializationHelpers.announceCompressedZeroBasedReflexiveIndices(data.edgeMateIndex, numPerFace,\r\n SerializationHelpers.EdgeMateIndex.BlockSeparator, SerializationHelpers.EdgeMateIndex.NoEdgeMate,\r\n (i: number | undefined) => edgeMateIndex.push(i),\r\n )) {\r\n polyface.data.edgeMateIndex = edgeMateIndex;\r\n }\r\n }\r\n\r\n if (!polyface.validateAllIndices())\r\n return undefined;\r\n\r\n if (data.hasOwnProperty(\"auxData\"))\r\n polyface.data.auxData = Reader.parsePolyfaceAuxData(data.auxData, numPerFace);\r\n\r\n if (data.hasOwnProperty(\"tags\"))\r\n polyface.data.taggedNumericData = Reader.parseTaggedNumericProps(data.tags);\r\n\r\n // NOTE: faceData is ignored\r\n return polyface;\r\n }\r\n return undefined;\r\n }\r\n /** parse contents of a curve collection to a CurveCollection instance */\r\n public static parseCurveCollectionMembers(result: CurveCollection, data?: any): CurveCollection | undefined {\r\n if (data && Array.isArray(data)) {\r\n for (const c of data) {\r\n const g = Reader.parse(c);\r\n if (g instanceof GeometryQuery && (\"curveCollection\" === g.geometryCategory || \"curvePrimitive\" === g.geometryCategory))\r\n result.tryAddChild(g);\r\n }\r\n return result;\r\n }\r\n return undefined;\r\n }\r\n\r\n /** Parse content of `bsurf` to BSplineSurface3d or BSplineSurface3dH */\r\n public static parseBsurf(data?: any): BSplineSurface3d | BSplineSurface3dH | undefined {\r\n let newSurface: BSplineSurface3d | BSplineSurface3dH | undefined;\r\n let dim: number;\r\n if (data !== undefined\r\n && data.hasOwnProperty(\"uKnots\") && Array.isArray(data.uKnots)\r\n && data.hasOwnProperty(\"vKnots\") && Array.isArray(data.vKnots)\r\n && data.hasOwnProperty(\"orderU\") && Number.isFinite(data.orderU)\r\n && data.hasOwnProperty(\"orderV\") && Number.isFinite(data.orderV)\r\n && data.hasOwnProperty(\"points\") && Array.isArray(data.points) && Array.isArray(data.points[0]) && Array.isArray(data.points[0][0])\r\n && (dim = data.points[0][0].length) >= 3 && dim <= 4\r\n ) {\r\n const myData = SerializationHelpers.createBSplineSurfaceData(data.points, dim, data.uKnots, data.points[0].length, data.orderU, data.vKnots, data.points.length, data.orderV);\r\n if (data.hasOwnProperty(\"closedU\") && true === data.closedU)\r\n myData.uParams.closed = true;\r\n if (data.hasOwnProperty(\"closedV\") && true === data.closedV)\r\n myData.vParams.closed = true;\r\n if (SerializationHelpers.Import.prepareBSplineSurfaceData(myData, { jsonPoles: true })) {\r\n if (dim === 3)\r\n newSurface = BSplineSurface3d.createGrid(myData.poles as number[][][], myData.uParams.order, myData.uParams.knots, myData.vParams.order, myData.vParams.knots);\r\n else\r\n newSurface = BSplineSurface3dH.createGrid(myData.poles as number[][][], WeightStyle.WeightsAlreadyAppliedToCoordinates, myData.uParams.order, myData.uParams.knots, myData.vParams.order, myData.vParams.knots);\r\n if (undefined !== newSurface) {\r\n if (undefined !== myData.uParams.wrapMode)\r\n newSurface.setWrappable(UVSelect.uDirection, myData.uParams.wrapMode);\r\n if (undefined !== myData.vParams.wrapMode)\r\n newSurface.setWrappable(UVSelect.vDirection, myData.vParams.wrapMode);\r\n }\r\n }\r\n }\r\n return newSurface;\r\n }\r\n\r\n /** Parse `cone` contents to `Cone` instance */\r\n public static parseConeProps(json?: ConeProps): Cone | undefined {\r\n const axes = Reader.parseOrientation(json, false);\r\n const start = Reader.parsePoint3dProperty(json, \"start\");\r\n const end = Reader.parsePoint3dProperty(json, \"end\");\r\n const radius = Reader.parseNumberProperty(json, \"radius\");\r\n const startRadius = Reader.parseNumberProperty(json, \"startRadius\", radius);\r\n const endRadius = Reader.parseNumberProperty(json, \"endRadius\", startRadius);\r\n const capped = Reader.parseBooleanProperty(json, \"capped\");\r\n\r\n if (start && end && startRadius !== undefined && endRadius !== undefined) {\r\n if (axes === undefined) {\r\n const axisVector = Vector3d.createStartEnd(start, end);\r\n const frame = Matrix3d.createRigidHeadsUp(axisVector, AxisOrder.ZXY);\r\n const vectorX = frame.columnX();\r\n const vectorY = frame.columnY();\r\n return Cone.createBaseAndTarget(start, end, vectorX, vectorY, startRadius, endRadius, capped);\r\n }\r\n return Cone.createBaseAndTarget(start, end, axes.columnX(), axes.columnY(), startRadius, endRadius, capped);\r\n }\r\n return undefined;\r\n }\r\n\r\n /** Parse `cylinder` content to `Cone` instance */\r\n public static parseCylinderProps(json?: CylinderProps): Cone | undefined {\r\n const start = Reader.parsePoint3dProperty(json, \"start\");\r\n const end = Reader.parsePoint3dProperty(json, \"end\");\r\n const radius = Reader.parseNumberProperty(json, \"radius\");\r\n\r\n const capped = Reader.parseBooleanProperty(json, \"capped\", false) as boolean;\r\n\r\n if (start\r\n && end\r\n && radius !== undefined) {\r\n return Cone.createAxisPoints(start, end, radius, radius, capped);\r\n }\r\n return undefined;\r\n }\r\n /** Parse line segment (array of 2 points) properties to `LineSegment3d` instance */\r\n private static parseLineSegmentProps(value: any[]): LineSegment3d | undefined {\r\n if (Array.isArray(value) && value.length > 1)\r\n return LineSegment3d.create(Point3d.fromJSON(value[0]), Point3d.fromJSON(value[1]));\r\n else\r\n return undefined;\r\n }\r\n /** Parse linear sweep content to `LinearSweep` instance. */\r\n public static parseLinearSweep(json?: any): LinearSweep | undefined {\r\n const contour = Reader.parse(json.contour);\r\n const capped = Reader.parseBooleanProperty(json, \"capped\");\r\n const extrusionVector = Reader.parseVector3dProperty(json, \"vector\");\r\n if (contour instanceof GeometryQuery\r\n && \"curveCollection\" === contour.geometryCategory\r\n && capped !== undefined\r\n && extrusionVector\r\n ) {\r\n return LinearSweep.create(contour, extrusionVector, capped);\r\n }\r\n return undefined;\r\n }\r\n /** Parse rotational sweep contents to `RotationalSweep` instance */\r\n public static parseRotationalSweep(json?: RotationalSweepProps): RotationalSweep | undefined {\r\n if (json === undefined)\r\n return undefined;\r\n const contour = Reader.parse(json.contour);\r\n const capped = Reader.parseBooleanProperty(json, \"capped\");\r\n const axisVector = Reader.parseVector3dProperty(json, \"axis\");\r\n const center = Reader.parsePoint3dProperty(json, \"center\");\r\n const sweepDegrees = Reader.parseNumberProperty(json, \"sweepAngle\");\r\n if (contour instanceof GeometryQuery\r\n && \"curveCollection\" === contour.geometryCategory\r\n && sweepDegrees !== undefined\r\n && capped !== undefined\r\n && axisVector\r\n && center\r\n ) {\r\n return RotationalSweep.create(\r\n contour,\r\n Ray3d.createCapture(center, axisVector),\r\n Angle.createDegrees(sweepDegrees),\r\n capped);\r\n }\r\n return undefined;\r\n }\r\n /** Parse box contents to `Box` instance */\r\n public static parseBox(json?: BoxProps): Box | undefined {\r\n const capped = Reader.parseBooleanProperty(json, \"capped\", false);\r\n\r\n // A mismatch between native and TypeScript code: TypeScript used \"origin\" where native used \"baseOrigin\".\r\n // Native now outputs and accepts either, preferring \"origin\"; TypeScript continues to expose only \"origin\".\r\n const origin = Reader.parsePoint3dProperty(json, \"origin\") ?? Reader.parsePoint3dProperty(json, \"baseOrigin\");\r\n const baseX = Reader.parseNumberProperty(json, \"baseX\");\r\n const baseY = Reader.parseNumberProperty(json, \"baseY\", baseX);\r\n let topOrigin = Reader.parsePoint3dProperty(json, \"topOrigin\");\r\n const topX = Reader.parseNumberProperty(json, \"topX\", baseX);\r\n const topY = Reader.parseNumberProperty(json, \"topY\", baseY);\r\n const height = Reader.parseNumberProperty(json, \"height\", baseX);\r\n const axes = Reader.parseOrientation(json, true)!;\r\n\r\n if (origin && !topOrigin && height)\r\n topOrigin = Matrix3d.xyzPlusMatrixTimesXYZ(origin, axes, Vector3d.create(0, 0, height));\r\n\r\n if (capped !== undefined\r\n && baseX !== undefined\r\n && baseY !== undefined\r\n && topY !== undefined\r\n && topX !== undefined\r\n && axes\r\n && origin\r\n && topOrigin\r\n ) {\r\n return Box.createDgnBoxWithAxes(origin, axes, topOrigin, baseX, baseY, topX, topY, capped);\r\n }\r\n return undefined;\r\n }\r\n\r\n /** Parse `SphereProps` to `Sphere` instance. */\r\n public static parseSphere(json?: SphereProps): Sphere | undefined {\r\n const center = Reader.parsePoint3dProperty(json, \"center\");\r\n const radius = Reader.parseNumberProperty(json, \"radius\");\r\n const radiusX = Reader.parseNumberProperty(json, \"radiusX\", radius);\r\n const radiusY = Reader.parseNumberProperty(json, \"radiusY\", radiusX);\r\n const radiusZ = Reader.parseNumberProperty(json, \"radiusZ\", radiusY);\r\n const latitudeStartEnd = Reader.parseAngleSweepProps(json, \"latitudeStartEnd\");\r\n const axes = Reader.parseOrientation(json, false);\r\n const capped = Reader.parseBooleanProperty(json, \"capped\");\r\n\r\n if (center && radiusX && radiusY && radiusZ)\r\n return Sphere.createFromAxesAndScales(center, axes, radiusX, radiusY, radiusZ, latitudeStartEnd, capped);\r\n\r\n return undefined;\r\n }\r\n /** Parse RuledSweepProps to RuledSweep instance. */\r\n public static parseRuledSweep(json?: RuledSweepProps): RuledSweep | undefined {\r\n const capped = Reader.parseBooleanProperty(json, \"capped\", false);\r\n const contours = this.loadContourArray(json, \"contour\");\r\n if (contours !== undefined\r\n && capped !== undefined) {\r\n return RuledSweep.create(contours, capped);\r\n }\r\n return undefined;\r\n }\r\n /** Parse TorusPipe props to TorusPipe instance. */\r\n public static parseTorusPipe(json?: TorusPipeProps): TorusPipe | undefined {\r\n const axes = Reader.parseOrientation(json, true)!; // force frame to be pure rotation (no scale or mirror)!\r\n const center = Reader.parsePoint3dProperty(json, \"center\");\r\n const radiusA = Reader.parseNumberProperty(json, \"majorRadius\");\r\n const radiusB = Reader.parseNumberProperty(json, \"minorRadius\");\r\n const sweepAngle = Reader.parseAngleProperty(json, \"sweepAngle\", undefined);\r\n const capped = Reader.parseBooleanProperty(json, \"capped\", false)!;\r\n if (center\r\n && radiusA !== undefined\r\n && radiusB !== undefined) {\r\n return TorusPipe.createDgnTorusPipe(center, axes.columnX(), axes.columnY(),\r\n radiusA, radiusB,\r\n sweepAngle ? sweepAngle : Angle.createDegrees(360), capped);\r\n }\r\n return undefined;\r\n }\r\n /** Parse an array object to array of Point3d instances. */\r\n public static parsePointArray(json?: any[]): Point3d[] {\r\n const points = [];\r\n if (json && Array.isArray(json)) {\r\n for (const member of json) {\r\n if (XYZ.isXAndY(member)) {\r\n points.push(Point3d.fromJSON(member));\r\n } else if (Geometry.isNumberArray(member, 2)) {\r\n points.push(Point3d.fromJSON(member));\r\n }\r\n }\r\n }\r\n return points;\r\n }\r\n /** Deserialize `json` to `GeometryQuery` instances. */\r\n public static parse(json?: any): AnyGeometryQuery | any[] | undefined {\r\n if (json !== undefined && json as object) {\r\n if (json.lineSegment !== undefined) {\r\n return Reader.parseLineSegmentProps(json.lineSegment);\r\n } else if (json.lineString !== undefined) {\r\n return LineString3d.create(Reader.parsePointArray(json.lineString));\r\n } else if (json.arc !== undefined) {\r\n return Reader.parseArcObject(json.arc);\r\n } else if (json.hasOwnProperty(\"point\")) {\r\n return Reader.parseCoordinate(json.point);\r\n } else if (json.hasOwnProperty(\"bcurve\")) {\r\n return Reader.parseBcurve(json.bcurve);\r\n } else if (json.hasOwnProperty(\"interpolationCurve\")) {\r\n return Reader.parseInterpolationCurve(json.interpolationCurve);\r\n } else if (json.hasOwnProperty(\"akimaCurve\")) {\r\n return Reader.parseAkimaCurve3d(json.akimaCurve);\r\n } else if (json.hasOwnProperty(\"path\")) {\r\n return Reader.parseCurveCollectionMembers(new Path(), json.path);\r\n } else if (json.hasOwnProperty(\"loop\")) {\r\n return Reader.parseCurveCollectionMembers(new Loop(), json.loop);\r\n } else if (json.hasOwnProperty(\"parityRegion\")) {\r\n return Reader.parseCurveCollectionMembers(new ParityRegion(), json.parityRegion);\r\n } else if (json.hasOwnProperty(\"unionRegion\")) {\r\n return Reader.parseCurveCollectionMembers(new UnionRegion(), json.unionRegion);\r\n } else if (json.hasOwnProperty(\"bagOfCurves\")) {\r\n return Reader.parseCurveCollectionMembers(new BagOfCurves(), json.bagOfCurves);\r\n } else if (json.hasOwnProperty(\"indexedMesh\")) {\r\n return Reader.parseIndexedMesh(json.indexedMesh);\r\n } else if (json.hasOwnProperty(\"bsurf\")) {\r\n return Reader.parseBsurf(json.bsurf);\r\n } else if (json.hasOwnProperty(\"cone\")) {\r\n return Reader.parseConeProps(json.cone);\r\n } else if (json.hasOwnProperty(\"cylinder\")) {\r\n return Reader.parseCylinderProps(json.cylinder);\r\n } else if (json.hasOwnProperty(\"sphere\")) {\r\n return Reader.parseSphere(json.sphere);\r\n } else if (json.hasOwnProperty(\"linearSweep\")) {\r\n return Reader.parseLinearSweep(json.linearSweep);\r\n } else if (json.hasOwnProperty(\"box\")) {\r\n return Reader.parseBox(json.box);\r\n } else if (json.hasOwnProperty(\"rotationalSweep\")) {\r\n return Reader.parseRotationalSweep(json.rotationalSweep);\r\n } else if (json.hasOwnProperty(\"ruledSweep\")) {\r\n return Reader.parseRuledSweep(json.ruledSweep);\r\n } else if (json.hasOwnProperty(\"torusPipe\")) {\r\n return Reader.parseTorusPipe(json.torusPipe);\r\n } else if (json.hasOwnProperty(\"pointString\")) {\r\n return PointString3d.create(Reader.parsePointArray(json.pointString));\r\n } else if (json.hasOwnProperty(\"transitionSpiral\")) {\r\n return Reader.parseTransitionSpiral(json.transitionSpiral);\r\n } else if (Array.isArray(json))\r\n return Reader.parseArray(json);\r\n }\r\n return undefined;\r\n }\r\n }\r\n\r\n /**\r\n * Class to deserialize json objects into GeometryQuery objects\r\n * @public\r\n */\r\n export class Writer extends GeometryHandler {\r\n\r\n public handleTaggedNumericData(data: TaggedNumericData): TaggedNumericDataProps {\r\n const result: TaggedNumericDataProps = { tagA: data.tagA, tagB: data.tagB };\r\n if (data.intData !== undefined && data.intData.length > 0)\r\n result.intData = data.intData.slice();\r\n if (data.doubleData !== undefined && data.doubleData.length > 0)\r\n result.doubleData = data.doubleData.slice();\r\n return result;\r\n }\r\n /** Convert strongly typed instance to tagged json */\r\n public handleLineSegment3d(data: LineSegment3d): any {\r\n return { lineSegment: [data.point0Ref.toJSON(), data.point1Ref.toJSON()] };\r\n }\r\n /** Convert strongly typed instance to tagged json */\r\n public handleCoordinateXYZ(data: CoordinateXYZ): any {\r\n return { point: data.point.toJSON() };\r\n }\r\n\r\n /** Convert strongly typed instance to tagged json */\r\n public handleArc3d(data: Arc3d): any {\r\n return {\r\n arc: {\r\n center: data.center.toJSON(),\r\n vectorX: data.vector0.toJSON(),\r\n vectorY: data.vector90.toJSON(),\r\n sweepStartEnd: [data.sweep.startDegrees, data.sweep.endDegrees],\r\n },\r\n };\r\n }\r\n /**\r\n * Insert orientation description to a data object.\r\n * @param matrix matrix with orientation\r\n * @param omitIfIdentity omit the axis data if the matrix is an identity.\r\n * @param data AxesProps object to be annotated.\r\n */\r\n private static insertOrientationFromMatrix(data: AxesProps, matrix: Matrix3d | undefined, omitIfIdentity: boolean) {\r\n if (omitIfIdentity) {\r\n if (matrix === undefined)\r\n return;\r\n if (matrix.isIdentity)\r\n return;\r\n }\r\n if (matrix)\r\n data.xyVectors = [matrix.columnX().toJSON(), matrix.columnY().toJSON()];\r\n else\r\n data.xyVectors = [[1, 0, 0], [0, 1, 0]];\r\n }\r\n private static isIdentityXY(xVector: Vector3d, yVector: Vector3d): boolean {\r\n return xVector.isAlmostEqualXYZ(1, 0, 0) && yVector.isAlmostEqualXYZ(0, 1, 0);\r\n }\r\n\r\n /**\r\n * Insert orientation description to a data object.\r\n * @param matrix matrix with orientation\r\n * @param omitIfIdentity omit the axis data if the matrix is an identity.\r\n * @param data AxesProps object to be annotated.\r\n */\r\n private static insertOrientationFromXYVectors(data: AxesProps, vectorX: Vector3d, vectorY: Vector3d, omitIfIdentity: boolean) {\r\n if (omitIfIdentity && Writer.isIdentityXY(vectorX, vectorY))\r\n return;\r\n data.xyVectors = [vectorX.toJSON(), vectorY.toJSON()];\r\n }\r\n\r\n /**\r\n * Insert orientation description to a data object, with orientation defined by u and v direction\r\n * vectors.\r\n * @param vectorX u direction\r\n * @param vectorV v direction\r\n * @param omitIfIdentity omit the axis data if the vectorU and vectorV are global x and y vectors.\r\n * @param data AxesProps object to be annotated.\r\n */\r\n private static insertXYOrientation(data: AxesProps, vectorU: Vector3d, vectorV: Vector3d, omitIfIdentity: boolean) {\r\n if (omitIfIdentity) {\r\n if (vectorU.isAlmostEqualXYZ(1, 0, 0) && vectorV.isAlmostEqualXYZ(0, 1, 0))\r\n return;\r\n }\r\n data.xyVectors = [vectorU.toJSON(), vectorV.toJSON()];\r\n }\r\n /** Parse properties of a TransitionSpiral. */\r\n public handleTransitionSpiral(data: TransitionSpiral3d): any {\r\n // TODO: HANDLE NONRIGID TRANSFORM !!\r\n // the spiral may have indication of how it was defined. If so, use defined/undefined state of the original data\r\n // as indication of what current data to use. (Current data may have changed due to transforms.)\r\n if (data instanceof DirectSpiral3d) {\r\n const value: TransitionSpiralProps = {\r\n origin: data.localToWorld.origin.toJSON(),\r\n type: data.spiralType,\r\n };\r\n Writer.insertOrientationFromMatrix(value, data.localToWorld.matrix, true);\r\n\r\n if (!data.activeFractionInterval.isExact01)\r\n value.activeFractionInterval = [data.activeFractionInterval.x0, data.activeFractionInterval.x1];\r\n // Object.defineProperty(value, \"fractionInterval\", { value: [data.activeFractionInterval.x0, data.activeFractionInterval.x1] });\r\n value.startRadius = 0;\r\n value.endRadius = data.nominalR1;\r\n value.length = data.nominalL1;\r\n return { transitionSpiral: value };\r\n\r\n } else if (data instanceof IntegratedSpiral3d) {\r\n // TODO: HANDLE NONRIGID TRANSFORM !!\r\n // the spiral may have indication of how it was defined. If so, use defined/undefined state of the original data\r\n // as indication of what current data to use. (Current data may have changed due to transforms.)\r\n const originalProperties = data.designProperties;\r\n\r\n const value: TransitionSpiralProps = {\r\n origin: data.localToWorld.origin.toJSON(),\r\n type: data.spiralType,\r\n };\r\n Writer.insertOrientationFromMatrix(value, data.localToWorld.matrix, true);\r\n\r\n if (!data.activeFractionInterval.isExact01)\r\n value.activeFractionInterval = [data.activeFractionInterval.x0, data.activeFractionInterval.x1];\r\n // Object.defineProperty(value, \"fractionInterval\", { value: [data.activeFractionInterval.x0, data.activeFractionInterval.x1] });\r\n\r\n // if possible, do selective output of defining data (omit exactly one out of the 5, matching original definition)\r\n // EXCEPT do not omit final radius .. readers want it?\r\n if (originalProperties !== undefined && originalProperties.numDefinedProperties() === 4) {\r\n if (originalProperties.radius0 !== undefined)\r\n value.startRadius = data.radius01.x0;\r\n if (originalProperties.radius1 !== undefined)\r\n value.endRadius = data.radius01.x1;\r\n if (originalProperties.bearing0 !== undefined)\r\n value.startBearing = data.bearing01.startAngle.toJSON();\r\n if (originalProperties.bearing1 !== undefined)\r\n value.endBearing = data.bearing01.endAngle.toJSON();\r\n if (originalProperties.curveLength !== undefined)\r\n value.length = data.curveLength();\r\n if (value.endRadius === undefined)\r\n value.endRadius = data.radius01.x1;\r\n } else {\r\n // uh oh ... no original data, but the spiral itself knows all 5 values. We don't know which to consider primary.\r\n // DECISION -- put everything out, let readers make sense if they can. (It should be consistent ?)\r\n value.startRadius = data.radius01.x0;\r\n value.endRadius = data.radius01.x1;\r\n value.startBearing = data.bearing01.startAngle.toJSON();\r\n value.endBearing = data.bearing01.endAngle.toJSON();\r\n value.length = data.curveLength();\r\n }\r\n return { transitionSpiral: value };\r\n }\r\n return undefined;\r\n }\r\n\r\n /** Convert strongly typed instance to tagged json */\r\n public handleCone(data: Cone): any {\r\n const radiusA = data.getRadiusA();\r\n const radiusB = data.getRadiusB();\r\n const centerA = data.getCenterA();\r\n const centerB = data.getCenterB();\r\n const vectorX = data.getVectorX();\r\n const vectorY = data.getVectorY();\r\n const xMag = vectorX.magnitude();\r\n const yMag = vectorY.magnitude();\r\n const xySameLength = Geometry.isSameCoordinate(xMag, yMag);\r\n const axisVector = Vector3d.createStartEnd(centerA, centerB);\r\n\r\n // special case of cylinder\r\n if (Geometry.isSameCoordinate(radiusA, radiusB)\r\n && vectorX.isPerpendicularTo(axisVector)\r\n && vectorY.isPerpendicularTo(axisVector)\r\n && xySameLength\r\n && Geometry.isSameCoordinate(xMag, 1.0)) {\r\n return {\r\n cylinder: {\r\n capped: data.capped,\r\n start: centerA.toJSON(),\r\n end: centerB.toJSON(),\r\n radius: radiusA,\r\n },\r\n };\r\n }\r\n\r\n const coneProps: ConeProps = {\r\n capped: data.capped,\r\n start: centerA.toJSON(),\r\n end: centerB.toJSON(),\r\n };\r\n\r\n if (Geometry.isSameCoordinate(radiusA, radiusB)) {\r\n coneProps.radius = radiusA;\r\n } else {\r\n coneProps.startRadius = radiusA;\r\n coneProps.endRadius = radiusB;\r\n }\r\n\r\n // always specify an orthogonal frame for backwards compatibility\r\n Writer.insertOrientationFromXYVectors(coneProps, vectorX, vectorY, false);\r\n\r\n // specify a general matrix if elliptical sections\r\n const ellipticalSections = !xySameLength || !vectorX.isPerpendicularTo(vectorY, true);\r\n if (ellipticalSections)\r\n coneProps.xyzVectors = [vectorX.toJSON(), vectorY.toJSON(), axisVector.toJSON()];\r\n\r\n return { cone: coneProps };\r\n }\r\n\r\n /** Convert strongly typed instance to tagged json */\r\n public handleSphere(data: Sphere): any {\r\n const xData = data.cloneVectorX().normalizeWithLength();\r\n const yData = data.cloneVectorY().normalizeWithLength();\r\n const zData = data.cloneVectorZ().normalizeWithLength();\r\n if (!xData.v || !yData.v || !zData.v)\r\n return undefined;\r\n\r\n const rigid = Matrix3d.createIdentity();\r\n const skew = Matrix3d.createIdentity();\r\n if (!data.cloneLocalToWorld().matrix.factorRigidSkew(rigid, skew))\r\n return undefined;\r\n\r\n const value: SphereProps = { center: data.cloneCenter().toJSON() };\r\n\r\n // always specify an orthogonal frame if !identity for backwards compatibility\r\n if (!rigid.isIdentity)\r\n value.zxVectors = [zData.v.toJSON(), xData.v.toJSON()];\r\n\r\n // specify a general matrix if skew/mirror local frame\r\n if (!skew.isDiagonal || skew.determinant() < 0.0)\r\n value.xyzVectors = [xData.v.toJSON(), yData.v.toJSON(), zData.v.toJSON()];\r\n\r\n const latitudeSweep = data.cloneLatitudeSweep();\r\n const fullSweep = latitudeSweep.isFullLatitudeSweep;\r\n if (data.capped && !fullSweep)\r\n value.capped = data.capped;\r\n if (!fullSweep)\r\n value.latitudeStartEnd = latitudeSweep.toJSON();\r\n\r\n const rX = xData.mag;\r\n const rY = yData.mag;\r\n const rZ = zData.mag;\r\n if (Geometry.isSameCoordinate(rX, rY)) {\r\n if (Geometry.isSameCoordinate(rX, rZ))\r\n value.radius = rX;\r\n else { // radiusY will pick up radiusX\r\n value.radiusX = rX;\r\n value.radiusZ = rZ;\r\n }\r\n } else {\r\n value.radiusX = rX;\r\n value.radiusY = rY;\r\n value.radiusZ = rZ;\r\n }\r\n return { sphere: value };\r\n }\r\n\r\n /** Convert strongly typed instance to tagged json */\r\n public handleTorusPipe(data: TorusPipe): any {\r\n const vectorX = data.cloneVectorX();\r\n const vectorY = data.cloneVectorY();\r\n const radiusA = data.getMajorRadius();\r\n const radiusB = data.getMinorRadius();\r\n const sweep = data.getSweepAngle();\r\n if (data.getIsReversed()) {\r\n // the TorusPipe was created with negative sweep that was forced positive; restore original values\r\n vectorY.scaleInPlace(-1.0);\r\n sweep.setRadians(-sweep.radians);\r\n }\r\n const value: TorusPipeProps = {\r\n center: data.cloneCenter().toJSON(),\r\n majorRadius: radiusA,\r\n minorRadius: radiusB,\r\n xyVectors: [vectorX.toJSON(), vectorY.toJSON()],\r\n };\r\n if (!sweep.isFullCircle) {\r\n value.sweepAngle = sweep.degrees;\r\n value.capped = data.capped;\r\n }\r\n return { torusPipe: value };\r\n }\r\n\r\n /** Convert strongly typed instance to tagged json */\r\n public handleLineString3d(data: LineString3d): any {\r\n const pointsA = data.points;\r\n const pointsB = [];\r\n if (pointsA)\r\n for (const p of pointsA) pointsB.push(p.toJSON());\r\n return { lineString: pointsB };\r\n }\r\n\r\n /** Convert strongly typed instance to tagged json */\r\n public handlePointString3d(data: PointString3d): any {\r\n const pointsA = data.points;\r\n const pointsB = [];\r\n if (pointsA)\r\n for (const p of pointsA) pointsB.push(p.toJSON());\r\n return { pointString: pointsB };\r\n }\r\n\r\n /** Convert strongly typed instance to tagged json */\r\n public override handlePath(data: Path): any {\r\n return { path: this.collectChildren(data) };\r\n }\r\n /** Convert strongly typed instance to tagged json */\r\n public override handleLoop(data: Loop): any {\r\n return { loop: this.collectChildren(data) };\r\n }\r\n\r\n /** Convert strongly typed instance to tagged json */\r\n public override handleParityRegion(data: ParityRegion): any {\r\n return { parityRegion: this.collectChildren(data) };\r\n }\r\n\r\n /** Convert strongly typed instance to tagged json */\r\n public override handleUnionRegion(data: UnionRegion): any {\r\n return { unionRegion: this.collectChildren(data) };\r\n }\r\n\r\n /** Convert strongly typed instance to tagged json */\r\n public override handleBagOfCurves(data: BagOfCurves): any {\r\n return { bagOfCurves: this.collectChildren(data) };\r\n }\r\n\r\n private collectChildren(data: CurveCollection): any[] {\r\n const children = [];\r\n if (data.children && Array.isArray(data.children)) {\r\n for (const child of data.children) {\r\n const cdata = child.dispatchToGeometryHandler(this);\r\n if (cdata)\r\n children.push(cdata);\r\n }\r\n }\r\n return children;\r\n }\r\n\r\n /** Convert strongly typed instance to tagged json */\r\n public handleLinearSweep(data: LinearSweep): any {\r\n const extrusionVector = data.cloneSweepVector();\r\n const curves = data.getCurvesRef();\r\n const capped = data.capped;\r\n if (extrusionVector\r\n && curves\r\n && capped !== undefined) {\r\n return {\r\n linearSweep: {\r\n contour: curves.dispatchToGeometryHandler(this),\r\n capped,\r\n vector: extrusionVector.toJSON(),\r\n },\r\n };\r\n }\r\n return undefined;\r\n }\r\n\r\n /** Convert strongly typed instance to tagged json */\r\n public handleRuledSweep(data: RuledSweep): any {\r\n const contours = data.cloneContours();\r\n const capped = data.capped;\r\n if (contours\r\n && contours.length > 1\r\n && capped !== undefined) {\r\n const jsonContours = [];\r\n for (const c of contours) {\r\n jsonContours.push(this.emit(c));\r\n }\r\n return {\r\n ruledSweep: {\r\n contour: jsonContours,\r\n capped,\r\n },\r\n };\r\n }\r\n return undefined;\r\n }\r\n\r\n /** Convert strongly typed instance to tagged json */\r\n public handleRotationalSweep(data: RotationalSweep): any {\r\n const axisRay = data.cloneAxisRay();\r\n const curves = data.getCurves();\r\n const capped = data.capped;\r\n const sweepAngle = data.getSweep();\r\n return {\r\n rotationalSweep: {\r\n axis: axisRay.direction.toJSON(),\r\n contour: curves.dispatchToGeometryHandler(this),\r\n capped,\r\n center: axisRay.origin.toJSON(),\r\n sweepAngle: sweepAngle.degrees,\r\n },\r\n };\r\n }\r\n\r\n /** Convert strongly typed instance to tagged json */\r\n public handleBox(box: Box): any {\r\n const out: SolidPrimitiveProps = {\r\n box: {\r\n origin: box.getBaseOrigin().toJSON(),\r\n baseOrigin: box.getBaseOrigin().toJSON(),\r\n baseX: box.getBaseX(),\r\n baseY: box.getBaseY(),\r\n capped: box.capped,\r\n topOrigin: box.getTopOrigin().toJSON(),\r\n },\r\n };\r\n\r\n const outBox = out.box!;\r\n Writer.insertXYOrientation(outBox, box.getVectorX(), box.getVectorY(), true);\r\n if (!Geometry.isSameCoordinate(box.getTopX(), box.getBaseX()))\r\n outBox.topX = box.getTopX();\r\n if (!Geometry.isSameCoordinate(box.getTopY(), box.getBaseY()))\r\n outBox.topY = box.getTopY();\r\n\r\n return out;\r\n }\r\n\r\n private handlePolyfaceAuxData(auxData: PolyfaceAuxData, pf: IndexedPolyface): AuxDataProps {\r\n assert(auxData === pf.data.auxData);\r\n const contents: AuxDataProps = { indices: [], channels: [] };\r\n const visitor = pf.createVisitor(0);\r\n while (visitor.moveToNextFacet()) {\r\n for (let i = 0; i < visitor.indexCount; i++)\r\n contents.indices.push(visitor.auxData!.indices[i] + 1);\r\n contents.indices.push(0); // facet terminator.\r\n }\r\n for (const inChannel of auxData.channels) {\r\n const outChannel: AuxChannelProps = { data: [], dataType: inChannel.dataType, name: inChannel.name, inputName: inChannel.inputName };\r\n for (const inData of inChannel.data) {\r\n const outData: AuxChannelDataProps = { input: inData.input, values: inData.values.slice(0) };\r\n outChannel.data.push(outData);\r\n }\r\n contents.channels.push(outChannel);\r\n }\r\n return contents;\r\n }\r\n\r\n /** Convert strongly typed instance to tagged json */\r\n public handleIndexedPolyface(pf: IndexedPolyface): any {\r\n const points = [];\r\n const pointIndex: number[] = [];\r\n const normals = [];\r\n const params = [];\r\n const colors = [];\r\n {\r\n const p = Point3d.create();\r\n for (let i = 0; pf.data.point.getPoint3dAtCheckedPointIndex(i, p); i++)\r\n points.push(p.toJSON());\r\n }\r\n if (pf.data.normal) {\r\n const numNormal = pf.data.normal.length;\r\n const normal = Vector3d.create();\r\n for (let i = 0; i < numNormal; i++) {\r\n pf.data.normal.getVector3dAtCheckedVectorIndex(i, normal);\r\n normals.push(normal.toJSON());\r\n }\r\n\r\n }\r\n\r\n if (pf.data.param) {\r\n const uv = Point2d.create();\r\n for (let i = 0; pf.data.param.getPoint2dAtCheckedPointIndex(i, uv); i++)\r\n params.push(uv.toJSON());\r\n }\r\n\r\n if (pf.data.color) {\r\n for (const value of pf.data.color) colors.push(value);\r\n }\r\n\r\n const visitor = pf.createVisitor(0);\r\n let indexCounter = 0;\r\n\r\n const normalIndex: number[] = [];\r\n const paramIndex: number[] = [];\r\n const colorIndex: number[] = [];\r\n let n;\r\n while (visitor.moveToNextFacet()) {\r\n n = visitor.indexCount;\r\n // All meshes have point and point index ...\r\n for (let i = 0; i < n; i++) {\r\n // Change sign of value to be pushed based on whether or not the edge was originally visible or not\r\n const toPush = pf.data.edgeVisible[indexCounter + i] ? visitor.pointIndex[i] + 1 : - (visitor.clientPointIndex(i) + 1);\r\n pointIndex.push(toPush);\r\n }\r\n pointIndex.push(0); // facet terminator.\r\n indexCounter += visitor.indexCount;\r\n\r\n if (visitor.normalIndex) {\r\n for (let i = 0; i < n; i++) normalIndex.push(1 + visitor.clientNormalIndex(i));\r\n normalIndex.push(0);\r\n }\r\n if (visitor.paramIndex) {\r\n for (let i = 0; i < n; i++) paramIndex.push(1 + visitor.clientParamIndex(i));\r\n paramIndex.push(0);\r\n }\r\n if (visitor.colorIndex) {\r\n for (let i = 0; i < n; i++) colorIndex.push(1 + visitor.clientColorIndex(i));\r\n colorIndex.push(0);\r\n }\r\n }\r\n\r\n let taggedNumericData;\r\n if (pf.data.taggedNumericData) {\r\n taggedNumericData = this.handleTaggedNumericData(pf.data.taggedNumericData);\r\n }\r\n\r\n let edgeMateIndex: number[] | undefined;\r\n if (pf.data.edgeMateIndex) {\r\n edgeMateIndex = [];\r\n if (!SerializationHelpers.announceUncompressedZeroBasedReflexiveIndices(pf.data.edgeMateIndex, pf.facetStart,\r\n SerializationHelpers.EdgeMateIndex.BlockSeparator, SerializationHelpers.EdgeMateIndex.NoEdgeMate,\r\n (i: number) => edgeMateIndex!.push(i),\r\n )) {\r\n edgeMateIndex = undefined;\r\n }\r\n }\r\n\r\n const contents: { [k: string]: any } = {};\r\n\r\n if (pf.expectedClosure !== 0)\r\n contents.expectedClosure = pf.expectedClosure;\r\n\r\n contents.twoSided = pf.twoSided;\r\n\r\n if (pf.data.auxData)\r\n contents.auxData = this.handlePolyfaceAuxData(pf.data.auxData, pf);\r\n\r\n if (pf.data.color)\r\n contents.color = colors;\r\n if (pf.data.colorIndex)\r\n contents.colorIndex = colorIndex;\r\n\r\n if (pf.data.normal)\r\n contents.normal = normals;\r\n if (pf.data.normalIndex)\r\n contents.normalIndex = normalIndex;\r\n\r\n if (pf.data.param)\r\n contents.param = params;\r\n if (pf.data.paramIndex)\r\n contents.paramIndex = paramIndex;\r\n\r\n contents.point = points;\r\n contents.pointIndex = pointIndex;\r\n\r\n if (taggedNumericData)\r\n contents.tags = taggedNumericData;\r\n\r\n if (pf.data.edgeMateIndex)\r\n contents.edgeMateIndex = edgeMateIndex;\r\n\r\n // NOTE: pf.data.face is not persistent\r\n return { indexedMesh: contents };\r\n }\r\n\r\n private handleBSplineCurve(curve: BSplineCurve3d | BSplineCurve3dH): any {\r\n const data = SerializationHelpers.createBSplineCurveData(curve.polesRef, curve.poleDimension, curve.knotsRef, curve.numPoles, curve.order);\r\n\r\n const wrapMode = curve.getWrappable();\r\n if (BSplineWrapMode.None !== wrapMode)\r\n data.params.wrapMode = wrapMode;\r\n\r\n if (!SerializationHelpers.Export.prepareBSplineCurveData(data, { jsonPoles: true, jsonKnots: true }))\r\n return undefined;\r\n\r\n return {\r\n bcurve: {\r\n points: data.poles as number[][],\r\n knots: data.params.knots as number[],\r\n order: data.params.order,\r\n closed: data.params.closed ? true : undefined,\r\n },\r\n };\r\n }\r\n\r\n /** Convert strongly typed instance to tagged json */\r\n public handleBSplineCurve3d(curve: BSplineCurve3d): any {\r\n return this.handleBSplineCurve(curve);\r\n }\r\n\r\n /** Convert strongly typed instance to tagged json */\r\n public handleInterpolationCurve3d(curve: InterpolationCurve3d): any {\r\n const props = curve.cloneProps();\r\n BSplineCurveOps.C2CubicFit.convertToJsonKnots(props);\r\n return { interpolationCurve: props };\r\n }\r\n\r\n /** Convert strongly typed instance to tagged json */\r\n public handleAkimaCurve3d(curve: AkimaCurve3d): any {\r\n return { akimaCurve: curve.cloneProps() };\r\n }\r\n\r\n /** Convert strongly typed instance to tagged json */\r\n public handleBezierCurve3d(curve: BezierCurve3d): any {\r\n const knots = [];\r\n const order = curve.order;\r\n for (let i = 0; i < order; i++) knots.push(0.0);\r\n for (let i = 0; i < order; i++) knots.push(1.0);\r\n return {\r\n bcurve: {\r\n points: curve.copyPolesAsJsonArray(),\r\n knots,\r\n order: curve.order,\r\n },\r\n };\r\n }\r\n\r\n /** Convert strongly typed instance to tagged json */\r\n public handleBSplineCurve3dH(curve: BSplineCurve3dH): any {\r\n return this.handleBSplineCurve(curve);\r\n }\r\n\r\n /** Convert strongly typed instance to tagged json */\r\n public handleBSplineSurface3d(surface: BSplineSurface3d): any {\r\n return this.handleBSplineSurface(surface);\r\n }\r\n\r\n /** Convert strongly typed instance to tagged json */\r\n public handleBezierCurve3dH(curve: BezierCurve3dH): any {\r\n const knots = [];\r\n const order = curve.order;\r\n for (let i = 0; i < order; i++) knots.push(0.0);\r\n for (let i = 0; i < order; i++) knots.push(1.0);\r\n return {\r\n bcurve: {\r\n points: curve.copyPolesAsJsonArray(),\r\n knots,\r\n order: curve.order,\r\n },\r\n };\r\n }\r\n\r\n /** Convert strongly typed instance to tagged json */\r\n private handleBSplineSurface(surface: BSplineSurface3d | BSplineSurface3dH): any {\r\n const data = SerializationHelpers.createBSplineSurfaceData(surface.coffs, surface.poleDimension,\r\n surface.knots[UVSelect.uDirection].knots, surface.numPolesUV(UVSelect.uDirection), surface.orderUV(UVSelect.uDirection),\r\n surface.knots[UVSelect.vDirection].knots, surface.numPolesUV(UVSelect.vDirection), surface.orderUV(UVSelect.vDirection));\r\n\r\n const wrapModeU = surface.getWrappable(UVSelect.uDirection);\r\n const wrapModeV = surface.getWrappable(UVSelect.vDirection);\r\n if (BSplineWrapMode.None !== wrapModeU)\r\n data.uParams.wrapMode = wrapModeU;\r\n if (BSplineWrapMode.None !== wrapModeV)\r\n data.vParams.wrapMode = wrapModeV;\r\n\r\n if (!SerializationHelpers.Export.prepareBSplineSurfaceData(data, { jsonPoles: true, jsonKnots: true }))\r\n return undefined;\r\n\r\n return {\r\n bsurf: {\r\n points: data.poles as number[][][],\r\n uKnots: data.uParams.knots as number[],\r\n vKnots: data.vParams.knots as number[],\r\n orderU: data.uParams.order,\r\n orderV: data.vParams.order,\r\n closedU: data.uParams.closed ? true : undefined,\r\n closedV: data.vParams.closed ? true : undefined,\r\n },\r\n };\r\n }\r\n\r\n /** Convert strongly typed instance to tagged json */\r\n public handleBSplineSurface3dH(surface: BSplineSurface3dH): any {\r\n return this.handleBSplineSurface(surface);\r\n }\r\n\r\n /** Convert an array of strongly typed instances to an array of tagged json */\r\n public emitArray(data: object[]): any {\r\n const members = [];\r\n for (const c of data) {\r\n const toPush = this.emit(c);\r\n members.push(toPush);\r\n }\r\n return members;\r\n }\r\n /** Convert GeometryQuery data (array or single instance) to instance to tagged json */\r\n public emit(data: any): any {\r\n if (Array.isArray(data))\r\n return this.emitArray(data);\r\n\r\n if (data instanceof GeometryQuery) {\r\n return data.dispatchToGeometryHandler(this);\r\n } else if (data instanceof TaggedNumericData) {\r\n return this.handleTaggedNumericData(data);\r\n }\r\n return undefined;\r\n }\r\n /** One-step static method to create a writer and emit a json object */\r\n public static toIModelJson(data: any): any {\r\n const writer = new Writer();\r\n return writer.emit(data);\r\n }\r\n }\r\n}\r\n"]}