@itwin/core-geometry 3.1.0-dev.26 → 3.1.0-dev.31

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 (176) hide show
  1. package/CHANGELOG.md +38 -3
  2. package/lib/cjs/bspline/BSplineCurve.d.ts +8 -0
  3. package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
  4. package/lib/cjs/bspline/BSplineCurve.js +14 -0
  5. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  6. package/lib/cjs/bspline/BezierCurveBase.d.ts +8 -0
  7. package/lib/cjs/bspline/BezierCurveBase.d.ts.map +1 -1
  8. package/lib/cjs/bspline/BezierCurveBase.js +16 -1
  9. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  10. package/lib/cjs/curve/Arc3d.d.ts +6 -0
  11. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  12. package/lib/cjs/curve/Arc3d.js +31 -0
  13. package/lib/cjs/curve/Arc3d.js.map +1 -1
  14. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts +8 -1
  15. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  16. package/lib/cjs/curve/CurveChainWithDistanceIndex.js +22 -2
  17. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  18. package/lib/cjs/curve/CurveCurveIntersectXY.d.ts.map +1 -1
  19. package/lib/cjs/curve/CurveCurveIntersectXY.js +3 -1
  20. package/lib/cjs/curve/CurveCurveIntersectXY.js.map +1 -1
  21. package/lib/cjs/curve/CurveFactory.d.ts +7 -3
  22. package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
  23. package/lib/cjs/curve/CurveFactory.js +30 -15
  24. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  25. package/lib/cjs/curve/CurvePrimitive.d.ts +23 -9
  26. package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
  27. package/lib/cjs/curve/CurvePrimitive.js +18 -0
  28. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  29. package/lib/cjs/curve/LineSegment3d.d.ts +6 -0
  30. package/lib/cjs/curve/LineSegment3d.d.ts.map +1 -1
  31. package/lib/cjs/curve/LineSegment3d.js +14 -0
  32. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  33. package/lib/cjs/curve/LineString3d.d.ts +7 -0
  34. package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
  35. package/lib/cjs/curve/LineString3d.js +20 -0
  36. package/lib/cjs/curve/LineString3d.js.map +1 -1
  37. package/lib/cjs/curve/ProxyCurve.d.ts +6 -2
  38. package/lib/cjs/curve/ProxyCurve.d.ts.map +1 -1
  39. package/lib/cjs/curve/ProxyCurve.js +5 -0
  40. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  41. package/lib/cjs/curve/Query/PlanarSubdivision.d.ts +11 -0
  42. package/lib/cjs/curve/Query/PlanarSubdivision.d.ts.map +1 -1
  43. package/lib/cjs/curve/Query/PlanarSubdivision.js +26 -17
  44. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  45. package/lib/cjs/curve/RegionOps.d.ts +15 -16
  46. package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
  47. package/lib/cjs/curve/RegionOps.js +14 -16
  48. package/lib/cjs/curve/RegionOps.js.map +1 -1
  49. package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
  50. package/lib/cjs/curve/RegionOpsClassificationSweeps.js +3 -1
  51. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  52. package/lib/cjs/curve/StrokeOptions.d.ts +6 -0
  53. package/lib/cjs/curve/StrokeOptions.d.ts.map +1 -1
  54. package/lib/cjs/curve/StrokeOptions.js +20 -0
  55. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  56. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.d.ts +36 -0
  57. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.d.ts.map +1 -0
  58. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js +73 -0
  59. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -0
  60. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts +48 -24
  61. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
  62. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +113 -112
  63. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  64. package/lib/cjs/curve/spiral/IntegratedSpiral3d.d.ts.map +1 -1
  65. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +33 -7
  66. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  67. package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts +8 -0
  68. package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
  69. package/lib/cjs/curve/spiral/TransitionSpiral3d.js +14 -0
  70. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  71. package/lib/cjs/geometry3d/Matrix3d.d.ts +4 -4
  72. package/lib/cjs/geometry3d/Matrix3d.js +4 -4
  73. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  74. package/lib/cjs/geometry4d/Matrix4d.d.ts.map +1 -1
  75. package/lib/cjs/geometry4d/Matrix4d.js +21 -8
  76. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  77. package/lib/cjs/numerics/ClusterableArray.d.ts +1 -1
  78. package/lib/cjs/numerics/ClusterableArray.d.ts.map +1 -1
  79. package/lib/cjs/numerics/ClusterableArray.js +2 -2
  80. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  81. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +15 -1
  82. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  83. package/lib/cjs/polyface/PolyfaceBuilder.js +17 -11
  84. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  85. package/lib/cjs/topology/Merging.d.ts +22 -3
  86. package/lib/cjs/topology/Merging.d.ts.map +1 -1
  87. package/lib/cjs/topology/Merging.js +97 -1
  88. package/lib/cjs/topology/Merging.js.map +1 -1
  89. package/lib/esm/bspline/BSplineCurve.d.ts +8 -0
  90. package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
  91. package/lib/esm/bspline/BSplineCurve.js +14 -0
  92. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  93. package/lib/esm/bspline/BezierCurveBase.d.ts +8 -0
  94. package/lib/esm/bspline/BezierCurveBase.d.ts.map +1 -1
  95. package/lib/esm/bspline/BezierCurveBase.js +16 -1
  96. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  97. package/lib/esm/curve/Arc3d.d.ts +6 -0
  98. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  99. package/lib/esm/curve/Arc3d.js +31 -0
  100. package/lib/esm/curve/Arc3d.js.map +1 -1
  101. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +8 -1
  102. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  103. package/lib/esm/curve/CurveChainWithDistanceIndex.js +22 -2
  104. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  105. package/lib/esm/curve/CurveCurveIntersectXY.d.ts.map +1 -1
  106. package/lib/esm/curve/CurveCurveIntersectXY.js +3 -1
  107. package/lib/esm/curve/CurveCurveIntersectXY.js.map +1 -1
  108. package/lib/esm/curve/CurveFactory.d.ts +7 -3
  109. package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
  110. package/lib/esm/curve/CurveFactory.js +30 -15
  111. package/lib/esm/curve/CurveFactory.js.map +1 -1
  112. package/lib/esm/curve/CurvePrimitive.d.ts +23 -9
  113. package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
  114. package/lib/esm/curve/CurvePrimitive.js +18 -0
  115. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  116. package/lib/esm/curve/LineSegment3d.d.ts +6 -0
  117. package/lib/esm/curve/LineSegment3d.d.ts.map +1 -1
  118. package/lib/esm/curve/LineSegment3d.js +15 -1
  119. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  120. package/lib/esm/curve/LineString3d.d.ts +7 -0
  121. package/lib/esm/curve/LineString3d.d.ts.map +1 -1
  122. package/lib/esm/curve/LineString3d.js +20 -0
  123. package/lib/esm/curve/LineString3d.js.map +1 -1
  124. package/lib/esm/curve/ProxyCurve.d.ts +6 -2
  125. package/lib/esm/curve/ProxyCurve.d.ts.map +1 -1
  126. package/lib/esm/curve/ProxyCurve.js +5 -0
  127. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  128. package/lib/esm/curve/Query/PlanarSubdivision.d.ts +11 -0
  129. package/lib/esm/curve/Query/PlanarSubdivision.d.ts.map +1 -1
  130. package/lib/esm/curve/Query/PlanarSubdivision.js +26 -17
  131. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  132. package/lib/esm/curve/RegionOps.d.ts +15 -16
  133. package/lib/esm/curve/RegionOps.d.ts.map +1 -1
  134. package/lib/esm/curve/RegionOps.js +15 -17
  135. package/lib/esm/curve/RegionOps.js.map +1 -1
  136. package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
  137. package/lib/esm/curve/RegionOpsClassificationSweeps.js +3 -1
  138. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  139. package/lib/esm/curve/StrokeOptions.d.ts +6 -0
  140. package/lib/esm/curve/StrokeOptions.d.ts.map +1 -1
  141. package/lib/esm/curve/StrokeOptions.js +20 -0
  142. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  143. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.d.ts +36 -0
  144. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.d.ts.map +1 -0
  145. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js +69 -0
  146. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -0
  147. package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts +48 -24
  148. package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
  149. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +111 -111
  150. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  151. package/lib/esm/curve/spiral/IntegratedSpiral3d.d.ts.map +1 -1
  152. package/lib/esm/curve/spiral/IntegratedSpiral3d.js +33 -7
  153. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  154. package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts +8 -0
  155. package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
  156. package/lib/esm/curve/spiral/TransitionSpiral3d.js +14 -0
  157. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  158. package/lib/esm/geometry3d/Matrix3d.d.ts +4 -4
  159. package/lib/esm/geometry3d/Matrix3d.js +4 -4
  160. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  161. package/lib/esm/geometry4d/Matrix4d.d.ts.map +1 -1
  162. package/lib/esm/geometry4d/Matrix4d.js +21 -8
  163. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  164. package/lib/esm/numerics/ClusterableArray.d.ts +1 -1
  165. package/lib/esm/numerics/ClusterableArray.d.ts.map +1 -1
  166. package/lib/esm/numerics/ClusterableArray.js +2 -2
  167. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  168. package/lib/esm/polyface/PolyfaceBuilder.d.ts +15 -1
  169. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  170. package/lib/esm/polyface/PolyfaceBuilder.js +17 -11
  171. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  172. package/lib/esm/topology/Merging.d.ts +22 -3
  173. package/lib/esm/topology/Merging.d.ts.map +1 -1
  174. package/lib/esm/topology/Merging.js +95 -0
  175. package/lib/esm/topology/Merging.js.map +1 -1
  176. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"ProxyCurve.d.ts","sourceRoot":"","sources":["../../../src/curve/ProxyCurve.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,4BAA4B,EAAE,MAAM,4CAA4C,CAAC;AAC1F,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;;;;;;;;;;;;;;GAiBG;AACH,8BAAsB,UAAW,SAAQ,cAAc;IAC9C,yBAAyB,CAAC,OAAO,EAAE,eAAe;IAIzD,SAAS,CAAC,WAAW,EAAE,cAAc,CAAC;IACtC,kDAAkD;gBAC/B,UAAU,EAAE,cAAc;IAK7C,+CAA+C;IAC/C,IAAW,UAAU,IAAI,cAAc,CAA4B;IACnE,8BAA8B;IACvB,4BAA4B,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM;IAIpE,8BAA8B;IACvB,kBAAkB,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI;IAGhF,8BAA8B;IACvB,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI;IAGrE,8BAA8B;IACvB,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI;IAIvE,8BAA8B;IACd,KAAK,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAGvE,8BAA8B;IACvB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAInE,8BAA8B;IACvB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK;IAI5E,8BAA8B;IACrB,8BAA8B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,yBAAyB,GAAG,yBAAyB,GAAG,SAAS;IAIlI,8BAA8B;IACzB,SAAS,CAAC,KAAK,EAAE,4BAA4B,GAAG,OAAO;IAGrD,WAAW,IAAI,MAAM;CAI7B"}
