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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/lib/cjs/Geometry.d.ts +3 -3
  2. package/lib/cjs/Geometry.d.ts.map +1 -1
  3. package/lib/cjs/Geometry.js +27 -11
  4. package/lib/cjs/Geometry.js.map +1 -1
  5. package/lib/cjs/curve/CurveCurve.d.ts +11 -8
  6. package/lib/cjs/curve/CurveCurve.d.ts.map +1 -1
  7. package/lib/cjs/curve/CurveCurve.js +16 -12
  8. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  9. package/lib/cjs/curve/CurveCurveIntersectXY.d.ts +5 -1
  10. package/lib/cjs/curve/CurveCurveIntersectXY.d.ts.map +1 -1
  11. package/lib/cjs/curve/CurveCurveIntersectXY.js +11 -10
  12. package/lib/cjs/curve/CurveCurveIntersectXY.js.map +1 -1
  13. package/lib/cjs/geometry3d/CoincidentGeometryOps.d.ts +1 -0
  14. package/lib/cjs/geometry3d/CoincidentGeometryOps.d.ts.map +1 -1
  15. package/lib/cjs/geometry3d/CoincidentGeometryOps.js +3 -0
  16. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  17. package/lib/cjs/geometry3d/Matrix3d.d.ts +171 -118
  18. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  19. package/lib/cjs/geometry3d/Matrix3d.js +448 -417
  20. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  21. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +1 -1
  22. package/lib/cjs/geometry3d/Point3dVector3d.js +1 -1
  23. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  24. package/lib/cjs/geometry3d/Segment1d.d.ts +1 -1
  25. package/lib/cjs/geometry3d/Segment1d.js +1 -1
  26. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  27. package/lib/esm/Geometry.d.ts +3 -3
  28. package/lib/esm/Geometry.d.ts.map +1 -1
  29. package/lib/esm/Geometry.js +27 -11
  30. package/lib/esm/Geometry.js.map +1 -1
  31. package/lib/esm/curve/CurveCurve.d.ts +11 -8
  32. package/lib/esm/curve/CurveCurve.d.ts.map +1 -1
  33. package/lib/esm/curve/CurveCurve.js +16 -12
  34. package/lib/esm/curve/CurveCurve.js.map +1 -1
  35. package/lib/esm/curve/CurveCurveIntersectXY.d.ts +5 -1
  36. package/lib/esm/curve/CurveCurveIntersectXY.d.ts.map +1 -1
  37. package/lib/esm/curve/CurveCurveIntersectXY.js +11 -10
  38. package/lib/esm/curve/CurveCurveIntersectXY.js.map +1 -1
  39. package/lib/esm/geometry3d/CoincidentGeometryOps.d.ts +1 -0
  40. package/lib/esm/geometry3d/CoincidentGeometryOps.d.ts.map +1 -1
  41. package/lib/esm/geometry3d/CoincidentGeometryOps.js +3 -0
  42. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  43. package/lib/esm/geometry3d/Matrix3d.d.ts +171 -118
  44. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  45. package/lib/esm/geometry3d/Matrix3d.js +448 -417
  46. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  47. package/lib/esm/geometry3d/Point3dVector3d.d.ts +1 -1
  48. package/lib/esm/geometry3d/Point3dVector3d.js +1 -1
  49. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  50. package/lib/esm/geometry3d/Segment1d.d.ts +1 -1
  51. package/lib/esm/geometry3d/Segment1d.js +1 -1
  52. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  53. package/package.json +4 -4
@@ -5,11 +5,12 @@
5
5
  /** @packageDocumentation
6
6
  * @module Curve
7
7
  */
8
+ import { Geometry } from "../Geometry";
8
9
  import { CurveCollection } from "./CurveCollection";
10
+ import { CurveCurveCloseApproachXY } from "./CurveCurveCloseApproachXY";
9
11
  import { CurveCurveIntersectXY } from "./CurveCurveIntersectXY";
10
12
  import { CurveCurveIntersectXYZ } from "./CurveCurveIntersectXYZ";
11
13
  import { CurvePrimitive } from "./CurvePrimitive";
