@itwin/core-geometry 5.10.2 → 5.10.3

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 (84) hide show
  1. package/CHANGELOG.md +6 -1
  2. package/lib/cjs/Geometry.d.ts +4 -4
  3. package/lib/cjs/Geometry.js +3 -3
  4. package/lib/cjs/Geometry.js.map +1 -1
  5. package/lib/cjs/bspline/BSpline1dNd.d.ts +1 -1
  6. package/lib/cjs/bspline/BSpline1dNd.js +1 -1
  7. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  8. package/lib/cjs/bspline/BSplineSurface.d.ts +2 -2
  9. package/lib/cjs/bspline/BSplineSurface.js +2 -2
  10. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  11. package/lib/cjs/curve/Arc3d.d.ts +1 -1
  12. package/lib/cjs/curve/Arc3d.js +1 -1
  13. package/lib/cjs/curve/Arc3d.js.map +1 -1
  14. package/lib/cjs/curve/CurveLocationDetail.d.ts +1 -1
  15. package/lib/cjs/curve/CurveLocationDetail.js +1 -1
  16. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  17. package/lib/cjs/curve/CurveTypes.d.ts +1 -1
  18. package/lib/cjs/curve/CurveTypes.js.map +1 -1
  19. package/lib/cjs/curve/StrokeOptions.d.ts +1 -1
  20. package/lib/cjs/curve/StrokeOptions.js +1 -1
  21. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  22. package/lib/cjs/geometry3d/GrowableXYArray.d.ts +1 -1
  23. package/lib/cjs/geometry3d/GrowableXYArray.js +1 -1
  24. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  25. package/lib/cjs/geometry4d/Point4d.d.ts +1 -1
  26. package/lib/cjs/geometry4d/Point4d.js +1 -1
  27. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  28. package/lib/cjs/polyface/Polyface.d.ts +2 -2
  29. package/lib/cjs/polyface/Polyface.js +2 -2
  30. package/lib/cjs/polyface/Polyface.js.map +1 -1
  31. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +1 -1
  32. package/lib/cjs/polyface/PolyfaceBuilder.js +1 -1
  33. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  34. package/lib/cjs/polyface/PolyfaceData.d.ts +1 -1
  35. package/lib/cjs/polyface/PolyfaceData.js +1 -1
  36. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  37. package/lib/cjs/polyface/PolyfaceQuery.d.ts +3 -3
  38. package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
  39. package/lib/cjs/polyface/PolyfaceQuery.js +3 -3
  40. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  41. package/lib/cjs/serialization/IModelJsonSchema.d.ts +3 -3
  42. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  43. package/lib/esm/Geometry.d.ts +4 -4
  44. package/lib/esm/Geometry.js +3 -3
  45. package/lib/esm/Geometry.js.map +1 -1
  46. package/lib/esm/bspline/BSpline1dNd.d.ts +1 -1
  47. package/lib/esm/bspline/BSpline1dNd.js +1 -1
  48. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  49. package/lib/esm/bspline/BSplineSurface.d.ts +2 -2
  50. package/lib/esm/bspline/BSplineSurface.js +2 -2
  51. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  52. package/lib/esm/curve/Arc3d.d.ts +1 -1
  53. package/lib/esm/curve/Arc3d.js +1 -1
  54. package/lib/esm/curve/Arc3d.js.map +1 -1
  55. package/lib/esm/curve/CurveLocationDetail.d.ts +1 -1
  56. package/lib/esm/curve/CurveLocationDetail.js +1 -1
  57. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  58. package/lib/esm/curve/CurveTypes.d.ts +1 -1
  59. package/lib/esm/curve/CurveTypes.js.map +1 -1
  60. package/lib/esm/curve/StrokeOptions.d.ts +1 -1
  61. package/lib/esm/curve/StrokeOptions.js +1 -1
  62. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  63. package/lib/esm/geometry3d/GrowableXYArray.d.ts +1 -1
  64. package/lib/esm/geometry3d/GrowableXYArray.js +1 -1
  65. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  66. package/lib/esm/geometry4d/Point4d.d.ts +1 -1
  67. package/lib/esm/geometry4d/Point4d.js +1 -1
  68. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  69. package/lib/esm/polyface/Polyface.d.ts +2 -2
  70. package/lib/esm/polyface/Polyface.js +2 -2
  71. package/lib/esm/polyface/Polyface.js.map +1 -1
  72. package/lib/esm/polyface/PolyfaceBuilder.d.ts +1 -1
  73. package/lib/esm/polyface/PolyfaceBuilder.js +1 -1
  74. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  75. package/lib/esm/polyface/PolyfaceData.d.ts +1 -1
  76. package/lib/esm/polyface/PolyfaceData.js +1 -1
  77. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  78. package/lib/esm/polyface/PolyfaceQuery.d.ts +3 -3
  79. package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
  80. package/lib/esm/polyface/PolyfaceQuery.js +3 -3
  81. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  82. package/lib/esm/serialization/IModelJsonSchema.d.ts +3 -3
  83. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  84. package/package.json +5 -5
