@itwin/core-geometry 5.8.0-dev.1 → 5.8.0-dev.10

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 (144) hide show
  1. package/CHANGELOG.md +26 -1
  2. package/lib/cjs/Geometry.d.ts +24 -14
  3. package/lib/cjs/Geometry.d.ts.map +1 -1
  4. package/lib/cjs/Geometry.js +34 -14
  5. package/lib/cjs/Geometry.js.map +1 -1
  6. package/lib/cjs/core-geometry.d.ts +1 -0
  7. package/lib/cjs/core-geometry.d.ts.map +1 -1
  8. package/lib/cjs/core-geometry.js +1 -0
  9. package/lib/cjs/core-geometry.js.map +1 -1
  10. package/lib/cjs/curve/Arc3d.d.ts +4 -0
  11. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  12. package/lib/cjs/curve/Arc3d.js +14 -0
  13. package/lib/cjs/curve/Arc3d.js.map +1 -1
  14. package/lib/cjs/curve/ConstrainedCurve2d.d.ts +149 -0
  15. package/lib/cjs/curve/ConstrainedCurve2d.d.ts.map +1 -0
  16. package/lib/cjs/curve/ConstrainedCurve2d.js +317 -0
  17. package/lib/cjs/curve/ConstrainedCurve2d.js.map +1 -0
  18. package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
  19. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  20. package/lib/cjs/curve/CurvePrimitive.d.ts +2 -2
  21. package/lib/cjs/curve/CurvePrimitive.js +2 -2
  22. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  23. package/lib/cjs/curve/internalContexts/PointToCurveTangentHandler.d.ts +26 -0
  24. package/lib/cjs/curve/internalContexts/PointToCurveTangentHandler.d.ts.map +1 -0
  25. package/lib/cjs/curve/internalContexts/PointToCurveTangentHandler.js +78 -0
  26. package/lib/cjs/curve/internalContexts/PointToCurveTangentHandler.js.map +1 -0
  27. package/lib/cjs/curve/internalContexts/geometry2d/ConstrainedImplicitCurve2d.d.ts +152 -0
  28. package/lib/cjs/curve/internalContexts/geometry2d/ConstrainedImplicitCurve2d.d.ts.map +1 -0
  29. package/lib/cjs/curve/internalContexts/geometry2d/ConstrainedImplicitCurve2d.js +843 -0
  30. package/lib/cjs/curve/internalContexts/geometry2d/ConstrainedImplicitCurve2d.js.map +1 -0
  31. package/lib/cjs/curve/internalContexts/geometry2d/ConstraintSet.d.ts +97 -0
  32. package/lib/cjs/curve/internalContexts/geometry2d/ConstraintSet.d.ts.map +1 -0
  33. package/lib/cjs/curve/internalContexts/geometry2d/ConstraintSet.js +300 -0
  34. package/lib/cjs/curve/internalContexts/geometry2d/ConstraintSet.js.map +1 -0
  35. package/lib/cjs/curve/internalContexts/geometry2d/ImplicitCurve2d.d.ts +105 -0
  36. package/lib/cjs/curve/internalContexts/geometry2d/ImplicitCurve2d.d.ts.map +1 -0
  37. package/lib/cjs/curve/internalContexts/geometry2d/ImplicitCurve2d.js +141 -0
  38. package/lib/cjs/curve/internalContexts/geometry2d/ImplicitCurve2d.js.map +1 -0
  39. package/lib/cjs/curve/internalContexts/geometry2d/ImplicitCurve2dConverter.d.ts +27 -0
  40. package/lib/cjs/curve/internalContexts/geometry2d/ImplicitCurve2dConverter.d.ts.map +1 -0
  41. package/lib/cjs/curve/internalContexts/geometry2d/ImplicitCurve2dConverter.js +152 -0
  42. package/lib/cjs/curve/internalContexts/geometry2d/ImplicitCurve2dConverter.js.map +1 -0
  43. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedCircle2d.d.ts +81 -0
  44. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedCircle2d.d.ts.map +1 -0
  45. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedCircle2d.js +170 -0
  46. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedCircle2d.js.map +1 -0
  47. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedEllipse2d.d.ts +96 -0
  48. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedEllipse2d.d.ts.map +1 -0
  49. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedEllipse2d.js +187 -0
  50. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedEllipse2d.js.map +1 -0
  51. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedHyperbola2d.d.ts +91 -0
  52. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedHyperbola2d.d.ts.map +1 -0
  53. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedHyperbola2d.js +197 -0
  54. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedHyperbola2d.js.map +1 -0
  55. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedLine2d.d.ts +129 -0
  56. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedLine2d.d.ts.map +1 -0
  57. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedLine2d.js +208 -0
  58. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedLine2d.js.map +1 -0
  59. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedParabola2d.d.ts +87 -0
  60. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedParabola2d.d.ts.map +1 -0
  61. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedParabola2d.js +193 -0
  62. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedParabola2d.js.map +1 -0
  63. package/lib/cjs/geometry3d/Point2dVector2d.d.ts +7 -0
  64. package/lib/cjs/geometry3d/Point2dVector2d.d.ts.map +1 -1
  65. package/lib/cjs/geometry3d/Point2dVector2d.js +9 -0
  66. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  67. package/lib/cjs/numerics/Polynomials.d.ts.map +1 -1
  68. package/lib/cjs/numerics/Polynomials.js +8 -6
  69. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  70. package/lib/cjs/topology/HalfEdgeGraphSpineContext.d.ts.map +1 -1
  71. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js +3 -1
  72. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  73. package/lib/esm/Geometry.d.ts +24 -14
  74. package/lib/esm/Geometry.d.ts.map +1 -1
  75. package/lib/esm/Geometry.js +34 -14
  76. package/lib/esm/Geometry.js.map +1 -1
  77. package/lib/esm/core-geometry.d.ts +1 -0
  78. package/lib/esm/core-geometry.d.ts.map +1 -1
  79. package/lib/esm/core-geometry.js +1 -0
  80. package/lib/esm/core-geometry.js.map +1 -1
  81. package/lib/esm/curve/Arc3d.d.ts +4 -0
  82. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  83. package/lib/esm/curve/Arc3d.js +14 -0
  84. package/lib/esm/curve/Arc3d.js.map +1 -1
  85. package/lib/esm/curve/ConstrainedCurve2d.d.ts +149 -0
  86. package/lib/esm/curve/ConstrainedCurve2d.d.ts.map +1 -0
  87. package/lib/esm/curve/ConstrainedCurve2d.js +313 -0
  88. package/lib/esm/curve/ConstrainedCurve2d.js.map +1 -0
  89. package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
  90. package/lib/esm/curve/CurveFactory.js.map +1 -1
  91. package/lib/esm/curve/CurvePrimitive.d.ts +2 -2
  92. package/lib/esm/curve/CurvePrimitive.js +2 -2
  93. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  94. package/lib/esm/curve/internalContexts/PointToCurveTangentHandler.d.ts +26 -0
  95. package/lib/esm/curve/internalContexts/PointToCurveTangentHandler.d.ts.map +1 -0
  96. package/lib/esm/curve/internalContexts/PointToCurveTangentHandler.js +74 -0
  97. package/lib/esm/curve/internalContexts/PointToCurveTangentHandler.js.map +1 -0
  98. package/lib/esm/curve/internalContexts/geometry2d/ConstrainedImplicitCurve2d.d.ts +152 -0
  99. package/lib/esm/curve/internalContexts/geometry2d/ConstrainedImplicitCurve2d.d.ts.map +1 -0
  100. package/lib/esm/curve/internalContexts/geometry2d/ConstrainedImplicitCurve2d.js +839 -0
  101. package/lib/esm/curve/internalContexts/geometry2d/ConstrainedImplicitCurve2d.js.map +1 -0
  102. package/lib/esm/curve/internalContexts/geometry2d/ConstraintSet.d.ts +97 -0
  103. package/lib/esm/curve/internalContexts/geometry2d/ConstraintSet.d.ts.map +1 -0
  104. package/lib/esm/curve/internalContexts/geometry2d/ConstraintSet.js +295 -0
  105. package/lib/esm/curve/internalContexts/geometry2d/ConstraintSet.js.map +1 -0
  106. package/lib/esm/curve/internalContexts/geometry2d/ImplicitCurve2d.d.ts +105 -0
  107. package/lib/esm/curve/internalContexts/geometry2d/ImplicitCurve2d.d.ts.map +1 -0
  108. package/lib/esm/curve/internalContexts/geometry2d/ImplicitCurve2d.js +135 -0
  109. package/lib/esm/curve/internalContexts/geometry2d/ImplicitCurve2d.js.map +1 -0
  110. package/lib/esm/curve/internalContexts/geometry2d/ImplicitCurve2dConverter.d.ts +27 -0
  111. package/lib/esm/curve/internalContexts/geometry2d/ImplicitCurve2dConverter.d.ts.map +1 -0
  112. package/lib/esm/curve/internalContexts/geometry2d/ImplicitCurve2dConverter.js +148 -0
  113. package/lib/esm/curve/internalContexts/geometry2d/ImplicitCurve2dConverter.js.map +1 -0
  114. package/lib/esm/curve/internalContexts/geometry2d/UnboundedCircle2d.d.ts +81 -0
  115. package/lib/esm/curve/internalContexts/geometry2d/UnboundedCircle2d.d.ts.map +1 -0
  116. package/lib/esm/curve/internalContexts/geometry2d/UnboundedCircle2d.js +166 -0
  117. package/lib/esm/curve/internalContexts/geometry2d/UnboundedCircle2d.js.map +1 -0
  118. package/lib/esm/curve/internalContexts/geometry2d/UnboundedEllipse2d.d.ts +96 -0
  119. package/lib/esm/curve/internalContexts/geometry2d/UnboundedEllipse2d.d.ts.map +1 -0
  120. package/lib/esm/curve/internalContexts/geometry2d/UnboundedEllipse2d.js +183 -0
  121. package/lib/esm/curve/internalContexts/geometry2d/UnboundedEllipse2d.js.map +1 -0
  122. package/lib/esm/curve/internalContexts/geometry2d/UnboundedHyperbola2d.d.ts +91 -0
  123. package/lib/esm/curve/internalContexts/geometry2d/UnboundedHyperbola2d.d.ts.map +1 -0
  124. package/lib/esm/curve/internalContexts/geometry2d/UnboundedHyperbola2d.js +193 -0
  125. package/lib/esm/curve/internalContexts/geometry2d/UnboundedHyperbola2d.js.map +1 -0
  126. package/lib/esm/curve/internalContexts/geometry2d/UnboundedLine2d.d.ts +129 -0
  127. package/lib/esm/curve/internalContexts/geometry2d/UnboundedLine2d.d.ts.map +1 -0
  128. package/lib/esm/curve/internalContexts/geometry2d/UnboundedLine2d.js +204 -0
  129. package/lib/esm/curve/internalContexts/geometry2d/UnboundedLine2d.js.map +1 -0
  130. package/lib/esm/curve/internalContexts/geometry2d/UnboundedParabola2d.d.ts +87 -0
  131. package/lib/esm/curve/internalContexts/geometry2d/UnboundedParabola2d.d.ts.map +1 -0
  132. package/lib/esm/curve/internalContexts/geometry2d/UnboundedParabola2d.js +189 -0
  133. package/lib/esm/curve/internalContexts/geometry2d/UnboundedParabola2d.js.map +1 -0
  134. package/lib/esm/geometry3d/Point2dVector2d.d.ts +7 -0
  135. package/lib/esm/geometry3d/Point2dVector2d.d.ts.map +1 -1
  136. package/lib/esm/geometry3d/Point2dVector2d.js +9 -0
  137. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  138. package/lib/esm/numerics/Polynomials.d.ts.map +1 -1
  139. package/lib/esm/numerics/Polynomials.js +8 -6
  140. package/lib/esm/numerics/Polynomials.js.map +1 -1
  141. package/lib/esm/topology/HalfEdgeGraphSpineContext.d.ts.map +1 -1
  142. package/lib/esm/topology/HalfEdgeGraphSpineContext.js +3 -1
  143. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  144. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"HalfEdgeGraphSpineContext.js","sourceRoot":"","sources":["../../../src/topology/HalfEdgeGraphSpineContext.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/** @packageDocumentation\r\n * @module Topology\r\n */\r\nimport { Geometry } from \"../Geometry\";\r\nimport { HalfEdge, HalfEdgeGraph, HalfEdgeMask } from \"./Graph\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { HalfEdgeGraphMerge } from \"./Merging\";\r\nimport { Triangulator } from \"./Triangulation\";\r\nimport { RegularizationContext } from \"./RegularizeFace\";\r\nimport { HalfEdgeGraphSearch, HalfEdgeMaskTester } from \"./HalfEdgeGraphSearch\";\r\nimport { Angle } from \"../geometry3d/Angle\";\r\n// cSpell:disable\r\n// const sSpineRelTol = 1.0e-8;\r\n// const sSpineGraphAbsTol = 0.0;\r\n// const sSpineGraphRelTol = 1.0e-10;\r\n\r\nfunction createNPoints(n: number): Point3d[] {\r\n const points = [];\r\n for (let i = 0; i < n; i++)\r\n points.push(Point3d.create(0, 0, 0));\r\n return points;\r\n}\r\nfunction createNVectors(n: number): Vector3d[] {\r\n const points = [];\r\n for (let i = 0; i < n; i++)\r\n points.push(Vector3d.create(0, 0, 0));\r\n return points;\r\n}\r\n// Local struct to pair a graph node with a double as a sort key for std::sort\r\nclass NodeSortKey {\r\n private _a: number;\r\n private _node: HalfEdge;\r\n public get node() { return this._node; }\r\n\r\n public constructor(node: HalfEdge, b: number) {\r\n this._node = node;\r\n this._a = b;\r\n }\r\n public static compareForSort(dataA: NodeSortKey, dataB: NodeSortKey): number { return dataA._a - dataB._a; }\r\n}\r\n\r\n/**\r\n * Context manager to hold a vu graph and do spine operations\r\n *\r\n * Spine calculations determine both (a) a \"skeletal\" network of linework that follows the interior\r\n * path through within the boundaries, and (b) a block decomposition into quads and triangles.\r\n *\r\n * Usage pattern:\r\n * ```\r\n * const sc = new HalfEdgeGraphSpineContext();\r\n * // Data setup ....\r\n * foreach polygon or polyline\r\n * {\r\n * sc.InsertEdges (edgePoints, bClosed)\r\n * }\r\n * // Analysis steps ...\r\n * * bParity = true to treat the data as a \"polygon\". The interior is determined by parity rules\r\n * and the triangulation and spine are only constructed \"inside\"\r\n * * bParity = false if \"all\" spaces are to be triangulated and spined.\r\n * * minSplitRadians -- suggested value 0.3. If this value is large, it will encourage add internal\r\n * * edges from a vertex to an edge 'across' the polygon even if it creates small angles.\r\n * * minDiagonalAngle -- suggested value 1.0. If this value is large (up to about 1.5 as max) it favors\r\n * * using triangles to navigate turns. If it is small, it favors using skewed quadrilaterals.\r\n * sc.TriangulateForSpine (bParity, minSplitRadians)\r\n * sc.MarkBoxes (true, minDiagonalAngle);\r\n * edges = sc.GetSpineEdges ();\r\n * ```\r\n * @internal\r\n */\r\nexport class HalfEdgeGraphSpineContext {\r\n /** The Evolving graph */\r\n private _spineGraph: HalfEdgeGraph;\r\n /** mask marking edges that have been paired into quads */\r\n private _diagonalMask: HalfEdgeMask;\r\n private _boxMask: HalfEdgeMask;\r\n public get graph() { return this._spineGraph; }\r\n /**\r\n * Create a context with an empty graph.\r\n * * Reserve masks for specialized markup.\r\n */\r\n public constructor() {\r\n this._spineGraph = new HalfEdgeGraph();\r\n // vu_setTol (_spineGraph, sSpineGraphAbsTol, sSpineGraphRelTol);\r\n this._diagonalMask = this._spineGraph.grabMask();\r\n this._boxMask = this._spineGraph.grabMask();\r\n }\r\n\r\n /**\r\n * Release resources to the graph.\r\n */\r\n public teardown() {\r\n this._spineGraph.dropMask(this._diagonalMask);\r\n this._spineGraph.dropMask(this._boxMask);\r\n this._spineGraph.decommission();\r\n }\r\n\r\n // an edge (as new bvector<DPoint3d> at back, with cloned points>\r\n private addEdge(xyzOut: Point3d[][], xyzA: Point3d, xyzB: Point3d) {\r\n const newArray = [];\r\n newArray.push(xyzA.clone());\r\n newArray.push(xyzB.clone());\r\n xyzOut.push(newArray);\r\n }\r\n\r\n private getBoxCorners(diagonalNode: HalfEdge,\r\n nodes: HalfEdge[],\r\n points: Point3d[]): boolean {\r\n const diagonalMate = diagonalNode.edgeMate;\r\n nodes.length = 0;\r\n points.length = 0;\r\n if (!diagonalNode.getMask(HalfEdgeMask.BOUNDARY_EDGE)\r\n && diagonalNode.countEdgesAroundFace() === 3\r\n && diagonalMate.countEdgesAroundFace() === 3) {\r\n const nodeA = diagonalMate.faceSuccessor;\r\n nodes.push(nodeA);\r\n nodes.push(nodeA.faceSuccessor);\r\n const nodeB = diagonalNode.faceSuccessor;\r\n nodes.push(nodeB);\r\n nodes.push(nodeB.faceSuccessor);\r\n for (let i = 0; i < 4; i++)\r\n points.push(Point3d.create(nodes[i].x, nodes[i].y));\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n // Compute bisectors of the quad.\r\n // function key is the smaller absolute angle between the bisectors.\r\n // (pi/2 is max possible value).\r\n private diagonalKeyFunc(pDiagonalNode: HalfEdge): number {\r\n\r\n const nodes: HalfEdge[] = [];\r\n const points: Point3d[] = [];\r\n if (this.getBoxCorners(pDiagonalNode, nodes, points)) {\r\n const xyzA = points[0];\r\n const xyzB = points[1];\r\n const xyzC = points[2];\r\n const xyzD = points[3];\r\n const xyzAB = xyzA.interpolate(0.5, xyzB);\r\n const xyzBC = xyzB.interpolate(0.5, xyzC);\r\n const xyzCD = xyzC.interpolate(0.5, xyzD);\r\n const xyzDA = xyzD.interpolate(0.5, xyzA);\r\n\r\n const vectorAB = Vector3d.createStartEnd(xyzA, xyzB);\r\n const vectorBC = Vector3d.createStartEnd(xyzB, xyzC);\r\n const vectorCD = Vector3d.createStartEnd(xyzC, xyzD);\r\n const vectorDA = Vector3d.createStartEnd(xyzD, xyzA);\r\n\r\n const vectorABToCD = Vector3d.createStartEnd(xyzCD, xyzAB);\r\n const vectorBCToDA = Vector3d.createStartEnd(xyzDA, xyzBC);\r\n vectorABToCD.z = 0.0;\r\n vectorBCToDA.z = 0.0;\r\n const thetaAB = vectorABToCD.smallerUnorientedAngleTo(vectorAB).radians;\r\n const thetaBC = vectorBCToDA.smallerUnorientedAngleTo(vectorBC).radians;\r\n const thetaCD = vectorABToCD.smallerUnorientedAngleTo(vectorCD).radians;\r\n const thetaDA = vectorBCToDA.smallerUnorientedAngleTo(vectorDA).radians;\r\n\r\n const alpha = thetaAB < thetaCD ? thetaAB : thetaCD;\r\n const beta = thetaBC < thetaDA ? thetaBC : thetaDA;\r\n return alpha < beta ? alpha : beta;\r\n }\r\n\r\n return Number.NEGATIVE_INFINITY;\r\n }\r\n\r\n // Select a branch point in a triangle.\r\n // This may be the centroid or the midpoint of an edge joining midpoints of a pair of edges.\r\n private selectTriangleInteriorPoint(pXYZ: Point3d[]): Point3d {\r\n\r\n const xyz = createNPoints(6);\r\n const xyzMid = createNPoints(6); // Midpoints of each edge.\r\n const interiorCandidate = createNPoints(4); // for i in {012}, [i] is midpoint of midpoint[i+1] and midpoint[i+2].\r\n // [3] is centroid.\r\n const edgeVector = createNVectors(6);\r\n const centroid = Point3d.create();\r\n for (let i = 0; i < 3; i++) {\r\n xyz[i] = xyz[i + 3] = pXYZ[i];\r\n centroid.addInPlace(xyz[i]);\r\n }\r\n centroid.scaleInPlace(1.0 / 3.0);\r\n\r\n // Edge midpoints ...\r\n for (let i = 0; i < 3; i++) {\r\n xyzMid[i] = xyz[i].interpolate(0.5, xyz[i + 1]);\r\n xyzMid[i + 3] = xyzMid[i];\r\n edgeVector[i] = Vector3d.createStartEnd(xyz[i], xyz[i + 1]); // use wraparound\r\n edgeVector[i + 3] = edgeVector[i];\r\n }\r\n\r\n // Midpoints of midpoint-to-midpoint connections ..\r\n for (let i = 0; i < 3; i++) {\r\n const i1 = i + 1;\r\n const i2 = i + 2;\r\n interiorCandidate[i] = xyzMid[i1].interpolate(0.5, xyzMid[i2]);\r\n }\r\n\r\n interiorCandidate[3] = centroid;\r\n\r\n let bestAngle = Number.NEGATIVE_INFINITY;\r\n let bestIndex = -1;\r\n const theta: number[] = [0, 0, 0];\r\n let thetaMin;\r\n for (let k: number = 0; k < 4; k++) {\r\n // Measure angles from edge midpoints towards interior candidate.\r\n thetaMin = Number.POSITIVE_INFINITY;\r\n for (let i: number = 0; i < 3; i++) {\r\n const edgeToInterior = Vector3d.createStartEnd(xyzMid[i], interiorCandidate[k]);\r\n theta[i] = edgeVector[i].smallerUnorientedAngleTo(edgeToInterior).radians;\r\n if (theta[i] < thetaMin)\r\n thetaMin = theta[i];\r\n }\r\n if (thetaMin > bestAngle) {\r\n bestAngle = thetaMin;\r\n bestIndex = k;\r\n }\r\n }\r\n return interiorCandidate[bestIndex];\r\n }\r\n\r\n private markBox(pA: HalfEdge): void {\r\n\r\n const pB = pA.edgeMate;\r\n pA.setMask(this._diagonalMask);\r\n pB.setMask(this._diagonalMask);\r\n pA.setMaskAroundFace(this._boxMask);\r\n pB.setMaskAroundFace(this._boxMask);\r\n }\r\n\r\n private setSortedDiagonalMasks(minA: number): number {\r\n\r\n const candidates: NodeSortKey[] = [];\r\n let numDiagonal = 0;\r\n for (const node of this._spineGraph.allHalfEdges) {\r\n const b = this.diagonalKeyFunc(node);\r\n if (b > minA)\r\n candidates.push(new NodeSortKey(node, b));\r\n }\r\n\r\n candidates.sort((dataA, dataB) => NodeSortKey.compareForSort(dataA, dataB));\r\n\r\n let key;\r\n while (undefined !== (key = candidates.pop())) {\r\n const pA = key.node;\r\n const pB = pA.edgeMate;\r\n if (!pA.getMask(this._boxMask)\r\n && !pB.getMask(this._boxMask)) {\r\n this.markBox(pA);\r\n numDiagonal++;\r\n }\r\n }\r\n return numDiagonal;\r\n }\r\n\r\n /// <param name=\"xyzA\">Vertex whose angle is being split</param>\r\n private splitOK(xyzA: Point3d, xyzB: Point3d, xyzQ: Point3d, xyzC: Point3d, minAngle: number): boolean {\r\n\r\n const vectorAB = Vector3d.createStartEnd(xyzA, xyzB);\r\n const vectorAQ = Vector3d.createStartEnd(xyzA, xyzQ);\r\n const vectorAC = Vector3d.createStartEnd(xyzA, xyzC);\r\n const angleBAQ = vectorAB.angleToXY(vectorAQ).radians;\r\n const angleQAC = vectorAQ.angleToXY(vectorAC).radians;\r\n return Math.abs(angleBAQ) > minAngle && Math.abs(angleQAC) > minAngle;\r\n }\r\n\r\n // Search a triangulation for vertices which have\r\n // (a) pre-split angle greater than 90 degrees\r\n // (b) the opposite edge is a boundary.\r\n // (c) each post split angle is less than minSplitRadians\r\n // Drop a perpenedicular to that boundary.\r\n // return the number of edges added.\r\n private addPerpendicularsToBoundaries(minSplitRadians: number, minCandidateRadians: number): number {\r\n\r\n let numAdd = 0;\r\n for (const pA of this._spineGraph.allHalfEdges) {\r\n const pB = pA.faceSuccessor;\r\n const pC = pB.faceSuccessor;\r\n if (!pA.getMask(HalfEdgeMask.EXTERIOR)\r\n && !pA.getMask(HalfEdgeMask.BOUNDARY_EDGE) // ?? prevent deep recursion\r\n && !pC.getMask(HalfEdgeMask.BOUNDARY_EDGE) // ?? prevent deep recursion\r\n && pB.getMask(HalfEdgeMask.BOUNDARY_EDGE)\r\n && pC.faceSuccessor === pA\r\n ) {\r\n const vectorAB = pA.getVector2dAlongEdge();\r\n const vectorBC = pB.getVector2dAlongEdge();\r\n const vectorCA = pC.getVector2dAlongEdge();\r\n const candidateRadians = Math.PI - vectorCA.angleTo(vectorAB).radians;\r\n // const candidateDot = vectorCA.DotProduct (vectorAB);\r\n if (candidateRadians > minCandidateRadians) { // vectorCA.DotProduct (vectorAB) > 0.0)\r\n const bb = vectorBC.dotProduct(vectorBC);\r\n const ba = -vectorBC.dotProduct(vectorAB);\r\n const s = Geometry.conditionalDivideFraction(ba, bb);\r\n if (s !== undefined && s > 0.0 && s < 1.0) {\r\n const xyzA = pA.getPoint3d();\r\n const xyzB = pB.getPoint3d();\r\n const xyzC = pC.getPoint3d();\r\n const xyzE = xyzB.interpolate(s, xyzC);\r\n if (this.splitOK(xyzA, xyzB, xyzE, xyzC, minSplitRadians)) {\r\n const pE = this._spineGraph.splitEdgeAtFraction(pB, s);\r\n const pA1 = this._spineGraph.createEdgeHalfEdgeHalfEdge(pA, 0, pE, 0);\r\n pA1.setXYZFrom(pA);\r\n pE.setXYZAroundVertex(xyzE.x, xyzE.y, xyzE.z);\r\n numAdd++;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return numAdd;\r\n }\r\n\r\n private getSpineEdgesInQuad(\r\n pFace: HalfEdge,\r\n xyzOut: Point3d[][],\r\n bIncludeInterior: boolean,\r\n // true to include the edge to boundary when the qued is a dead end.\r\n bIncludeFinal: boolean,\r\n // true to include the two adjacent edges to boundary if the quad is at a corner.\r\n bIncludeCornerSpokes: boolean): boolean {\r\n\r\n if (pFace.countEdgesAroundFace() !== 4)\r\n return false;\r\n const pNode: HalfEdge[] = [];\r\n const xyz = createNPoints(8);\r\n const midpoint = createNPoints(8);\r\n pNode[0] = pNode[4] = pFace;\r\n pNode[1] = pNode[5] = pNode[0].faceSuccessor;\r\n pNode[2] = pNode[6] = pNode[1].faceSuccessor;\r\n pNode[3] = pNode[7] = pNode[2].faceSuccessor;\r\n let numBoundary = 0;\r\n let numInterior = 0;\r\n const iBoundary: number[] = [];\r\n const iInterior: number[] = [];\r\n const bIsBoundary: boolean[] = [];\r\n const centroid = Point3d.create();\r\n for (let i: number = 0; i < 4; i++) {\r\n bIsBoundary[i] = 0 !== pNode[i].getMask(HalfEdgeMask.BOUNDARY_EDGE);\r\n if (pNode[i].getMask(HalfEdgeMask.BOUNDARY_EDGE))\r\n iBoundary[numBoundary++] = i;\r\n else\r\n iInterior[numInterior++] = i;\r\n xyz[i] = pNode[i].getPoint3d();\r\n xyz[i + 4] = xyz[i];\r\n centroid.addInPlace(xyz[i]);\r\n }\r\n for (let i: number = 0; i < 4; i++) {\r\n midpoint[i] = xyz[i].interpolate(0.5, xyz[i + 1]);\r\n midpoint[i + 4] = midpoint[i];\r\n }\r\n\r\n centroid.scaleInPlace(0.25);\r\n if (numBoundary === 0 || numBoundary === 1) {\r\n for (let i: number = 0; i < numInterior; i++)\r\n if (bIncludeInterior)\r\n this.addEdge(xyzOut, midpoint[iInterior[i]], centroid);\r\n } else if (numBoundary === 4) {\r\n for (let i: number = 0; i < numBoundary; i++)\r\n if (bIncludeFinal)\r\n this.addEdge(xyzOut, midpoint[i], centroid);\r\n } else if (numBoundary === 2) {\r\n if (iInterior[1] === iInterior[0] + 2) {\r\n // Spine enters one end, exits the other ..\r\n if (bIncludeInterior)\r\n this.addEdge(xyzOut, midpoint[iInterior[0]], midpoint[iInterior[1]]);\r\n } else {\r\n // Block sits as exterior corner. Let the two spines continue to their opposite faces ..\r\n for (let i: number = 0; i < 4; i++)\r\n if ((bIsBoundary[i] && bIncludeCornerSpokes)\r\n || (!bIsBoundary[i] && bIncludeInterior))\r\n this.addEdge(xyzOut, midpoint[i], centroid);\r\n }\r\n } else if (numBoundary === 3) {\r\n if (bIncludeInterior)\r\n this.addEdge(xyzOut, midpoint[iInterior[0]], centroid);\r\n if (bIncludeFinal)\r\n this.addEdge(xyzOut, centroid, midpoint[iInterior[0] + 2]);\r\n }\r\n return true;\r\n }\r\n\r\n private getSpineEdgesInTriangle(\r\n pFace: HalfEdge, xyzOut: Point3d[][],\r\n bIncludeInterior: boolean,\r\n bIncludeFinal: boolean): boolean {\r\n\r\n if (pFace.countEdgesAroundFace() !== 3)\r\n return false;\r\n let n = 0;\r\n const xyzMidpoint = createNPoints(6);\r\n const xyz = createNPoints(6);\r\n const xyzCentroid = Point3d.createZero();\r\n const isBoundary: boolean[] = [];\r\n let numBoundary = 0;\r\n let lastBoundary = -1;\r\n let lastInterior = -1;\r\n let currentEdge = pFace;\r\n do {\r\n xyz[n] = currentEdge.getPoint3d();\r\n xyzCentroid.addInPlace(xyz[n]);\r\n isBoundary[n] = false;\r\n if (currentEdge.getMask(HalfEdgeMask.BOUNDARY_EDGE)) {\r\n isBoundary[n] = true;\r\n numBoundary++;\r\n lastBoundary = n;\r\n } else {\r\n lastInterior = n;\r\n }\r\n xyz[n + 3] = xyz[n];\r\n isBoundary[n + 3] = isBoundary[n];\r\n n++;\r\n } while ((currentEdge = currentEdge.faceSuccessor) !== pFace);\r\n\r\n for (let i: number = 0; i < 3; i++) {\r\n xyzMidpoint[i] = xyz[i].interpolate(0.5, xyz[i + 1]);\r\n xyzMidpoint[i + 3] = xyzMidpoint[i];\r\n }\r\n\r\n xyzCentroid.scaleInPlace(1.0 / 3.0);\r\n\r\n if (numBoundary === 0) {\r\n // Interior branch\r\n const xyzInterior = this.selectTriangleInteriorPoint(xyz);\r\n if (bIncludeInterior) {\r\n this.addEdge(xyzOut, xyzMidpoint[0], xyzInterior);\r\n this.addEdge(xyzOut, xyzMidpoint[1], xyzInterior);\r\n this.addEdge(xyzOut, xyzMidpoint[2], xyzInterior);\r\n }\r\n } else if (numBoundary === 1) {\r\n if (bIncludeInterior)\r\n this.addEdge(xyzOut, xyzMidpoint[lastBoundary + 1], xyzMidpoint[lastBoundary + 2]);\r\n } else if (numBoundary === 2) {\r\n if (bIncludeFinal && lastInterior >= 0)\r\n this.addEdge(xyzOut, xyzMidpoint[lastInterior], xyz[lastInterior + 2]);\r\n } else if (numBoundary === 3) {\r\n const xyzInterior = this.selectTriangleInteriorPoint(xyz);\r\n if (bIncludeFinal) {\r\n this.addEdge(xyzOut, xyzMidpoint[0], xyzInterior);\r\n this.addEdge(xyzOut, xyzMidpoint[1], xyzInterior);\r\n this.addEdge(xyzOut, xyzMidpoint[2], xyzInterior);\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /** Add a polyline to the graph.\r\n * * This may be called multiple times\r\n */\r\n public insertEdges(xyzIn: Point3d[], bClosed: boolean): void {\r\n let pPreviousB, pFirstA;\r\n for (let i: number = 1; i < xyzIn.length; i++) {\r\n const nodeA = this._spineGraph.createEdgeXYZXYZ(\r\n xyzIn[i - 1].x, xyzIn[i - 1].y, 0, 0,\r\n xyzIn[i].x, xyzIn[i].y, 0, 0);\r\n const nodeB = nodeA.faceSuccessor;\r\n nodeA.setMask(HalfEdgeMask.BOUNDARY_EDGE);\r\n nodeB.setMask(HalfEdgeMask.BOUNDARY_EDGE);\r\n if (pPreviousB === undefined) {\r\n pFirstA = nodeA;\r\n } else {\r\n HalfEdge.pinch(pPreviousB, nodeA);\r\n }\r\n pPreviousB = nodeB;\r\n }\r\n if (bClosed && pFirstA !== undefined && pPreviousB !== undefined)\r\n HalfEdge.pinch(pPreviousB, pFirstA);\r\n }\r\n /**\r\n * Look for trivial (2 edge) faces that have exteriorMask and non-masked on both sides.\r\n * * clear the mask\r\n * @param exteriorMask\r\n */\r\n private purgeNullFaces(exteriorMask: HalfEdgeMask) {\r\n for (const nodeA of this._spineGraph.allHalfEdges) {\r\n const nodeB = nodeA.faceSuccessor;\r\n const nodeC = nodeB.faceSuccessor;\r\n if (nodeB !== nodeA && nodeC === nodeA) {\r\n if (nodeA.getMask(exteriorMask) && nodeB.getMask(exteriorMask)) {\r\n const mateA = nodeA.edgeMate;\r\n const mateB = nodeB.edgeMate;\r\n if (!mateA.getMask(exteriorMask) && !mateB.getMask(exteriorMask)) {\r\n nodeA.clearMask(exteriorMask);\r\n nodeB.clearMask(exteriorMask);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n private static _regularize1 = true;\r\n private static _regularize2 = false;\r\n /**\r\n * Triangulate the graph for the edges that have been inserted.\r\n * @param applyParity if true ()\r\n * @param minSplitRadians smallest allowed angle in the split sector that is split.\r\n */\r\n public triangulateForSpine(applyParity: boolean = true, minSplitRadians: number = 0.3): void {\r\n\r\n const sMaxSplit = 20;\r\n const sMinCandidateRadians = 1.0;\r\n let numSplit = 0;\r\n HalfEdgeGraphMerge.splitIntersectingEdges(this.graph);\r\n HalfEdgeGraphMerge.clusterAndMergeXYTheta(this.graph);\r\n\r\n const context1 = new RegularizationContext(this.graph);\r\n context1.regularizeGraph(HalfEdgeGraphSpineContext._regularize1, false);\r\n const context2 = new RegularizationContext(this.graph);\r\n context2.regularizeGraph(false, HalfEdgeGraphSpineContext._regularize2);\r\n if (applyParity) {\r\n HalfEdgeGraphSearch.collectConnectedComponentsWithExteriorParityMasks(this.graph,\r\n new HalfEdgeMaskTester(HalfEdgeMask.BOUNDARY_EDGE), HalfEdgeMask.EXTERIOR);\r\n this.purgeNullFaces(HalfEdgeMask.EXTERIOR);\r\n }\r\n\r\n Triangulator.triangulateAllPositiveAreaFaces(this.graph);\r\n Triangulator.flipTriangles(this.graph);\r\n\r\n while (numSplit++ < sMaxSplit) {\r\n const numPerp = this.addPerpendicularsToBoundaries(minSplitRadians, sMinCandidateRadians);\r\n if (numPerp <= 0)\r\n break;\r\n Triangulator.flipTriangles(this.graph);\r\n }\r\n }\r\n\r\n // Find pseudo spine edges\r\n // Optionally include pure internal midline segments.\r\n // Optionally include midline segments into \"dead end\"\r\n // Optionally include adjacent spokes to corner.\r\n /**\r\n * Retrieve edges of the spine as arrays of points.\r\n * @param bIncludeInterior true to include fully internal segments\r\n * @param bIncludeFinal true to include segments that terminate at a boundary\r\n * @param bIncludeCornerSpokes\r\n * @return array of line data.\r\n */\r\n public getSpineEdges(bIncludeInterior: boolean = true, bIncludeFinal: boolean = true, bIncludeCornerSpokes: boolean = true): Point3d[][] {\r\n const xyzOut: Point3d[][] = [];\r\n this._spineGraph.announceFaceLoops(\r\n (_graph: HalfEdgeGraph, faceSeed: HalfEdge) => {\r\n if (!faceSeed.getMask(HalfEdgeMask.EXTERIOR)) {\r\n if (this.getSpineEdgesInTriangle(faceSeed, xyzOut, bIncludeInterior, bIncludeFinal)) {\r\n } else if (this.getSpineEdgesInQuad(faceSeed, xyzOut, bIncludeInterior, bIncludeFinal, bIncludeCornerSpokes)) {\r\n }\r\n }\r\n return true;\r\n });\r\n return xyzOut;\r\n }\r\n\r\n /**\r\n * Intermediate markup step to identify quads between corresponding boundary edges.\r\n * * search for and mark triangle edges that should be treated as diagonal of a quad\r\n * * Angle logic is:\r\n * * In a candidate quad (formed by joining triangles that share an edge)\r\n * * form segments between opposite edges of the quad.\r\n * * compute angles between these segments and the edges of their quads.\r\n * * if this angle is larger than minAngleRadians, accept this as a quad.\r\n * * recommended angle is between 15 and 5 degrees; 50 degrees is typical\r\n * @param bDeleteDiagonals if true, eliminate the diagonals.\r\n * @param minAngleRadians angle tolerance, as described above.\r\n */\r\n public consolidateTrianglesToQuads(bDeleteDiagonals: boolean, minAngle: Angle = Angle.createDegrees(50)): number {\r\n\r\n const numDiagonal = this.setSortedDiagonalMasks(minAngle.radians);\r\n if (bDeleteDiagonals && numDiagonal > 0) {\r\n this.graph.yankAndDeleteEdges(\r\n (node: HalfEdge) => node.getMask(this._diagonalMask));\r\n }\r\n return numDiagonal;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"HalfEdgeGraphSpineContext.js","sourceRoot":"","sources":["../../../src/topology/HalfEdgeGraphSpineContext.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/** @packageDocumentation\r\n * @module Topology\r\n */\r\nimport { Geometry } from \"../Geometry\";\r\nimport { HalfEdge, HalfEdgeGraph, HalfEdgeMask } from \"./Graph\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { HalfEdgeGraphMerge } from \"./Merging\";\r\nimport { Triangulator } from \"./Triangulation\";\r\nimport { RegularizationContext } from \"./RegularizeFace\";\r\nimport { HalfEdgeGraphSearch, HalfEdgeMaskTester } from \"./HalfEdgeGraphSearch\";\r\nimport { Angle } from \"../geometry3d/Angle\";\r\n// cSpell:disable\r\n// const sSpineRelTol = 1.0e-8;\r\n// const sSpineGraphAbsTol = 0.0;\r\n// const sSpineGraphRelTol = 1.0e-10;\r\n\r\nfunction createNPoints(n: number): Point3d[] {\r\n const points = [];\r\n for (let i = 0; i < n; i++)\r\n points.push(Point3d.create(0, 0, 0));\r\n return points;\r\n}\r\nfunction createNVectors(n: number): Vector3d[] {\r\n const points = [];\r\n for (let i = 0; i < n; i++)\r\n points.push(Vector3d.create(0, 0, 0));\r\n return points;\r\n}\r\n// Local struct to pair a graph node with a double as a sort key for std::sort\r\nclass NodeSortKey {\r\n private _a: number;\r\n private _node: HalfEdge;\r\n public get node() { return this._node; }\r\n\r\n public constructor(node: HalfEdge, b: number) {\r\n this._node = node;\r\n this._a = b;\r\n }\r\n public static compareForSort(dataA: NodeSortKey, dataB: NodeSortKey): number { return dataA._a - dataB._a; }\r\n}\r\n\r\n/**\r\n * Context manager to hold a vu graph and do spine operations\r\n *\r\n * Spine calculations determine both (a) a \"skeletal\" network of linework that follows the interior\r\n * path through within the boundaries, and (b) a block decomposition into quads and triangles.\r\n *\r\n * Usage pattern:\r\n * ```\r\n * const sc = new HalfEdgeGraphSpineContext();\r\n * // Data setup ....\r\n * foreach polygon or polyline\r\n * {\r\n * sc.InsertEdges (edgePoints, bClosed)\r\n * }\r\n * // Analysis steps ...\r\n * * bParity = true to treat the data as a \"polygon\". The interior is determined by parity rules\r\n * and the triangulation and spine are only constructed \"inside\"\r\n * * bParity = false if \"all\" spaces are to be triangulated and spined.\r\n * * minSplitRadians -- suggested value 0.3. If this value is large, it will encourage add internal\r\n * * edges from a vertex to an edge 'across' the polygon even if it creates small angles.\r\n * * minDiagonalAngle -- suggested value 1.0. If this value is large (up to about 1.5 as max) it favors\r\n * * using triangles to navigate turns. If it is small, it favors using skewed quadrilaterals.\r\n * sc.TriangulateForSpine (bParity, minSplitRadians)\r\n * sc.MarkBoxes (true, minDiagonalAngle);\r\n * edges = sc.GetSpineEdges ();\r\n * ```\r\n * @internal\r\n */\r\nexport class HalfEdgeGraphSpineContext {\r\n /** The Evolving graph */\r\n private _spineGraph: HalfEdgeGraph;\r\n /** mask marking edges that have been paired into quads */\r\n private _diagonalMask: HalfEdgeMask;\r\n private _boxMask: HalfEdgeMask;\r\n public get graph() { return this._spineGraph; }\r\n /**\r\n * Create a context with an empty graph.\r\n * * Reserve masks for specialized markup.\r\n */\r\n public constructor() {\r\n this._spineGraph = new HalfEdgeGraph();\r\n // vu_setTol (_spineGraph, sSpineGraphAbsTol, sSpineGraphRelTol);\r\n this._diagonalMask = this._spineGraph.grabMask();\r\n this._boxMask = this._spineGraph.grabMask();\r\n }\r\n\r\n /**\r\n * Release resources to the graph.\r\n */\r\n public teardown() {\r\n this._spineGraph.dropMask(this._diagonalMask);\r\n this._spineGraph.dropMask(this._boxMask);\r\n this._spineGraph.decommission();\r\n }\r\n\r\n // an edge (as new bvector<DPoint3d> at back, with cloned points>\r\n private addEdge(xyzOut: Point3d[][], xyzA: Point3d, xyzB: Point3d) {\r\n const newArray = [];\r\n newArray.push(xyzA.clone());\r\n newArray.push(xyzB.clone());\r\n xyzOut.push(newArray);\r\n }\r\n\r\n private getBoxCorners(diagonalNode: HalfEdge,\r\n nodes: HalfEdge[],\r\n points: Point3d[]): boolean {\r\n const diagonalMate = diagonalNode.edgeMate;\r\n nodes.length = 0;\r\n points.length = 0;\r\n if (!diagonalNode.getMask(HalfEdgeMask.BOUNDARY_EDGE)\r\n && diagonalNode.countEdgesAroundFace() === 3\r\n && diagonalMate.countEdgesAroundFace() === 3) {\r\n const nodeA = diagonalMate.faceSuccessor;\r\n nodes.push(nodeA);\r\n nodes.push(nodeA.faceSuccessor);\r\n const nodeB = diagonalNode.faceSuccessor;\r\n nodes.push(nodeB);\r\n nodes.push(nodeB.faceSuccessor);\r\n for (let i = 0; i < 4; i++)\r\n points.push(Point3d.create(nodes[i].x, nodes[i].y));\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n // Compute bisectors of the quad.\r\n // function key is the smaller absolute angle between the bisectors.\r\n // (pi/2 is max possible value).\r\n private diagonalKeyFunc(pDiagonalNode: HalfEdge): number {\r\n\r\n const nodes: HalfEdge[] = [];\r\n const points: Point3d[] = [];\r\n if (this.getBoxCorners(pDiagonalNode, nodes, points)) {\r\n const xyzA = points[0];\r\n const xyzB = points[1];\r\n const xyzC = points[2];\r\n const xyzD = points[3];\r\n const xyzAB = xyzA.interpolate(0.5, xyzB);\r\n const xyzBC = xyzB.interpolate(0.5, xyzC);\r\n const xyzCD = xyzC.interpolate(0.5, xyzD);\r\n const xyzDA = xyzD.interpolate(0.5, xyzA);\r\n\r\n const vectorAB = Vector3d.createStartEnd(xyzA, xyzB);\r\n const vectorBC = Vector3d.createStartEnd(xyzB, xyzC);\r\n const vectorCD = Vector3d.createStartEnd(xyzC, xyzD);\r\n const vectorDA = Vector3d.createStartEnd(xyzD, xyzA);\r\n\r\n const vectorABToCD = Vector3d.createStartEnd(xyzCD, xyzAB);\r\n const vectorBCToDA = Vector3d.createStartEnd(xyzDA, xyzBC);\r\n vectorABToCD.z = 0.0;\r\n vectorBCToDA.z = 0.0;\r\n const thetaAB = vectorABToCD.smallerUnorientedAngleTo(vectorAB).radians;\r\n const thetaBC = vectorBCToDA.smallerUnorientedAngleTo(vectorBC).radians;\r\n const thetaCD = vectorABToCD.smallerUnorientedAngleTo(vectorCD).radians;\r\n const thetaDA = vectorBCToDA.smallerUnorientedAngleTo(vectorDA).radians;\r\n\r\n const alpha = thetaAB < thetaCD ? thetaAB : thetaCD;\r\n const beta = thetaBC < thetaDA ? thetaBC : thetaDA;\r\n return alpha < beta ? alpha : beta;\r\n }\r\n\r\n return Number.NEGATIVE_INFINITY;\r\n }\r\n\r\n // Select a branch point in a triangle.\r\n // This may be the centroid or the midpoint of an edge joining midpoints of a pair of edges.\r\n private selectTriangleInteriorPoint(pXYZ: Point3d[]): Point3d {\r\n\r\n const xyz = createNPoints(6);\r\n const xyzMid = createNPoints(6); // Midpoints of each edge.\r\n const interiorCandidate = createNPoints(4); // for i in {012}, [i] is midpoint of midpoint[i+1] and midpoint[i+2].\r\n // [3] is centroid.\r\n const edgeVector = createNVectors(6);\r\n const centroid = Point3d.create();\r\n for (let i = 0; i < 3; i++) {\r\n xyz[i] = xyz[i + 3] = pXYZ[i];\r\n centroid.addInPlace(xyz[i]);\r\n }\r\n centroid.scaleInPlace(1.0 / 3.0);\r\n\r\n // Edge midpoints ...\r\n for (let i = 0; i < 3; i++) {\r\n xyzMid[i] = xyz[i].interpolate(0.5, xyz[i + 1]);\r\n xyzMid[i + 3] = xyzMid[i];\r\n edgeVector[i] = Vector3d.createStartEnd(xyz[i], xyz[i + 1]); // use wraparound\r\n edgeVector[i + 3] = edgeVector[i];\r\n }\r\n\r\n // Midpoints of midpoint-to-midpoint connections ..\r\n for (let i = 0; i < 3; i++) {\r\n const i1 = i + 1;\r\n const i2 = i + 2;\r\n interiorCandidate[i] = xyzMid[i1].interpolate(0.5, xyzMid[i2]);\r\n }\r\n\r\n interiorCandidate[3] = centroid;\r\n\r\n let bestAngle = Number.NEGATIVE_INFINITY;\r\n let bestIndex = -1;\r\n const theta: number[] = [0, 0, 0];\r\n let thetaMin;\r\n for (let k: number = 0; k < 4; k++) {\r\n // Measure angles from edge midpoints towards interior candidate.\r\n thetaMin = Number.POSITIVE_INFINITY;\r\n for (let i: number = 0; i < 3; i++) {\r\n const edgeToInterior = Vector3d.createStartEnd(xyzMid[i], interiorCandidate[k]);\r\n theta[i] = edgeVector[i].smallerUnorientedAngleTo(edgeToInterior).radians;\r\n if (theta[i] < thetaMin)\r\n thetaMin = theta[i];\r\n }\r\n if (thetaMin > bestAngle) {\r\n bestAngle = thetaMin;\r\n bestIndex = k;\r\n }\r\n }\r\n return interiorCandidate[bestIndex];\r\n }\r\n\r\n private markBox(pA: HalfEdge): void {\r\n\r\n const pB = pA.edgeMate;\r\n pA.setMask(this._diagonalMask);\r\n pB.setMask(this._diagonalMask);\r\n pA.setMaskAroundFace(this._boxMask);\r\n pB.setMaskAroundFace(this._boxMask);\r\n }\r\n\r\n private setSortedDiagonalMasks(minA: number): number {\r\n\r\n const candidates: NodeSortKey[] = [];\r\n let numDiagonal = 0;\r\n for (const node of this._spineGraph.allHalfEdges) {\r\n const b = this.diagonalKeyFunc(node);\r\n if (b > minA)\r\n candidates.push(new NodeSortKey(node, b));\r\n }\r\n\r\n candidates.sort((dataA, dataB) => NodeSortKey.compareForSort(dataA, dataB));\r\n\r\n let key;\r\n while (undefined !== (key = candidates.pop())) {\r\n const pA = key.node;\r\n const pB = pA.edgeMate;\r\n if (!pA.getMask(this._boxMask)\r\n && !pB.getMask(this._boxMask)) {\r\n this.markBox(pA);\r\n numDiagonal++;\r\n }\r\n }\r\n return numDiagonal;\r\n }\r\n\r\n /// <param name=\"xyzA\">Vertex whose angle is being split</param>\r\n private splitOK(xyzA: Point3d, xyzB: Point3d, xyzQ: Point3d, xyzC: Point3d, minAngle: number): boolean {\r\n\r\n const vectorAB = Vector3d.createStartEnd(xyzA, xyzB);\r\n const vectorAQ = Vector3d.createStartEnd(xyzA, xyzQ);\r\n const vectorAC = Vector3d.createStartEnd(xyzA, xyzC);\r\n const angleBAQ = vectorAB.angleToXY(vectorAQ).radians;\r\n const angleQAC = vectorAQ.angleToXY(vectorAC).radians;\r\n return Math.abs(angleBAQ) > minAngle && Math.abs(angleQAC) > minAngle;\r\n }\r\n\r\n // Search a triangulation for vertices which have\r\n // (a) pre-split angle greater than 90 degrees\r\n // (b) the opposite edge is a boundary.\r\n // (c) each post split angle is less than minSplitRadians\r\n // Drop a perpenedicular to that boundary.\r\n // return the number of edges added.\r\n private addPerpendicularsToBoundaries(minSplitRadians: number, minCandidateRadians: number): number {\r\n\r\n let numAdd = 0;\r\n for (const pA of this._spineGraph.allHalfEdges) {\r\n const pB = pA.faceSuccessor;\r\n const pC = pB.faceSuccessor;\r\n if (!pA.getMask(HalfEdgeMask.EXTERIOR)\r\n && !pA.getMask(HalfEdgeMask.BOUNDARY_EDGE) // ?? prevent deep recursion\r\n && !pC.getMask(HalfEdgeMask.BOUNDARY_EDGE) // ?? prevent deep recursion\r\n && pB.getMask(HalfEdgeMask.BOUNDARY_EDGE)\r\n && pC.faceSuccessor === pA\r\n ) {\r\n const vectorAB = pA.getVector2dAlongEdge();\r\n const vectorBC = pB.getVector2dAlongEdge();\r\n const vectorCA = pC.getVector2dAlongEdge();\r\n const candidateRadians = Math.PI - vectorCA.angleTo(vectorAB).radians;\r\n // const candidateDot = vectorCA.DotProduct (vectorAB);\r\n if (candidateRadians > minCandidateRadians) { // vectorCA.DotProduct (vectorAB) > 0.0)\r\n const bb = vectorBC.dotProduct(vectorBC);\r\n const ba = -vectorBC.dotProduct(vectorAB);\r\n const s = Geometry.conditionalDivideFraction(ba, bb);\r\n if (s !== undefined && s > 0.0 && s < 1.0) {\r\n const xyzA = pA.getPoint3d();\r\n const xyzB = pB.getPoint3d();\r\n const xyzC = pC.getPoint3d();\r\n const xyzE = xyzB.interpolate(s, xyzC);\r\n if (this.splitOK(xyzA, xyzB, xyzE, xyzC, minSplitRadians)) {\r\n const pE = this._spineGraph.splitEdgeAtFraction(pB, s);\r\n const pA1 = this._spineGraph.createEdgeHalfEdgeHalfEdge(pA, 0, pE, 0);\r\n pA1.setXYZFrom(pA);\r\n pE.setXYZAroundVertex(xyzE.x, xyzE.y, xyzE.z);\r\n numAdd++;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return numAdd;\r\n }\r\n\r\n private getSpineEdgesInQuad(\r\n pFace: HalfEdge,\r\n xyzOut: Point3d[][],\r\n bIncludeInterior: boolean,\r\n // true to include the edge to boundary when the qued is a dead end.\r\n bIncludeFinal: boolean,\r\n // true to include the two adjacent edges to boundary if the quad is at a corner.\r\n bIncludeCornerSpokes: boolean): boolean {\r\n\r\n if (pFace.countEdgesAroundFace() !== 4)\r\n return false;\r\n const pNode: HalfEdge[] = [];\r\n const xyz = createNPoints(8);\r\n const midpoint = createNPoints(8);\r\n pNode[0] = pNode[4] = pFace;\r\n pNode[1] = pNode[5] = pNode[0].faceSuccessor;\r\n pNode[2] = pNode[6] = pNode[1].faceSuccessor;\r\n pNode[3] = pNode[7] = pNode[2].faceSuccessor;\r\n let numBoundary = 0;\r\n let numInterior = 0;\r\n const iBoundary: number[] = [];\r\n const iInterior: number[] = [];\r\n const bIsBoundary: boolean[] = [];\r\n const centroid = Point3d.create();\r\n for (let i: number = 0; i < 4; i++) {\r\n bIsBoundary[i] = 0 !== pNode[i].getMask(HalfEdgeMask.BOUNDARY_EDGE);\r\n if (pNode[i].getMask(HalfEdgeMask.BOUNDARY_EDGE))\r\n iBoundary[numBoundary++] = i;\r\n else\r\n iInterior[numInterior++] = i;\r\n xyz[i] = pNode[i].getPoint3d();\r\n xyz[i + 4] = xyz[i];\r\n centroid.addInPlace(xyz[i]);\r\n }\r\n for (let i: number = 0; i < 4; i++) {\r\n midpoint[i] = xyz[i].interpolate(0.5, xyz[i + 1]);\r\n midpoint[i + 4] = midpoint[i];\r\n }\r\n\r\n centroid.scaleInPlace(0.25);\r\n if (numBoundary === 0 || numBoundary === 1) {\r\n for (let i: number = 0; i < numInterior; i++)\r\n if (bIncludeInterior)\r\n this.addEdge(xyzOut, midpoint[iInterior[i]], centroid);\r\n } else if (numBoundary === 4) {\r\n for (let i: number = 0; i < numBoundary; i++)\r\n if (bIncludeFinal)\r\n this.addEdge(xyzOut, midpoint[i], centroid);\r\n } else if (numBoundary === 2) {\r\n if (iInterior[1] === iInterior[0] + 2) {\r\n // Spine enters one end, exits the other ..\r\n if (bIncludeInterior)\r\n this.addEdge(xyzOut, midpoint[iInterior[0]], midpoint[iInterior[1]]);\r\n } else {\r\n // Block sits as exterior corner. Let the two spines continue to their opposite faces ..\r\n for (let i: number = 0; i < 4; i++)\r\n if ((bIsBoundary[i] && bIncludeCornerSpokes)\r\n || (!bIsBoundary[i] && bIncludeInterior))\r\n this.addEdge(xyzOut, midpoint[i], centroid);\r\n }\r\n } else if (numBoundary === 3) {\r\n if (bIncludeInterior)\r\n this.addEdge(xyzOut, midpoint[iInterior[0]], centroid);\r\n if (bIncludeFinal)\r\n this.addEdge(xyzOut, centroid, midpoint[iInterior[0] + 2]);\r\n }\r\n return true;\r\n }\r\n\r\n private getSpineEdgesInTriangle(\r\n pFace: HalfEdge, xyzOut: Point3d[][],\r\n bIncludeInterior: boolean,\r\n bIncludeFinal: boolean): boolean {\r\n\r\n if (pFace.countEdgesAroundFace() !== 3)\r\n return false;\r\n let n = 0;\r\n const xyzMidpoint = createNPoints(6);\r\n const xyz = createNPoints(6);\r\n const xyzCentroid = Point3d.createZero();\r\n const isBoundary: boolean[] = [];\r\n let numBoundary = 0;\r\n let lastBoundary = -1;\r\n let lastInterior = -1;\r\n let currentEdge = pFace;\r\n do {\r\n xyz[n] = currentEdge.getPoint3d();\r\n xyzCentroid.addInPlace(xyz[n]);\r\n isBoundary[n] = false;\r\n if (currentEdge.getMask(HalfEdgeMask.BOUNDARY_EDGE)) {\r\n isBoundary[n] = true;\r\n numBoundary++;\r\n lastBoundary = n;\r\n } else {\r\n lastInterior = n;\r\n }\r\n xyz[n + 3] = xyz[n];\r\n isBoundary[n + 3] = isBoundary[n];\r\n n++;\r\n } while ((currentEdge = currentEdge.faceSuccessor) !== pFace);\r\n\r\n for (let i: number = 0; i < 3; i++) {\r\n xyzMidpoint[i] = xyz[i].interpolate(0.5, xyz[i + 1]);\r\n xyzMidpoint[i + 3] = xyzMidpoint[i];\r\n }\r\n\r\n xyzCentroid.scaleInPlace(1.0 / 3.0);\r\n\r\n if (numBoundary === 0) {\r\n // Interior branch\r\n const xyzInterior = this.selectTriangleInteriorPoint(xyz);\r\n if (bIncludeInterior) {\r\n this.addEdge(xyzOut, xyzMidpoint[0], xyzInterior);\r\n this.addEdge(xyzOut, xyzMidpoint[1], xyzInterior);\r\n this.addEdge(xyzOut, xyzMidpoint[2], xyzInterior);\r\n }\r\n } else if (numBoundary === 1) {\r\n if (bIncludeInterior)\r\n this.addEdge(xyzOut, xyzMidpoint[lastBoundary + 1], xyzMidpoint[lastBoundary + 2]);\r\n } else if (numBoundary === 2) {\r\n if (bIncludeFinal && lastInterior >= 0)\r\n this.addEdge(xyzOut, xyzMidpoint[lastInterior], xyz[lastInterior + 2]);\r\n } else if (numBoundary === 3) {\r\n const xyzInterior = this.selectTriangleInteriorPoint(xyz);\r\n if (bIncludeFinal) {\r\n this.addEdge(xyzOut, xyzMidpoint[0], xyzInterior);\r\n this.addEdge(xyzOut, xyzMidpoint[1], xyzInterior);\r\n this.addEdge(xyzOut, xyzMidpoint[2], xyzInterior);\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /** Add a polyline to the graph.\r\n * * This may be called multiple times\r\n */\r\n public insertEdges(xyzIn: Point3d[], bClosed: boolean): void {\r\n let pPreviousB, pFirstA;\r\n for (let i: number = 1; i < xyzIn.length; i++) {\r\n const nodeA = this._spineGraph.createEdgeXYZXYZ(\r\n xyzIn[i - 1].x, xyzIn[i - 1].y, 0, 0,\r\n xyzIn[i].x, xyzIn[i].y, 0, 0);\r\n const nodeB = nodeA.faceSuccessor;\r\n nodeA.setMask(HalfEdgeMask.BOUNDARY_EDGE);\r\n nodeB.setMask(HalfEdgeMask.BOUNDARY_EDGE);\r\n nodeA.setMask(HalfEdgeMask.PRIMARY_EDGE);\r\n nodeB.setMask(HalfEdgeMask.PRIMARY_EDGE);\r\n if (pPreviousB === undefined) {\r\n pFirstA = nodeA;\r\n } else {\r\n HalfEdge.pinch(pPreviousB, nodeA);\r\n }\r\n pPreviousB = nodeB;\r\n }\r\n if (bClosed && pFirstA !== undefined && pPreviousB !== undefined)\r\n HalfEdge.pinch(pPreviousB, pFirstA);\r\n }\r\n /**\r\n * Look for trivial (2 edge) faces that have exteriorMask and non-masked on both sides.\r\n * * clear the mask\r\n * @param exteriorMask\r\n */\r\n private purgeNullFaces(exteriorMask: HalfEdgeMask) {\r\n for (const nodeA of this._spineGraph.allHalfEdges) {\r\n const nodeB = nodeA.faceSuccessor;\r\n const nodeC = nodeB.faceSuccessor;\r\n if (nodeB !== nodeA && nodeC === nodeA) {\r\n if (nodeA.getMask(exteriorMask) && nodeB.getMask(exteriorMask)) {\r\n const mateA = nodeA.edgeMate;\r\n const mateB = nodeB.edgeMate;\r\n if (!mateA.getMask(exteriorMask) && !mateB.getMask(exteriorMask)) {\r\n nodeA.clearMask(exteriorMask);\r\n nodeB.clearMask(exteriorMask);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n private static _regularize1 = true;\r\n private static _regularize2 = true; // This was false. why? EDL April 2025\r\n /**\r\n * Triangulate the graph for the edges that have been inserted.\r\n * @param applyParity if true ()\r\n * @param minSplitRadians smallest allowed angle in the split sector that is split.\r\n */\r\n public triangulateForSpine(applyParity: boolean = true, minSplitRadians: number = 0.3): void {\r\n\r\n const sMaxSplit = 20;\r\n const sMinCandidateRadians = 1.0;\r\n let numSplit = 0;\r\n HalfEdgeGraphMerge.splitIntersectingEdges(this.graph);\r\n HalfEdgeGraphMerge.clusterAndMergeXYTheta(this.graph);\r\n\r\n const context1 = new RegularizationContext(this.graph);\r\n context1.regularizeGraph(HalfEdgeGraphSpineContext._regularize1, false);\r\n const context2 = new RegularizationContext(this.graph);\r\n context2.regularizeGraph(false, HalfEdgeGraphSpineContext._regularize2);\r\n if (applyParity) {\r\n HalfEdgeGraphSearch.collectConnectedComponentsWithExteriorParityMasks(this.graph,\r\n new HalfEdgeMaskTester(HalfEdgeMask.BOUNDARY_EDGE), HalfEdgeMask.EXTERIOR);\r\n this.purgeNullFaces(HalfEdgeMask.EXTERIOR);\r\n }\r\n\r\n Triangulator.triangulateAllPositiveAreaFaces(this.graph);\r\n Triangulator.flipTriangles(this.graph);\r\n\r\n while (numSplit++ < sMaxSplit) {\r\n const numPerp = this.addPerpendicularsToBoundaries(minSplitRadians, sMinCandidateRadians);\r\n if (numPerp <= 0)\r\n break;\r\n Triangulator.flipTriangles(this.graph);\r\n }\r\n }\r\n\r\n // Find pseudo spine edges\r\n // Optionally include pure internal midline segments.\r\n // Optionally include midline segments into \"dead end\"\r\n // Optionally include adjacent spokes to corner.\r\n /**\r\n * Retrieve edges of the spine as arrays of points.\r\n * @param bIncludeInterior true to include fully internal segments\r\n * @param bIncludeFinal true to include segments that terminate at a boundary\r\n * @param bIncludeCornerSpokes\r\n * @return array of line data.\r\n */\r\n public getSpineEdges(bIncludeInterior: boolean = true, bIncludeFinal: boolean = true, bIncludeCornerSpokes: boolean = true): Point3d[][] {\r\n const xyzOut: Point3d[][] = [];\r\n this._spineGraph.announceFaceLoops(\r\n (_graph: HalfEdgeGraph, faceSeed: HalfEdge) => {\r\n if (!faceSeed.getMask(HalfEdgeMask.EXTERIOR)) {\r\n if (this.getSpineEdgesInTriangle(faceSeed, xyzOut, bIncludeInterior, bIncludeFinal)) {\r\n } else if (this.getSpineEdgesInQuad(faceSeed, xyzOut, bIncludeInterior, bIncludeFinal, bIncludeCornerSpokes)) {\r\n }\r\n }\r\n return true;\r\n });\r\n return xyzOut;\r\n }\r\n\r\n /**\r\n * Intermediate markup step to identify quads between corresponding boundary edges.\r\n * * search for and mark triangle edges that should be treated as diagonal of a quad\r\n * * Angle logic is:\r\n * * In a candidate quad (formed by joining triangles that share an edge)\r\n * * form segments between opposite edges of the quad.\r\n * * compute angles between these segments and the edges of their quads.\r\n * * if this angle is larger than minAngleRadians, accept this as a quad.\r\n * * recommended angle is between 15 and 5 degrees; 50 degrees is typical\r\n * @param bDeleteDiagonals if true, eliminate the diagonals.\r\n * @param minAngleRadians angle tolerance, as described above.\r\n */\r\n public consolidateTrianglesToQuads(bDeleteDiagonals: boolean, minAngle: Angle = Angle.createDegrees(50)): number {\r\n\r\n const numDiagonal = this.setSortedDiagonalMasks(minAngle.radians);\r\n if (bDeleteDiagonals && numDiagonal > 0) {\r\n this.graph.yankAndDeleteEdges(\r\n (node: HalfEdge) => node.getMask(this._diagonalMask));\r\n }\r\n return numDiagonal;\r\n }\r\n}"]}