12
- import { CurveCurveCloseApproachXY } from "./CurveCurveCloseApproachXY";
13
14
  /**
14
15
  * `CurveCurve` has static method for various computations that work on a pair of curves or curve collections.
15
16
  * @public
@@ -17,13 +18,14 @@ import { CurveCurveCloseApproachXY } from "./CurveCurveCloseApproachXY";
17
18
  export class CurveCurve {
18
19
  /**
19
20
  * Return xy intersections of 2 curves.
20
- * @param geometryA second geometry
21
+ * @param geometryA first geometry
21
22
  * @param extendA true to allow geometryA to extend
22
23
  * @param geometryB second geometry
23
24
  * @param extendB true to allow geometryB to extend
25
+ * @param tolerance optional distance tolerance for coincidence
24
26
  */
25
- static intersectionXYPairs(geometryA, extendA, geometryB, extendB) {
26
- const handler = new CurveCurveIntersectXY(undefined, geometryA, extendA, geometryB, extendB);
27
+ static intersectionXYPairs(geometryA, extendA, geometryB, extendB, tolerance = Geometry.smallMetricDistance) {
28
+ const handler = new CurveCurveIntersectXY(undefined, geometryA, extendA, geometryB, extendB, tolerance);
27
29
  if (geometryB instanceof CurvePrimitive) {
28
30
  geometryA.dispatchToGeometryHandler(handler);
29
31
  }
@@ -38,13 +40,14 @@ export class CurveCurve {
38
40
  }
39
41
  /**
40
42
  * Return xy intersections of 2 projected curves
41
- * @param geometryA second geometry
43
+ * @param geometryA first geometry
42
44
  * @param extendA true to allow geometryA to extend
43
45
  * @param geometryB second geometry
44
46
  * @param extendB true to allow geometryB to extend
47
+ * @param tolerance optional distance tolerance for coincidence
45
48
  */
46
- static intersectionProjectedXYPairs(worldToLocal, geometryA, extendA, geometryB, extendB) {
47
- const handler = new CurveCurveIntersectXY(worldToLocal, geometryA, extendA, geometryB, extendB);
49
+ static intersectionProjectedXYPairs(worldToLocal, geometryA, extendA, geometryB, extendB, tolerance = Geometry.smallMetricDistance) {
50
+ const handler = new CurveCurveIntersectXY(worldToLocal, geometryA, extendA, geometryB, extendB, tolerance);
48
51
  geometryA.dispatchToGeometryHandler(handler);
49
52
  return handler.grabPairedResults();
50
53
  }
@@ -53,7 +56,7 @@ export class CurveCurve {
53
56
  * * Implemented for combinations of LineSegment3d, LineString3d, Arc3d.
54
57
  * * Not Implemented for bspline and bezier curves.
55
58
  * @beta
56
- * @param geometryA second geometry
59
+ * @param geometryA first geometry
57
60
  * @param extendA true to allow geometryA to extend
58
61
  * @param geometryB second geometry
59
62
  * @param extendB true to allow geometryB to extend
@@ -65,13 +68,14 @@ export class CurveCurve {
65
68
  }
66
69
  /**
67
70
  * Return xy intersections of 2 curves.
68
- * @param geometryA second geometry
71
+ * @param geometryA first geometry
69
72
  * @param extendA true to allow geometryA to extend
70
73
  * @param geometryB second geometry
71
74
  * @param extendB true to allow geometryB to extend
75
+ * @param tolerance optional distance tolerance for coincidence
72
76
  */
73
- static allIntersectionsAmongPrimitivesXY(primitives) {
74
- const handler = new CurveCurveIntersectXY(undefined, undefined, false, undefined, false);
77
+ static allIntersectionsAmongPrimitivesXY(primitives, tolerance = Geometry.smallMetricDistance) {
78
+ const handler = new CurveCurveIntersectXY(undefined, undefined, false, undefined, false, tolerance);
75
79
  for (let i = 0; i < primitives.length; i++) {
76
80
  const geometryA = primitives[i];
77
81
  for (let j = i + 1; j < primitives.length; j++) {
@@ -83,7 +87,7 @@ export class CurveCurve {
83
87
  }
84
88
  /**
85
89
  * Return xy close approaches of 2 projected curves
86
- * @param geometryA second geometry
90
+ * @param geometryA first geometry
87
91
  * @param geometryB second geometry
88
92
  */
89
93
  static closeApproachProjectedXYPairs(geometryA, geometryB, maxDistance) {
@@ -1 +1 @@
1
- {"version":3,"file":"CurveCurve.js","sourceRoot":"","sources":["../../../src/curve/CurveCurve.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 Curve\r\n */\r\n\r\nimport { Matrix4d } from \"../geometry4d/Matrix4d\";\r\nimport { CurveCollection } from \"./CurveCollection\";\r\nimport { CurveCurveIntersectXY, CurveLocationDetailArrayPair } from \"./CurveCurveIntersectXY\";\r\nimport { CurveCurveIntersectXYZ } from \"./CurveCurveIntersectXYZ\";\r\nimport { CurveLocationDetailPair } from \"./CurveLocationDetail\";\r\nimport { CurvePrimitive } from \"./CurvePrimitive\";\r\nimport { GeometryQuery } from \"./GeometryQuery\";\r\nimport { CurveCurveCloseApproachXY } from \"./CurveCurveCloseApproachXY\";\r\n\r\n/**\r\n * `CurveCurve` has static method for various computations that work on a pair of curves or curve collections.\r\n * @public\r\n */\r\nexport class CurveCurve {\r\n /**\r\n * Return xy intersections of 2 curves.\r\n * @param geometryA second geometry\r\n * @param extendA true to allow geometryA to extend\r\n * @param geometryB second geometry\r\n * @param extendB true to allow geometryB to extend\r\n */\r\n public static intersectionXYPairs(geometryA: GeometryQuery, extendA: boolean, geometryB: GeometryQuery, extendB: boolean): CurveLocationDetailPair[] {\r\n const handler = new CurveCurveIntersectXY(undefined, geometryA, extendA, geometryB, extendB);\r\n if (geometryB instanceof CurvePrimitive) {\r\n geometryA.dispatchToGeometryHandler(handler);\r\n } else if (geometryB instanceof CurveCollection) {\r\n const allCurves = geometryB.collectCurvePrimitives();\r\n for (const child of allCurves) {\r\n handler.resetGeometry(geometryA, false, child, false);\r\n geometryA.dispatchToGeometryHandler(handler);\r\n }\r\n }\r\n return handler.grabPairedResults();\r\n }\r\n /**\r\n * Return xy intersections of 2 projected curves\r\n * @param geometryA second geometry\r\n * @param extendA true to allow geometryA to extend\r\n * @param geometryB second geometry\r\n * @param extendB true to allow geometryB to extend\r\n */\r\n public static intersectionProjectedXYPairs(worldToLocal: Matrix4d, geometryA: GeometryQuery, extendA: boolean, geometryB: GeometryQuery, extendB: boolean): CurveLocationDetailPair[] {\r\n const handler = new CurveCurveIntersectXY(worldToLocal, geometryA, extendA, geometryB, extendB);\r\n geometryA.dispatchToGeometryHandler(handler);\r\n return handler.grabPairedResults();\r\n }\r\n /**\r\n * Return full 3d xyz intersections of 2 curves.\r\n * * Implemented for combinations of LineSegment3d, LineString3d, Arc3d.\r\n * * Not Implemented for bspline and bezier curves.\r\n * @beta\r\n * @param geometryA second geometry\r\n * @param extendA true to allow geometryA to extend\r\n * @param geometryB second geometry\r\n * @param extendB true to allow geometryB to extend\r\n */\r\n public static intersectionXYZ(geometryA: GeometryQuery, extendA: boolean, geometryB: GeometryQuery, extendB: boolean): CurveLocationDetailArrayPair {\r\n const handler = new CurveCurveIntersectXYZ(geometryA, extendA, geometryB, extendB);\r\n geometryA.dispatchToGeometryHandler(handler);\r\n return handler.grabResults();\r\n }\r\n /**\r\n * Return xy intersections of 2 curves.\r\n * @param geometryA second geometry\r\n * @param extendA true to allow geometryA to extend\r\n * @param geometryB second geometry\r\n * @param extendB true to allow geometryB to extend\r\n */\r\n public static allIntersectionsAmongPrimitivesXY(primitives: CurvePrimitive[]): CurveLocationDetailPair[] {\r\n const handler = new CurveCurveIntersectXY(undefined, undefined, false, undefined, false);\r\n for (let i = 0; i < primitives.length; i++) {\r\n const geometryA = primitives[i];\r\n for (let j = i + 1; j < primitives.length; j++) {\r\n handler.resetGeometry(geometryA, false, primitives[j], false);\r\n geometryA.dispatchToGeometryHandler(handler);\r\n }\r\n }\r\n return handler.grabPairedResults();\r\n }\r\n /**\r\n * Return xy close approaches of 2 projected curves\r\n * @param geometryA second geometry\r\n * @param geometryB second geometry\r\n */\r\n public static closeApproachProjectedXYPairs(\r\n geometryA: GeometryQuery, geometryB: GeometryQuery, maxDistance: number): CurveLocationDetailPair[] {\r\n const handler = new CurveCurveCloseApproachXY(geometryA, geometryB);\r\n handler.maxDistanceToAccept = maxDistance;\r\n geometryA.dispatchToGeometryHandler(handler);\r\n return handler.grabPairedResults();\r\n }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"CurveCurve.js","sourceRoot":"","sources":["../../../src/curve/CurveCurve.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 Curve\r\n */\r\n\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Matrix4d } from \"../geometry4d/Matrix4d\";\r\nimport { CurveCollection } from \"./CurveCollection\";\r\nimport { CurveCurveCloseApproachXY } from \"./CurveCurveCloseApproachXY\";\r\nimport { CurveCurveIntersectXY, CurveLocationDetailArrayPair } from \"./CurveCurveIntersectXY\";\r\nimport { CurveCurveIntersectXYZ } from \"./CurveCurveIntersectXYZ\";\r\nimport { CurveLocationDetailPair } from \"./CurveLocationDetail\";\r\nimport { CurvePrimitive } from \"./CurvePrimitive\";\r\nimport { GeometryQuery } from \"./GeometryQuery\";\r\n\r\n/**\r\n * `CurveCurve` has static method for various computations that work on a pair of curves or curve collections.\r\n * @public\r\n */\r\nexport class CurveCurve {\r\n /**\r\n * Return xy intersections of 2 curves.\r\n * @param geometryA first geometry\r\n * @param extendA true to allow geometryA to extend\r\n * @param geometryB second geometry\r\n * @param extendB true to allow geometryB to extend\r\n * @param tolerance optional distance tolerance for coincidence\r\n */\r\n public static intersectionXYPairs(geometryA: GeometryQuery, extendA: boolean, geometryB: GeometryQuery, extendB: boolean, tolerance: number = Geometry.smallMetricDistance): CurveLocationDetailPair[] {\r\n const handler = new CurveCurveIntersectXY(undefined, geometryA, extendA, geometryB, extendB, tolerance);\r\n if (geometryB instanceof CurvePrimitive) {\r\n geometryA.dispatchToGeometryHandler(handler);\r\n } else if (geometryB instanceof CurveCollection) {\r\n const allCurves = geometryB.collectCurvePrimitives();\r\n for (const child of allCurves) {\r\n handler.resetGeometry(geometryA, false, child, false);\r\n geometryA.dispatchToGeometryHandler(handler);\r\n }\r\n }\r\n return handler.grabPairedResults();\r\n }\r\n /**\r\n * Return xy intersections of 2 projected curves\r\n * @param geometryA first geometry\r\n * @param extendA true to allow geometryA to extend\r\n * @param geometryB second geometry\r\n * @param extendB true to allow geometryB to extend\r\n * @param tolerance optional distance tolerance for coincidence\r\n */\r\n public static intersectionProjectedXYPairs(worldToLocal: Matrix4d, geometryA: GeometryQuery, extendA: boolean, geometryB: GeometryQuery, extendB: boolean, tolerance: number = Geometry.smallMetricDistance): CurveLocationDetailPair[] {\r\n const handler = new CurveCurveIntersectXY(worldToLocal, geometryA, extendA, geometryB, extendB, tolerance);\r\n geometryA.dispatchToGeometryHandler(handler);\r\n return handler.grabPairedResults();\r\n }\r\n /**\r\n * Return full 3d xyz intersections of 2 curves.\r\n * * Implemented for combinations of LineSegment3d, LineString3d, Arc3d.\r\n * * Not Implemented for bspline and bezier curves.\r\n * @beta\r\n * @param geometryA first geometry\r\n * @param extendA true to allow geometryA to extend\r\n * @param geometryB second geometry\r\n * @param extendB true to allow geometryB to extend\r\n */\r\n public static intersectionXYZ(geometryA: GeometryQuery, extendA: boolean, geometryB: GeometryQuery, extendB: boolean): CurveLocationDetailArrayPair {\r\n const handler = new CurveCurveIntersectXYZ(geometryA, extendA, geometryB, extendB);\r\n geometryA.dispatchToGeometryHandler(handler);\r\n return handler.grabResults();\r\n }\r\n /**\r\n * Return xy intersections of 2 curves.\r\n * @param geometryA first geometry\r\n * @param extendA true to allow geometryA to extend\r\n * @param geometryB second geometry\r\n * @param extendB true to allow geometryB to extend\r\n * @param tolerance optional distance tolerance for coincidence\r\n */\r\n public static allIntersectionsAmongPrimitivesXY(primitives: CurvePrimitive[], tolerance: number = Geometry.smallMetricDistance): CurveLocationDetailPair[] {\r\n const handler = new CurveCurveIntersectXY(undefined, undefined, false, undefined, false, tolerance);\r\n for (let i = 0; i < primitives.length; i++) {\r\n const geometryA = primitives[i];\r\n for (let j = i + 1; j < primitives.length; j++) {\r\n handler.resetGeometry(geometryA, false, primitives[j], false);\r\n geometryA.dispatchToGeometryHandler(handler);\r\n }\r\n }\r\n return handler.grabPairedResults();\r\n }\r\n /**\r\n * Return xy close approaches of 2 projected curves\r\n * @param geometryA first geometry\r\n * @param geometryB second geometry\r\n */\r\n public static closeApproachProjectedXYPairs(\r\n geometryA: GeometryQuery, geometryB: GeometryQuery, maxDistance: number): CurveLocationDetailPair[] {\r\n const handler = new CurveCurveCloseApproachXY(geometryA, geometryB);\r\n handler.maxDistanceToAccept = maxDistance;\r\n geometryA.dispatchToGeometryHandler(handler);\r\n return handler.grabPairedResults();\r\n }\r\n\r\n}\r\n"]}
@@ -58,12 +58,16 @@ export declare class CurveCurveIntersectXY extends NullGeometryHandler {
58
58
  * @param extendA flag to enable using extension of geometryA.
59
59
  * @param geometryB second curve for intersection. Saved for reference by specific handler methods.
60
60
  * @param extendB flag for extension of geometryB.
61
+ * @param tolerance optional distance tolerance for coincidence
61
62
  */
62
- constructor(worldToLocal: Matrix4d | undefined, _geometryA: GeometryQuery | undefined, extendA: boolean, geometryB: GeometryQuery | undefined, extendB: boolean);
63
+ constructor(worldToLocal: Matrix4d | undefined, _geometryA: GeometryQuery | undefined, extendA: boolean, geometryB: GeometryQuery | undefined, extendB: boolean, tolerance?: number);
63
64
  /** Reset the geometry and flags, leaving all other parts unchanged (and preserving accumulated intersections) */
64
65
  resetGeometry(_geometryA: GeometryQuery, extendA: boolean, geometryB: GeometryQuery, extendB: boolean): void;
65
66
  private static _workVector2dA;
66
67
  private acceptFraction;
68
+ /** Test the fraction by strict parameter, but allow toleranced distance test at ends.
69
+ * @param tolerance optional distance tolerance to check proximity to start/end point
70
+ */
67
71
  private acceptFractionOnLine;
68
72
  /**
69
73
  * * Return the results structure for the intersection calculation, structured as an array of CurveLocationDetailPair
@@ -1 +1 @@
1
- {"version":3,"file":"CurveCurveIntersectXY.d.ts","sourceRoot":"","sources":["../../../src/curve/CurveCurveIntersectXY.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CurveCurveIntersectXY.d.ts","sourceRoot":"","sources":["../../../src/curve/CurveCurveIntersectXY.ts"],"names":[],"mappings":"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"}
@@ -8,14 +8,12 @@ import { CoincidentGeometryQuery } from "../geometry3d/CoincidentGeometryOps";
8
8
  import { NullGeometryHandler } from "../geometry3d/GeometryHandler";
9
9
  import { GrowableFloat64Array } from "../geometry3d/GrowableFloat64Array";
10
10
  import { Matrix3d } from "../geometry3d/Matrix3d";
11
- // import { Arc3d } from "./Arc3d";
12
11
  import { Vector2d } from "../geometry3d/Point2dVector2d";
13
12
  import { Point3d } from "../geometry3d/Point3dVector3d";
14
13
  import { Ray3d } from "../geometry3d/Ray3d";
15
14
  import { Point4d } from "../geometry4d/Point4d";
16
15
  import { UnivariateBezier } from "../numerics/BezierPolynomials";
17
16
  import { Newton2dUnboundedWithDerivative, NewtonEvaluatorRRtoRRD } from "../numerics/Newton";
18
- // import { LineString3d } from "./LineString3d";
19
17
  import { AnalyticRoots, SmallSystem, TrigPolynomial } from "../numerics/Polynomials";
20
18
  import { Arc3d } from "./Arc3d";
21
19
  import { CurveIntervalRole, CurveLocationDetail, CurveLocationDetailPair } from "./CurveLocationDetail";
@@ -68,8 +66,9 @@ export class CurveCurveIntersectXY extends NullGeometryHandler {
68
66
  * @param extendA flag to enable using extension of geometryA.
69
67
  * @param geometryB second curve for intersection. Saved for reference by specific handler methods.
70
68
  * @param extendB flag for extension of geometryB.
69
+ * @param tolerance optional distance tolerance for coincidence
71
70
  */
72
- constructor(worldToLocal, _geometryA, extendA, geometryB, extendB) {
71
+ constructor(worldToLocal, _geometryA, extendA, geometryB, extendB, tolerance = Geometry.smallMetricDistance) {
73
72
  super();
74
73
  // this.geometryA = _geometryA;
75
74
  this._extendA = extendA;
@@ -82,7 +81,7 @@ export class CurveCurveIntersectXY extends NullGeometryHandler {
82
81
  if (!this._worldToLocalAffine)
83
82
  this._worldToLocalPerspective = worldToLocal.clone();
84
83
  }
85
- this._coincidentGeometryContext = CoincidentGeometryQuery.create();
84
+ this._coincidentGeometryContext = CoincidentGeometryQuery.create(tolerance);
86
85
  this.reinitialize();
87
86
  }
88
87
  reinitialize() {
@@ -101,13 +100,15 @@ export class CurveCurveIntersectXY extends NullGeometryHandler {
101
100
  return false;
102
101
  return true;
103
102
  }
104
- // Test the fraction by strict parameter, but allow physical (metric) test at ends.
105
- acceptFractionOnLine(extend0, fraction, extend1, pointA, pointB) {
103
+ /** Test the fraction by strict parameter, but allow toleranced distance test at ends.
104
+ * @param tolerance optional distance tolerance to check proximity to start/end point
105
+ */
106
+ acceptFractionOnLine(extend0, fraction, extend1, pointA, pointB, tolerance = Geometry.smallMetricDistance) {
106
107
  if (!extend0 && fraction < 0) {
107
- return Geometry.isSmallMetricDistance(fraction * pointA.distanceXY(pointB));
108
+ return Geometry.isDistanceWithinTol(fraction * pointA.distanceXY(pointB), tolerance);
108
109
  }
109
110
  else if (!extend1 && fraction > 1.0)
110
- return Geometry.isSmallMetricDistance((fraction - 1.0) * pointA.distanceXY(pointB));
111
+ return Geometry.isDistanceWithinTol((fraction - 1.0) * pointA.distanceXY(pointB), tolerance);
111
112
  return true;
112
113
  }
113
114
  /**
@@ -203,8 +204,8 @@ export class CurveCurveIntersectXY extends NullGeometryHandler {
203
204
  this.recordPointWithLocalFractions(overlap.detailA.fraction, cpA, fractionA0, fractionA1, overlap.detailB.fraction, cpB, fractionB0, fractionB1, reversed, overlap);
204
205
  }
205
206
  else if (SmallSystem.lineSegment3dXYTransverseIntersectionUnbounded(pointA0, pointA1, pointB0, pointB1, uv)) {
206
- if (this.acceptFractionOnLine(extendA0, uv.x, extendA1, pointA0, pointA1)
207
- && this.acceptFractionOnLine(extendB0, uv.y, extendB1, pointB0, pointB1)) {
207
+ if (this.acceptFractionOnLine(extendA0, uv.x, extendA1, pointA0, pointA1, this._coincidentGeometryContext.tolerance)
208
+ && this.acceptFractionOnLine(extendB0, uv.y, extendB1, pointB0, pointB1, this._coincidentGeometryContext.tolerance)) {
208
209
  this.recordPointWithLocalFractions(uv.x, cpA, fractionA0, fractionA1, uv.y, cpB, fractionB0, fractionB1, reversed);
209
210
  }
210
211
  }