1
+ {"version":3,"file":"ProxyCurve.d.ts","sourceRoot":"","sources":["../../../src/curve/ProxyCurve.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,4BAA4B,EAAE,MAAM,4CAA4C,CAAC;AAC1F,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD;;;;;;;;;;;;;;;;;GAiBG;AACH,8BAAsB,UAAW,SAAQ,cAAc;IAC9C,yBAAyB,CAAC,OAAO,EAAE,eAAe;IAIzD,SAAS,CAAC,WAAW,EAAE,cAAc,CAAC;IAEtC,kDAAkD;gBAC/B,UAAU,EAAE,cAAc;IAK7C,+CAA+C;IAC/C,IAAW,UAAU,IAAI,cAAc,CAA4B;IAEnE,8BAA8B;IACvB,4BAA4B,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM;IAIpE,8BAA8B;IACvB,kBAAkB,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI;IAI9E,8BAA8B;IACvB,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI;IAIrE,8BAA8B;IACvB,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI;IAIvE,8BAA8B;IACd,KAAK,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAIvE,8BAA8B;IACvB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAInE,8BAA8B;IACvB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK;IAI5E,8BAA8B;IACvB,8BAA8B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,yBAAyB,GAAG,yBAAyB,GAAG,SAAS;IAIlI,8BAA8B;IACvB,SAAS,CAAC,KAAK,EAAE,4BAA4B,GAAG,OAAO;IAI9D,8BAA8B;IACvB,WAAW,IAAI,MAAM;IAI5B,8BAA8B;IACd,iBAAiB,CAAC,uBAAuB,EAAE,MAAM,GAAG,aAAa,GAAG,cAAc,GAAG,cAAc,EAAE,GAAG,SAAS;CAGlI"}
@@ -71,8 +71,13 @@ export class ProxyCurve extends CurvePrimitive {
71
71
  isInPlane(plane) {
72
72
  return this._proxyCurve.isInPlane(plane);
73
73
  }
74
+ /** Implement by proxyCurve */
74
75
  quickLength() {
75
76
  return this._proxyCurve.quickLength();
76
77
  }
78
+ /** Implement by proxyCurve */
79
+ constructOffsetXY(offsetDistanceOrOptions) {
80
+ return this._proxyCurve.constructOffsetXY(offsetDistanceOrOptions);
81
+ }
77
82
  }
78
83
  //# sourceMappingURL=ProxyCurve.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProxyCurve.js","sourceRoot":"","sources":["../../../src/curve/ProxyCurve.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAWzD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAgB,UAAW,SAAQ,cAAc;IAMrD,kDAAkD;IAClD,YAAmB,UAA0B;QAC3C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IATM,yBAAyB,CAAC,OAAwB;QACvD,OAAO,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAC7D,CAAC;IASD,+CAA+C;IAC/C,IAAW,UAAU,KAAqB,OAAO,IAAI,CAAC,WAAW,CAAC,CAAA,CAAC;IACnE,8BAA8B;IACvB,4BAA4B,CAAC,OAAuB;QAC3D,OAAO,IAAI,CAAC,WAAW,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED,8BAA8B;IACvB,kBAAkB,CAAC,IAAoB,EAAE,OAAuB;QACvE,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IACH,8BAA8B;IACvB,WAAW,CAAC,IAAkB,EAAE,OAAuB;QAC5D,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IACH,8BAA8B;IACvB,WAAW,CAAC,aAAsB,EAAE,SAAqB;QAC9D,IAAI,CAAC,WAAW,CAAC,WAAW,CAAE,aAAa,EAAE,SAAS,CAAC,CAAC;IACxD,CAAC;IAEH,8BAA8B;IACd,KAAK,CAAC,SAAqB,EAAE,MAAgB;QACzD,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;IACH,8BAA8B;IACvB,eAAe,CAAC,QAAgB,EAAE,MAAgB;QACrD,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC;IAEH,8BAA8B;IACvB,4BAA4B,CAAC,QAAgB,EAAE,MAAc;QAChE,OAAO,IAAI,CAAC,WAAW,CAAC,4BAA4B,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzE,CAAC;IAEH,8BAA8B;IACrB,8BAA8B,CAAC,QAAgB,EAAE,MAAkC;QACxF,OAAO,IAAI,CAAC,WAAW,CAAC,8BAA8B,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3E,CAAC;IAED,8BAA8B;IACzB,SAAS,CAAC,KAAmC;QAChD,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IACM,WAAW;QAChB,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;IACxC,CAAC;CAEF","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 Curve\r\n */\r\n\r\nimport { CurvePrimitive } from \"../curve/CurvePrimitive\";\r\nimport { GeometryHandler, IStrokeHandler } from \"../geometry3d/GeometryHandler\";\r\nimport { Plane3dByOriginAndUnitNormal } from \"../geometry3d/Plane3dByOriginAndUnitNormal\";\r\nimport { Plane3dByOriginAndVectors } from \"../geometry3d/Plane3dByOriginAndVectors\";\r\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Range3d } from \"../geometry3d/Range\";\r\nimport { Ray3d } from \"../geometry3d/Ray3d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { LineString3d } from \"./LineString3d\";\r\nimport { StrokeOptions } from \"./StrokeOptions\";\r\n\r\n/**\r\n * A ProxyCurve is expected to be used as a base class for\r\n * curve types that use some existing curve (the proxy) for evaluation and display\r\n * but carry other defining data.\r\n * * The ProxyCurve implements all required CurvePrimitive methods by dispatching\r\n * to the proxy.\r\n * * These methods presumably require support from the application class and are left abstract:\r\n * * clone\r\n * * clonePartialCurve\r\n * * cloneTransformed\r\n * * curvePrimitiveType\r\n * * isSameCurvePrimitiveType\r\n * * isSameGeometryClass\r\n * * tryTransformInPlace\r\n * * reverseInPlace\r\n *\r\n * @public\r\n */\r\nexport abstract class ProxyCurve extends CurvePrimitive{\r\n public dispatchToGeometryHandler(handler: GeometryHandler) {\r\n return this._proxyCurve.dispatchToGeometryHandler(handler);\r\n }\r\n\r\n protected _proxyCurve: CurvePrimitive;\r\n /** Constructor CAPTURES the proxyCurve pointer */\r\n public constructor(proxyCurve: CurvePrimitive) {\r\n super();\r\n this._proxyCurve = proxyCurve;\r\n }\r\n\r\n /** return the (pointer to) the proxy curve. */\r\n public get proxyCurve(): CurvePrimitive { return this._proxyCurve;}\r\n /** Implement by proxyCurve */\r\n public computeStrokeCountForOptions(options?: StrokeOptions): number {\r\n return this._proxyCurve.computeStrokeCountForOptions(options);\r\n }\r\n\r\n /** Implement by proxyCurve */\r\n public emitStrokableParts(dest: IStrokeHandler, options?: StrokeOptions): void{\r\n this._proxyCurve.emitStrokableParts(dest, options);\r\n }\r\n/** Implement by proxyCurve */\r\npublic emitStrokes(dest: LineString3d, options?: StrokeOptions): void{\r\n this._proxyCurve.emitStrokes(dest, options);\r\n }\r\n/** Implement by proxyCurve */\r\npublic extendRange(rangeToExtend: Range3d, transform?: Transform): void{\r\n this._proxyCurve.extendRange (rangeToExtend, transform);\r\n }\r\n\r\n/** Implement by proxyCurve */\r\npublic override range(transform?: Transform, result?: Range3d): Range3d {\r\n return this._proxyCurve.range(transform, result);\r\n }\r\n/** Implement by proxyCurve */\r\npublic fractionToPoint(fraction: number, result?: Point3d): Point3d{\r\n return this._proxyCurve.fractionToPoint(fraction, result);\r\n }\r\n\r\n/** Implement by proxyCurve */\r\npublic fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d{\r\n return this._proxyCurve.fractionToPointAndDerivative(fraction, result);\r\n }\r\n\r\n/** Implement by proxyCurve */\r\n public fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors | undefined{\r\n return this._proxyCurve.fractionToPointAnd2Derivatives(fraction, result);\r\n }\r\n\r\n /** Implement by proxyCurve */\r\npublic isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean {\r\n return this._proxyCurve.isInPlane(plane);\r\n }\r\n public quickLength(): number {\r\n return this._proxyCurve.quickLength();\r\n }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"ProxyCurve.js","sourceRoot":"","sources":["../../../src/curve/ProxyCurve.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAYzD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAgB,UAAW,SAAQ,cAAc;IAOrD,kDAAkD;IAClD,YAAmB,UAA0B;QAC3C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAVM,yBAAyB,CAAC,OAAwB;QACvD,OAAO,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAC7D,CAAC;IAUD,+CAA+C;IAC/C,IAAW,UAAU,KAAqB,OAAO,IAAI,CAAC,WAAW,CAAC,CAAA,CAAC;IAEnE,8BAA8B;IACvB,4BAA4B,CAAC,OAAuB;QACzD,OAAO,IAAI,CAAC,WAAW,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAAC;IAChE,CAAC;IAED,8BAA8B;IACvB,kBAAkB,CAAC,IAAoB,EAAE,OAAuB;QACrE,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,8BAA8B;IACvB,WAAW,CAAC,IAAkB,EAAE,OAAuB;QAC5D,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,8BAA8B;IACvB,WAAW,CAAC,aAAsB,EAAE,SAAqB;QAC9D,IAAI,CAAC,WAAW,CAAC,WAAW,CAAE,aAAa,EAAE,SAAS,CAAC,CAAC;IAC1D,CAAC;IAED,8BAA8B;IACd,KAAK,CAAC,SAAqB,EAAE,MAAgB;QAC3D,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;IAED,8BAA8B;IACvB,eAAe,CAAC,QAAgB,EAAE,MAAgB;QACvD,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED,8BAA8B;IACvB,4BAA4B,CAAC,QAAgB,EAAE,MAAc;QAClE,OAAO,IAAI,CAAC,WAAW,CAAC,4BAA4B,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzE,CAAC;IAED,8BAA8B;IACvB,8BAA8B,CAAC,QAAgB,EAAE,MAAkC;QACxF,OAAO,IAAI,CAAC,WAAW,CAAC,8BAA8B,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3E,CAAC;IAED,8BAA8B;IACvB,SAAS,CAAC,KAAmC;QAClD,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,8BAA8B;IACvB,WAAW;QAChB,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;IACxC,CAAC;IAED,8BAA8B;IACd,iBAAiB,CAAC,uBAA+C;QAC/E,OAAO,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,CAAC;IACrE,CAAC;CACF","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 Curve\r\n */\r\n\r\nimport { CurvePrimitive } from \"../curve/CurvePrimitive\";\r\nimport { GeometryHandler, IStrokeHandler } from \"../geometry3d/GeometryHandler\";\r\nimport { Plane3dByOriginAndUnitNormal } from \"../geometry3d/Plane3dByOriginAndUnitNormal\";\r\nimport { Plane3dByOriginAndVectors } from \"../geometry3d/Plane3dByOriginAndVectors\";\r\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Range3d } from \"../geometry3d/Range\";\r\nimport { Ray3d } from \"../geometry3d/Ray3d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport type { OffsetOptions } from \"./internalContexts/PolygonOffsetContext\";\r\nimport type { LineString3d } from \"./LineString3d\";\r\nimport type { StrokeOptions } from \"./StrokeOptions\";\r\n\r\n/**\r\n * A ProxyCurve is expected to be used as a base class for\r\n * curve types that use some existing curve (the proxy) for evaluation and display\r\n * but carry other defining data.\r\n * * The ProxyCurve implements all required CurvePrimitive methods by dispatching\r\n * to the proxy.\r\n * * These methods presumably require support from the application class and are left abstract:\r\n * * clone\r\n * * clonePartialCurve\r\n * * cloneTransformed\r\n * * curvePrimitiveType\r\n * * isSameCurvePrimitiveType\r\n * * isSameGeometryClass\r\n * * tryTransformInPlace\r\n * * reverseInPlace\r\n *\r\n * @public\r\n */\r\nexport abstract class ProxyCurve extends CurvePrimitive{\r\n public dispatchToGeometryHandler(handler: GeometryHandler) {\r\n return this._proxyCurve.dispatchToGeometryHandler(handler);\r\n }\r\n\r\n protected _proxyCurve: CurvePrimitive;\r\n\r\n /** Constructor CAPTURES the proxyCurve pointer */\r\n public constructor(proxyCurve: CurvePrimitive) {\r\n super();\r\n this._proxyCurve = proxyCurve;\r\n }\r\n\r\n /** return the (pointer to) the proxy curve. */\r\n public get proxyCurve(): CurvePrimitive { return this._proxyCurve;}\r\n\r\n /** Implement by proxyCurve */\r\n public computeStrokeCountForOptions(options?: StrokeOptions): number {\r\n return this._proxyCurve.computeStrokeCountForOptions(options);\r\n }\r\n\r\n /** Implement by proxyCurve */\r\n public emitStrokableParts(dest: IStrokeHandler, options?: StrokeOptions): void{\r\n this._proxyCurve.emitStrokableParts(dest, options);\r\n }\r\n\r\n /** Implement by proxyCurve */\r\n public emitStrokes(dest: LineString3d, options?: StrokeOptions): void{\r\n this._proxyCurve.emitStrokes(dest, options);\r\n }\r\n\r\n /** Implement by proxyCurve */\r\n public extendRange(rangeToExtend: Range3d, transform?: Transform): void{\r\n this._proxyCurve.extendRange (rangeToExtend, transform);\r\n }\r\n\r\n /** Implement by proxyCurve */\r\n public override range(transform?: Transform, result?: Range3d): Range3d {\r\n return this._proxyCurve.range(transform, result);\r\n }\r\n\r\n /** Implement by proxyCurve */\r\n public fractionToPoint(fraction: number, result?: Point3d): Point3d{\r\n return this._proxyCurve.fractionToPoint(fraction, result);\r\n }\r\n\r\n /** Implement by proxyCurve */\r\n public fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d{\r\n return this._proxyCurve.fractionToPointAndDerivative(fraction, result);\r\n }\r\n\r\n /** Implement by proxyCurve */\r\n public fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors | undefined{\r\n return this._proxyCurve.fractionToPointAnd2Derivatives(fraction, result);\r\n }\r\n\r\n /** Implement by proxyCurve */\r\n public isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean {\r\n return this._proxyCurve.isInPlane(plane);\r\n }\r\n\r\n /** Implement by proxyCurve */\r\n public quickLength(): number {\r\n return this._proxyCurve.quickLength();\r\n }\r\n\r\n /** Implement by proxyCurve */\r\n public override constructOffsetXY(offsetDistanceOrOptions: number | OffsetOptions): CurvePrimitive | CurvePrimitive[] | undefined {\r\n return this._proxyCurve.constructOffsetXY(offsetDistanceOrOptions);\r\n }\r\n}\r\n"]}
@@ -7,6 +7,17 @@ import { Loop, SignedLoops } from "../Loop";
7
7
  */
8
8
  export declare class PlanarSubdivision {
9
9
  static assembleHalfEdgeGraph(_primitives: CurvePrimitive[], allPairs: CurveLocationDetailPair[]): HalfEdgeGraph;
10
+ /**
11
+ * Create a pair of mated half edges referencing an interval of a primitive
12
+ * * no action if start and end points are identical.
13
+ * @param graph containing graph.
14
+ * @param p the curve
15
+ * @param fraction0 starting fraction
16
+ * @param point0 start point
17
+ * @param fraction1 end fraction
18
+ * @param point1 end point
19
+ */
20
+ private static addHalfEdge;
10
21
  static collectSignedLoop(loop: Loop, signedAreas: SignedLoops, zeroAreaTolerance?: number): number;
11
22
  static createLoopInFace(faceSeed: HalfEdge, announce?: (he: HalfEdge, curve: CurvePrimitive, loop: Loop) => void): Loop;
12
23
  private static isNullFace;
@@ -1 +1 @@
1
- {"version":3,"file":"PlanarSubdivision.d.ts","sourceRoot":"","sources":["../../../../src/curve/Query/PlanarSubdivision.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG/D,OAAO,EAAuB,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAsB,WAAW,EAAE,MAAM,SAAS,CAAC;AAqDhE;;GAEG;AACH,qBAAa,iBAAiB;WACd,qBAAqB,CAAC,WAAW,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,uBAAuB,EAAE,GAAG,aAAa;WA4CxG,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,GAAE,MAAgB,GAAG,MAAM;WAepG,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAC/C,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,IAAI;IAuB7E,OAAO,CAAC,MAAM,CAAC,UAAU;IAIzB,OAAO,CAAC,MAAM,CAAC,eAAe;WAWhB,oCAAoC,CAAC,KAAK,EAAE,aAAa,EAAE,iBAAiB,GAAE,MAAgB,GAAG,WAAW,EAAE;CAmC7H"}
1
+ {"version":3,"file":"PlanarSubdivision.d.ts","sourceRoot":"","sources":["../../../../src/curve/Query/PlanarSubdivision.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG/D,OAAO,EAAuB,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAsB,WAAW,EAAE,MAAM,SAAS,CAAC;AAqDhE;;GAEG;AACH,qBAAa,iBAAiB;WACd,qBAAqB,CAAC,WAAW,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,uBAAuB,EAAE,GAAG,aAAa;IA+BxH;;;;;;;;;OASG;IACD,OAAO,CAAC,MAAM,CAAC,WAAW;WAeZ,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,GAAE,MAAgB,GAAG,MAAM;WAepG,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAC/C,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,IAAI;IAuB7E,OAAO,CAAC,MAAM,CAAC,UAAU;IAIzB,OAAO,CAAC,MAAM,CAAC,eAAe;WAWhB,oCAAoC,CAAC,KAAK,EAAE,aAAa,EAAE,iBAAiB,GAAE,MAAgB,GAAG,WAAW,EAAE;CAmC7H"}
@@ -1,7 +1,3 @@
1
- /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
5
1
  import { HalfEdgeGraph } from "../../topology/Graph";
6
2
  import { HalfEdgeGraphSearch } from "../../topology/HalfEdgeGraphSearch";
7
3
  import { HalfEdgeGraphMerge } from "../../topology/Merging";
@@ -83,28 +79,41 @@ export class PlanarSubdivision {
83
79
  return fractionA - fractionB;
84
80
  });
85
81
  let detail0 = getDetailOnCurve(details[0], p);
82
+ this.addHalfEdge(graph, p, p.startPoint(), 0.0, detail0.point, detail0.fraction);
86
83
  for (let i = 1; i < details.length; i++) {
87
84
  // create (both sides of) a graph edge . . .
88
85
  const detail1 = getDetailOnCurve(details[i], p);
89
- if (detail0.point.isAlmostEqual(detail1.point)) {
90
- }
91
- else {
92
- const halfEdge = graph.createEdgeXYAndZ(detail0.point, 0, detail1.point, 0);
93
- const detail01 = CurveLocationDetail.createCurveEvaluatedFractionFraction(p, detail0.fraction, detail1.fraction);
94
- const mate = halfEdge.edgeMate;
95
- halfEdge.edgeTag = detail01;
96
- halfEdge.sortData = 1.0;
97
- mate.edgeTag = detail01;
98
- mate.sortData = -1.0;
99
- halfEdge.sortAngle = sortAngle(detail01.curve, detail01.fraction, false);
100
- mate.sortAngle = sortAngle(detail01.curve, detail01.fraction1, true);
101
- }
86
+ this.addHalfEdge(graph, p, detail0.point, detail0.fraction, detail1.point, detail1.fraction);
102
87
  detail0 = detail1;
103
88
  }
89
+ this.addHalfEdge(graph, p, detail0.point, detail0.fraction, p.endPoint(), 1.0);
104
90
  }
105
91
  HalfEdgeGraphMerge.clusterAndMergeXYTheta(graph, (he) => he.sortAngle);
106
92
  return graph;
107
93
  }
94
+ /**
95
+ * Create a pair of mated half edges referencing an interval of a primitive
96
+ * * no action if start and end points are identical.
97
+ * @param graph containing graph.
98
+ * @param p the curve
99
+ * @param fraction0 starting fraction
100
+ * @param point0 start point
101
+ * @param fraction1 end fraction
102
+ * @param point1 end point
103
+ */
104
+ static addHalfEdge(graph, p, point0, fraction0, point1, fraction1) {
105
+ if (!point0.isAlmostEqual(point1)) {
106
+ const halfEdge = graph.createEdgeXYAndZ(point0, 0, point1, 0);
107
+ const detail01 = CurveLocationDetail.createCurveEvaluatedFractionFraction(p, fraction0, fraction1);
108
+ const mate = halfEdge.edgeMate;
109
+ halfEdge.edgeTag = detail01;
110
+ halfEdge.sortData = 1.0;
111
+ mate.edgeTag = detail01;
112
+ mate.sortData = -1.0;
113
+ halfEdge.sortAngle = sortAngle(detail01.curve, detail01.fraction, false);
114
+ mate.sortAngle = sortAngle(detail01.curve, detail01.fraction1, true);
115
+ }
116
+ }
108
117
  // based on computed (and toleranced) area, push the loop (pointer) onto the appropriate array of positive, negative, or sliver loops.
109
118
  // return the area (forced to zero if within tolerance)
110
119
  static collectSignedLoop(loop, signedAreas, zeroAreaTolerance = 1.0e-10) {
@@ -1 +1 @@
1
- {"version":3,"file":"PlanarSubdivision.js","sourceRoot":"","sources":["../../../../src/curve/Query/PlanarSubdivision.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\nimport { HalfEdge, HalfEdgeGraph } from \"../../topology/Graph\";\r\nimport { HalfEdgeGraphSearch } from \"../../topology/HalfEdgeGraphSearch\";\r\nimport { HalfEdgeGraphMerge } from \"../../topology/Merging\";\r\nimport { CurveLocationDetail, CurveLocationDetailPair } from \"../CurveLocationDetail\";\r\nimport { CurvePrimitive } from \"../CurvePrimitive\";\r\nimport { Loop, LoopCurveLoopCurve, SignedLoops } from \"../Loop\";\r\nimport { RegionOps } from \"../RegionOps\";\r\n\r\n/** @packageDocumentation\r\n * @module Curve\r\n */\r\n\r\nclass MapCurvePrimitiveToCurveLocatioNDetailPairArray {\r\n public primitiveToPair = new Map<CurvePrimitive, CurveLocationDetailPair[]>();\r\n // index assigned to this primitive for this calculation.\r\n public primitiveToIndex = new Map<CurvePrimitive, number>();\r\n private _numIndexedPrimitives: number = 0;\r\n public assignPrimitiveIndex(primitive: CurvePrimitive | undefined) {\r\n if (primitive !== undefined) {\r\n const index = this.primitiveToIndex.get(primitive);\r\n if (index === undefined) {\r\n this.primitiveToIndex.set(primitive, this._numIndexedPrimitives++);\r\n }\r\n }\r\n }\r\n public insertPrimitiveToPair(primitive: CurvePrimitive | undefined, pair: CurveLocationDetailPair) {\r\n if (primitive) {\r\n const priorPairs = this.primitiveToPair.get(primitive);\r\n this.assignPrimitiveIndex(primitive);\r\n if (!priorPairs) {\r\n this.primitiveToPair.set(primitive, [pair]);\r\n } else {\r\n priorPairs.push(pair);\r\n }\r\n }\r\n }\r\n public insertPair(pair: CurveLocationDetailPair) {\r\n const primitiveA = pair.detailA.curve;\r\n if (primitiveA)\r\n this.insertPrimitiveToPair(primitiveA, pair);\r\n const primitiveB = pair.detailB.curve;\r\n if (primitiveB)\r\n this.insertPrimitiveToPair(primitiveB, pair);\r\n }\r\n}\r\n/*\r\n function getDetailString(detail: CurveLocationDetail | undefined): string {\r\n if (!detail)\r\n return \"{}\";\r\n else return tagString(\"primitive\", this.primitiveToIndex.get(detail.curve!)) + tagString(\"f0\", detail.fraction) + tagString(\"f1\", detail.fraction1);\r\n }\r\n}\r\nfunction tagString(name: string, value: number | undefined): string {\r\n if (value !== undefined)\r\n return \"(\" + name + \" \" + value + \")\";\r\n return \"\";\r\n}\r\n*/\r\n/**\r\n * @internal\r\n */\r\nexport class PlanarSubdivision {\r\n public static assembleHalfEdgeGraph(_primitives: CurvePrimitive[], allPairs: CurveLocationDetailPair[]): HalfEdgeGraph {\r\n const detailByPrimitive = new MapCurvePrimitiveToCurveLocatioNDetailPairArray(); // map from key CurvePrimitive to CurveLocationDetailPair.\r\n for (const p of _primitives)\r\n detailByPrimitive.assignPrimitiveIndex(p);\r\n for (const pair of allPairs) {\r\n detailByPrimitive.insertPair(pair);\r\n }\r\n const graph = new HalfEdgeGraph();\r\n for (const entry of detailByPrimitive.primitiveToPair.entries()) {\r\n const p = entry[0];\r\n const details = entry[1];\r\n details.sort((pairA: CurveLocationDetailPair, pairB: CurveLocationDetailPair) => {\r\n const fractionA = getFractionOnCurve(pairA, p);\r\n const fractionB = getFractionOnCurve(pairB, p);\r\n if (fractionA === undefined || fractionB === undefined)\r\n return -1000.0;\r\n return fractionA - fractionB;\r\n });\r\n let detail0 = getDetailOnCurve(details[0], p)!;\r\n for (let i = 1; i < details.length; i++) {\r\n // create (both sides of) a graph edge . . .\r\n const detail1 = getDetailOnCurve(details[i], p)!;\r\n if (detail0.point.isAlmostEqual(detail1.point)) {\r\n\r\n } else {\r\n const halfEdge = graph.createEdgeXYAndZ(detail0.point, 0, detail1.point, 0);\r\n const detail01 = CurveLocationDetail.createCurveEvaluatedFractionFraction(p, detail0.fraction, detail1.fraction);\r\n const mate = halfEdge.edgeMate;\r\n halfEdge.edgeTag = detail01;\r\n halfEdge.sortData = 1.0;\r\n mate.edgeTag = detail01;\r\n mate.sortData = -1.0;\r\n halfEdge.sortAngle = sortAngle(detail01.curve!, detail01.fraction, false);\r\n mate.sortAngle = sortAngle(detail01.curve!, detail01.fraction1!, true);\r\n }\r\n detail0 = detail1;\r\n }\r\n }\r\n HalfEdgeGraphMerge.clusterAndMergeXYTheta(graph, (he: HalfEdge) => he.sortAngle!);\r\n return graph;\r\n }\r\n\r\n // based on computed (and toleranced) area, push the loop (pointer) onto the appropriate array of positive, negative, or sliver loops.\r\n // return the area (forced to zero if within tolerance)\r\n public static collectSignedLoop(loop: Loop, signedAreas: SignedLoops, zeroAreaTolerance: number = 1.0e-10): number{\r\n let area = RegionOps.computeXYArea(loop);\r\n if (area === undefined)\r\n area = 0;\r\n if (Math.abs(area) < zeroAreaTolerance)\r\n area = 0.0;\r\n (loop as any).computedAreaInPlanarSubdivision = area;\r\n if (area > 0)\r\n signedAreas.positiveAreaLoops.push(loop);\r\n else if (area < 0)\r\n signedAreas.negativeAreaLoops.push(loop);\r\n else\r\n signedAreas.slivers.push(loop);\r\n return area;\r\n }\r\n public static createLoopInFace(faceSeed: HalfEdge,\r\n announce?: (he: HalfEdge, curve: CurvePrimitive, loop: Loop) => void): Loop {\r\n let he = faceSeed;\r\n const loop = Loop.create();\r\n do {\r\n const detail = he.edgeTag as CurveLocationDetail;\r\n if (detail) {\r\n let curve;\r\n if (he.sortData! > 0)\r\n curve = detail.curve!.clonePartialCurve(detail.fraction, detail.fraction1!);\r\n else\r\n curve = detail.curve!.clonePartialCurve(detail.fraction1!, detail.fraction);\r\n if (curve) {\r\n if (announce !== undefined)\r\n announce(he, curve, loop);\r\n loop.tryAddChild(curve);\r\n }\r\n }\r\n he = he.faceSuccessor;\r\n } while (he !== faceSeed);\r\n return loop;\r\n }\r\n// return true if there are only two edges.\r\n // In a line-only graph, this is a null-area face.\r\n private static isNullFace(he: HalfEdge): boolean {\r\n return he.faceSuccessor.faceSuccessor === he;\r\n }\r\n // Look across edge mates (possibly several) for a nonnull mate face.\r\n private static nonNullEdgeMate(_graph: HalfEdgeGraph, e: HalfEdge): HalfEdge | undefined {\r\n if (this.isNullFace (e))\r\n return undefined;\r\n let e1 = e.edgeMate;\r\n while (this.isNullFace(e1)){\r\n e1 = e1.faceSuccessor.edgeMate;\r\n if (e1 === e)\r\n return undefined;\r\n }\r\n return e1;\r\n }\r\n public static collectSignedLoopSetsInHalfEdgeGraph(graph: HalfEdgeGraph, zeroAreaTolerance: number = 1.0e-10): SignedLoops[] {\r\n const q = HalfEdgeGraphSearch.collectConnectedComponentsWithExteriorParityMasks(graph, undefined);\r\n const result: SignedLoops[] = [];\r\n const edgeMap = new Map<HalfEdge, LoopCurveLoopCurve>();\r\n for (const faceSeeds of q) {\r\n const componentAreas: SignedLoops = { positiveAreaLoops: [], negativeAreaLoops: [], slivers: [] };\r\n const edges: LoopCurveLoopCurve[] = [];\r\n for (const faceSeed of faceSeeds) {\r\n const loop = this.createLoopInFace(faceSeed, (he: HalfEdge, curveC: CurvePrimitive, loopC: Loop) => {\r\n if (this.isNullFace(he)) {\r\n // Ignore all edges of null faces.\r\n } else {\r\n const mate = this.nonNullEdgeMate(graph, he);\r\n if (mate !== undefined){\r\n const e = edgeMap.get(mate);\r\n if (e === undefined) {\r\n // Record this as loopA,edgeA of a shared edge to be completed later from the other side of the edge\r\n const e1 = new LoopCurveLoopCurve(loopC, curveC, undefined, undefined);\r\n edgeMap.set(he, e1);\r\n } else if (e instanceof LoopCurveLoopCurve) {\r\n e.setB(loopC, curveC);\r\n edges.push(e);\r\n edgeMap.delete(mate);\r\n }\r\n }\r\n }\r\n });\r\n this.collectSignedLoop(loop, componentAreas, zeroAreaTolerance);\r\n }\r\n componentAreas.edges = edges;\r\n result.push(componentAreas);\r\n edgeMap.clear();\r\n }\r\n return result;\r\n }\r\n}\r\n\r\nfunction sortAngle(curve: CurvePrimitive, fraction: number, reverse: boolean): number {\r\n const ray = curve.fractionToPointAndDerivative(fraction);\r\n const s = reverse ? -1.0 : 1.0;\r\n return Math.atan2(s * ray.direction.y, s * ray.direction.x);\r\n}\r\n\r\nfunction getFractionOnCurve(pair: CurveLocationDetailPair, curve: CurvePrimitive): number | undefined {\r\n if (pair.detailA.curve === curve)\r\n return pair.detailA.fraction;\r\n if (pair.detailB.curve === curve)\r\n return pair.detailB.fraction;\r\n return undefined;\r\n}\r\nfunction getDetailOnCurve(pair: CurveLocationDetailPair, curve: CurvePrimitive): CurveLocationDetail | undefined {\r\n if (pair.detailA.curve === curve)\r\n return pair.detailA;\r\n if (pair.detailB.curve === curve)\r\n return pair.detailB;\r\n return undefined;\r\n}\r\n"]}
1
+ {"version":3,"file":"PlanarSubdivision.js","sourceRoot":"","sources":["../../../../src/curve/Query/PlanarSubdivision.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\nimport { Point3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { HalfEdge, HalfEdgeGraph } from \"../../topology/Graph\";\r\nimport { HalfEdgeGraphSearch } from \"../../topology/HalfEdgeGraphSearch\";\r\nimport { HalfEdgeGraphMerge } from \"../../topology/Merging\";\r\nimport { CurveLocationDetail, CurveLocationDetailPair } from \"../CurveLocationDetail\";\r\nimport { CurvePrimitive } from \"../CurvePrimitive\";\r\nimport { Loop, LoopCurveLoopCurve, SignedLoops } from \"../Loop\";\r\nimport { RegionOps } from \"../RegionOps\";\r\n\r\n/** @packageDocumentation\r\n * @module Curve\r\n */\r\n\r\nclass MapCurvePrimitiveToCurveLocatioNDetailPairArray {\r\n public primitiveToPair = new Map<CurvePrimitive, CurveLocationDetailPair[]>();\r\n // index assigned to this primitive for this calculation.\r\n public primitiveToIndex = new Map<CurvePrimitive, number>();\r\n private _numIndexedPrimitives: number = 0;\r\n public assignPrimitiveIndex(primitive: CurvePrimitive | undefined) {\r\n if (primitive !== undefined) {\r\n const index = this.primitiveToIndex.get(primitive);\r\n if (index === undefined) {\r\n this.primitiveToIndex.set(primitive, this._numIndexedPrimitives++);\r\n }\r\n }\r\n }\r\n public insertPrimitiveToPair(primitive: CurvePrimitive | undefined, pair: CurveLocationDetailPair) {\r\n if (primitive) {\r\n const priorPairs = this.primitiveToPair.get(primitive);\r\n this.assignPrimitiveIndex(primitive);\r\n if (!priorPairs) {\r\n this.primitiveToPair.set(primitive, [pair]);\r\n } else {\r\n priorPairs.push(pair);\r\n }\r\n }\r\n }\r\n public insertPair(pair: CurveLocationDetailPair) {\r\n const primitiveA = pair.detailA.curve;\r\n if (primitiveA)\r\n this.insertPrimitiveToPair(primitiveA, pair);\r\n const primitiveB = pair.detailB.curve;\r\n if (primitiveB)\r\n this.insertPrimitiveToPair(primitiveB, pair);\r\n }\r\n}\r\n/*\r\n function getDetailString(detail: CurveLocationDetail | undefined): string {\r\n if (!detail)\r\n return \"{}\";\r\n else return tagString(\"primitive\", this.primitiveToIndex.get(detail.curve!)) + tagString(\"f0\", detail.fraction) + tagString(\"f1\", detail.fraction1);\r\n }\r\n}\r\nfunction tagString(name: string, value: number | undefined): string {\r\n if (value !== undefined)\r\n return \"(\" + name + \" \" + value + \")\";\r\n return \"\";\r\n}\r\n*/\r\n/**\r\n * @internal\r\n */\r\nexport class PlanarSubdivision {\r\n public static assembleHalfEdgeGraph(_primitives: CurvePrimitive[], allPairs: CurveLocationDetailPair[]): HalfEdgeGraph {\r\n const detailByPrimitive = new MapCurvePrimitiveToCurveLocatioNDetailPairArray(); // map from key CurvePrimitive to CurveLocationDetailPair.\r\n for (const p of _primitives)\r\n detailByPrimitive.assignPrimitiveIndex(p);\r\n for (const pair of allPairs) {\r\n detailByPrimitive.insertPair(pair);\r\n }\r\n const graph = new HalfEdgeGraph();\r\n for (const entry of detailByPrimitive.primitiveToPair.entries()) {\r\n const p = entry[0];\r\n const details = entry[1];\r\n details.sort((pairA: CurveLocationDetailPair, pairB: CurveLocationDetailPair) => {\r\n const fractionA = getFractionOnCurve(pairA, p);\r\n const fractionB = getFractionOnCurve(pairB, p);\r\n if (fractionA === undefined || fractionB === undefined)\r\n return -1000.0;\r\n return fractionA - fractionB;\r\n });\r\n let detail0 = getDetailOnCurve(details[0], p)!;\r\n this.addHalfEdge(graph, p, p.startPoint (), 0.0, detail0.point, detail0.fraction);\r\n for (let i = 1; i < details.length; i++) {\r\n // create (both sides of) a graph edge . . .\r\n const detail1 = getDetailOnCurve(details[i], p)!;\r\n this.addHalfEdge(graph, p, detail0.point, detail0.fraction, detail1.point, detail1.fraction);\r\n detail0 = detail1;\r\n }\r\n this.addHalfEdge(graph, p, detail0.point, detail0.fraction, p.endPoint(), 1.0);\r\n }\r\n HalfEdgeGraphMerge.clusterAndMergeXYTheta(graph, (he: HalfEdge) => he.sortAngle!);\r\n return graph;\r\n }\r\n/**\r\n * Create a pair of mated half edges referencing an interval of a primitive\r\n * * no action if start and end points are identical.\r\n * @param graph containing graph.\r\n * @param p the curve\r\n * @param fraction0 starting fraction\r\n * @param point0 start point\r\n * @param fraction1 end fraction\r\n * @param point1 end point\r\n */\r\n private static addHalfEdge(graph: HalfEdgeGraph, p: CurvePrimitive, point0: Point3d, fraction0: number, point1: Point3d, fraction1: number) {\r\n if (!point0.isAlmostEqual (point1)){\r\n const halfEdge = graph.createEdgeXYAndZ(point0, 0, point1, 0);\r\n const detail01 = CurveLocationDetail.createCurveEvaluatedFractionFraction(p, fraction0, fraction1);\r\n const mate = halfEdge.edgeMate;\r\n halfEdge.edgeTag = detail01;\r\n halfEdge.sortData = 1.0;\r\n mate.edgeTag = detail01;\r\n mate.sortData = -1.0;\r\n halfEdge.sortAngle = sortAngle(detail01.curve!, detail01.fraction, false);\r\n mate.sortAngle = sortAngle(detail01.curve!, detail01.fraction1!, true);\r\n }\r\n }\r\n// based on computed (and toleranced) area, push the loop (pointer) onto the appropriate array of positive, negative, or sliver loops.\r\n // return the area (forced to zero if within tolerance)\r\n public static collectSignedLoop(loop: Loop, signedAreas: SignedLoops, zeroAreaTolerance: number = 1.0e-10): number{\r\n let area = RegionOps.computeXYArea(loop);\r\n if (area === undefined)\r\n area = 0;\r\n if (Math.abs(area) < zeroAreaTolerance)\r\n area = 0.0;\r\n (loop as any).computedAreaInPlanarSubdivision = area;\r\n if (area > 0)\r\n signedAreas.positiveAreaLoops.push(loop);\r\n else if (area < 0)\r\n signedAreas.negativeAreaLoops.push(loop);\r\n else\r\n signedAreas.slivers.push(loop);\r\n return area;\r\n }\r\n public static createLoopInFace(faceSeed: HalfEdge,\r\n announce?: (he: HalfEdge, curve: CurvePrimitive, loop: Loop) => void): Loop {\r\n let he = faceSeed;\r\n const loop = Loop.create();\r\n do {\r\n const detail = he.edgeTag as CurveLocationDetail;\r\n if (detail) {\r\n let curve;\r\n if (he.sortData! > 0)\r\n curve = detail.curve!.clonePartialCurve(detail.fraction, detail.fraction1!);\r\n else\r\n curve = detail.curve!.clonePartialCurve(detail.fraction1!, detail.fraction);\r\n if (curve) {\r\n if (announce !== undefined)\r\n announce(he, curve, loop);\r\n loop.tryAddChild(curve);\r\n }\r\n }\r\n he = he.faceSuccessor;\r\n } while (he !== faceSeed);\r\n return loop;\r\n }\r\n// return true if there are only two edges.\r\n // In a line-only graph, this is a null-area face.\r\n private static isNullFace(he: HalfEdge): boolean {\r\n return he.faceSuccessor.faceSuccessor === he;\r\n }\r\n // Look across edge mates (possibly several) for a nonnull mate face.\r\n private static nonNullEdgeMate(_graph: HalfEdgeGraph, e: HalfEdge): HalfEdge | undefined {\r\n if (this.isNullFace (e))\r\n return undefined;\r\n let e1 = e.edgeMate;\r\n while (this.isNullFace(e1)){\r\n e1 = e1.faceSuccessor.edgeMate;\r\n if (e1 === e)\r\n return undefined;\r\n }\r\n return e1;\r\n }\r\n public static collectSignedLoopSetsInHalfEdgeGraph(graph: HalfEdgeGraph, zeroAreaTolerance: number = 1.0e-10): SignedLoops[] {\r\n const q = HalfEdgeGraphSearch.collectConnectedComponentsWithExteriorParityMasks(graph, undefined);\r\n const result: SignedLoops[] = [];\r\n const edgeMap = new Map<HalfEdge, LoopCurveLoopCurve>();\r\n for (const faceSeeds of q) {\r\n const componentAreas: SignedLoops = { positiveAreaLoops: [], negativeAreaLoops: [], slivers: [] };\r\n const edges: LoopCurveLoopCurve[] = [];\r\n for (const faceSeed of faceSeeds) {\r\n const loop = this.createLoopInFace(faceSeed, (he: HalfEdge, curveC: CurvePrimitive, loopC: Loop) => {\r\n if (this.isNullFace(he)) {\r\n // Ignore all edges of null faces.\r\n } else {\r\n const mate = this.nonNullEdgeMate(graph, he);\r\n if (mate !== undefined){\r\n const e = edgeMap.get(mate);\r\n if (e === undefined) {\r\n // Record this as loopA,edgeA of a shared edge to be completed later from the other side of the edge\r\n const e1 = new LoopCurveLoopCurve(loopC, curveC, undefined, undefined);\r\n edgeMap.set(he, e1);\r\n } else if (e instanceof LoopCurveLoopCurve) {\r\n e.setB(loopC, curveC);\r\n edges.push(e);\r\n edgeMap.delete(mate);\r\n }\r\n }\r\n }\r\n });\r\n this.collectSignedLoop(loop, componentAreas, zeroAreaTolerance);\r\n }\r\n componentAreas.edges = edges;\r\n result.push(componentAreas);\r\n edgeMap.clear();\r\n }\r\n return result;\r\n }\r\n}\r\n\r\nfunction sortAngle(curve: CurvePrimitive, fraction: number, reverse: boolean): number {\r\n const ray = curve.fractionToPointAndDerivative(fraction);\r\n const s = reverse ? -1.0 : 1.0;\r\n return Math.atan2(s * ray.direction.y, s * ray.direction.x);\r\n}\r\n\r\nfunction getFractionOnCurve(pair: CurveLocationDetailPair, curve: CurvePrimitive): number | undefined {\r\n if (pair.detailA.curve === curve)\r\n return pair.detailA.fraction;\r\n if (pair.detailB.curve === curve)\r\n return pair.detailB.fraction;\r\n return undefined;\r\n}\r\nfunction getDetailOnCurve(pair: CurveLocationDetailPair, curve: CurvePrimitive): CurveLocationDetail | undefined {\r\n if (pair.detailA.curve === curve)\r\n return pair.detailA;\r\n if (pair.detailB.curve === curve)\r\n return pair.detailB;\r\n return undefined;\r\n}\r\n"]}
@@ -9,7 +9,7 @@ import { MultiLineStringDataVariant } from "../topology/Triangulation";
9
9
  import { AnyCurve, AnyRegion } from "./CurveChain";
10
10
  import { BagOfCurves, ConsolidateAdjacentCurvePrimitivesOptions, CurveCollection } from "./CurveCollection";
11
11
  import { CurvePrimitive } from "./CurvePrimitive";
12
- import { JointOptions } from "./internalContexts/PolygonOffsetContext";
12
+ import { JointOptions, OffsetOptions } from "./internalContexts/PolygonOffsetContext";
13
13
  import { Loop, SignedLoops } from "./Loop";
14
14
  import { Path } from "./Path";
15
15
  import { GeometryQuery } from "./GeometryQuery";
@@ -154,21 +154,20 @@ export declare class RegionOps {
154
154
  */
155
155
  static constructPolygonWireXYOffset(points: Point3d[], wrap: boolean, offsetDistance: number): CurveCollection | undefined;
156
156
  /**
157
- * Construct curves that are offset from a Path or Loop
158
- * * The construction will remove "some" local effects of features smaller than the offset distance, but will not detect self intersection among widely separated edges.
159
- * * Offset distance is defined as positive to the left.
160
- * * If offsetDistanceOrOptions is given as a number, default options are applied.
161
- * * When the offset needs to do an "outside" turn, the first applicable construction is applied:
162
- * * If the turn is larger than `options.minArcDegrees`, a circular arc is constructed.
163
- * * if the turn is larger than `options.maxChamferDegrees`, the turn is constructed as a sequence of straight lines that are
164
- * * outside the arc
165
- * * have uniform turn angle less than `options.maxChamferDegrees`
166
- * * each line segment (except first and last) touches the arc at its midpoint.
167
- * * Otherwise the prior and successor curves are extended to simple intersection.
168
- * @param curves input curves
169
- * @param offsetDistanceOrOptions offset controls.
170
- */
171
- static constructCurveXYOffset(curves: Path | Loop, offsetDistanceOrOptions: number | JointOptions): CurveCollection | undefined;
157
+ * Construct curves that are offset from a Path or Loop as viewed in xy-plane (ignoring z).
158
+ * * The construction will remove "some" local effects of features smaller than the offset distance, but will not detect self intersection among widely separated edges.
159
+ * * If offsetDistance is given as a number, default OffsetOptions are applied.
160
+ * * When the offset needs to do an "outside" turn, the first applicable construction is applied:
161
+ * * If the turn is larger than `options.minArcDegrees`, a circular arc is constructed.
162
+ * * If the turn is less than or equal to `options.maxChamferTurnDegrees`, extend curves along tangent to single intersection point.
163
+ * * If the turn is larger than `options.maxChamferDegrees`, the turn is constructed as a sequence of straight lines that are:
164
+ * * outside the arc
165
+ * * have uniform turn angle less than `options.maxChamferDegrees`
166
+ * * each line segment (except first and last) touches the arc at its midpoint.
167
+ * @param curves base curves.
168
+ * @param offsetDistanceOrOptions offset distance (positive to left of curve, negative to right) or options object.
169
+ */
170
+ static constructCurveXYOffset(curves: Path | Loop, offsetDistanceOrOptions: number | JointOptions | OffsetOptions): CurveCollection | undefined;
172
171
  /**
173
172
  * Test if point (x,y) is IN, OUT or ON a polygon.
174
173
  * @return (1) for in, (-1) for OUT, (0) for ON
@@ -1 +1 @@
1
- {"version":3,"file":"RegionOps.d.ts","sourceRoot":"","sources":["../../../src/curve/RegionOps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RegionOps.d.ts","sourceRoot":"","sources":["../../../src/curve/RegionOps.ts"],"names":[],"mappings":"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"}
@@ -23,7 +23,7 @@ import { BagOfCurves, CurveChain, CurveCollection } from "./CurveCollection";
23
23
  import { CurveCurve } from "./CurveCurve";
24
24
  import { CurvePrimitive } from "./CurvePrimitive";
25
25
  import { CurveWireMomentsXYZ } from "./CurveWireMomentsXYZ";
26
- import { CurveChainWireOffsetContext, JointOptions, PolygonWireOffsetContext } from "./internalContexts/PolygonOffsetContext";
26
+ import { CurveChainWireOffsetContext, PolygonWireOffsetContext } from "./internalContexts/PolygonOffsetContext";
27
27
  import { LineString3d } from "./LineString3d";
28
28
  import { Loop } from "./Loop";
29
29
  import { Path } from "./Path";
@@ -294,23 +294,21 @@ export class RegionOps {
294
294
  return context.constructPolygonWireXYOffset(points, wrap, offsetDistance);
295
295
  }
296
296
  /**
297
- * Construct curves that are offset from a Path or Loop
298
- * * The construction will remove "some" local effects of features smaller than the offset distance, but will not detect self intersection among widely separated edges.
299
- * * Offset distance is defined as positive to the left.
300
- * * If offsetDistanceOrOptions is given as a number, default options are applied.
301
- * * When the offset needs to do an "outside" turn, the first applicable construction is applied:
302
- * * If the turn is larger than `options.minArcDegrees`, a circular arc is constructed.
303
- * * if the turn is larger than `options.maxChamferDegrees`, the turn is constructed as a sequence of straight lines that are
304
- * * outside the arc
305
- * * have uniform turn angle less than `options.maxChamferDegrees`
306
- * * each line segment (except first and last) touches the arc at its midpoint.
307
- * * Otherwise the prior and successor curves are extended to simple intersection.
308
- * @param curves input curves
309
- * @param offsetDistanceOrOptions offset controls.
310
- */
297
+ * Construct curves that are offset from a Path or Loop as viewed in xy-plane (ignoring z).
298
+ * * The construction will remove "some" local effects of features smaller than the offset distance, but will not detect self intersection among widely separated edges.
299
+ * * If offsetDistance is given as a number, default OffsetOptions are applied.
300
+ * * When the offset needs to do an "outside" turn, the first applicable construction is applied:
301
+ * * If the turn is larger than `options.minArcDegrees`, a circular arc is constructed.
302
+ * * If the turn is less than or equal to `options.maxChamferTurnDegrees`, extend curves along tangent to single intersection point.
303
+ * * If the turn is larger than `options.maxChamferDegrees`, the turn is constructed as a sequence of straight lines that are:
304
+ * * outside the arc
305
+ * * have uniform turn angle less than `options.maxChamferDegrees`
306
+ * * each line segment (except first and last) touches the arc at its midpoint.
307
+ * @param curves base curves.
308
+ * @param offsetDistanceOrOptions offset distance (positive to left of curve, negative to right) or options object.
309
+ */
311
310
  static constructCurveXYOffset(curves, offsetDistanceOrOptions) {
312
- const options = JointOptions.create(offsetDistanceOrOptions);
313
- return CurveChainWireOffsetContext.constructCurveXYOffset(curves, options);
311
+ return CurveChainWireOffsetContext.constructCurveXYOffset(curves, offsetDistanceOrOptions);
314
312
  }
315
313
  /**
316
314
  * Test if point (x,y) is IN, OUT or ON a polygon.