@@ -526,22 +526,22 @@ export declare class Geometry {
526
526
  */
527
527
  static distanceXYXY(x0: number, y0: number, x1: number, y1: number): number;
528
528
  /**
529
- * Return the squared distance between xy points given as numbers.
530
- * @param x0 x coordinate of point 0
531
- * @param y0 y coordinate of point 0
532
- * @param x1 x coordinate of point 1
533
- * @param y1 y coordinate of point 1
534
- */
529
+ * Return the squared distance between xy points given as numbers.
530
+ * @param x0 x coordinate of point 0
531
+ * @param y0 y coordinate of point 0
532
+ * @param x1 x coordinate of point 1
533
+ * @param y1 y coordinate of point 1
534
+ */
535
535
  static distanceSquaredXYXY(x0: number, y0: number, x1: number, y1: number): number;
536
536
  /**
537
- * Return the distance between xyz points given as numbers.
538
- * @param x0 x coordinate of point 0
539
- * @param y0 y coordinate of point 0
540
- * @param z0 z coordinate of point 0
541
- * @param x1 x coordinate of point 1
542
- * @param y1 y coordinate of point 1
543
- * @param z1 z coordinate of point 1
544
- */
537
+ * Return the distance between xyz points given as numbers.
538
+ * @param x0 x coordinate of point 0
539
+ * @param y0 y coordinate of point 0
540
+ * @param z0 z coordinate of point 0
541
+ * @param x1 x coordinate of point 1
542
+ * @param y1 y coordinate of point 1
543
+ * @param z1 z coordinate of point 1
544
+ */
545
545
  static distanceXYZXYZ(x0: number, y0: number, z0: number, x1: number, y1: number, z1: number): number;
546
546
  /**
547
547
  * Returns the triple product of 3 vectors provided as x,y,z number sequences.
@@ -604,6 +604,16 @@ export declare class Geometry {
604
604
  static dotProductXYXY(ux: number, uy: number, vx: number, vy: number): number;
605
605
  /** 3D dot product of vectors with the vectors presented as numbers. */
606
606
  static dotProductXYZXYZ(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number): number;
607
+ /**
608
+ * Return fractional length of the projection of the first vector ("the space vector") ux,uy to the vector vx,vy ("the direction vector")
609
+ * @param ux x component of space vector
610
+ * @param uy y component of space vector
611
+ * @param vx x component of direction vector
612
+ * @param vy y component of direction vector
613
+ * @param defaultFraction the returned value in case the magnitude of the direction vector is too small
614
+ * @returns the signed length of the projection divided by the length of the direction vector
615
+ */
616
+ static fractionOfProjectionToVectorXYXY(ux: number, uy: number, vx: number, vy: number, defaultFraction?: number): number;
607
617
  /**
608
618
  * Return the mean curvature for two radii.
609
619
  * * Curvature is the reciprocal of radius.
@@ -1 +1 @@
1
- {"version":3,"file":"Geometry.d.ts","sourceRoot":"","sources":["../../src/Geometry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Geometry.d.ts","sourceRoot":"","sources":["../../src/Geometry.ts"],"names":[],"mappings":"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"}
@@ -633,24 +633,24 @@ export class Geometry {
633
633
  return Geometry.hypotenuseXY(x1 - x0, y1 - y0);
634
634
  }
635
635
  /**
636
- * Return the squared distance between xy points given as numbers.
637
- * @param x0 x coordinate of point 0
638
- * @param y0 y coordinate of point 0
639
- * @param x1 x coordinate of point 1
640
- * @param y1 y coordinate of point 1
641
- */
636
+ * Return the squared distance between xy points given as numbers.
637
+ * @param x0 x coordinate of point 0
638
+ * @param y0 y coordinate of point 0
639
+ * @param x1 x coordinate of point 1
640
+ * @param y1 y coordinate of point 1
641
+ */
642
642
  static distanceSquaredXYXY(x0, y0, x1, y1) {
643
643
  return Geometry.hypotenuseSquaredXY(x1 - x0, y1 - y0);
644
644
  }
645
645
  /**
646
- * Return the distance between xyz points given as numbers.
647
- * @param x0 x coordinate of point 0
648
- * @param y0 y coordinate of point 0
649
- * @param z0 z coordinate of point 0
650
- * @param x1 x coordinate of point 1
651
- * @param y1 y coordinate of point 1
652
- * @param z1 z coordinate of point 1
653
- */
646
+ * Return the distance between xyz points given as numbers.
647
+ * @param x0 x coordinate of point 0
648
+ * @param y0 y coordinate of point 0
649
+ * @param z0 z coordinate of point 0
650
+ * @param x1 x coordinate of point 1
651
+ * @param y1 y coordinate of point 1
652
+ * @param z1 z coordinate of point 1
653
+ */
654
654
  static distanceXYZXYZ(x0, y0, z0, x1, y1, z1) {
655
655
  return Geometry.hypotenuseXYZ(x1 - x0, y1 - y0, z1 - z0);
656
656
  }
@@ -740,6 +740,26 @@ export class Geometry {
740
740
  static dotProductXYZXYZ(ux, uy, uz, vx, vy, vz) {
741
741
  return ux * vx + uy * vy + uz * vz;
742
742
  }
743
+ /**
744
+ * Return fractional length of the projection of the first vector ("the space vector") ux,uy to the vector vx,vy ("the direction vector")
745
+ * @param ux x component of space vector
746
+ * @param uy y component of space vector
747
+ * @param vx x component of direction vector
748
+ * @param vy y component of direction vector
749
+ * @param defaultFraction the returned value in case the magnitude of the direction vector is too small
750
+ * @returns the signed length of the projection divided by the length of the direction vector
751
+ */
752
+ static fractionOfProjectionToVectorXYXY(ux, uy, vx, vy, defaultFraction = 0) {
753
+ /*
754
+ * projection length is (this.target)/||target||
755
+ * but here we return (this.target)/||target||^2
756
+ */
757
+ const denominator = vx * vx + vy * vy;
758
+ if (denominator < Geometry.smallMetricDistanceSquared)
759
+ return defaultFraction;
760
+ const numerator = ux * vx + uy * vy;
761
+ return numerator / denominator;
762
+ }
743
763
  /**
744
764
  * Return the mean curvature for two radii.
745
765
  * * Curvature is the reciprocal of radius.