@@ -573,7 +573,7 @@ class CurveLocationDetailPair {
573
573
  exports.CurveLocationDetailPair = CurveLocationDetailPair;
574
574
  /**
575
575
  * Data bundle for a pair of arrays of CurveLocationDetail structures.
576
- * @deprecated in 4.2.0 - will not be removed until after 2026-06-13. Use CurveLocationDetailPair[] instead.
576
+ * @deprecated in 4.2.0 - might be removed in next major version. Use CurveLocationDetailPair[] instead.
577
577
  * @public
578
578
  */
579
579
  class CurveLocationDetailArrayPair {
@@ -1 +1 @@
1
- {"version":3,"file":"CurveLocationDetail.js","sourceRoot":"","sources":["../../../src/curve/CurveLocationDetail.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Curve\n */\nimport { assert, OrderedComparator } from \"@itwin/core-bentley\";\nimport { Geometry, ICloneable } from \"../Geometry\";\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\nimport { Ray3d } from \"../geometry3d/Ray3d\";\nimport { Transform } from \"../geometry3d/Transform\";\nimport { XYAndZ } from \"../geometry3d/XYZProps\";\nimport { CurvePrimitive } from \"./CurvePrimitive\";\n\n/**\n * An enumeration of special conditions being described by a CurveLocationDetail.\n * @public\n */\nexport enum CurveIntervalRole {\n /** This point is an isolated point NOT at a primary vertex. */\n isolated = 0,\n /** This point is an isolated vertex hit */\n isolatedAtVertex = 1,\n /** This is the beginning of an interval */\n intervalStart = 10,\n /** This is an interior point of an interval. */\n intervalInterior = 11,\n /** This is the end of an interval */\n intervalEnd = 12,\n}\n\n/**\n * Return code for CurvePrimitive method `moveSignedDistanceFromFraction`\n * @public\n */\nexport enum CurveSearchStatus {\n /** Unimplemented or zero length curve */\n error,\n /** Complete success of search */\n success = 1,\n /** Search ended prematurely (e.g. at incomplete distance moved) at start or end of curve */\n stoppedAtBoundary = 2,\n}\n\n/**\n * Use to update a cloneable object when source and/or prior result are possibly undefined.\n * * Any undefined source returns undefined.\n * * For defined source, reuse optional result if available.\n * @param source optional source\n * @param result optional result\n */\nfunction optionalUpdate<T extends ICloneable<T>>(source: T | undefined, result: T | undefined): T | undefined {\n return source ? source.clone(result) : undefined;\n}\n\n/**\n * CurveLocationDetail carries point and parameter data about a point evaluated on a curve.\n * * These are returned by a variety of queries.\n * * Particular contents can vary among the queries.\n * @public\n */\nexport class CurveLocationDetail {\n /** The curve being evaluated. */\n public curve?: CurvePrimitive;\n /** Optional ray. */\n public ray?: Ray3d;\n /** The fractional position along the curve. */\n public fraction: number;\n /** Detail condition of the role this point has in some context. */\n public intervalRole?: CurveIntervalRole;\n /** The point on the curve. */\n public point: Point3d;\n /** A vector (e.g. tangent vector) in context. */\n public vectorInCurveLocationDetail?: Vector3d;\n /** A context-specific numeric value (e.g., a distance). */\n public a: number;\n /**\n * Optional CurveLocationDetail with more detail of location. For instance, a detail for fractional position\n * within a CurveChainWithDistanceIndex returns fraction and distance along the chain as its primary data and\n * further detail of the particular curve within the chain in the childDetail.\n */\n public childDetail?: CurveLocationDetail;\n /**\n * A status indicator for certain searches.\n * * e.g., CurvePrimitive.moveSignedDistanceFromFraction.\n */\n public curveSearchStatus?: CurveSearchStatus;\n /** (Optional) second fraction, e.g. end of interval of coincident curves. */\n public fraction1?: number;\n /** (Optional) second point, e.g. end of interval of coincident curves. */\n public point1?: Point3d;\n /** A context-specific temporary point, e.g. for intermediate calculations. */\n public pointQ: Point3d;\n /** Constructor */\n public constructor() {\n this.pointQ = Point3d.createZero();\n this.fraction = 0;\n this.point = Point3d.createZero();\n this.a = 0.0;\n }\n /** Set the (optional) intervalRole field. */\n public setIntervalRole(value: CurveIntervalRole): void {\n this.intervalRole = value;\n }\n /** Set the `fraction` and `point`, using direct assignment (capture!) to `point`. */\n public captureFractionPoint(fraction: number, point: Point3d): void {\n this.fraction = fraction;\n this.point = point;\n }\n /** Set the (optional) `fraction1` and `point1`, using direct assignment (capture!) to `point1`. */\n public captureFraction1Point1(fraction1: number, point1: Point3d): void {\n this.fraction1 = fraction1;\n this.point1 = point1;\n }\n /** Test if this pair has fraction1 defined. */\n public get hasFraction1(): boolean {\n return this.fraction1 !== undefined;\n }\n /** Test if this detail defines an interval. Preferable to [[CurveLocationDetail.hasFraction1]]. */\n public isInterval(): this is { fraction1: number, point1: Point3d } {\n return this.fraction1 !== undefined && this.point1 !== undefined;\n }\n /** Test if this is an isolated point. This is true if intervalRole is any of (undefined, isolated, isolatedAtVertex). */\n public get isIsolated(): boolean {\n return this.intervalRole === undefined\n || this.intervalRole === CurveIntervalRole.isolated\n || this.intervalRole === CurveIntervalRole.isolatedAtVertex;\n }\n /** Return the fraction delta. (0 if no fraction1). */\n public get fractionDelta(): number {\n return this.fraction1 !== undefined ? this.fraction1 - this.fraction : 0.0;\n }\n /**\n * If (fraction1, point1) are defined, make them the primary (and only) data.\n * * No action if undefined.\n */\n public collapseToEnd() {\n if (this.fraction1 !== undefined)\n this.fraction = this.fraction1;\n if (this.point1)\n this.point = this.point1;\n this.collapseToStart();\n }\n /** Make (fraction, point) the primary (and only) data. */\n public collapseToStart() {\n this.fraction1 = undefined;\n this.point1 = undefined;\n }\n /**\n * Return a complete copy, WITH CAVEATS.\n * * curve member is copied as a reference.\n * * point and vector members are cloned.\n */\n public clone(result?: CurveLocationDetail): CurveLocationDetail {\n if (result === this)\n return result;\n result = result ? result : new CurveLocationDetail();\n result.curve = this.curve;\n result.fraction = this.fraction;\n result.fraction1 = this.fraction1;\n result.point1 = optionalUpdate<Point3d>(this.point1, result.point1);\n result.point.setFromPoint3d(this.point);\n result.vectorInCurveLocationDetail = optionalUpdate<Vector3d>(this.vectorInCurveLocationDetail, result.vectorInCurveLocationDetail);\n result.a = this.a;\n result.childDetail = optionalUpdate<CurveLocationDetail>(this.childDetail, result.childDetail);\n result.curveSearchStatus = this.curveSearchStatus;\n return result;\n }\n /**\n * Updated in this instance.\n * * Note that if caller omits `vector` and `a`, those fields are updated to the call-list defaults (NOT left as-is)\n * * point and vector updates are by data copy (not capture of pointers).\n * @param fraction (required) fraction to install.\n * @param point (required) point to install.\n * @param vector (optional) vector to install.\n * @param a (optional) numeric value to install.\n */\n public setFP(fraction: number, point: XYAndZ, vector?: Vector3d, a: number = 0.0): void {\n this.fraction = fraction;\n this.point.setFromPoint3d(point);\n this.vectorInCurveLocationDetail = optionalUpdate<Vector3d>(vector, this.vectorInCurveLocationDetail);\n this.a = a;\n }\n /**\n * Updated in this instance.\n * * Note that if caller omits a`, that field is updated to the call-list default (NOT left as-is)\n * * point and vector updates are by data copy (not capture of the ray members).\n * @param fraction (required) fraction to install.\n * @param ray (required) point and vector to install.\n * @param a (optional) numeric value to install.\n */\n public setFR(fraction: number, ray: Ray3d, a: number = 0): void {\n return this.setFP(fraction, ray.origin, ray.direction, a);\n }\n /** Set the CurvePrimitive pointer, leaving all other properties untouched. */\n public setCurve(curve: CurvePrimitive) {\n this.curve = curve;\n }\n /** Record the distance from the CurveLocationDetail's point to the parameter point. */\n public setDistanceTo(point: XYAndZ) {\n this.a = this.point.distance(point);\n }\n /** Create with a CurvePrimitive pointer but no coordinate data. */\n public static create(curve?: CurvePrimitive, result?: CurveLocationDetail): CurveLocationDetail {\n result = result ? result : new CurveLocationDetail();\n result.curve = curve;\n return result;\n }\n /** Create a new detail using CurvePrimitive pointer, fraction, and point coordinates. */\n public static createCurveFractionPoint(\n curve: CurvePrimitive | undefined, fraction: number, point: XYAndZ, result?: CurveLocationDetail,\n ): CurveLocationDetail {\n result = result ? result : new CurveLocationDetail();\n result.curve = curve;\n result.fraction = fraction;\n result.point.setFromPoint3d(point);\n result.vectorInCurveLocationDetail = undefined;\n result.a = 0.0;\n result.childDetail = undefined;\n result.curveSearchStatus = undefined;\n return result;\n }\n /** Create a new detail with only ray, fraction, and point. */\n public static createRayFractionPoint(\n ray: Ray3d, fraction: number, point: XYAndZ, result?: CurveLocationDetail,\n ): CurveLocationDetail {\n result = result ? result : new CurveLocationDetail();\n result.fraction = fraction;\n result.ray = ray;\n result.point.setFromPoint3d(point);\n return result;\n }\n /** Create with CurvePrimitive pointer, fraction, and point coordinates. */\n public static createCurveFractionPointDistanceCurveSearchStatus(\n curve: CurvePrimitive | undefined,\n fraction: number,\n point: XYAndZ,\n distance: number,\n status: CurveSearchStatus,\n result?: CurveLocationDetail,\n ): CurveLocationDetail {\n result = result ? result : new CurveLocationDetail();\n result.curve = curve;\n result.fraction = fraction;\n result.point.setFromPoint3d(point);\n result.vectorInCurveLocationDetail = undefined;\n result.a = distance;\n result.childDetail = undefined;\n result.curveSearchStatus = status;\n return result;\n }\n /** Create with curveSearchStatus affected by allowExtension. */\n public static createConditionalMoveSignedDistance(\n allowExtension: boolean,\n curve: CurvePrimitive,\n startFraction: number,\n endFraction: number,\n requestedSignedDistance: number,\n result?: CurveLocationDetail,\n ): CurveLocationDetail {\n let a = requestedSignedDistance;\n let status = CurveSearchStatus.success;\n if (!allowExtension && !Geometry.isIn01(endFraction)) {\n // cap the movement at the endpoint\n if (endFraction < 0.0) {\n a = - curve.curveLengthBetweenFractions(startFraction, 0.0);\n endFraction = 0.0;\n status = CurveSearchStatus.stoppedAtBoundary;\n } else if (endFraction > 1.0) {\n endFraction = 1.0;\n a = curve.curveLengthBetweenFractions(startFraction, 1.0);\n status = CurveSearchStatus.stoppedAtBoundary;\n }\n }\n result = result ? result : new CurveLocationDetail();\n result.curve = curve;\n result.fraction = endFraction;\n curve.fractionToPoint(endFraction, result.point);\n result.vectorInCurveLocationDetail = undefined;\n result.a = a;\n result.childDetail = undefined;\n result.curveSearchStatus = status;\n return result;\n }\n /** Create with CurvePrimitive pointer and fraction for evaluation. */\n public static createCurveEvaluatedFraction(\n curve: CurvePrimitive, fraction: number, result?: CurveLocationDetail,\n ): CurveLocationDetail {\n result = result ? result : new CurveLocationDetail();\n result.curve = curve;\n result.fraction = fraction;\n curve.fractionToPoint(fraction, result.point);\n result.vectorInCurveLocationDetail = undefined;\n result.a = 0.0;\n result.childDetail = undefined;\n result.curveSearchStatus = undefined;\n return result;\n }\n /** Create with CurvePrimitive pointer and fraction for evaluation. */\n public static createCurveEvaluatedFractionPointAndDerivative(\n curve: CurvePrimitive, fraction: number, result?: CurveLocationDetail,\n ): CurveLocationDetail {\n result = result ? result : new CurveLocationDetail();\n result.curve = curve;\n result.fraction = fraction;\n const ray = curve.fractionToPointAndDerivative(fraction);\n result.point.setFromPoint3d(ray.origin);\n result.vectorInCurveLocationDetail = ray.direction;\n result.a = 0.0;\n result.childDetail = undefined;\n result.curveSearchStatus = undefined;\n return result;\n }\n /** Create with CurvePrimitive pointer and 2 fractions for evaluation. */\n public static createCurveEvaluatedFractionFraction(\n curve: CurvePrimitive, fraction0: number, fraction1: number, result?: CurveLocationDetail,\n ): CurveLocationDetail {\n result = result ? result : new CurveLocationDetail();\n result.curve = curve;\n result.fraction = fraction0;\n curve.fractionToPoint(fraction0, result.point);\n result.fraction1 = fraction1;\n result.point1 = curve.fractionToPoint(fraction1, result.point1);\n result.vectorInCurveLocationDetail = undefined;\n result.a = 0.0;\n result.childDetail = undefined;\n result.curveSearchStatus = undefined;\n return result;\n }\n /** Create with CurvePrimitive pointer, fraction, and point coordinates. */\n public static createCurveFractionPointDistance(\n curve: CurvePrimitive,\n fraction: number,\n point: XYAndZ,\n a: number,\n result?: CurveLocationDetail,\n ): CurveLocationDetail {\n result = result ? result : new CurveLocationDetail();\n result.curve = curve;\n result.fraction = fraction;\n result.point.setFromPoint3d(point);\n result.vectorInCurveLocationDetail = undefined;\n result.a = a;\n result.childDetail = undefined;\n result.curveSearchStatus = undefined;\n return result;\n }\n /**\n * Update or create if closer than current contents.\n * @param curve candidate curve\n * @param fraction candidate fraction\n * @param point candidate point\n * @param a candidate distance\n * @returns true if the given distance is smaller (and hence this detail was updated)\n */\n public updateIfCloserCurveFractionPointDistance(\n curve: CurvePrimitive, fraction: number, point: XYAndZ, a: number,\n ): boolean {\n if (this.a < a)\n return false;\n CurveLocationDetail.createCurveFractionPointDistance(curve, fraction, point, a, this);\n return true;\n }\n /**\n * Exchange the (fraction,fraction1) and (point, point1) pairs.\n * * (Skip each swap if its \"1\" value is undefined)\n */\n public swapFractionsAndPoints(): void {\n if (this.fraction1 !== undefined) {\n const f = this.fraction;\n this.fraction = this.fraction1;\n this.fraction1 = f;\n }\n if (this.point1 !== undefined) {\n const p = this.point;\n this.point = this.point1;\n this.point1 = p;\n }\n }\n /**\n * Return the fraction where `f` falls between `fraction` and `fraction1`.\n * * If the fractions are too close or `fraction1` is undefined, `defaultFraction` is returned.\n */\n public inverseInterpolateFraction(f: number, defaultFraction: number = 0): number {\n if (this.fraction1 === undefined)\n return defaultFraction;\n const a = Geometry.inverseInterpolate01(this.fraction, this.fraction1, f);\n if (a === undefined)\n return defaultFraction;\n return a;\n }\n /**\n * Return the detail with smaller `a` value -- detailA returned if equal.\n * @param detailA first candidate\n * @param detailB second candidate\n */\n public static chooseSmallerA(\n detailA: CurveLocationDetail | undefined, detailB: CurveLocationDetail | undefined,\n ): CurveLocationDetail | undefined {\n if (detailA) {\n if (!detailB)\n return detailA;\n return detailA.a <= detailB.a ? detailA : detailB;\n }\n return detailB;\n }\n /**\n * Compare only the curve and fraction of this detail with `other`.\n * @param fractionTol optional relative tolerance for comparing fractions with [[Geometry.isAlmostEqualNumber]].\n */\n public isSameCurveAndFraction(other: CurveLocationDetail | { curve: CurvePrimitive, fraction: number }, fractionTol?: number): boolean {\n return this.curve === other.curve && Geometry.isAlmostEqualNumber(this.fraction, other.fraction, fractionTol);\n }\n /**\n * Transform the detail in place.\n * * All numerical properties are transformed directly, except:\n * * when `curve` is defined, `point` and `point1` are reset by evaluating the transformed curve at `fraction` and `fraction1`\n * * these properties are untouched: `a`, `fraction`, `fraction1`, `pointQ`\n * @param transform the transform to apply\n * @return true if and only if the transformation was successful. If false, the instance is in an indeterminate\n * state and should not be used.\n */\n public tryTransformInPlace(transform: Transform): boolean {\n if (this.curve && !this.curve.tryTransformInPlace(transform))\n return false;\n if (this.ray)\n this.ray.transformInPlace(transform);\n if (this.curve)\n this.curve.fractionToPoint(this.fraction, this.point);\n else\n transform.multiplyXYAndZInPlace(this.point);\n if (this.vectorInCurveLocationDetail)\n transform.multiplyVectorInPlace(this.vectorInCurveLocationDetail);\n if (this.childDetail && this.childDetail !== this && !this.childDetail.tryTransformInPlace(transform))\n return false;\n if (this.point1) {\n if (this.curve && this.fraction1)\n this.curve.fractionToPoint(this.fraction1, this.point1);\n else\n transform.multiplyXYAndZInPlace(this.point1);\n }\n return true;\n }\n}\n\n/**\n * Enumeration of configurations for intersections and min/max distance-between-curve\n * @public\n */\nexport enum CurveCurveApproachType {\n /** Intersection at a single point */\n Intersection = 0,\n /** Distinct points on the two curves, with each curve's tangent perpendicular to the chord between the points */\n PerpendicularChord = 1,\n /** Completely coincident geometry */\n CoincidentGeometry = 2,\n /** Completely parallel geometry. */\n ParallelGeometry = 3,\n}\n\n/**\n * A pair of CurveLocationDetail.\n * @public\n */\nexport class CurveLocationDetailPair {\n /** The first of the two details. */\n public detailA: CurveLocationDetail;\n /** The second of the two details. */\n public detailB: CurveLocationDetail;\n /**\n * Enumeration of how the detail pairs relate.\n * * This is set only by certain closeApproach calculations.\n */\n public approachType?: CurveCurveApproachType;\n\n public constructor(detailA?: CurveLocationDetail, detailB?: CurveLocationDetail) {\n this.detailA = detailA ? detailA : new CurveLocationDetail();\n this.detailB = detailB ? detailB : new CurveLocationDetail();\n }\n /** Create a curve detail pair using references to two CurveLocationDetails */\n public static createCapture(\n detailA: CurveLocationDetail, detailB: CurveLocationDetail, result?: CurveLocationDetailPair,\n ): CurveLocationDetailPair {\n result = result ? result : new CurveLocationDetailPair();\n result.detailA = detailA;\n result.detailB = detailB;\n return result;\n }\n /**\n * Create a curve detail pair using references to two CurveLocationDetails.\n * * optionally install in reversed positions\n */\n public static createCaptureOptionalReverse(\n detailA: CurveLocationDetail, detailB: CurveLocationDetail, reversed: boolean, result?: CurveLocationDetailPair,\n ): CurveLocationDetailPair {\n result = result ? result : new CurveLocationDetailPair();\n if (reversed) {\n result.detailA = detailA;\n result.detailB = detailB;\n\n } else {\n result.detailA = detailA;\n result.detailB = detailB;\n }\n return result;\n }\n /** Make a deep copy of this CurveLocationDetailPair */\n public clone(result?: CurveLocationDetailPair): CurveLocationDetailPair {\n result = result ? result : new CurveLocationDetailPair();\n result.detailA = this.detailA.clone();\n result.detailB = this.detailB.clone();\n result.approachType = this.approachType;\n return result;\n }\n /** Swap the details of A, B */\n public swapDetails() {\n const q = this.detailA;\n this.detailA = this.detailB;\n this.detailB = q;\n }\n /**\n * Mutate the input array by removing the second of two adjacent duplicate pairs.\n * * Ignores details representing coincident intervals (e.g., for which `fraction1` is defined).\n * * Comparison is performed by [[CurveLocationDetail.isSameCurveAndFraction]].\n * * No sorting is performed.\n * @param pairs array to de-duplicate in place\n * @param index0 look for duplicates in the tail of the array starting at index0\n * @return reference to input array\n * @internal\n */\n public static removeAdjacentDuplicates(pairs: CurveLocationDetailPair[], index0: number = 0): CurveLocationDetailPair[] {\n return pairs.flatMap(\n (pair: CurveLocationDetailPair, i: number, arr: CurveLocationDetailPair[]) => {\n if (i >= index0 && i > 0) {\n if (!pair.detailA.hasFraction1 && !pair.detailB.hasFraction1) {\n if (pair.detailA.isSameCurveAndFraction(arr[i - 1].detailA)) {\n if (pair.detailB.isSameCurveAndFraction(arr[i - 1].detailB)) {\n return []; // remove the i_th pair\n }\n }\n }\n }\n return [pair]; // preserve the i_th pair\n },\n );\n }\n /**\n * Transform the details in place.\n * @param transform the transform to apply\n * @return true if and only if the transformation was successful on both details.\n * If false, the instance is in an indeterminate state and should not be used.\n */\n public tryTransformInPlace(transform: Transform): boolean {\n return this.detailA.tryTransformInPlace(transform) && this.detailB.tryTransformInPlace(transform);\n }\n /**\n * Return a pair comparator useful for sorting an array of detail pairs by their fractions.\n * * Comparison assumes detailA curves are the same and detailB curves are the same.\n * * Comparison checks for equality of pair fractions, then of pair points, then sorts by detailA.fraction, then detailB.fraction.\n * @param fractionTol tolerance for comparing fractions. Default value [[Geometry.smallFraction]].\n * @param pointTol tolerance for comparing points, used if fractions are distinct. Default value [[Geometry.smallMetricDistance]].\n * @param xyOnly whether to perform point comparisons in xy only. Default is false (compare 3D points).\n * @param equateClosedCurveFractions whether to equate fractions 0 and 1 for physically closed curves. Default is false.\n */\n public static comparePairsByFractions(\n fractionTol: number = Geometry.smallFraction,\n pointTol: number = Geometry.smallMetricDistance,\n xyOnly: boolean = false,\n equateClosedCurveFractions: boolean = false,\n ): OrderedComparator<CurveLocationDetailPair> {\n return (p0: CurveLocationDetailPair, p1: CurveLocationDetailPair): number => {\n assert(() => p0.detailA.curve === p1.detailA.curve && p0.detailB.curve === p1.detailB.curve, \"pairs are compatible\");\n const curveA = p0.detailA.curve;\n const curveB = p0.detailB.curve;\n let fraction0A = p0.detailA.fraction;\n let fraction0B = p0.detailB.fraction;\n let fraction1A = p1.detailA.fraction;\n let fraction1B = p1.detailB.fraction;\n if (equateClosedCurveFractions) {\n if (curveA?.isPhysicallyClosedCurve(pointTol, xyOnly)) {\n if (Geometry.isAlmostEqualEitherNumber(p0.detailA.fraction, 0, 1, fractionTol))\n fraction0A = 0;\n if (Geometry.isAlmostEqualEitherNumber(p1.detailA.fraction, 0, 1, fractionTol))\n fraction1A = 0;\n }\n if (curveB?.isPhysicallyClosedCurve(pointTol, xyOnly)) {\n if (Geometry.isAlmostEqualEitherNumber(p0.detailB.fraction, 0, 1, fractionTol))\n fraction0B = 0;\n if (Geometry.isAlmostEqualEitherNumber(p1.detailB.fraction, 0, 1, fractionTol))\n fraction1B = 0;\n }\n }\n const sameFractionsA = Geometry.isAlmostEqualNumber(fraction0A, fraction1A, fractionTol);\n if (sameFractionsA && Geometry.isAlmostEqualNumber(fraction0B, fraction1B, fractionTol))\n return 0;\n const samePointsA = xyOnly ? p0.detailA.point.isAlmostEqualXY(p1.detailA.point, pointTol) : p0.detailA.point.isAlmostEqual(p1.detailA.point, pointTol);\n if (samePointsA && (xyOnly ? p0.detailB.point.isAlmostEqualXY(p1.detailB.point, pointTol) : p0.detailB.point.isAlmostEqual(p1.detailB.point, pointTol)))\n return 0;\n return sameFractionsA ? fraction0B - fraction1B : fraction0A - fraction1A;\n };\n }\n /**\n * Return a pair comparator useful for sorting an array of detail pairs by their points.\n * * Comparison sorts the points lexicographically, `detailA.point` first, then `detailB.point`.\n * @param pointTol tolerance for comparing points. Default value [[Geometry.smallMetricDistance]].\n * @param xyOnly whether to perform point comparisons in xy only. Default is false (compare 3D points).\n */\n public static comparePairsByPoints(\n pointTol: number = Geometry.smallMetricDistance,\n xyOnly: boolean = false,\n ): OrderedComparator<CurveLocationDetailPair> {\n return (p0: CurveLocationDetailPair, p1: CurveLocationDetailPair): number => {\n const comparePoints = xyOnly ? Geometry.compareXY(pointTol) : Geometry.compareXYZ(pointTol);\n const compareA = comparePoints(p0.detailA.point, p1.detailA.point);\n const compareB = comparePoints(p0.detailB.point, p1.detailB.point);\n const samePointsA = compareA === 0;\n if (samePointsA && compareB === 0)\n return 0;\n return samePointsA ? compareB : compareA;\n };\n }\n}\n\n/**\n * Data bundle for a pair of arrays of CurveLocationDetail structures.\n * @deprecated in 4.2.0 - will not be removed until after 2026-06-13. Use CurveLocationDetailPair[] instead.\n * @public\n */\nexport class CurveLocationDetailArrayPair {\n /** First array of details. */\n public dataA: CurveLocationDetail[];\n /** Second array of details. */\n public dataB: CurveLocationDetail[];\n public constructor() {\n this.dataA = [];\n this.dataB = [];\n }\n}\n"]}
1
+ {"version":3,"file":"CurveLocationDetail.js","sourceRoot":"","sources":["../../../src/curve/CurveLocationDetail.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Curve\n */\nimport { assert, OrderedComparator } from \"@itwin/core-bentley\";\nimport { Geometry, ICloneable } from \"../Geometry\";\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\nimport { Ray3d } from \"../geometry3d/Ray3d\";\nimport { Transform } from \"../geometry3d/Transform\";\nimport { XYAndZ } from \"../geometry3d/XYZProps\";\nimport { CurvePrimitive } from \"./CurvePrimitive\";\n\n/**\n * An enumeration of special conditions being described by a CurveLocationDetail.\n * @public\n */\nexport enum CurveIntervalRole {\n /** This point is an isolated point NOT at a primary vertex. */\n isolated = 0,\n /** This point is an isolated vertex hit */\n isolatedAtVertex = 1,\n /** This is the beginning of an interval */\n intervalStart = 10,\n /** This is an interior point of an interval. */\n intervalInterior = 11,\n /** This is the end of an interval */\n intervalEnd = 12,\n}\n\n/**\n * Return code for CurvePrimitive method `moveSignedDistanceFromFraction`\n * @public\n */\nexport enum CurveSearchStatus {\n /** Unimplemented or zero length curve */\n error,\n /** Complete success of search */\n success = 1,\n /** Search ended prematurely (e.g. at incomplete distance moved) at start or end of curve */\n stoppedAtBoundary = 2,\n}\n\n/**\n * Use to update a cloneable object when source and/or prior result are possibly undefined.\n * * Any undefined source returns undefined.\n * * For defined source, reuse optional result if available.\n * @param source optional source\n * @param result optional result\n */\nfunction optionalUpdate<T extends ICloneable<T>>(source: T | undefined, result: T | undefined): T | undefined {\n return source ? source.clone(result) : undefined;\n}\n\n/**\n * CurveLocationDetail carries point and parameter data about a point evaluated on a curve.\n * * These are returned by a variety of queries.\n * * Particular contents can vary among the queries.\n * @public\n */\nexport class CurveLocationDetail {\n /** The curve being evaluated. */\n public curve?: CurvePrimitive;\n /** Optional ray. */\n public ray?: Ray3d;\n /** The fractional position along the curve. */\n public fraction: number;\n /** Detail condition of the role this point has in some context. */\n public intervalRole?: CurveIntervalRole;\n /** The point on the curve. */\n public point: Point3d;\n /** A vector (e.g. tangent vector) in context. */\n public vectorInCurveLocationDetail?: Vector3d;\n /** A context-specific numeric value (e.g., a distance). */\n public a: number;\n /**\n * Optional CurveLocationDetail with more detail of location. For instance, a detail for fractional position\n * within a CurveChainWithDistanceIndex returns fraction and distance along the chain as its primary data and\n * further detail of the particular curve within the chain in the childDetail.\n */\n public childDetail?: CurveLocationDetail;\n /**\n * A status indicator for certain searches.\n * * e.g., CurvePrimitive.moveSignedDistanceFromFraction.\n */\n public curveSearchStatus?: CurveSearchStatus;\n /** (Optional) second fraction, e.g. end of interval of coincident curves. */\n public fraction1?: number;\n /** (Optional) second point, e.g. end of interval of coincident curves. */\n public point1?: Point3d;\n /** A context-specific temporary point, e.g. for intermediate calculations. */\n public pointQ: Point3d;\n /** Constructor */\n public constructor() {\n this.pointQ = Point3d.createZero();\n this.fraction = 0;\n this.point = Point3d.createZero();\n this.a = 0.0;\n }\n /** Set the (optional) intervalRole field. */\n public setIntervalRole(value: CurveIntervalRole): void {\n this.intervalRole = value;\n }\n /** Set the `fraction` and `point`, using direct assignment (capture!) to `point`. */\n public captureFractionPoint(fraction: number, point: Point3d): void {\n this.fraction = fraction;\n this.point = point;\n }\n /** Set the (optional) `fraction1` and `point1`, using direct assignment (capture!) to `point1`. */\n public captureFraction1Point1(fraction1: number, point1: Point3d): void {\n this.fraction1 = fraction1;\n this.point1 = point1;\n }\n /** Test if this pair has fraction1 defined. */\n public get hasFraction1(): boolean {\n return this.fraction1 !== undefined;\n }\n /** Test if this detail defines an interval. Preferable to [[CurveLocationDetail.hasFraction1]]. */\n public isInterval(): this is { fraction1: number, point1: Point3d } {\n return this.fraction1 !== undefined && this.point1 !== undefined;\n }\n /** Test if this is an isolated point. This is true if intervalRole is any of (undefined, isolated, isolatedAtVertex). */\n public get isIsolated(): boolean {\n return this.intervalRole === undefined\n || this.intervalRole === CurveIntervalRole.isolated\n || this.intervalRole === CurveIntervalRole.isolatedAtVertex;\n }\n /** Return the fraction delta. (0 if no fraction1). */\n public get fractionDelta(): number {\n return this.fraction1 !== undefined ? this.fraction1 - this.fraction : 0.0;\n }\n /**\n * If (fraction1, point1) are defined, make them the primary (and only) data.\n * * No action if undefined.\n */\n public collapseToEnd() {\n if (this.fraction1 !== undefined)\n this.fraction = this.fraction1;\n if (this.point1)\n this.point = this.point1;\n this.collapseToStart();\n }\n /** Make (fraction, point) the primary (and only) data. */\n public collapseToStart() {\n this.fraction1 = undefined;\n this.point1 = undefined;\n }\n /**\n * Return a complete copy, WITH CAVEATS.\n * * curve member is copied as a reference.\n * * point and vector members are cloned.\n */\n public clone(result?: CurveLocationDetail): CurveLocationDetail {\n if (result === this)\n return result;\n result = result ? result : new CurveLocationDetail();\n result.curve = this.curve;\n result.fraction = this.fraction;\n result.fraction1 = this.fraction1;\n result.point1 = optionalUpdate<Point3d>(this.point1, result.point1);\n result.point.setFromPoint3d(this.point);\n result.vectorInCurveLocationDetail = optionalUpdate<Vector3d>(this.vectorInCurveLocationDetail, result.vectorInCurveLocationDetail);\n result.a = this.a;\n result.childDetail = optionalUpdate<CurveLocationDetail>(this.childDetail, result.childDetail);\n result.curveSearchStatus = this.curveSearchStatus;\n return result;\n }\n /**\n * Updated in this instance.\n * * Note that if caller omits `vector` and `a`, those fields are updated to the call-list defaults (NOT left as-is)\n * * point and vector updates are by data copy (not capture of pointers).\n * @param fraction (required) fraction to install.\n * @param point (required) point to install.\n * @param vector (optional) vector to install.\n * @param a (optional) numeric value to install.\n */\n public setFP(fraction: number, point: XYAndZ, vector?: Vector3d, a: number = 0.0): void {\n this.fraction = fraction;\n this.point.setFromPoint3d(point);\n this.vectorInCurveLocationDetail = optionalUpdate<Vector3d>(vector, this.vectorInCurveLocationDetail);\n this.a = a;\n }\n /**\n * Updated in this instance.\n * * Note that if caller omits a`, that field is updated to the call-list default (NOT left as-is)\n * * point and vector updates are by data copy (not capture of the ray members).\n * @param fraction (required) fraction to install.\n * @param ray (required) point and vector to install.\n * @param a (optional) numeric value to install.\n */\n public setFR(fraction: number, ray: Ray3d, a: number = 0): void {\n return this.setFP(fraction, ray.origin, ray.direction, a);\n }\n /** Set the CurvePrimitive pointer, leaving all other properties untouched. */\n public setCurve(curve: CurvePrimitive) {\n this.curve = curve;\n }\n /** Record the distance from the CurveLocationDetail's point to the parameter point. */\n public setDistanceTo(point: XYAndZ) {\n this.a = this.point.distance(point);\n }\n /** Create with a CurvePrimitive pointer but no coordinate data. */\n public static create(curve?: CurvePrimitive, result?: CurveLocationDetail): CurveLocationDetail {\n result = result ? result : new CurveLocationDetail();\n result.curve = curve;\n return result;\n }\n /** Create a new detail using CurvePrimitive pointer, fraction, and point coordinates. */\n public static createCurveFractionPoint(\n curve: CurvePrimitive | undefined, fraction: number, point: XYAndZ, result?: CurveLocationDetail,\n ): CurveLocationDetail {\n result = result ? result : new CurveLocationDetail();\n result.curve = curve;\n result.fraction = fraction;\n result.point.setFromPoint3d(point);\n result.vectorInCurveLocationDetail = undefined;\n result.a = 0.0;\n result.childDetail = undefined;\n result.curveSearchStatus = undefined;\n return result;\n }\n /** Create a new detail with only ray, fraction, and point. */\n public static createRayFractionPoint(\n ray: Ray3d, fraction: number, point: XYAndZ, result?: CurveLocationDetail,\n ): CurveLocationDetail {\n result = result ? result : new CurveLocationDetail();\n result.fraction = fraction;\n result.ray = ray;\n result.point.setFromPoint3d(point);\n return result;\n }\n /** Create with CurvePrimitive pointer, fraction, and point coordinates. */\n public static createCurveFractionPointDistanceCurveSearchStatus(\n curve: CurvePrimitive | undefined,\n fraction: number,\n point: XYAndZ,\n distance: number,\n status: CurveSearchStatus,\n result?: CurveLocationDetail,\n ): CurveLocationDetail {\n result = result ? result : new CurveLocationDetail();\n result.curve = curve;\n result.fraction = fraction;\n result.point.setFromPoint3d(point);\n result.vectorInCurveLocationDetail = undefined;\n result.a = distance;\n result.childDetail = undefined;\n result.curveSearchStatus = status;\n return result;\n }\n /** Create with curveSearchStatus affected by allowExtension. */\n public static createConditionalMoveSignedDistance(\n allowExtension: boolean,\n curve: CurvePrimitive,\n startFraction: number,\n endFraction: number,\n requestedSignedDistance: number,\n result?: CurveLocationDetail,\n ): CurveLocationDetail {\n let a = requestedSignedDistance;\n let status = CurveSearchStatus.success;\n if (!allowExtension && !Geometry.isIn01(endFraction)) {\n // cap the movement at the endpoint\n if (endFraction < 0.0) {\n a = - curve.curveLengthBetweenFractions(startFraction, 0.0);\n endFraction = 0.0;\n status = CurveSearchStatus.stoppedAtBoundary;\n } else if (endFraction > 1.0) {\n endFraction = 1.0;\n a = curve.curveLengthBetweenFractions(startFraction, 1.0);\n status = CurveSearchStatus.stoppedAtBoundary;\n }\n }\n result = result ? result : new CurveLocationDetail();\n result.curve = curve;\n result.fraction = endFraction;\n curve.fractionToPoint(endFraction, result.point);\n result.vectorInCurveLocationDetail = undefined;\n result.a = a;\n result.childDetail = undefined;\n result.curveSearchStatus = status;\n return result;\n }\n /** Create with CurvePrimitive pointer and fraction for evaluation. */\n public static createCurveEvaluatedFraction(\n curve: CurvePrimitive, fraction: number, result?: CurveLocationDetail,\n ): CurveLocationDetail {\n result = result ? result : new CurveLocationDetail();\n result.curve = curve;\n result.fraction = fraction;\n curve.fractionToPoint(fraction, result.point);\n result.vectorInCurveLocationDetail = undefined;\n result.a = 0.0;\n result.childDetail = undefined;\n result.curveSearchStatus = undefined;\n return result;\n }\n /** Create with CurvePrimitive pointer and fraction for evaluation. */\n public static createCurveEvaluatedFractionPointAndDerivative(\n curve: CurvePrimitive, fraction: number, result?: CurveLocationDetail,\n ): CurveLocationDetail {\n result = result ? result : new CurveLocationDetail();\n result.curve = curve;\n result.fraction = fraction;\n const ray = curve.fractionToPointAndDerivative(fraction);\n result.point.setFromPoint3d(ray.origin);\n result.vectorInCurveLocationDetail = ray.direction;\n result.a = 0.0;\n result.childDetail = undefined;\n result.curveSearchStatus = undefined;\n return result;\n }\n /** Create with CurvePrimitive pointer and 2 fractions for evaluation. */\n public static createCurveEvaluatedFractionFraction(\n curve: CurvePrimitive, fraction0: number, fraction1: number, result?: CurveLocationDetail,\n ): CurveLocationDetail {\n result = result ? result : new CurveLocationDetail();\n result.curve = curve;\n result.fraction = fraction0;\n curve.fractionToPoint(fraction0, result.point);\n result.fraction1 = fraction1;\n result.point1 = curve.fractionToPoint(fraction1, result.point1);\n result.vectorInCurveLocationDetail = undefined;\n result.a = 0.0;\n result.childDetail = undefined;\n result.curveSearchStatus = undefined;\n return result;\n }\n /** Create with CurvePrimitive pointer, fraction, and point coordinates. */\n public static createCurveFractionPointDistance(\n curve: CurvePrimitive,\n fraction: number,\n point: XYAndZ,\n a: number,\n result?: CurveLocationDetail,\n ): CurveLocationDetail {\n result = result ? result : new CurveLocationDetail();\n result.curve = curve;\n result.fraction = fraction;\n result.point.setFromPoint3d(point);\n result.vectorInCurveLocationDetail = undefined;\n result.a = a;\n result.childDetail = undefined;\n result.curveSearchStatus = undefined;\n return result;\n }\n /**\n * Update or create if closer than current contents.\n * @param curve candidate curve\n * @param fraction candidate fraction\n * @param point candidate point\n * @param a candidate distance\n * @returns true if the given distance is smaller (and hence this detail was updated)\n */\n public updateIfCloserCurveFractionPointDistance(\n curve: CurvePrimitive, fraction: number, point: XYAndZ, a: number,\n ): boolean {\n if (this.a < a)\n return false;\n CurveLocationDetail.createCurveFractionPointDistance(curve, fraction, point, a, this);\n return true;\n }\n /**\n * Exchange the (fraction,fraction1) and (point, point1) pairs.\n * * (Skip each swap if its \"1\" value is undefined)\n */\n public swapFractionsAndPoints(): void {\n if (this.fraction1 !== undefined) {\n const f = this.fraction;\n this.fraction = this.fraction1;\n this.fraction1 = f;\n }\n if (this.point1 !== undefined) {\n const p = this.point;\n this.point = this.point1;\n this.point1 = p;\n }\n }\n /**\n * Return the fraction where `f` falls between `fraction` and `fraction1`.\n * * If the fractions are too close or `fraction1` is undefined, `defaultFraction` is returned.\n */\n public inverseInterpolateFraction(f: number, defaultFraction: number = 0): number {\n if (this.fraction1 === undefined)\n return defaultFraction;\n const a = Geometry.inverseInterpolate01(this.fraction, this.fraction1, f);\n if (a === undefined)\n return defaultFraction;\n return a;\n }\n /**\n * Return the detail with smaller `a` value -- detailA returned if equal.\n * @param detailA first candidate\n * @param detailB second candidate\n */\n public static chooseSmallerA(\n detailA: CurveLocationDetail | undefined, detailB: CurveLocationDetail | undefined,\n ): CurveLocationDetail | undefined {\n if (detailA) {\n if (!detailB)\n return detailA;\n return detailA.a <= detailB.a ? detailA : detailB;\n }\n return detailB;\n }\n /**\n * Compare only the curve and fraction of this detail with `other`.\n * @param fractionTol optional relative tolerance for comparing fractions with [[Geometry.isAlmostEqualNumber]].\n */\n public isSameCurveAndFraction(other: CurveLocationDetail | { curve: CurvePrimitive, fraction: number }, fractionTol?: number): boolean {\n return this.curve === other.curve && Geometry.isAlmostEqualNumber(this.fraction, other.fraction, fractionTol);\n }\n /**\n * Transform the detail in place.\n * * All numerical properties are transformed directly, except:\n * * when `curve` is defined, `point` and `point1` are reset by evaluating the transformed curve at `fraction` and `fraction1`\n * * these properties are untouched: `a`, `fraction`, `fraction1`, `pointQ`\n * @param transform the transform to apply\n * @return true if and only if the transformation was successful. If false, the instance is in an indeterminate\n * state and should not be used.\n */\n public tryTransformInPlace(transform: Transform): boolean {\n if (this.curve && !this.curve.tryTransformInPlace(transform))\n return false;\n if (this.ray)\n this.ray.transformInPlace(transform);\n if (this.curve)\n this.curve.fractionToPoint(this.fraction, this.point);\n else\n transform.multiplyXYAndZInPlace(this.point);\n if (this.vectorInCurveLocationDetail)\n transform.multiplyVectorInPlace(this.vectorInCurveLocationDetail);\n if (this.childDetail && this.childDetail !== this && !this.childDetail.tryTransformInPlace(transform))\n return false;\n if (this.point1) {\n if (this.curve && this.fraction1)\n this.curve.fractionToPoint(this.fraction1, this.point1);\n else\n transform.multiplyXYAndZInPlace(this.point1);\n }\n return true;\n }\n}\n\n/**\n * Enumeration of configurations for intersections and min/max distance-between-curve\n * @public\n */\nexport enum CurveCurveApproachType {\n /** Intersection at a single point */\n Intersection = 0,\n /** Distinct points on the two curves, with each curve's tangent perpendicular to the chord between the points */\n PerpendicularChord = 1,\n /** Completely coincident geometry */\n CoincidentGeometry = 2,\n /** Completely parallel geometry. */\n ParallelGeometry = 3,\n}\n\n/**\n * A pair of CurveLocationDetail.\n * @public\n */\nexport class CurveLocationDetailPair {\n /** The first of the two details. */\n public detailA: CurveLocationDetail;\n /** The second of the two details. */\n public detailB: CurveLocationDetail;\n /**\n * Enumeration of how the detail pairs relate.\n * * This is set only by certain closeApproach calculations.\n */\n public approachType?: CurveCurveApproachType;\n\n public constructor(detailA?: CurveLocationDetail, detailB?: CurveLocationDetail) {\n this.detailA = detailA ? detailA : new CurveLocationDetail();\n this.detailB = detailB ? detailB : new CurveLocationDetail();\n }\n /** Create a curve detail pair using references to two CurveLocationDetails */\n public static createCapture(\n detailA: CurveLocationDetail, detailB: CurveLocationDetail, result?: CurveLocationDetailPair,\n ): CurveLocationDetailPair {\n result = result ? result : new CurveLocationDetailPair();\n result.detailA = detailA;\n result.detailB = detailB;\n return result;\n }\n /**\n * Create a curve detail pair using references to two CurveLocationDetails.\n * * optionally install in reversed positions\n */\n public static createCaptureOptionalReverse(\n detailA: CurveLocationDetail, detailB: CurveLocationDetail, reversed: boolean, result?: CurveLocationDetailPair,\n ): CurveLocationDetailPair {\n result = result ? result : new CurveLocationDetailPair();\n if (reversed) {\n result.detailA = detailA;\n result.detailB = detailB;\n\n } else {\n result.detailA = detailA;\n result.detailB = detailB;\n }\n return result;\n }\n /** Make a deep copy of this CurveLocationDetailPair */\n public clone(result?: CurveLocationDetailPair): CurveLocationDetailPair {\n result = result ? result : new CurveLocationDetailPair();\n result.detailA = this.detailA.clone();\n result.detailB = this.detailB.clone();\n result.approachType = this.approachType;\n return result;\n }\n /** Swap the details of A, B */\n public swapDetails() {\n const q = this.detailA;\n this.detailA = this.detailB;\n this.detailB = q;\n }\n /**\n * Mutate the input array by removing the second of two adjacent duplicate pairs.\n * * Ignores details representing coincident intervals (e.g., for which `fraction1` is defined).\n * * Comparison is performed by [[CurveLocationDetail.isSameCurveAndFraction]].\n * * No sorting is performed.\n * @param pairs array to de-duplicate in place\n * @param index0 look for duplicates in the tail of the array starting at index0\n * @return reference to input array\n * @internal\n */\n public static removeAdjacentDuplicates(pairs: CurveLocationDetailPair[], index0: number = 0): CurveLocationDetailPair[] {\n return pairs.flatMap(\n (pair: CurveLocationDetailPair, i: number, arr: CurveLocationDetailPair[]) => {\n if (i >= index0 && i > 0) {\n if (!pair.detailA.hasFraction1 && !pair.detailB.hasFraction1) {\n if (pair.detailA.isSameCurveAndFraction(arr[i - 1].detailA)) {\n if (pair.detailB.isSameCurveAndFraction(arr[i - 1].detailB)) {\n return []; // remove the i_th pair\n }\n }\n }\n }\n return [pair]; // preserve the i_th pair\n },\n );\n }\n /**\n * Transform the details in place.\n * @param transform the transform to apply\n * @return true if and only if the transformation was successful on both details.\n * If false, the instance is in an indeterminate state and should not be used.\n */\n public tryTransformInPlace(transform: Transform): boolean {\n return this.detailA.tryTransformInPlace(transform) && this.detailB.tryTransformInPlace(transform);\n }\n /**\n * Return a pair comparator useful for sorting an array of detail pairs by their fractions.\n * * Comparison assumes detailA curves are the same and detailB curves are the same.\n * * Comparison checks for equality of pair fractions, then of pair points, then sorts by detailA.fraction, then detailB.fraction.\n * @param fractionTol tolerance for comparing fractions. Default value [[Geometry.smallFraction]].\n * @param pointTol tolerance for comparing points, used if fractions are distinct. Default value [[Geometry.smallMetricDistance]].\n * @param xyOnly whether to perform point comparisons in xy only. Default is false (compare 3D points).\n * @param equateClosedCurveFractions whether to equate fractions 0 and 1 for physically closed curves. Default is false.\n */\n public static comparePairsByFractions(\n fractionTol: number = Geometry.smallFraction,\n pointTol: number = Geometry.smallMetricDistance,\n xyOnly: boolean = false,\n equateClosedCurveFractions: boolean = false,\n ): OrderedComparator<CurveLocationDetailPair> {\n return (p0: CurveLocationDetailPair, p1: CurveLocationDetailPair): number => {\n assert(() => p0.detailA.curve === p1.detailA.curve && p0.detailB.curve === p1.detailB.curve, \"pairs are compatible\");\n const curveA = p0.detailA.curve;\n const curveB = p0.detailB.curve;\n let fraction0A = p0.detailA.fraction;\n let fraction0B = p0.detailB.fraction;\n let fraction1A = p1.detailA.fraction;\n let fraction1B = p1.detailB.fraction;\n if (equateClosedCurveFractions) {\n if (curveA?.isPhysicallyClosedCurve(pointTol, xyOnly)) {\n if (Geometry.isAlmostEqualEitherNumber(p0.detailA.fraction, 0, 1, fractionTol))\n fraction0A = 0;\n if (Geometry.isAlmostEqualEitherNumber(p1.detailA.fraction, 0, 1, fractionTol))\n fraction1A = 0;\n }\n if (curveB?.isPhysicallyClosedCurve(pointTol, xyOnly)) {\n if (Geometry.isAlmostEqualEitherNumber(p0.detailB.fraction, 0, 1, fractionTol))\n fraction0B = 0;\n if (Geometry.isAlmostEqualEitherNumber(p1.detailB.fraction, 0, 1, fractionTol))\n fraction1B = 0;\n }\n }\n const sameFractionsA = Geometry.isAlmostEqualNumber(fraction0A, fraction1A, fractionTol);\n if (sameFractionsA && Geometry.isAlmostEqualNumber(fraction0B, fraction1B, fractionTol))\n return 0;\n const samePointsA = xyOnly ? p0.detailA.point.isAlmostEqualXY(p1.detailA.point, pointTol) : p0.detailA.point.isAlmostEqual(p1.detailA.point, pointTol);\n if (samePointsA && (xyOnly ? p0.detailB.point.isAlmostEqualXY(p1.detailB.point, pointTol) : p0.detailB.point.isAlmostEqual(p1.detailB.point, pointTol)))\n return 0;\n return sameFractionsA ? fraction0B - fraction1B : fraction0A - fraction1A;\n };\n }\n /**\n * Return a pair comparator useful for sorting an array of detail pairs by their points.\n * * Comparison sorts the points lexicographically, `detailA.point` first, then `detailB.point`.\n * @param pointTol tolerance for comparing points. Default value [[Geometry.smallMetricDistance]].\n * @param xyOnly whether to perform point comparisons in xy only. Default is false (compare 3D points).\n */\n public static comparePairsByPoints(\n pointTol: number = Geometry.smallMetricDistance,\n xyOnly: boolean = false,\n ): OrderedComparator<CurveLocationDetailPair> {\n return (p0: CurveLocationDetailPair, p1: CurveLocationDetailPair): number => {\n const comparePoints = xyOnly ? Geometry.compareXY(pointTol) : Geometry.compareXYZ(pointTol);\n const compareA = comparePoints(p0.detailA.point, p1.detailA.point);\n const compareB = comparePoints(p0.detailB.point, p1.detailB.point);\n const samePointsA = compareA === 0;\n if (samePointsA && compareB === 0)\n return 0;\n return samePointsA ? compareB : compareA;\n };\n }\n}\n\n/**\n * Data bundle for a pair of arrays of CurveLocationDetail structures.\n * @deprecated in 4.2.0 - might be removed in next major version. Use CurveLocationDetailPair[] instead.\n * @public\n */\nexport class CurveLocationDetailArrayPair {\n /** First array of details. */\n public dataA: CurveLocationDetail[];\n /** Second array of details. */\n public dataB: CurveLocationDetail[];\n public constructor() {\n this.dataA = [];\n this.dataB = [];\n }\n}\n"]}
@@ -20,7 +20,7 @@ export type AnyRegion = Loop | ParityRegion | UnionRegion;
20
20
  /**
21
21
  * Union type for a general curve chain, or a `BagOfCurves` understood to be a collection of unrelated chains.
22
22
  * @public
23
- * @deprecated in 4.3.0 - will not be removed until after 2026-06-13. Use AnyChain | undefined.
23
+ * @deprecated in 4.3.0 - might be removed in next major version. Use AnyChain | undefined.
24
24
  */
25
25
  export type ChainTypes = CurvePrimitive | Path | BagOfCurves | Loop | undefined;
26
26
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"CurveTypes.js","sourceRoot":"","sources":["../../../src/curve/CurveTypes.ts"],"names":[],"mappings":";AAAA;;;+FAG+F","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Curve\n */\n\nimport type { BagOfCurves, CurveCollection } from \"./CurveCollection\";\nimport type { CurvePrimitive } from \"./CurvePrimitive\";\nimport type { Loop } from \"./Loop\";\nimport type { Path } from \"./Path\";\nimport type { ParityRegion } from \"./ParityRegion\";\nimport type { UnionRegion } from \"./UnionRegion\";\n\n/**\n * Union type for `GeometryQuery` classes that have contain curves, either as individual parameter space or as collections.\n * @public\n */\nexport type AnyCurve = CurvePrimitive | CurveCollection;\n\n/**\n * Union type for `GeometryQuery` classes that bound (planar) regions.\n * @public\n */\nexport type AnyRegion = Loop | ParityRegion | UnionRegion;\n\n/**\n * Union type for a general curve chain, or a `BagOfCurves` understood to be a collection of unrelated chains.\n * @public\n * @deprecated in 4.3.0 - will not be removed until after 2026-06-13. Use AnyChain | undefined.\n */\nexport type ChainTypes = CurvePrimitive | Path | BagOfCurves | Loop | undefined;\n\n/**\n * Union type for a general curve chain, or a `BagOfCurves` understood to be a collection of unrelated chains.\n * @public\n */\nexport type AnyChain = CurvePrimitive | Path | BagOfCurves | Loop;\n"]}
1
+ {"version":3,"file":"CurveTypes.js","sourceRoot":"","sources":["../../../src/curve/CurveTypes.ts"],"names":[],"mappings":";AAAA;;;+FAG+F","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Curve\n */\n\nimport type { BagOfCurves, CurveCollection } from \"./CurveCollection\";\nimport type { CurvePrimitive } from \"./CurvePrimitive\";\nimport type { Loop } from \"./Loop\";\nimport type { Path } from \"./Path\";\nimport type { ParityRegion } from \"./ParityRegion\";\nimport type { UnionRegion } from \"./UnionRegion\";\n\n/**\n * Union type for `GeometryQuery` classes that have contain curves, either as individual parameter space or as collections.\n * @public\n */\nexport type AnyCurve = CurvePrimitive | CurveCollection;\n\n/**\n * Union type for `GeometryQuery` classes that bound (planar) regions.\n * @public\n */\nexport type AnyRegion = Loop | ParityRegion | UnionRegion;\n\n/**\n * Union type for a general curve chain, or a `BagOfCurves` understood to be a collection of unrelated chains.\n * @public\n * @deprecated in 4.3.0 - might be removed in next major version. Use AnyChain | undefined.\n */\nexport type ChainTypes = CurvePrimitive | Path | BagOfCurves | Loop | undefined;\n\n/**\n * Union type for a general curve chain, or a `BagOfCurves` understood to be a collection of unrelated chains.\n * @public\n */\nexport type AnyChain = CurvePrimitive | Path | BagOfCurves | Loop;\n"]}
@@ -36,7 +36,7 @@ export declare class StrokeOptions {
36
36
  maxEdgeLength?: number;
37
37
  /**
38
38
  * Caller expects convex facets.
39
- * @deprecated in 4.2.0 - will not be removed until after 2026-06-13. Never used. See [[shouldTriangulate]] and [[maximizeConvexFacets]].
39
+ * @deprecated in 4.2.0 - might be removed in next major version. Never used. See [[shouldTriangulate]] and [[maximizeConvexFacets]].
40
40
  */
41
41
  needConvexFacets?: boolean;
42
42
  /** Minimum strokes on a primitive. */
@@ -47,7 +47,7 @@ class StrokeOptions {
47
47
  maxEdgeLength;
48
48
  /**
49
49
  * Caller expects convex facets.
50
- * @deprecated in 4.2.0 - will not be removed until after 2026-06-13. Never used. See [[shouldTriangulate]] and [[maximizeConvexFacets]].
50
+ * @deprecated in 4.2.0 - might be removed in next major version. Never used. See [[shouldTriangulate]] and [[maximizeConvexFacets]].
51
51
  */
52
52
  needConvexFacets;
53
53
  /** Minimum strokes on a primitive. */
@@ -1 +1 @@
1
- {"version":3,"file":"StrokeOptions.js","sourceRoot":"","sources":["../../../src/curve/StrokeOptions.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Curve\n */\n\nimport { Geometry } from \"../Geometry\";\nimport { Angle } from \"../geometry3d/Angle\";\n\n/**\n * Tolerance blob for various stroking methods.\n *\n * * Across many applications, the critical concepts are: chordTol, angleTol, maxEdgeLength\n * * Chord error is an distance measured from a curve or facet to its approximating stroke or facet.\n * * angle is the angle between two contiguous strokes or across a facet edge.\n * * maxEdgeLength is the length of a stroke or a edge of a facet.\n * * It is rare for all three to be active at once.\n * * Nearly all stroke and facet use cases will apply an angle tolerance.\n * * For curves, 15 degrees is typical\n * * For facets, 22.5 degrees is typical.\n * * Halving the angle tolerance will (roughly) make curves get twice as many strokes, and surfaces get 4 times as\n * many facets.\n * * The angle tolerance has the useful property that its effect is independent of scale of that data. If data is\n * suddenly scaled into millimeters rather than meters, the facet counts remain the same.\n * * When creating output for devices such as 3D printing will want a chord tolerance.\n * * For graphics display, use an angle tolerance of around 15 degrees and an chord tolerance which is the size of\n * several pixels.\n * * Analysis meshes (e.g. Finite Elements) commonly need to apply maxEdgeLength.\n * * Using maxEdgeLength for graphics probably produces too many facets. For example, it causes long cylinders to\n * get many nearly-square facets instead of the small number of long quads usually used for graphics.\n * * Facet tolerances are, as the Pirates' Code, guidelines, not absolute rules. Facet and stroke code may ignore\n * tolerances in awkward situations.\n * * If multiple tolerances are in effect, the actual count will usually be based on the one that demands the most\n * strokes or facets, unless it is so high that it violates some upper limit on the number of facets on an arc or a\n * section of a curve.\n * @public\n */\nexport class StrokeOptions {\n /** Distance from stroke to actual geometry. */\n public chordTol?: number;\n /** Turning angle between strokes. Larger value leads to fewer strokes. */\n public angleTol?: Angle;\n /** Maximum length of a single stroke. */\n public maxEdgeLength?: number;\n /**\n * Caller expects convex facets.\n * @deprecated in 4.2.0 - will not be removed until after 2026-06-13. Never used. See [[shouldTriangulate]] and [[maximizeConvexFacets]].\n */\n public needConvexFacets?: boolean;\n /** Minimum strokes on a primitive. */\n public minStrokesPerPrimitive?: number;\n /** Whether or not to triangulate each added facet. */\n public shouldTriangulate: boolean = false;\n private _needNormals?: boolean;\n private _needTwoSided?: boolean;\n private _needParams?: boolean;\n /** Whether params are requested. */\n public get needParams(): boolean {\n return this._needParams !== undefined ? this._needParams : false;\n }\n public set needParams(value: boolean) {\n this._needParams = value;\n }\n /** Whether normals are requested */\n public get needNormals(): boolean {\n return this._needNormals !== undefined ? this._needNormals : false;\n }\n public set needNormals(value: boolean) {\n this._needNormals = value;\n }\n /**\n * Whether to request facets that are viewable from the back.\n * * Default value is true.\n * * Set to false only if the requested facets are expected to form a closed volume with outward normals,\n * indicating they are amenable to backface culling for improved display performance.\n */\n public get needTwoSided(): boolean {\n return this._needTwoSided !== undefined ? this._needTwoSided : true;\n }\n public set needTwoSided(value: boolean) {\n this._needTwoSided = value;\n }\n /** Optional color request flag */\n public needColors?: boolean;\n /** Default number of strokes for a circle. */\n public defaultCircleStrokes = 16;\n /** Ask if angleTol is specified */\n public get hasAngleTol(): boolean {\n return this.angleTol !== undefined && Math.abs(this.angleTol.radians) > 0.0;\n }\n /** Ask if chordTol is specified */\n public get hasChordTol(): boolean {\n return this.chordTol !== undefined && this.chordTol > 0.0;\n }\n /** Ask if maxEdgeLength is specified */\n public get hasMaxEdgeLength(): boolean {\n return this.maxEdgeLength !== undefined && this.maxEdgeLength > 0.0;\n }\n private _maximizeConvexFacets?: boolean;\n /**\n * Whether to post-process a planar triangulation by removing edges to maximize the size of convex facets.\n * * Setting this to true also sets [[shouldTriangulate]] to true.\n */\n public get maximizeConvexFacets(): boolean {\n return this._maximizeConvexFacets ?? false;\n }\n public set maximizeConvexFacets(value: boolean) {\n this._maximizeConvexFacets = value;\n if (value)\n this.shouldTriangulate = value;\n }\n /** Return a deep clone */\n public clone(): StrokeOptions {\n const options = new StrokeOptions();\n options.chordTol = this.chordTol;\n options.angleTol = this.angleTol?.clone();\n options.maxEdgeLength = this.maxEdgeLength;\n options.minStrokesPerPrimitive = this.minStrokesPerPrimitive;\n options.shouldTriangulate = this.shouldTriangulate;\n options._needNormals = this._needNormals;\n options._needTwoSided = this._needTwoSided;\n options._needParams = this._needParams;\n options.needColors = this.needColors;\n options.defaultCircleStrokes = this.defaultCircleStrokes;\n options._maximizeConvexFacets = this._maximizeConvexFacets;\n return options;\n }\n /** Return stroke count which is the larger of the minCount or count needed for edge length condition. */\n public applyMaxEdgeLength(minCount: number, totalLength: number): number {\n totalLength = Math.abs(totalLength);\n if (this.maxEdgeLength && this.maxEdgeLength > 0.0 && minCount * this.maxEdgeLength < totalLength) {\n minCount = Geometry.stepCount(this.maxEdgeLength, totalLength, minCount);\n }\n return minCount;\n }\n /**\n * Return stroke count which is the larger of the existing count or count needed for angle condition for given\n * sweepRadians.\n * * defaultStepRadians is assumed to be larger than zero.\n */\n public applyAngleTol(minCount: number, sweepRadians: number, defaultStepRadians: number): number {\n return StrokeOptions.applyAngleTol(this, minCount, sweepRadians, defaultStepRadians);\n }\n /**\n * Return stroke count which is the larger of minCount and the count required to turn sweepRadians, using tolerance\n * from the options.\n */\n public static applyAngleTol(\n options: StrokeOptions | undefined, minCount: number, sweepRadians: number, defaultStepRadians?: number,\n ): number {\n sweepRadians = Math.abs(sweepRadians);\n let stepRadians = defaultStepRadians ? defaultStepRadians : Math.PI / 8.0;\n if (options && options.angleTol && options.angleTol.radians > 0.0)\n stepRadians = options.angleTol.radians;\n if (minCount * stepRadians < sweepRadians)\n minCount = Geometry.stepCount(stepRadians, sweepRadians, minCount);\n return minCount;\n }\n /**\n * Return the number of strokes needed for given edgeLength curve.\n * @param options\n * @param minCount smallest allowed count\n * @param edgeLength\n */\n public static applyMaxEdgeLength(\n options: StrokeOptions | undefined, minCount: number, edgeLength: number,\n ): number {\n if (edgeLength < 0)\n edgeLength = - edgeLength;\n if (minCount < 1)\n minCount = 1;\n if (options && options.maxEdgeLength && options.maxEdgeLength * minCount < edgeLength) {\n minCount = Geometry.stepCount(options.maxEdgeLength, edgeLength, minCount);\n }\n return minCount;\n }\n /**\n * Determine a stroke count for a (partial) circular arc of given radius. This considers angle, maxEdgeLength,\n * chord, and minimum stroke.\n */\n public applyTolerancesToArc(radius: number, sweepRadians: number = Math.PI * 2): number {\n let numStrokes = 1;\n numStrokes = this.applyAngleTol(numStrokes, sweepRadians, Math.PI * 0.25);\n numStrokes = this.applyMaxEdgeLength(numStrokes, sweepRadians * radius);\n numStrokes = this.applyChordTol(numStrokes, radius, sweepRadians);\n numStrokes = this.applyMinStrokesPerPrimitive(numStrokes);\n return numStrokes;\n }\n /** Return stroke count which is the larger of existing count or count needed for circular arc chord tolerance condition. */\n public applyChordTol(minCount: number, radius: number, sweepRadians: number): number {\n if (this.chordTol && this.chordTol > 0.0 && this.chordTol < radius) {\n const a = this.chordTol;\n const stepRadians = 2.0 * Math.acos((1.0 - a / radius));\n minCount = Geometry.stepCount(stepRadians, sweepRadians, minCount);\n }\n return minCount;\n }\n /**\n * Return stroke count which is the larger of existing count or count needed for circular arc chord tol with given\n * arc length and radians\n */\n public applyChordTolToLengthAndRadians(minCount: number, length: number, sweepRadians: number): number {\n if (this.chordTol && this.chordTol > 0.0) {\n const radius = Geometry.conditionalDivideFraction(length, sweepRadians);\n if (radius !== undefined)\n return this.applyChordTol(minCount, radius, sweepRadians);\n }\n return minCount;\n }\n /** Return stroke count which is the larger of existing count or `this.minStrokesPerPrimitive` */\n public applyMinStrokesPerPrimitive(minCount: number): number {\n if (this.minStrokesPerPrimitive !== undefined && Number.isFinite(this.minStrokesPerPrimitive)\n && this.minStrokesPerPrimitive > minCount)\n minCount = this.minStrokesPerPrimitive;\n return minCount;\n }\n /**\n * Create `StrokeOptions` with defaults appropriate for curves.\n * * angle tolerance of 15 degrees.\n * * all others inactive.\n */\n public static createForCurves(): StrokeOptions {\n const options = new StrokeOptions();\n options.angleTol = Angle.createDegrees(15.0);\n return options;\n }\n /**\n * Create `StrokeOptions` with defaults appropriate for surfaces facets\n * * angle tolerance of 22.5 degrees.\n * * all others inactive.\n */\n public static createForFacets(): StrokeOptions {\n const options = new StrokeOptions();\n options.angleTol = Angle.createDegrees(22.5);\n return options;\n }\n}\n"]}
1
+ {"version":3,"file":"StrokeOptions.js","sourceRoot":"","sources":["../../../src/curve/StrokeOptions.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Curve\n */\n\nimport { Geometry } from \"../Geometry\";\nimport { Angle } from \"../geometry3d/Angle\";\n\n/**\n * Tolerance blob for various stroking methods.\n *\n * * Across many applications, the critical concepts are: chordTol, angleTol, maxEdgeLength\n * * Chord error is an distance measured from a curve or facet to its approximating stroke or facet.\n * * angle is the angle between two contiguous strokes or across a facet edge.\n * * maxEdgeLength is the length of a stroke or a edge of a facet.\n * * It is rare for all three to be active at once.\n * * Nearly all stroke and facet use cases will apply an angle tolerance.\n * * For curves, 15 degrees is typical\n * * For facets, 22.5 degrees is typical.\n * * Halving the angle tolerance will (roughly) make curves get twice as many strokes, and surfaces get 4 times as\n * many facets.\n * * The angle tolerance has the useful property that its effect is independent of scale of that data. If data is\n * suddenly scaled into millimeters rather than meters, the facet counts remain the same.\n * * When creating output for devices such as 3D printing will want a chord tolerance.\n * * For graphics display, use an angle tolerance of around 15 degrees and an chord tolerance which is the size of\n * several pixels.\n * * Analysis meshes (e.g. Finite Elements) commonly need to apply maxEdgeLength.\n * * Using maxEdgeLength for graphics probably produces too many facets. For example, it causes long cylinders to\n * get many nearly-square facets instead of the small number of long quads usually used for graphics.\n * * Facet tolerances are, as the Pirates' Code, guidelines, not absolute rules. Facet and stroke code may ignore\n * tolerances in awkward situations.\n * * If multiple tolerances are in effect, the actual count will usually be based on the one that demands the most\n * strokes or facets, unless it is so high that it violates some upper limit on the number of facets on an arc or a\n * section of a curve.\n * @public\n */\nexport class StrokeOptions {\n /** Distance from stroke to actual geometry. */\n public chordTol?: number;\n /** Turning angle between strokes. Larger value leads to fewer strokes. */\n public angleTol?: Angle;\n /** Maximum length of a single stroke. */\n public maxEdgeLength?: number;\n /**\n * Caller expects convex facets.\n * @deprecated in 4.2.0 - might be removed in next major version. Never used. See [[shouldTriangulate]] and [[maximizeConvexFacets]].\n */\n public needConvexFacets?: boolean;\n /** Minimum strokes on a primitive. */\n public minStrokesPerPrimitive?: number;\n /** Whether or not to triangulate each added facet. */\n public shouldTriangulate: boolean = false;\n private _needNormals?: boolean;\n private _needTwoSided?: boolean;\n private _needParams?: boolean;\n /** Whether params are requested. */\n public get needParams(): boolean {\n return this._needParams !== undefined ? this._needParams : false;\n }\n public set needParams(value: boolean) {\n this._needParams = value;\n }\n /** Whether normals are requested */\n public get needNormals(): boolean {\n return this._needNormals !== undefined ? this._needNormals : false;\n }\n public set needNormals(value: boolean) {\n this._needNormals = value;\n }\n /**\n * Whether to request facets that are viewable from the back.\n * * Default value is true.\n * * Set to false only if the requested facets are expected to form a closed volume with outward normals,\n * indicating they are amenable to backface culling for improved display performance.\n */\n public get needTwoSided(): boolean {\n return this._needTwoSided !== undefined ? this._needTwoSided : true;\n }\n public set needTwoSided(value: boolean) {\n this._needTwoSided = value;\n }\n /** Optional color request flag */\n public needColors?: boolean;\n /** Default number of strokes for a circle. */\n public defaultCircleStrokes = 16;\n /** Ask if angleTol is specified */\n public get hasAngleTol(): boolean {\n return this.angleTol !== undefined && Math.abs(this.angleTol.radians) > 0.0;\n }\n /** Ask if chordTol is specified */\n public get hasChordTol(): boolean {\n return this.chordTol !== undefined && this.chordTol > 0.0;\n }\n /** Ask if maxEdgeLength is specified */\n public get hasMaxEdgeLength(): boolean {\n return this.maxEdgeLength !== undefined && this.maxEdgeLength > 0.0;\n }\n private _maximizeConvexFacets?: boolean;\n /**\n * Whether to post-process a planar triangulation by removing edges to maximize the size of convex facets.\n * * Setting this to true also sets [[shouldTriangulate]] to true.\n */\n public get maximizeConvexFacets(): boolean {\n return this._maximizeConvexFacets ?? false;\n }\n public set maximizeConvexFacets(value: boolean) {\n this._maximizeConvexFacets = value;\n if (value)\n this.shouldTriangulate = value;\n }\n /** Return a deep clone */\n public clone(): StrokeOptions {\n const options = new StrokeOptions();\n options.chordTol = this.chordTol;\n options.angleTol = this.angleTol?.clone();\n options.maxEdgeLength = this.maxEdgeLength;\n options.minStrokesPerPrimitive = this.minStrokesPerPrimitive;\n options.shouldTriangulate = this.shouldTriangulate;\n options._needNormals = this._needNormals;\n options._needTwoSided = this._needTwoSided;\n options._needParams = this._needParams;\n options.needColors = this.needColors;\n options.defaultCircleStrokes = this.defaultCircleStrokes;\n options._maximizeConvexFacets = this._maximizeConvexFacets;\n return options;\n }\n /** Return stroke count which is the larger of the minCount or count needed for edge length condition. */\n public applyMaxEdgeLength(minCount: number, totalLength: number): number {\n totalLength = Math.abs(totalLength);\n if (this.maxEdgeLength && this.maxEdgeLength > 0.0 && minCount * this.maxEdgeLength < totalLength) {\n minCount = Geometry.stepCount(this.maxEdgeLength, totalLength, minCount);\n }\n return minCount;\n }\n /**\n * Return stroke count which is the larger of the existing count or count needed for angle condition for given\n * sweepRadians.\n * * defaultStepRadians is assumed to be larger than zero.\n */\n public applyAngleTol(minCount: number, sweepRadians: number, defaultStepRadians: number): number {\n return StrokeOptions.applyAngleTol(this, minCount, sweepRadians, defaultStepRadians);\n }\n /**\n * Return stroke count which is the larger of minCount and the count required to turn sweepRadians, using tolerance\n * from the options.\n */\n public static applyAngleTol(\n options: StrokeOptions | undefined, minCount: number, sweepRadians: number, defaultStepRadians?: number,\n ): number {\n sweepRadians = Math.abs(sweepRadians);\n let stepRadians = defaultStepRadians ? defaultStepRadians : Math.PI / 8.0;\n if (options && options.angleTol && options.angleTol.radians > 0.0)\n stepRadians = options.angleTol.radians;\n if (minCount * stepRadians < sweepRadians)\n minCount = Geometry.stepCount(stepRadians, sweepRadians, minCount);\n return minCount;\n }\n /**\n * Return the number of strokes needed for given edgeLength curve.\n * @param options\n * @param minCount smallest allowed count\n * @param edgeLength\n */\n public static applyMaxEdgeLength(\n options: StrokeOptions | undefined, minCount: number, edgeLength: number,\n ): number {\n if (edgeLength < 0)\n edgeLength = - edgeLength;\n if (minCount < 1)\n minCount = 1;\n if (options && options.maxEdgeLength && options.maxEdgeLength * minCount < edgeLength) {\n minCount = Geometry.stepCount(options.maxEdgeLength, edgeLength, minCount);\n }\n return minCount;\n }\n /**\n * Determine a stroke count for a (partial) circular arc of given radius. This considers angle, maxEdgeLength,\n * chord, and minimum stroke.\n */\n public applyTolerancesToArc(radius: number, sweepRadians: number = Math.PI * 2): number {\n let numStrokes = 1;\n numStrokes = this.applyAngleTol(numStrokes, sweepRadians, Math.PI * 0.25);\n numStrokes = this.applyMaxEdgeLength(numStrokes, sweepRadians * radius);\n numStrokes = this.applyChordTol(numStrokes, radius, sweepRadians);\n numStrokes = this.applyMinStrokesPerPrimitive(numStrokes);\n return numStrokes;\n }\n /** Return stroke count which is the larger of existing count or count needed for circular arc chord tolerance condition. */\n public applyChordTol(minCount: number, radius: number, sweepRadians: number): number {\n if (this.chordTol && this.chordTol > 0.0 && this.chordTol < radius) {\n const a = this.chordTol;\n const stepRadians = 2.0 * Math.acos((1.0 - a / radius));\n minCount = Geometry.stepCount(stepRadians, sweepRadians, minCount);\n }\n return minCount;\n }\n /**\n * Return stroke count which is the larger of existing count or count needed for circular arc chord tol with given\n * arc length and radians\n */\n public applyChordTolToLengthAndRadians(minCount: number, length: number, sweepRadians: number): number {\n if (this.chordTol && this.chordTol > 0.0) {\n const radius = Geometry.conditionalDivideFraction(length, sweepRadians);\n if (radius !== undefined)\n return this.applyChordTol(minCount, radius, sweepRadians);\n }\n return minCount;\n }\n /** Return stroke count which is the larger of existing count or `this.minStrokesPerPrimitive` */\n public applyMinStrokesPerPrimitive(minCount: number): number {\n if (this.minStrokesPerPrimitive !== undefined && Number.isFinite(this.minStrokesPerPrimitive)\n && this.minStrokesPerPrimitive > minCount)\n minCount = this.minStrokesPerPrimitive;\n return minCount;\n }\n /**\n * Create `StrokeOptions` with defaults appropriate for curves.\n * * angle tolerance of 15 degrees.\n * * all others inactive.\n */\n public static createForCurves(): StrokeOptions {\n const options = new StrokeOptions();\n options.angleTol = Angle.createDegrees(15.0);\n return options;\n }\n /**\n * Create `StrokeOptions` with defaults appropriate for surfaces facets\n * * angle tolerance of 22.5 degrees.\n * * all others inactive.\n */\n public static createForFacets(): StrokeOptions {\n const options = new StrokeOptions();\n options.angleTol = Angle.createDegrees(22.5);\n return options;\n }\n}\n"]}
@@ -89,7 +89,7 @@ export declare class GrowableXYArray extends IndexedReadWriteXYCollection {
89
89
  static createCapture(data: Float64Array): GrowableXYArray;
90
90
  /**
91
91
  * Restructure MultiLineStringDataVariant as array of GrowableXYZArray
92
- * @deprecated in 4.2.0 - will not be removed until after 2026-06-13. Moved to GrowableXYZArray class.
92
+ * @deprecated in 4.2.0 - might be removed in next major version. Moved to GrowableXYZArray class.
93
93
  */
94
94
  static createArrayOfGrowableXYZArray(data: MultiLineStringDataVariant): GrowableXYZArray[] | undefined;
95
95
  /** Push a point to the end of the array. */
@@ -176,7 +176,7 @@ class GrowableXYArray extends IndexedXYCollection_1.IndexedReadWriteXYCollection
176
176
  }
177
177
  /**
178
178
  * Restructure MultiLineStringDataVariant as array of GrowableXYZArray
179
- * @deprecated in 4.2.0 - will not be removed until after 2026-06-13. Moved to GrowableXYZArray class.
179
+ * @deprecated in 4.2.0 - might be removed in next major version. Moved to GrowableXYZArray class.
180
180
  */
181
181
  static createArrayOfGrowableXYZArray(data) {
182
182
  return GrowableXYZArray_1.GrowableXYZArray.createArrayOfGrowableXYZArray(data);