@itwin/core-geometry 5.10.2 → 5.11.0-dev.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/lib/cjs/bspline/BSplineCurve.d.ts +1 -1
  3. package/lib/cjs/bspline/BSplineCurve.js +1 -1
  4. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  5. package/lib/cjs/clipping/BooleanClipNode.d.ts +2 -2
  6. package/lib/cjs/clipping/BooleanClipNode.js +2 -2
  7. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  8. package/lib/cjs/clipping/ClipPlane.d.ts +8 -2
  9. package/lib/cjs/clipping/ClipPlane.d.ts.map +1 -1
  10. package/lib/cjs/clipping/ClipPlane.js +8 -2
  11. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  12. package/lib/cjs/clipping/ClipPrimitive.d.ts +26 -24
  13. package/lib/cjs/clipping/ClipPrimitive.d.ts.map +1 -1
  14. package/lib/cjs/clipping/ClipPrimitive.js +44 -35
  15. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  16. package/lib/cjs/clipping/ClipUtils.js +1 -1
  17. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  18. package/lib/cjs/clipping/ClipVector.d.ts +4 -3
  19. package/lib/cjs/clipping/ClipVector.d.ts.map +1 -1
  20. package/lib/cjs/clipping/ClipVector.js +4 -3
  21. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  22. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts +2 -2
  23. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
  24. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js +2 -2
  25. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  26. package/lib/cjs/curve/RegionOps.d.ts +1 -1
  27. package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
  28. package/lib/cjs/curve/RegionOps.js +1 -1
  29. package/lib/cjs/curve/RegionOps.js.map +1 -1
  30. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.d.ts +5 -2
  31. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.d.ts.map +1 -1
  32. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js +5 -2
  33. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  34. package/lib/cjs/solid/RotationalSweep.d.ts +21 -5
  35. package/lib/cjs/solid/RotationalSweep.d.ts.map +1 -1
  36. package/lib/cjs/solid/RotationalSweep.js +27 -4
  37. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  38. package/lib/cjs/solid/SolidPrimitive.d.ts +7 -1
  39. package/lib/cjs/solid/SolidPrimitive.d.ts.map +1 -1
  40. package/lib/cjs/solid/SolidPrimitive.js +8 -1
  41. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  42. package/lib/esm/bspline/BSplineCurve.d.ts +1 -1
  43. package/lib/esm/bspline/BSplineCurve.js +1 -1
  44. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  45. package/lib/esm/clipping/BooleanClipNode.d.ts +2 -2
  46. package/lib/esm/clipping/BooleanClipNode.js +2 -2
  47. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  48. package/lib/esm/clipping/ClipPlane.d.ts +8 -2
  49. package/lib/esm/clipping/ClipPlane.d.ts.map +1 -1
  50. package/lib/esm/clipping/ClipPlane.js +8 -2
  51. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  52. package/lib/esm/clipping/ClipPrimitive.d.ts +26 -24
  53. package/lib/esm/clipping/ClipPrimitive.d.ts.map +1 -1
  54. package/lib/esm/clipping/ClipPrimitive.js +44 -35
  55. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  56. package/lib/esm/clipping/ClipUtils.js +1 -1
  57. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  58. package/lib/esm/clipping/ClipVector.d.ts +4 -3
  59. package/lib/esm/clipping/ClipVector.d.ts.map +1 -1
  60. package/lib/esm/clipping/ClipVector.js +4 -3
  61. package/lib/esm/clipping/ClipVector.js.map +1 -1
  62. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts +2 -2
  63. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
  64. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js +2 -2
  65. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  66. package/lib/esm/curve/RegionOps.d.ts +1 -1
  67. package/lib/esm/curve/RegionOps.d.ts.map +1 -1
  68. package/lib/esm/curve/RegionOps.js +1 -1
  69. package/lib/esm/curve/RegionOps.js.map +1 -1
  70. package/lib/esm/serialization/BentleyGeometryFlatBuffer.d.ts +5 -2
  71. package/lib/esm/serialization/BentleyGeometryFlatBuffer.d.ts.map +1 -1
  72. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js +5 -2
  73. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  74. package/lib/esm/solid/RotationalSweep.d.ts +21 -5
  75. package/lib/esm/solid/RotationalSweep.d.ts.map +1 -1
  76. package/lib/esm/solid/RotationalSweep.js +26 -4
  77. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  78. package/lib/esm/solid/SolidPrimitive.d.ts +7 -1
  79. package/lib/esm/solid/SolidPrimitive.d.ts.map +1 -1
  80. package/lib/esm/solid/SolidPrimitive.js +6 -0
  81. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  82. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"ClipPlane.js","sourceRoot":"","sources":["../../../src/clipping/ClipPlane.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 CartesianGeometry\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { Arc3d } from \"../curve/Arc3d\";\nimport { CurveLocationDetail } from \"../curve/CurveLocationDetail\";\nimport { AnnounceNumberNumber, AnnounceNumberNumberCurvePrimitive, CurvePrimitive } from \"../curve/CurvePrimitive\";\nimport { AxisOrder, Geometry } from \"../Geometry\";\nimport { Angle } from \"../geometry3d/Angle\";\nimport { GrowableFloat64Array } from \"../geometry3d/GrowableFloat64Array\";\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\nimport { IndexedXYZCollection } from \"../geometry3d/IndexedXYZCollection\";\nimport { Matrix3d } from \"../geometry3d/Matrix3d\";\nimport { Plane3d } from \"../geometry3d/Plane3d\";\nimport { Plane3dByOriginAndUnitNormal } from \"../geometry3d/Plane3dByOriginAndUnitNormal\";\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\nimport { IndexedXYZCollectionPolygonOps } from \"../geometry3d/PolygonOps\";\nimport { Range1d, Range3d } from \"../geometry3d/Range\";\nimport { GrowableXYZArrayCache } from \"../geometry3d/ReusableObjectCache\";\nimport { Transform } from \"../geometry3d/Transform\";\nimport { XYAndZ, XYZProps } from \"../geometry3d/XYZProps\";\nimport { Matrix4d } from \"../geometry4d/Matrix4d\";\nimport { Point4d } from \"../geometry4d/Point4d\";\nimport { AnalyticRoots } from \"../numerics/Polynomials\";\nimport { Clipper, ClipUtilities, PolygonClipper } from \"./ClipUtils\";\n\n/**\n * Wire format describing a [[ClipPlane]].\n * If either [[normal]] or [[dist]] are omitted, defaults to a normal of [[Vector3d.unitZ]] and a distance of zero.\n * @public\n */\nexport interface ClipPlaneProps {\n /** The plane's inward normal. */\n normal?: XYZProps;\n /** The plane's signed distance from the origin. */\n dist?: number;\n /** Defaults to `false`. Interpretation of this flag is algorithm-specific. */\n invisible?: boolean;\n /** Defaults to `false`. Interpretation of this flag is algorithm-specific. */\n interior?: boolean;\n}\n\n/**\n * A ClipPlane is a single plane represented as\n * * An inward unit normal (u,v,w)\n * * A signedDistance\n * More details can be found at docs/learning/geometry/Clipping.md\n *\n * Hence\n * * The halfspace function evaluation for point (x,y,z) is `(x,y,z) DOT (u,v,w) - signedDistance`.\n * * POSITIVE values of the halfspace function are \"inside\".\n * * ZERO value of the halfspace function is \"on\".\n * * NEGATIVE value of the halfspace function is \"outside\".\n * * A representative point on the plane is (signedDistance * u, signedDistance * v, signedDistance * w).\n * * Given a point on the plane and the inward normal of the plane, `signedDistance = point DOT normal`.\n * @public\n */\nexport class ClipPlane extends Plane3d implements Clipper, PolygonClipper {\n private _inwardNormal: Vector3d;\n /**\n * Construct a parallel plane through the origin.\n * * Move it to the actual position.\n * * _distanceFromOrigin is the distance it moved, with the (inward) normal direction as positive.\n */\n private _distanceFromOrigin: number;\n private _invisible: boolean;\n private _interior: boolean;\n\n private constructor(normal: Vector3d, distance: number, invisible: boolean, interior: boolean) {\n super();\n this._invisible = invisible;\n this._interior = interior;\n this._inwardNormal = normal;\n this._distanceFromOrigin = distance;\n }\n /*\n private safeSetXYZDistance(nx: number, ny: number, nz: number, d: number) {\n this._inwardNormal.set(nx, ny, nz);\n this._distanceFromOrigin = d;\n }\n */\n /**\n * Return true if all members are almostEqual to corresponding members of other.\n * @param other clip plane to compare\n */\n public isAlmostEqual(other: ClipPlane): boolean {\n return Geometry.isSameCoordinate(this._distanceFromOrigin, other._distanceFromOrigin)\n && this._inwardNormal.isAlmostEqual(other._inwardNormal)\n && this._interior === other._interior\n && this._invisible === other._invisible;\n }\n /** Return a cloned plane */\n public clone(): ClipPlane {\n const result = new ClipPlane(this._inwardNormal.clone(), this._distanceFromOrigin, this._invisible, this._interior);\n return result;\n }\n /** Return a cloned plane with coordinate data negated. */\n public cloneNegated(): ClipPlane {\n const plane = new ClipPlane(this._inwardNormal.clone(), this._distanceFromOrigin, this._invisible, this._interior);\n plane.negateInPlace();\n return plane;\n }\n /** Create a ClipPlane from Plane3dByOriginAndUnitNormal. */\n public static createPlane(\n plane: Plane3dByOriginAndUnitNormal, invisible: boolean = false, interior: boolean = false, result?: ClipPlane,\n ): ClipPlane {\n const distance = plane.getNormalRef().dotProduct(plane.getOriginRef());\n if (result) {\n result._invisible = invisible;\n result._interior = interior;\n result._inwardNormal = plane.getNormalRef().clone();\n result._distanceFromOrigin = distance;\n return result;\n }\n return new ClipPlane(plane.getNormalRef().clone(), distance, invisible, interior);\n }\n /**\n * Create a ClipPlane with direct normal and signedDistance.\n * * The vector is normalized for storage.\n */\n public static createNormalAndDistance(\n normal: Vector3d, distance: number, invisible: boolean = false, interior: boolean = false, result?: ClipPlane,\n ): ClipPlane | undefined {\n const normalized = normal.normalize();\n if (normalized) {\n if (result) {\n result._invisible = invisible;\n result._interior = interior;\n result._inwardNormal = normalized;\n result._distanceFromOrigin = distance;\n }\n return new ClipPlane(normalized, distance, invisible, interior);\n }\n return undefined;\n }\n /**\n * Create a ClipPlane\n * * \"normal\" is the inward normal of the plane (it is internally normalized).\n * * \"point\" is any point of the plane.\n * * The stored distance for the plane is the dot product of the point with the normal (i.e. treat the point's xyz as\n * a vector from the origin.)\n */\n public static createNormalAndPoint(\n normal: Vector3d, point: XYAndZ, invisible: boolean = false, interior: boolean = false, result?: ClipPlane,\n ): ClipPlane | undefined {\n const normalized = normal.normalize();\n if (normalized) {\n const distance = normalized.dotProduct(point);\n if (result) {\n result._invisible = invisible;\n result._interior = interior;\n result._inwardNormal = normalized;\n result._distanceFromOrigin = distance;\n }\n return new ClipPlane(normalized, distance, invisible, interior);\n }\n return undefined;\n }\n /**\n * Create a clip plane\n * @param origin any point on the plane.\n * @param vectorA any vector in the plane\n * @param vectorB any vector in the plane\n * @return undefined if the vectors are not independent.\n * * The stored inward normal is vectorB.crossProduct(vectorA).\n * * That is, the vectors are considered as a right-handed pair when viewed from the outside.\n */\n public static createOriginAndVectors(\n origin: Point3d,\n vectorA: Vector3d,\n vectorB: Vector3d,\n invisible: boolean = false,\n interior: boolean = false,\n result?: ClipPlane,\n ): ClipPlane | undefined {\n const normalized = vectorB.crossProduct(vectorA);\n return this.createNormalAndPoint(normalized, origin, invisible, interior, result);\n }\n /**\n * Create a ClipPlane\n * * \"normal\" (normalX, normalY, normalZ) is the inward normal of the plane.\n * * \"point\" (originX,originY,originZ) is any point of the plane.\n * * The stored distance for the plane is the dot product of the point with the normal (i.e. treat the point's xyz\n * as a vector from the origin.)\n */\n public static createNormalAndPointXYZXYZ(\n normalX: number, normalY: number, normalZ: number,\n originX: number, originY: number, originZ: number,\n invisible: boolean = false, interior: boolean = false,\n result?: ClipPlane,\n ): ClipPlane | undefined {\n const q = Geometry.hypotenuseXYZ(normalX, normalY, normalZ);\n const r = Geometry.conditionalDivideFraction(1, q);\n if (r !== undefined) {\n if (result) {\n result._inwardNormal.set(normalX * r, normalY * r, normalZ * r);\n result._distanceFromOrigin = result._inwardNormal.dotProductXYZ(originX, originY, originZ);\n result._invisible = invisible;\n result._interior = interior;\n return result;\n }\n const normal = Vector3d.create(normalX * r, normalY * r, normalZ * r);\n return new ClipPlane(normal, normal.dotProductXYZ(originX, originY, originZ), invisible, interior);\n }\n return undefined;\n }\n /**\n * Return a json object of the form\n * `{\"normal\":[u,v,w],\"dist\":signedDistanceValue,\"interior\":true,\"invisible\":true}`\n */\n public toJSON(): ClipPlaneProps {\n const props: ClipPlaneProps = {\n normal: this.inwardNormalRef.toJSON(),\n dist: this.distance,\n };\n if (this.interior)\n props.interior = true;\n if (this.invisible)\n props.invisible = true;\n return props;\n }\n /** Parse json object to ClipPlane instance */\n public static fromJSON(json: ClipPlaneProps, result?: ClipPlane): ClipPlane | undefined {\n if (json && json.normal && undefined !== json.dist && Number.isFinite(json.dist))\n return ClipPlane.createNormalAndDistance(\n Vector3d.fromJSON(json.normal), json.dist, !!json.invisible, !!json.interior,\n );\n return ClipPlane.createNormalAndDistance(Vector3d.unitZ(), 0, false, false, result);\n }\n /** Set both the invisible and interior flags. */\n public setFlags(invisible: boolean, interior: boolean) {\n this._invisible = invisible;\n this._interior = interior;\n }\n /** Return the stored distanceFromOrigin property. */\n public get distance() {\n return this._distanceFromOrigin;\n }\n /** * Return the stored inward normal property. */\n public get inwardNormalRef(): Vector3d {\n return this._inwardNormal;\n }\n /** Return the \"interior\" property flag. Interpretation of this flag is algorithm-specific. */\n public get interior() {\n return this._interior;\n }\n /** Return the \"invisible\" property flag. Interpretation of this flag is algorithm-specific. */\n public get invisible() {\n return this._invisible;\n }\n /**\n * Create a plane defined by two points, an up vector, and a tilt angle relative to the up vector.\n * @param point0 start point of the edge\n * @param point1 end point of the edge\n * @param upVector vector perpendicular to the plane\n * @param tiltAngle angle to tilt the plane around the edge in the direction of the up vector.\n * @param result optional preallocated plane\n */\n public static createEdgeAndUpVector(\n point0: Point3d, point1: Point3d, upVector: Vector3d, tiltAngle?: Angle, result?: ClipPlane,\n ): ClipPlane | undefined {\n const edgeVector = Vector3d.createFrom(point1.minus(point0));\n let normal = (upVector.crossProduct(edgeVector)).normalize();\n\n if (normal) {\n if (tiltAngle !== undefined && !tiltAngle.isAlmostZero) {\n const tiltNormal = Vector3d.createRotateVectorAroundVector(normal, edgeVector, tiltAngle);\n if (tiltNormal) {\n normal = tiltNormal.clone();\n }\n }\n normal.negate(normal);\n return ClipPlane.createNormalAndPoint(normal, point0, false, false, result);\n }\n return undefined;\n }\n /** Create a plane perpendicular to the edge between the xy parts of point0 and point1. */\n public static createEdgeXY(point0: XYAndZ, point1: XYAndZ, result?: ClipPlane): ClipPlane | undefined {\n const normal = Vector3d.create(point0.y - point1.y, point1.x - point0.x);\n if (normal.normalizeInPlace())\n return ClipPlane.createNormalAndPoint(normal, point0, false, false, result);\n return undefined;\n }\n /**\n * Variant of [[createEdgeXY]] that computes the plane using the edge midpoint instead of its start point.\n * * This is more stable for creating a pair of clip planes from a long edge and its reversal, as is commonly found\n * in a [[UnionOfConvexClipPlaneSets]].\n */\n public static createMidPointEdgeXY(point0: XYAndZ, point1: XYAndZ, result?: ClipPlane): ClipPlane | undefined {\n return ClipPlane.createNormalAndPointXYZXYZ(\n point0.y - point1.y, point1.x - point0.x, 0,\n 0.5 * (point0.x + point1.x), 0.5 * (point0.y + point1.y), 0,\n false, false, result,\n );\n }\n /**\n * Return the Plane3d form of the plane.\n * * The plane origin is the point `distance * inwardNormal`\n * * The plane normal is the inward normal of the ClipPlane.\n */\n public getPlane3d(): Plane3dByOriginAndUnitNormal {\n const d = this._distanceFromOrigin;\n const origin = Point3d.create(this._inwardNormal.x * d, this._inwardNormal.y * d, this._inwardNormal.z * d);\n const plane = Plane3dByOriginAndUnitNormal.createXYPlane();\n const result = Plane3dByOriginAndUnitNormal.create(origin, this._inwardNormal, plane);\n assert(result !== undefined, \"this._inwardNormal should be normalized by constructors. Fix caller if this fails.\");\n return plane;\n }\n /**\n * Return the Point4d d form of the plane.\n * * The homogeneous xyz are the inward normal xyz.\n * * The homogeneous weight is the negated ClipPlane distance.\n */\n public getPlane4d(): Point4d {\n return Point4d.create(\n this._inwardNormal.x, this._inwardNormal.y, this._inwardNormal.z, - this._distanceFromOrigin,\n );\n }\n /**\n * Set the plane from DPoint4d style plane.\n * * The saved plane has its direction normalized.\n * * This preserves the plane itself as a zero set but make plane evaluations act as true distances (even if the\n * plane coefficients are scaled otherwise).\n * @param plane the DPoint4d style plane.\n */\n public setPlane4d(plane: Point4d) {\n const a = Math.sqrt(plane.x * plane.x + plane.y * plane.y + plane.z * plane.z);\n const r = a === 0.0 ? 1.0 : 1.0 / a;\n this._inwardNormal.x = r * plane.x;\n this._inwardNormal.y = r * plane.y;\n this._inwardNormal.z = r * plane.z;\n this._distanceFromOrigin = -r * plane.w;\n }\n /**\n * Evaluate the altitude in weighted space, i.e. (dot product with inward normal) minus distance, with point.w\n * scale applied to distance.\n * @param point space point to test.\n */\n public weightedAltitude(point: Point4d): number {\n return point.x * this._inwardNormal.x\n + point.y * this._inwardNormal.y\n + point.z * this._inwardNormal.z\n - point.w * this._distanceFromOrigin;\n }\n /**\n * Evaluate the distance from the plane to a point in space, i.e. (dot product with inward normal) minus distance.\n * @param point space point to test.\n */\n public altitude(point: Point3d): number {\n return point.x * this._inwardNormal.x\n + point.y * this._inwardNormal.y\n + point.z * this._inwardNormal.z\n - this._distanceFromOrigin;\n }\n /**\n * Evaluate the distance from the plane to a point in space with point given as x,y,z, i.e. (dot product with\n * inward normal) minus distance.\n * @param point space point to test.\n */\n public altitudeXYZ(x: number, y: number, z: number): number {\n return x * this._inwardNormal.x\n + y * this._inwardNormal.y\n + z * this._inwardNormal.z\n - this._distanceFromOrigin;\n }\n /** Return the x component of the normal used to evaluate altitude. */\n public normalX(): number {\n return this._inwardNormal.x;\n }\n /** Return the x component of the normal used to evaluate altitude. */\n public normalY(): number {\n return this._inwardNormal.y;\n }\n /** Return the z component of the normal used to evaluate altitude. */\n public normalZ(): number {\n return this._inwardNormal.z;\n }\n /** Return the dot product of the plane normal with the vector (NOT using the plane's distanceFromOrigin). */\n public velocity(vector: Vector3d): number {\n return vector.x * this._inwardNormal.x + vector.y * this._inwardNormal.y + vector.z * this._inwardNormal.z;\n }\n /**\n * Return the dot product of the plane normal with the x,yz, vector components (NOT using the plane's\n * distanceFromOrigin).\n */\n public velocityXYZ(x: number, y: number, z: number): number {\n return x * this._inwardNormal.x + y * this._inwardNormal.y + z * this._inwardNormal.z;\n }\n /**\n * Return the dot product of the plane normal with the point (treating the point xyz as a vector, and NOT\n * using the plane's distanceFromOrigin).\n */\n public dotProductPlaneNormalPoint(point: Point3d): number {\n return point.x * this._inwardNormal.x + point.y * this._inwardNormal.y + point.z * this._inwardNormal.z;\n }\n /**\n * Return true if spacePoint is inside or on the plane, with tolerance applied to \"on\".\n * @param spacePoint point to test.\n * @param tolerance tolerance for considering \"near plane\" to be \"on plane\"\n */\n public isPointOnOrInside(spacePoint: Point3d, tolerance: number = Geometry.smallMetricDistance): boolean {\n let value = this.altitude(spacePoint);\n if (tolerance) { value += tolerance; }\n return value >= 0.0;\n }\n /**\n * Return true if spacePoint is strictly inside the halfspace, with tolerance applied to \"on\".\n * @param spacePoint point to test.\n * @param tolerance tolerance for considering \"near plane\" to be \"on plane\"\n */\n public isPointInside(point: Point3d, tolerance: number = Geometry.smallMetricDistance): boolean {\n let value = this.altitude(point);\n if (tolerance) { value -= tolerance; }\n return value > 0.0;\n }\n /**\n * Return true if spacePoint is strictly on the plane, within tolerance\n * @param spacePoint point to test.\n * @param tolerance tolerance for considering \"near plane\" to be \"on plane\"\n */\n public isPointOn(point: Point3d, tolerance: number = Geometry.smallMetricDistance): boolean {\n return Math.abs(this.altitude(point)) <= tolerance;\n }\n /**\n * Compute intersections of an (UNBOUNDED) arc with the plane. Append them (as radians) to a growing array.\n * @param arc arc to test. The angle limits of the arc are NOT considered.\n * @param intersectionRadians array to receive results.\n */\n public appendIntersectionRadians(arc: Arc3d, intersectionRadians: GrowableFloat64Array): void {\n const arcVectors = arc.toVectors();\n const alpha = this.altitude(arc.center);\n const beta = this.velocity(arcVectors.vector0);\n const gamma = this.velocity(arcVectors.vector90);\n AnalyticRoots.appendImplicitLineUnitCircleIntersections(\n alpha, beta, gamma, undefined, undefined, intersectionRadians,\n );\n }\n private static _clipFractionArray = new GrowableFloat64Array();\n /** Method from [[Clipper]] interface. */\n public announceClippedArcIntervals(arc: Arc3d, announce?: AnnounceNumberNumberCurvePrimitive): boolean {\n const breaks = ClipPlane._clipFractionArray;\n breaks.clear();\n this.appendIntersectionRadians(arc, breaks);\n arc.sweep.radiansArrayToPositivePeriodicFractions(breaks);\n return ClipUtilities.selectIntervals01(arc, breaks, this, announce);\n }\n /** Method from [[Clipper]] interface. */\n public announceClippedCurveIntervals(curve: CurvePrimitive, announce?: AnnounceNumberNumberCurvePrimitive): boolean {\n const breaks = ClipPlane._clipFractionArray;\n breaks.clear();\n const results: CurveLocationDetail[] = [];\n curve.appendPlaneIntersectionPoints(this, results);\n for (const r of results)\n breaks.push(r.fraction);\n return ClipUtilities.selectIntervals01(curve, breaks, this, announce);\n }\n /**\n * Compute intersection of (unbounded) segment with the plane.\n * * If the ends are on the same side of the plane, return undefined.\n * * If the intersection is an endpoint or interior to the segment return the fraction.\n * * If both ends are on, return undefined.\n */\n public getBoundedSegmentSimpleIntersection(pointA: Point3d, pointB: Point3d): number | undefined {\n const h0 = this.altitude(pointA);\n const h1 = this.altitude(pointB);\n if (h0 * h1 > 0.0)\n return undefined;\n if (h0 === 0.0 && h1 === 0.0) {\n return undefined;\n }\n return - h0 / (h1 - h0);\n }\n /** Apply transform to the origin. Apply inverse transpose of the matrix part to th normal vector. */\n public transformInPlace(transform: Transform): boolean {\n const plane: Plane3dByOriginAndUnitNormal = this.getPlane3d();\n const matrix: Matrix3d = transform.matrix;\n const newPoint = transform.multiplyPoint3d(plane.getOriginRef());\n // Normal transforms as the inverse transpose of the matrix part\n // BTW: If the matrix is orthogonal, this is a long way to multiply by the matrix part (mumble grumble)\n const newNormal = matrix.multiplyInverseTranspose(plane.getNormalRef());\n if (!newNormal)\n return false;\n\n plane.set(newPoint, newNormal);\n const normalized = (plane.getNormalRef()).normalize();\n if (!normalized)\n return false;\n this._inwardNormal = normalized;\n this._distanceFromOrigin = this._inwardNormal.dotProduct(plane.getOriginRef());\n return true;\n }\n /** Set the invisible flag. Interpretation of this flag is algorithm-specific. */\n public setInvisible(invisible: boolean) {\n this._invisible = invisible;\n }\n /** Reverse the sign of all coefficients, so outside and inside reverse */\n public negateInPlace() {\n this._inwardNormal = this._inwardNormal.negate();\n this._distanceFromOrigin = - this._distanceFromOrigin;\n }\n /**\n * Move the plane INWARD by given distance\n * @param offset distance of shift inwards\n */\n public offsetDistance(offset: number) {\n this._distanceFromOrigin += offset;\n }\n /**\n * Clip a polygon to the inside or outside of the plane.\n * * Results with 2 or fewer points are ignored.\n * * Other than ensuring capacity in the arrays, there are no object allocations during execution of this function.\n * * For a convex input polygon, the output polygon is also convex.\n * * For non-convex input, the output polygon may have double-back edges along plane intersections. This is still a\n * valid clip in a parity sense (overlapping regions cancel).\n * @param xyz input points.\n * @param work optional work buffer\n * @param inside whether the positive side of the plane survives (true, default), or negative side (false).\n * @param tolerance distance tolerance for \"on plane\" decision. Default value is [[Geometry.smallMetricDistance]].\n * @return the number of crossings. If this is larger than 2, the input polygon was non-convex.\n * @see appendPolygonClip\n */\n public clipConvexPolygonInPlace(\n xyz: GrowableXYZArray,\n work?: GrowableXYZArray,\n inside: boolean = true,\n tolerance: number = Geometry.smallMetricDistance,\n ): number {\n return IndexedXYZCollectionPolygonOps.clipConvexPolygonInPlace(this, xyz, work, inside, tolerance);\n }\n /**\n * Multiply the ClipPlane's DPoint4d by matrix.\n * @param matrix matrix to apply.\n * @param invert if true, use in verse of the matrix.\n * @param transpose if true, use the transpose of the matrix (or inverse, per invert parameter)\n * @param matrix matrix to apply\n * @return false if unable to invert\n * * Note that if matrixA is applied to all of space, the matrix to send to this method to get a corresponding\n * effect on the plane is the inverse transpose of matrixA\n * * Callers that will apply the same matrix to many planes should pre-invert the matrix for efficiency.\n * * Both params default to true to get the full effect of transforming space.\n */\n public multiplyPlaneByMatrix4d(matrix: Matrix4d, invert: boolean = true, transpose: boolean = true): boolean {\n const plane: Point4d = this.getPlane4d();\n if (invert) {\n const inverse = matrix.createInverse();\n if (inverse)\n return this.multiplyPlaneByMatrix4d(inverse, false, transpose);\n return false;\n }\n if (transpose)\n matrix.multiplyTransposePoint4d(plane, plane);\n else\n matrix.multiplyPoint4d(plane, plane);\n this.setPlane4d(plane);\n return true;\n }\n /** Method from [[Clipper]] interface. */\n public announceClippedSegmentIntervals(\n f0: number, f1: number, pointA: Point3d, pointB: Point3d, announce?: AnnounceNumberNumber,\n ): boolean {\n if (f1 < f0)\n return false;\n const h0 = - this.altitude(pointA);\n const h1 = - this.altitude(pointB);\n const delta = h1 - h0;\n const f = Geometry.conditionalDivideFraction(-h0, delta);\n if (f === undefined) { // The segment is parallel to the plane.\n if (h0 <= 0.0) { if (announce) announce(f0, f1); return true; }\n return false;\n }\n if (delta > 0) { // segment aims OUT\n if (f < f1) f1 = f;\n } else {\n // segment aims IN\n if (f > f0)\n f0 = f;\n }\n if (f1 < f0)\n return false;\n if (announce) announce(f0, f1);\n return true;\n }\n /**\n * Return a coordinate frame with\n * * origin at closest point to global origin\n * * z axis points in\n * * x and y are \"in plane\"\n */\n public getFrame(): Transform {\n const d = this._distanceFromOrigin;\n const origin = Point3d.create(this._inwardNormal.x * d, this._inwardNormal.y * d, this._inwardNormal.z * d);\n const matrix = Matrix3d.createRigidHeadsUp(this._inwardNormal, AxisOrder.ZXY);\n return Transform.createOriginAndMatrix(origin, matrix);\n }\n /**\n * Return the intersection of the plane with a range cube.\n * @param range\n * @param xyzOut intersection polygon. This is convex.\n */\n public intersectRange(range: Range3d, addClosurePoint: boolean = false): GrowableXYZArray | undefined {\n if (range.isNull)\n return undefined;\n const corners = range.corners();\n const frameOnPlane = this.getFrame();\n frameOnPlane.multiplyInversePoint3dArrayInPlace(corners);\n const localRange = Range3d.createArray(corners);\n if (localRange.low.z * localRange.high.z > 0.0)\n return undefined;\n // oversized polygon on local z= 0\n const xyzOut = new GrowableXYZArray();\n xyzOut.pushXYZ(localRange.low.x, localRange.low.y, 0);\n xyzOut.pushXYZ(localRange.high.x, localRange.low.y, 0);\n xyzOut.pushXYZ(localRange.high.x, localRange.high.y, 0);\n xyzOut.pushXYZ(localRange.low.x, localRange.high.y, 0);\n xyzOut.multiplyTransformInPlace(frameOnPlane);\n IndexedXYZCollectionPolygonOps.intersectRangeConvexPolygonInPlace(range, xyzOut);\n if (xyzOut.length === 0)\n return undefined;\n if (addClosurePoint)\n xyzOut.pushWrap(1);\n return xyzOut;\n }\n /**\n * Implement appendPolygonClip, as defined in interface PolygonClipper.\n * @param xyz convex polygon. This is not changed.\n * @param insideFragments Array to receive \"inside\" fragments. Each fragment is a GrowableXYZArray grabbed\n * from the cache. This is NOT cleared.\n * @param outsideFragments Array to receive \"outside\" fragments. Each fragment is a GrowableXYZArray grabbed\n * from the cache. This is NOT cleared.\n * @param arrayCache cache for reusable GrowableXYZArray.\n * @see clipConvexPolygonInPlace\n */\n public appendPolygonClip(\n xyz: IndexedXYZCollection,\n insideFragments: GrowableXYZArray[],\n outsideFragments: GrowableXYZArray[],\n arrayCache: GrowableXYZArrayCache,\n ): void {\n const perpendicularRange = Range1d.createNull();\n const newInside = arrayCache.grabFromCache();\n const newOutside = arrayCache.grabFromCache();\n IndexedXYZCollectionPolygonOps.splitConvexPolygonInsideOutsidePlane(\n this, xyz, newInside, newOutside, perpendicularRange,\n );\n ClipUtilities.captureOrDrop(newInside, 3, insideFragments, arrayCache);\n ClipUtilities.captureOrDrop(newOutside, 3, outsideFragments, arrayCache);\n }\n /** Project a point in space to the plane. */\n public projectPointToPlane(spacePoint: Point3d, result?: Point3d): Point3d {\n return this.projectXYZToPlane(spacePoint.x, spacePoint.y, spacePoint.z, result);\n }\n /** Return the projection of (x,y,z) onto the plane. */\n public override projectXYZToPlane(x: number, y: number, z: number, result?: Point3d): Point3d {\n const scale = -this.altitudeXYZ(x, y, z);\n return Point3d.create(x + scale * this._inwardNormal.x, y + scale * this._inwardNormal.y, z + scale * this._inwardNormal.z, result);\n }\n}\n"]}
1
+ {"version":3,"file":"ClipPlane.js","sourceRoot":"","sources":["../../../src/clipping/ClipPlane.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AAEH,sDAA6C;AAI7C,0CAAkD;AAElD,6EAA0E;AAC1E,qEAAkE;AAElE,qDAAkD;AAClD,mDAAgD;AAChD,6FAA0F;AAC1F,mEAAkE;AAClE,yDAA0E;AAC1E,+CAAuD;AAEvD,uDAAoD;AAGpD,mDAAgD;AAChD,yDAAwD;AACxD,2CAAqE;AAkBrE;;;;;;;;;;;;;;GAcG;AACH,MAAa,SAAU,SAAQ,iBAAO;IAC5B,aAAa,CAAW;IAChC;;;;OAIG;IACK,mBAAmB,CAAS;IAC5B,UAAU,CAAU;IACpB,SAAS,CAAU;IAE3B,YAAoB,MAAgB,EAAE,QAAgB,EAAE,SAAkB,EAAE,QAAiB;QAC3F,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAC5B,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC;IACtC,CAAC;IACD;;;;;MAKE;IACF;;;OAGG;IACI,aAAa,CAAC,KAAgB;QACnC,OAAO,mBAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,CAAC;eAChF,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC;eACrD,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS;eAClC,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU,CAAC;IAC5C,CAAC;IACD,4BAA4B;IACrB,KAAK;QACV,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACpH,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,0DAA0D;IACnD,YAAY;QACjB,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACnH,KAAK,CAAC,aAAa,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,4DAA4D;IACrD,MAAM,CAAC,WAAW,CACvB,KAAmC,EAAE,YAAqB,KAAK,EAAE,WAAoB,KAAK,EAAE,MAAkB;QAE9G,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;QACvE,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;YAC9B,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC;YAC5B,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,CAAC;YACpD,MAAM,CAAC,mBAAmB,GAAG,QAAQ,CAAC;YACtC,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACpF,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,uBAAuB,CACnC,MAAgB,EAAE,QAAgB,EAAE,YAAqB,KAAK,EAAE,WAAoB,KAAK,EAAE,MAAkB;QAE7G,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QACtC,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;gBAC9B,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC;gBAC5B,MAAM,CAAC,aAAa,GAAG,UAAU,CAAC;gBAClC,MAAM,CAAC,mBAAmB,GAAG,QAAQ,CAAC;YACxC,CAAC;YACD,OAAO,IAAI,SAAS,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;;;;;OAMG;IACI,MAAM,CAAC,oBAAoB,CAChC,MAAgB,EAAE,KAAa,EAAE,YAAqB,KAAK,EAAE,WAAoB,KAAK,EAAE,MAAkB;QAE1G,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QACtC,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;gBAC9B,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC;gBAC5B,MAAM,CAAC,aAAa,GAAG,UAAU,CAAC;gBAClC,MAAM,CAAC,mBAAmB,GAAG,QAAQ,CAAC;YACxC,CAAC;YACD,OAAO,IAAI,SAAS,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;;;;;;;OAQG;IACI,MAAM,CAAC,sBAAsB,CAClC,MAAe,EACf,OAAiB,EACjB,OAAiB,EACjB,YAAqB,KAAK,EAC1B,WAAoB,KAAK,EACzB,MAAkB;QAElB,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACpF,CAAC;IACD;;;;;;OAMG;IACI,MAAM,CAAC,0BAA0B,CACtC,OAAe,EAAE,OAAe,EAAE,OAAe,EACjD,OAAe,EAAE,OAAe,EAAE,OAAe,EACjD,YAAqB,KAAK,EAAE,WAAoB,KAAK,EACrD,MAAkB;QAElB,MAAM,CAAC,GAAG,mBAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,CAAC,GAAG,mBAAQ,CAAC,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACpB,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;gBAChE,MAAM,CAAC,mBAAmB,GAAG,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC3F,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;gBAC9B,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC;gBAC5B,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,MAAM,MAAM,GAAG,0BAAQ,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;YACtE,OAAO,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QACrG,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;;OAGG;IACI,MAAM;QACX,MAAM,KAAK,GAAmB;YAC5B,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;YACrC,IAAI,EAAE,IAAI,CAAC,QAAQ;SACpB,CAAC;QACF,IAAI,IAAI,CAAC,QAAQ;YACf,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;QACxB,IAAI,IAAI,CAAC,SAAS;YAChB,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,8CAA8C;IACvC,MAAM,CAAC,QAAQ,CAAC,IAAoB,EAAE,MAAkB;QAC7D,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS,KAAK,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9E,OAAO,SAAS,CAAC,uBAAuB,CACtC,0BAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAC7E,CAAC;QACJ,OAAO,SAAS,CAAC,uBAAuB,CAAC,0BAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACtF,CAAC;IACD,iDAAiD;IAC1C,QAAQ,CAAC,SAAkB,EAAE,QAAiB;QACnD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IACD,qDAAqD;IACrD,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IACD,kDAAkD;IAClD,IAAW,eAAe;QACxB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IACD;;;OAGG;IACH,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACD;;;OAGG;IACH,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IACD;;;;;;;OAOG;IACI,MAAM,CAAC,qBAAqB,CACjC,MAAe,EAAE,MAAe,EAAE,QAAkB,EAAE,SAAiB,EAAE,MAAkB;QAE3F,MAAM,UAAU,GAAG,0BAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7D,IAAI,MAAM,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;QAE7D,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;gBACvD,MAAM,UAAU,GAAG,0BAAQ,CAAC,8BAA8B,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;gBAC1F,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC;gBAC9B,CAAC;YACH,CAAC;YACD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACtB,OAAO,SAAS,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,0FAA0F;IACnF,MAAM,CAAC,YAAY,CAAC,MAAc,EAAE,MAAc,EAAE,MAAkB;QAC3E,MAAM,MAAM,GAAG,0BAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACzE,IAAI,MAAM,CAAC,gBAAgB,EAAE;YAC3B,OAAO,SAAS,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC9E,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;;;OAIG;IACI,MAAM,CAAC,oBAAoB,CAAC,MAAc,EAAE,MAAc,EAAE,MAAkB;QACnF,OAAO,SAAS,CAAC,0BAA0B,CACzC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAC3C,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAC3D,KAAK,EAAE,KAAK,EAAE,MAAM,CACrB,CAAC;IACJ,CAAC;IACD;;;;OAIG;IACI,UAAU;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACnC,MAAM,MAAM,GAAG,yBAAO,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5G,MAAM,KAAK,GAAG,2DAA4B,CAAC,aAAa,EAAE,CAAC;QAC3D,MAAM,MAAM,GAAG,2DAA4B,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QACtF,IAAA,qBAAM,EAAC,MAAM,KAAK,SAAS,EAAE,oFAAoF,CAAC,CAAC;QACnH,OAAO,KAAK,CAAC;IACf,CAAC;IACD;;;;OAIG;IACI,UAAU;QACf,OAAO,iBAAO,CAAC,MAAM,CACnB,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAE,IAAI,CAAC,mBAAmB,CAC7F,CAAC;IACJ,CAAC;IACD;;;;;;OAMG;IACI,UAAU,CAAC,KAAc;QAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/E,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD;;;;OAIG;IACI,gBAAgB,CAAC,KAAc;QACpC,OAAO,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;cACjC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;cAC9B,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;cAC9B,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC;IACzC,CAAC;IACD;;;OAGG;IACI,QAAQ,CAAC,KAAc;QAC5B,OAAO,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;cACjC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;cAC9B,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;cAC9B,IAAI,CAAC,mBAAmB,CAAC;IAC/B,CAAC;IACD;;;;OAIG;IACI,WAAW,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QAChD,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;cAC3B,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;cACxB,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;cACxB,IAAI,CAAC,mBAAmB,CAAC;IAC/B,CAAC;IACD,sEAAsE;IAC/D,OAAO;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,sEAAsE;IAC/D,OAAO;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,sEAAsE;IAC/D,OAAO;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,6GAA6G;IACtG,QAAQ,CAAC,MAAgB;QAC9B,OAAO,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAC7G,CAAC;IACD;;;OAGG;IACI,WAAW,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QAChD,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IACxF,CAAC;IACD;;;OAGG;IACI,0BAA0B,CAAC,KAAc;QAC9C,OAAO,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAC1G,CAAC;IACD;;;;OAIG;IACI,iBAAiB,CAAC,UAAmB,EAAE,YAAoB,mBAAQ,CAAC,mBAAmB;QAC5F,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACtC,IAAI,SAAS,EAAE,CAAC;YAAC,KAAK,IAAI,SAAS,CAAC;QAAC,CAAC;QACtC,OAAO,KAAK,IAAI,GAAG,CAAC;IACtB,CAAC;IACD;;;;OAIG;IACI,aAAa,CAAC,KAAc,EAAE,YAAoB,mBAAQ,CAAC,mBAAmB;QACnF,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,SAAS,EAAE,CAAC;YAAC,KAAK,IAAI,SAAS,CAAC;QAAC,CAAC;QACtC,OAAO,KAAK,GAAG,GAAG,CAAC;IACrB,CAAC;IACD;;;;OAIG;IACI,SAAS,CAAC,KAAc,EAAE,YAAoB,mBAAQ,CAAC,mBAAmB;QAC/E,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,SAAS,CAAC;IACrD,CAAC;IACD;;;;OAIG;IACI,yBAAyB,CAAC,GAAU,EAAE,mBAAyC;QACpF,MAAM,UAAU,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACjD,2BAAa,CAAC,yCAAyC,CACrD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,mBAAmB,CAC9D,CAAC;IACJ,CAAC;IACO,MAAM,CAAC,kBAAkB,GAAG,IAAI,2CAAoB,EAAE,CAAC;IAC/D,yCAAyC;IAClC,2BAA2B,CAAC,GAAU,EAAE,QAA6C;QAC1F,MAAM,MAAM,GAAG,SAAS,CAAC,kBAAkB,CAAC;QAC5C,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,yBAAyB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC5C,GAAG,CAAC,KAAK,CAAC,uCAAuC,CAAC,MAAM,CAAC,CAAC;QAC1D,OAAO,yBAAa,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACtE,CAAC;IACD,yCAAyC;IAClC,6BAA6B,CAAC,KAAqB,EAAE,QAA6C;QACvG,MAAM,MAAM,GAAG,SAAS,CAAC,kBAAkB,CAAC;QAC5C,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAA0B,EAAE,CAAC;QAC1C,KAAK,CAAC,6BAA6B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACnD,KAAK,MAAM,CAAC,IAAI,OAAO;YACrB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC1B,OAAO,yBAAa,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACxE,CAAC;IACD;;;;;OAKG;IACI,mCAAmC,CAAC,MAAe,EAAE,MAAe;QACzE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG;YACf,OAAO,SAAS,CAAC;QACnB,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAC7B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,CAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1B,CAAC;IACD,qGAAqG;IAC9F,gBAAgB,CAAC,SAAoB;QAC1C,MAAM,KAAK,GAAiC,IAAI,CAAC,UAAU,EAAE,CAAC;QAC9D,MAAM,MAAM,GAAa,SAAS,CAAC,MAAM,CAAC;QAC1C,MAAM,QAAQ,GAAG,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;QACjE,gEAAgE;QAChE,uGAAuG;QACvG,MAAM,SAAS,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC,SAAS;YACZ,OAAO,KAAK,CAAC;QAEf,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC/B,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;QACtD,IAAI,CAAC,UAAU;YACb,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC;QAChC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;QAC/E,OAAO,IAAI,CAAC;IACd,CAAC;IACD,iFAAiF;IAC1E,YAAY,CAAC,SAAkB;QACpC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IACD,0EAA0E;IACnE,aAAa;QAClB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;QACjD,IAAI,CAAC,mBAAmB,GAAG,CAAE,IAAI,CAAC,mBAAmB,CAAC;IACxD,CAAC;IACD;;;OAGG;IACI,cAAc,CAAC,MAAc;QAClC,IAAI,CAAC,mBAAmB,IAAI,MAAM,CAAC;IACrC,CAAC;IACD;;;;;;;;;;;;;OAaG;IACI,wBAAwB,CAC7B,GAAqB,EACrB,IAAuB,EACvB,SAAkB,IAAI,EACtB,YAAoB,mBAAQ,CAAC,mBAAmB;QAEhD,OAAO,2CAA8B,CAAC,wBAAwB,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACrG,CAAC;IACD;;;;;;;;;;;OAWG;IACI,uBAAuB,CAAC,MAAgB,EAAE,SAAkB,IAAI,EAAE,YAAqB,IAAI;QAChG,MAAM,KAAK,GAAY,IAAI,CAAC,UAAU,EAAE,CAAC;QACzC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;YACvC,IAAI,OAAO;gBACT,OAAO,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YACjE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,SAAS;YACX,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;;YAE9C,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,yCAAyC;IAClC,+BAA+B,CACpC,EAAU,EAAE,EAAU,EAAE,MAAe,EAAE,MAAe,EAAE,QAA+B;QAEzF,IAAI,EAAE,GAAG,EAAE;YACT,OAAO,KAAK,CAAC;QACf,MAAM,EAAE,GAAG,CAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,CAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,mBAAQ,CAAC,yBAAyB,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACzD,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC,CAAC,wCAAwC;YAC7D,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC;gBAAC,IAAI,QAAQ;oBAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAAC,OAAO,IAAI,CAAC;YAAC,CAAC;YAC/D,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,mBAAmB;YAClC,IAAI,CAAC,GAAG,EAAE;gBAAE,EAAE,GAAG,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,kBAAkB;YAClB,IAAI,CAAC,GAAG,EAAE;gBACR,EAAE,GAAG,CAAC,CAAC;QACX,CAAC;QACD,IAAI,EAAE,GAAG,EAAE;YACT,OAAO,KAAK,CAAC;QACf,IAAI,QAAQ;YAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IACD;;;;;OAKG;IACI,QAAQ;QACb,MAAM,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACnC,MAAM,MAAM,GAAG,yBAAO,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5G,MAAM,MAAM,GAAG,mBAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,EAAE,oBAAS,CAAC,GAAG,CAAC,CAAC;QAC9E,OAAO,qBAAS,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzD,CAAC;IACD;;;;OAIG;IACI,cAAc,CAAC,KAAc,EAAE,kBAA2B,KAAK;QACpE,IAAI,KAAK,CAAC,MAAM;YACd,OAAO,SAAS,CAAC;QACnB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAChC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QACrC,YAAY,CAAC,kCAAkC,CAAC,OAAO,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,eAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG;YAC5C,OAAO,SAAS,CAAC;QACnB,kCAAkC;QAClC,MAAM,MAAM,GAAG,IAAI,mCAAgB,EAAE,CAAC;QACtC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtD,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACvD,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACvD,MAAM,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC;QAC9C,2CAA8B,CAAC,kCAAkC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACjF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YACrB,OAAO,SAAS,CAAC;QACnB,IAAI,eAAe;YACjB,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACrB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD;;;;;;;;;OASG;IACI,iBAAiB,CACtB,GAAyB,EACzB,eAAmC,EACnC,gBAAoC,EACpC,UAAiC;QAEjC,MAAM,kBAAkB,GAAG,eAAO,CAAC,UAAU,EAAE,CAAC;QAChD,MAAM,SAAS,GAAG,UAAU,CAAC,aAAa,EAAE,CAAC;QAC7C,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,EAAE,CAAC;QAC9C,2CAA8B,CAAC,oCAAoC,CACjE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,kBAAkB,CACrD,CAAC;QACF,yBAAa,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;QACvE,yBAAa,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;IAC3E,CAAC;IACD,6CAA6C;IACtC,mBAAmB,CAAC,UAAmB,EAAE,MAAgB;QAC9D,OAAO,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAClF,CAAC;IACD,uDAAuD;IACvC,iBAAiB,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,MAAgB;QACjF,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACzC,OAAO,yBAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACtI,CAAC;;AA5lBH,8BA6lBC","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 CartesianGeometry\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { Arc3d } from \"../curve/Arc3d\";\nimport { CurveLocationDetail } from \"../curve/CurveLocationDetail\";\nimport { AnnounceNumberNumber, AnnounceNumberNumberCurvePrimitive, CurvePrimitive } from \"../curve/CurvePrimitive\";\nimport { AxisOrder, Geometry } from \"../Geometry\";\nimport { Angle } from \"../geometry3d/Angle\";\nimport { GrowableFloat64Array } from \"../geometry3d/GrowableFloat64Array\";\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\nimport { IndexedXYZCollection } from \"../geometry3d/IndexedXYZCollection\";\nimport { Matrix3d } from \"../geometry3d/Matrix3d\";\nimport { Plane3d } from \"../geometry3d/Plane3d\";\nimport { Plane3dByOriginAndUnitNormal } from \"../geometry3d/Plane3dByOriginAndUnitNormal\";\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\nimport { IndexedXYZCollectionPolygonOps } from \"../geometry3d/PolygonOps\";\nimport { Range1d, Range3d } from \"../geometry3d/Range\";\nimport { GrowableXYZArrayCache } from \"../geometry3d/ReusableObjectCache\";\nimport { Transform } from \"../geometry3d/Transform\";\nimport { XYAndZ, XYZProps } from \"../geometry3d/XYZProps\";\nimport { Matrix4d } from \"../geometry4d/Matrix4d\";\nimport { Point4d } from \"../geometry4d/Point4d\";\nimport { AnalyticRoots } from \"../numerics/Polynomials\";\nimport { Clipper, ClipUtilities, PolygonClipper } from \"./ClipUtils\";\n\n/**\n * Wire format describing a [[ClipPlane]].\n * If either [[normal]] or [[dist]] are omitted, defaults to a normal of [[Vector3d.unitZ]] and a distance of zero.\n * @public\n */\nexport interface ClipPlaneProps {\n /** The plane's inward normal. */\n normal?: XYZProps;\n /** The plane's signed distance from the origin. */\n dist?: number;\n /** Defaults to `false`. Interpretation of this flag is algorithm-specific. */\n invisible?: boolean;\n /** Defaults to `false`. Interpretation of this flag is algorithm-specific. */\n interior?: boolean;\n}\n\n/**\n * A ClipPlane is a single plane represented as\n * * An inward unit normal (u,v,w)\n * * A signedDistance\n * More details can be found at docs/learning/geometry/Clipping.md\n *\n * Hence\n * * The halfspace function evaluation for point (x,y,z) is `(x,y,z) DOT (u,v,w) - signedDistance`.\n * * POSITIVE values of the halfspace function are \"inside\".\n * * ZERO value of the halfspace function is \"on\".\n * * NEGATIVE value of the halfspace function is \"outside\".\n * * A representative point on the plane is (signedDistance * u, signedDistance * v, signedDistance * w).\n * * Given a point on the plane and the inward normal of the plane, `signedDistance = point DOT normal`.\n * @public\n */\nexport class ClipPlane extends Plane3d implements Clipper, PolygonClipper {\n private _inwardNormal: Vector3d;\n /**\n * Construct a parallel plane through the origin.\n * * Move it to the actual position.\n * * _distanceFromOrigin is the distance it moved, with the (inward) normal direction as positive.\n */\n private _distanceFromOrigin: number;\n private _invisible: boolean;\n private _interior: boolean;\n\n private constructor(normal: Vector3d, distance: number, invisible: boolean, interior: boolean) {\n super();\n this._invisible = invisible;\n this._interior = interior;\n this._inwardNormal = normal;\n this._distanceFromOrigin = distance;\n }\n /*\n private safeSetXYZDistance(nx: number, ny: number, nz: number, d: number) {\n this._inwardNormal.set(nx, ny, nz);\n this._distanceFromOrigin = d;\n }\n */\n /**\n * Return true if all members are almostEqual to corresponding members of other.\n * @param other clip plane to compare\n */\n public isAlmostEqual(other: ClipPlane): boolean {\n return Geometry.isSameCoordinate(this._distanceFromOrigin, other._distanceFromOrigin)\n && this._inwardNormal.isAlmostEqual(other._inwardNormal)\n && this._interior === other._interior\n && this._invisible === other._invisible;\n }\n /** Return a cloned plane */\n public clone(): ClipPlane {\n const result = new ClipPlane(this._inwardNormal.clone(), this._distanceFromOrigin, this._invisible, this._interior);\n return result;\n }\n /** Return a cloned plane with coordinate data negated. */\n public cloneNegated(): ClipPlane {\n const plane = new ClipPlane(this._inwardNormal.clone(), this._distanceFromOrigin, this._invisible, this._interior);\n plane.negateInPlace();\n return plane;\n }\n /** Create a ClipPlane from Plane3dByOriginAndUnitNormal. */\n public static createPlane(\n plane: Plane3dByOriginAndUnitNormal, invisible: boolean = false, interior: boolean = false, result?: ClipPlane,\n ): ClipPlane {\n const distance = plane.getNormalRef().dotProduct(plane.getOriginRef());\n if (result) {\n result._invisible = invisible;\n result._interior = interior;\n result._inwardNormal = plane.getNormalRef().clone();\n result._distanceFromOrigin = distance;\n return result;\n }\n return new ClipPlane(plane.getNormalRef().clone(), distance, invisible, interior);\n }\n /**\n * Create a ClipPlane with direct normal and signedDistance.\n * * The vector is normalized for storage.\n */\n public static createNormalAndDistance(\n normal: Vector3d, distance: number, invisible: boolean = false, interior: boolean = false, result?: ClipPlane,\n ): ClipPlane | undefined {\n const normalized = normal.normalize();\n if (normalized) {\n if (result) {\n result._invisible = invisible;\n result._interior = interior;\n result._inwardNormal = normalized;\n result._distanceFromOrigin = distance;\n }\n return new ClipPlane(normalized, distance, invisible, interior);\n }\n return undefined;\n }\n /**\n * Create a ClipPlane\n * * \"normal\" is the inward normal of the plane (it is internally normalized).\n * * \"point\" is any point of the plane.\n * * The stored distance for the plane is the dot product of the point with the normal (i.e. treat the point's xyz as\n * a vector from the origin.)\n */\n public static createNormalAndPoint(\n normal: Vector3d, point: XYAndZ, invisible: boolean = false, interior: boolean = false, result?: ClipPlane,\n ): ClipPlane | undefined {\n const normalized = normal.normalize();\n if (normalized) {\n const distance = normalized.dotProduct(point);\n if (result) {\n result._invisible = invisible;\n result._interior = interior;\n result._inwardNormal = normalized;\n result._distanceFromOrigin = distance;\n }\n return new ClipPlane(normalized, distance, invisible, interior);\n }\n return undefined;\n }\n /**\n * Create a clip plane\n * @param origin any point on the plane.\n * @param vectorA any vector in the plane\n * @param vectorB any vector in the plane\n * @return undefined if the vectors are not independent.\n * * The stored inward normal is vectorB.crossProduct(vectorA).\n * * That is, the vectors are considered as a right-handed pair when viewed from the outside.\n */\n public static createOriginAndVectors(\n origin: Point3d,\n vectorA: Vector3d,\n vectorB: Vector3d,\n invisible: boolean = false,\n interior: boolean = false,\n result?: ClipPlane,\n ): ClipPlane | undefined {\n const normalized = vectorB.crossProduct(vectorA);\n return this.createNormalAndPoint(normalized, origin, invisible, interior, result);\n }\n /**\n * Create a ClipPlane\n * * \"normal\" (normalX, normalY, normalZ) is the inward normal of the plane.\n * * \"point\" (originX,originY,originZ) is any point of the plane.\n * * The stored distance for the plane is the dot product of the point with the normal (i.e. treat the point's xyz\n * as a vector from the origin.)\n */\n public static createNormalAndPointXYZXYZ(\n normalX: number, normalY: number, normalZ: number,\n originX: number, originY: number, originZ: number,\n invisible: boolean = false, interior: boolean = false,\n result?: ClipPlane,\n ): ClipPlane | undefined {\n const q = Geometry.hypotenuseXYZ(normalX, normalY, normalZ);\n const r = Geometry.conditionalDivideFraction(1, q);\n if (r !== undefined) {\n if (result) {\n result._inwardNormal.set(normalX * r, normalY * r, normalZ * r);\n result._distanceFromOrigin = result._inwardNormal.dotProductXYZ(originX, originY, originZ);\n result._invisible = invisible;\n result._interior = interior;\n return result;\n }\n const normal = Vector3d.create(normalX * r, normalY * r, normalZ * r);\n return new ClipPlane(normal, normal.dotProductXYZ(originX, originY, originZ), invisible, interior);\n }\n return undefined;\n }\n /**\n * Return a json object of the form\n * `{\"normal\":[u,v,w],\"dist\":signedDistanceValue,\"interior\":true,\"invisible\":true}`\n */\n public toJSON(): ClipPlaneProps {\n const props: ClipPlaneProps = {\n normal: this.inwardNormalRef.toJSON(),\n dist: this.distance,\n };\n if (this.interior)\n props.interior = true;\n if (this.invisible)\n props.invisible = true;\n return props;\n }\n /** Parse json object to ClipPlane instance */\n public static fromJSON(json: ClipPlaneProps, result?: ClipPlane): ClipPlane | undefined {\n if (json && json.normal && undefined !== json.dist && Number.isFinite(json.dist))\n return ClipPlane.createNormalAndDistance(\n Vector3d.fromJSON(json.normal), json.dist, !!json.invisible, !!json.interior,\n );\n return ClipPlane.createNormalAndDistance(Vector3d.unitZ(), 0, false, false, result);\n }\n /** Set both the invisible and interior flags. */\n public setFlags(invisible: boolean, interior: boolean) {\n this._invisible = invisible;\n this._interior = interior;\n }\n /** Return the stored distanceFromOrigin property. */\n public get distance() {\n return this._distanceFromOrigin;\n }\n /** * Return the stored inward normal property. */\n public get inwardNormalRef(): Vector3d {\n return this._inwardNormal;\n }\n /**\n * Return the \"interior\" property flag. Interpretation of this flag is algorithm-specific.\n * * One way this flag is used is to indicate a plane that has been added to partition the exterior region of a masked ClipShape.\n */\n public get interior() {\n return this._interior;\n }\n /**\n * Return the \"invisible\" property flag. Interpretation of this flag is algorithm-specific.\n * * One way this flag is used is to indicate a plane that should not be used to compute intersection edges.\n */\n public get invisible() {\n return this._invisible;\n }\n /**\n * Create a plane defined by two points, an up vector, and a tilt angle relative to the up vector.\n * @param point0 start point of the edge\n * @param point1 end point of the edge\n * @param upVector vector perpendicular to the plane\n * @param tiltAngle angle to tilt the plane around the edge in the direction of the up vector.\n * @param result optional preallocated plane\n */\n public static createEdgeAndUpVector(\n point0: Point3d, point1: Point3d, upVector: Vector3d, tiltAngle?: Angle, result?: ClipPlane,\n ): ClipPlane | undefined {\n const edgeVector = Vector3d.createFrom(point1.minus(point0));\n let normal = (upVector.crossProduct(edgeVector)).normalize();\n\n if (normal) {\n if (tiltAngle !== undefined && !tiltAngle.isAlmostZero) {\n const tiltNormal = Vector3d.createRotateVectorAroundVector(normal, edgeVector, tiltAngle);\n if (tiltNormal) {\n normal = tiltNormal.clone();\n }\n }\n normal.negate(normal);\n return ClipPlane.createNormalAndPoint(normal, point0, false, false, result);\n }\n return undefined;\n }\n /** Create a plane perpendicular to the edge between the xy parts of point0 and point1. */\n public static createEdgeXY(point0: XYAndZ, point1: XYAndZ, result?: ClipPlane): ClipPlane | undefined {\n const normal = Vector3d.create(point0.y - point1.y, point1.x - point0.x);\n if (normal.normalizeInPlace())\n return ClipPlane.createNormalAndPoint(normal, point0, false, false, result);\n return undefined;\n }\n /**\n * Variant of [[createEdgeXY]] that computes the plane using the edge midpoint instead of its start point.\n * * This is more stable for creating a pair of clip planes from a long edge and its reversal, as is commonly found\n * in a [[UnionOfConvexClipPlaneSets]].\n */\n public static createMidPointEdgeXY(point0: XYAndZ, point1: XYAndZ, result?: ClipPlane): ClipPlane | undefined {\n return ClipPlane.createNormalAndPointXYZXYZ(\n point0.y - point1.y, point1.x - point0.x, 0,\n 0.5 * (point0.x + point1.x), 0.5 * (point0.y + point1.y), 0,\n false, false, result,\n );\n }\n /**\n * Return the Plane3d form of the plane.\n * * The plane origin is the point `distance * inwardNormal`\n * * The plane normal is the inward normal of the ClipPlane.\n */\n public getPlane3d(): Plane3dByOriginAndUnitNormal {\n const d = this._distanceFromOrigin;\n const origin = Point3d.create(this._inwardNormal.x * d, this._inwardNormal.y * d, this._inwardNormal.z * d);\n const plane = Plane3dByOriginAndUnitNormal.createXYPlane();\n const result = Plane3dByOriginAndUnitNormal.create(origin, this._inwardNormal, plane);\n assert(result !== undefined, \"this._inwardNormal should be normalized by constructors. Fix caller if this fails.\");\n return plane;\n }\n /**\n * Return the Point4d d form of the plane.\n * * The homogeneous xyz are the inward normal xyz.\n * * The homogeneous weight is the negated ClipPlane distance.\n */\n public getPlane4d(): Point4d {\n return Point4d.create(\n this._inwardNormal.x, this._inwardNormal.y, this._inwardNormal.z, - this._distanceFromOrigin,\n );\n }\n /**\n * Set the plane from DPoint4d style plane.\n * * The saved plane has its direction normalized.\n * * This preserves the plane itself as a zero set but make plane evaluations act as true distances (even if the\n * plane coefficients are scaled otherwise).\n * @param plane the DPoint4d style plane.\n */\n public setPlane4d(plane: Point4d) {\n const a = Math.sqrt(plane.x * plane.x + plane.y * plane.y + plane.z * plane.z);\n const r = a === 0.0 ? 1.0 : 1.0 / a;\n this._inwardNormal.x = r * plane.x;\n this._inwardNormal.y = r * plane.y;\n this._inwardNormal.z = r * plane.z;\n this._distanceFromOrigin = -r * plane.w;\n }\n /**\n * Evaluate the altitude in weighted space, i.e. (dot product with inward normal) minus distance, with point.w\n * scale applied to distance.\n * @param point space point to test.\n */\n public weightedAltitude(point: Point4d): number {\n return point.x * this._inwardNormal.x\n + point.y * this._inwardNormal.y\n + point.z * this._inwardNormal.z\n - point.w * this._distanceFromOrigin;\n }\n /**\n * Evaluate the distance from the plane to a point in space, i.e. (dot product with inward normal) minus distance.\n * @param point space point to test.\n */\n public altitude(point: Point3d): number {\n return point.x * this._inwardNormal.x\n + point.y * this._inwardNormal.y\n + point.z * this._inwardNormal.z\n - this._distanceFromOrigin;\n }\n /**\n * Evaluate the distance from the plane to a point in space with point given as x,y,z, i.e. (dot product with\n * inward normal) minus distance.\n * @param point space point to test.\n */\n public altitudeXYZ(x: number, y: number, z: number): number {\n return x * this._inwardNormal.x\n + y * this._inwardNormal.y\n + z * this._inwardNormal.z\n - this._distanceFromOrigin;\n }\n /** Return the x component of the normal used to evaluate altitude. */\n public normalX(): number {\n return this._inwardNormal.x;\n }\n /** Return the x component of the normal used to evaluate altitude. */\n public normalY(): number {\n return this._inwardNormal.y;\n }\n /** Return the z component of the normal used to evaluate altitude. */\n public normalZ(): number {\n return this._inwardNormal.z;\n }\n /** Return the dot product of the plane normal with the vector (NOT using the plane's distanceFromOrigin). */\n public velocity(vector: Vector3d): number {\n return vector.x * this._inwardNormal.x + vector.y * this._inwardNormal.y + vector.z * this._inwardNormal.z;\n }\n /**\n * Return the dot product of the plane normal with the x,yz, vector components (NOT using the plane's\n * distanceFromOrigin).\n */\n public velocityXYZ(x: number, y: number, z: number): number {\n return x * this._inwardNormal.x + y * this._inwardNormal.y + z * this._inwardNormal.z;\n }\n /**\n * Return the dot product of the plane normal with the point (treating the point xyz as a vector, and NOT\n * using the plane's distanceFromOrigin).\n */\n public dotProductPlaneNormalPoint(point: Point3d): number {\n return point.x * this._inwardNormal.x + point.y * this._inwardNormal.y + point.z * this._inwardNormal.z;\n }\n /**\n * Return true if spacePoint is inside or on the plane, with tolerance applied to \"on\".\n * @param spacePoint point to test.\n * @param tolerance tolerance for considering \"near plane\" to be \"on plane\"\n */\n public isPointOnOrInside(spacePoint: Point3d, tolerance: number = Geometry.smallMetricDistance): boolean {\n let value = this.altitude(spacePoint);\n if (tolerance) { value += tolerance; }\n return value >= 0.0;\n }\n /**\n * Return true if spacePoint is strictly inside the halfspace, with tolerance applied to \"on\".\n * @param spacePoint point to test.\n * @param tolerance tolerance for considering \"near plane\" to be \"on plane\"\n */\n public isPointInside(point: Point3d, tolerance: number = Geometry.smallMetricDistance): boolean {\n let value = this.altitude(point);\n if (tolerance) { value -= tolerance; }\n return value > 0.0;\n }\n /**\n * Return true if spacePoint is strictly on the plane, within tolerance\n * @param spacePoint point to test.\n * @param tolerance tolerance for considering \"near plane\" to be \"on plane\"\n */\n public isPointOn(point: Point3d, tolerance: number = Geometry.smallMetricDistance): boolean {\n return Math.abs(this.altitude(point)) <= tolerance;\n }\n /**\n * Compute intersections of an (UNBOUNDED) arc with the plane. Append them (as radians) to a growing array.\n * @param arc arc to test. The angle limits of the arc are NOT considered.\n * @param intersectionRadians array to receive results.\n */\n public appendIntersectionRadians(arc: Arc3d, intersectionRadians: GrowableFloat64Array): void {\n const arcVectors = arc.toVectors();\n const alpha = this.altitude(arc.center);\n const beta = this.velocity(arcVectors.vector0);\n const gamma = this.velocity(arcVectors.vector90);\n AnalyticRoots.appendImplicitLineUnitCircleIntersections(\n alpha, beta, gamma, undefined, undefined, intersectionRadians,\n );\n }\n private static _clipFractionArray = new GrowableFloat64Array();\n /** Method from [[Clipper]] interface. */\n public announceClippedArcIntervals(arc: Arc3d, announce?: AnnounceNumberNumberCurvePrimitive): boolean {\n const breaks = ClipPlane._clipFractionArray;\n breaks.clear();\n this.appendIntersectionRadians(arc, breaks);\n arc.sweep.radiansArrayToPositivePeriodicFractions(breaks);\n return ClipUtilities.selectIntervals01(arc, breaks, this, announce);\n }\n /** Method from [[Clipper]] interface. */\n public announceClippedCurveIntervals(curve: CurvePrimitive, announce?: AnnounceNumberNumberCurvePrimitive): boolean {\n const breaks = ClipPlane._clipFractionArray;\n breaks.clear();\n const results: CurveLocationDetail[] = [];\n curve.appendPlaneIntersectionPoints(this, results);\n for (const r of results)\n breaks.push(r.fraction);\n return ClipUtilities.selectIntervals01(curve, breaks, this, announce);\n }\n /**\n * Compute intersection of (unbounded) segment with the plane.\n * * If the ends are on the same side of the plane, return undefined.\n * * If the intersection is an endpoint or interior to the segment return the fraction.\n * * If both ends are on, return undefined.\n */\n public getBoundedSegmentSimpleIntersection(pointA: Point3d, pointB: Point3d): number | undefined {\n const h0 = this.altitude(pointA);\n const h1 = this.altitude(pointB);\n if (h0 * h1 > 0.0)\n return undefined;\n if (h0 === 0.0 && h1 === 0.0) {\n return undefined;\n }\n return - h0 / (h1 - h0);\n }\n /** Apply transform to the origin. Apply inverse transpose of the matrix part to th normal vector. */\n public transformInPlace(transform: Transform): boolean {\n const plane: Plane3dByOriginAndUnitNormal = this.getPlane3d();\n const matrix: Matrix3d = transform.matrix;\n const newPoint = transform.multiplyPoint3d(plane.getOriginRef());\n // Normal transforms as the inverse transpose of the matrix part\n // BTW: If the matrix is orthogonal, this is a long way to multiply by the matrix part (mumble grumble)\n const newNormal = matrix.multiplyInverseTranspose(plane.getNormalRef());\n if (!newNormal)\n return false;\n\n plane.set(newPoint, newNormal);\n const normalized = (plane.getNormalRef()).normalize();\n if (!normalized)\n return false;\n this._inwardNormal = normalized;\n this._distanceFromOrigin = this._inwardNormal.dotProduct(plane.getOriginRef());\n return true;\n }\n /** Set the invisible flag. Interpretation of this flag is algorithm-specific. */\n public setInvisible(invisible: boolean) {\n this._invisible = invisible;\n }\n /** Reverse the sign of all coefficients, so outside and inside reverse */\n public negateInPlace() {\n this._inwardNormal = this._inwardNormal.negate();\n this._distanceFromOrigin = - this._distanceFromOrigin;\n }\n /**\n * Move the plane INWARD by given distance\n * @param offset distance of shift inwards\n */\n public offsetDistance(offset: number) {\n this._distanceFromOrigin += offset;\n }\n /**\n * Clip a polygon to the inside or outside of the plane.\n * * Results with 2 or fewer points are ignored.\n * * Other than ensuring capacity in the arrays, there are no object allocations during execution of this function.\n * * For a convex input polygon, the output polygon is also convex.\n * * For non-convex input, the output polygon may have double-back edges along plane intersections. This is still a\n * valid clip in a parity sense (overlapping regions cancel).\n * @param xyz input points.\n * @param work optional work buffer\n * @param inside whether the positive side of the plane survives (true, default), or negative side (false).\n * @param tolerance distance tolerance for \"on plane\" decision. Default value is [[Geometry.smallMetricDistance]].\n * @return the number of crossings. If this is larger than 2, the input polygon was non-convex.\n * @see appendPolygonClip\n */\n public clipConvexPolygonInPlace(\n xyz: GrowableXYZArray,\n work?: GrowableXYZArray,\n inside: boolean = true,\n tolerance: number = Geometry.smallMetricDistance,\n ): number {\n return IndexedXYZCollectionPolygonOps.clipConvexPolygonInPlace(this, xyz, work, inside, tolerance);\n }\n /**\n * Multiply the ClipPlane's DPoint4d by matrix.\n * @param matrix matrix to apply.\n * @param invert if true, use in verse of the matrix.\n * @param transpose if true, use the transpose of the matrix (or inverse, per invert parameter)\n * @param matrix matrix to apply\n * @return false if unable to invert\n * * Note that if matrixA is applied to all of space, the matrix to send to this method to get a corresponding\n * effect on the plane is the inverse transpose of matrixA\n * * Callers that will apply the same matrix to many planes should pre-invert the matrix for efficiency.\n * * Both params default to true to get the full effect of transforming space.\n */\n public multiplyPlaneByMatrix4d(matrix: Matrix4d, invert: boolean = true, transpose: boolean = true): boolean {\n const plane: Point4d = this.getPlane4d();\n if (invert) {\n const inverse = matrix.createInverse();\n if (inverse)\n return this.multiplyPlaneByMatrix4d(inverse, false, transpose);\n return false;\n }\n if (transpose)\n matrix.multiplyTransposePoint4d(plane, plane);\n else\n matrix.multiplyPoint4d(plane, plane);\n this.setPlane4d(plane);\n return true;\n }\n /** Method from [[Clipper]] interface. */\n public announceClippedSegmentIntervals(\n f0: number, f1: number, pointA: Point3d, pointB: Point3d, announce?: AnnounceNumberNumber,\n ): boolean {\n if (f1 < f0)\n return false;\n const h0 = - this.altitude(pointA);\n const h1 = - this.altitude(pointB);\n const delta = h1 - h0;\n const f = Geometry.conditionalDivideFraction(-h0, delta);\n if (f === undefined) { // The segment is parallel to the plane.\n if (h0 <= 0.0) { if (announce) announce(f0, f1); return true; }\n return false;\n }\n if (delta > 0) { // segment aims OUT\n if (f < f1) f1 = f;\n } else {\n // segment aims IN\n if (f > f0)\n f0 = f;\n }\n if (f1 < f0)\n return false;\n if (announce) announce(f0, f1);\n return true;\n }\n /**\n * Return a coordinate frame with\n * * origin at closest point to global origin\n * * z axis points in\n * * x and y are \"in plane\"\n */\n public getFrame(): Transform {\n const d = this._distanceFromOrigin;\n const origin = Point3d.create(this._inwardNormal.x * d, this._inwardNormal.y * d, this._inwardNormal.z * d);\n const matrix = Matrix3d.createRigidHeadsUp(this._inwardNormal, AxisOrder.ZXY);\n return Transform.createOriginAndMatrix(origin, matrix);\n }\n /**\n * Return the intersection of the plane with a range cube.\n * @param range\n * @param xyzOut intersection polygon. This is convex.\n */\n public intersectRange(range: Range3d, addClosurePoint: boolean = false): GrowableXYZArray | undefined {\n if (range.isNull)\n return undefined;\n const corners = range.corners();\n const frameOnPlane = this.getFrame();\n frameOnPlane.multiplyInversePoint3dArrayInPlace(corners);\n const localRange = Range3d.createArray(corners);\n if (localRange.low.z * localRange.high.z > 0.0)\n return undefined;\n // oversized polygon on local z= 0\n const xyzOut = new GrowableXYZArray();\n xyzOut.pushXYZ(localRange.low.x, localRange.low.y, 0);\n xyzOut.pushXYZ(localRange.high.x, localRange.low.y, 0);\n xyzOut.pushXYZ(localRange.high.x, localRange.high.y, 0);\n xyzOut.pushXYZ(localRange.low.x, localRange.high.y, 0);\n xyzOut.multiplyTransformInPlace(frameOnPlane);\n IndexedXYZCollectionPolygonOps.intersectRangeConvexPolygonInPlace(range, xyzOut);\n if (xyzOut.length === 0)\n return undefined;\n if (addClosurePoint)\n xyzOut.pushWrap(1);\n return xyzOut;\n }\n /**\n * Implement appendPolygonClip, as defined in interface PolygonClipper.\n * @param xyz convex polygon. This is not changed.\n * @param insideFragments Array to receive \"inside\" fragments. Each fragment is a GrowableXYZArray grabbed\n * from the cache. This is NOT cleared.\n * @param outsideFragments Array to receive \"outside\" fragments. Each fragment is a GrowableXYZArray grabbed\n * from the cache. This is NOT cleared.\n * @param arrayCache cache for reusable GrowableXYZArray.\n * @see clipConvexPolygonInPlace\n */\n public appendPolygonClip(\n xyz: IndexedXYZCollection,\n insideFragments: GrowableXYZArray[],\n outsideFragments: GrowableXYZArray[],\n arrayCache: GrowableXYZArrayCache,\n ): void {\n const perpendicularRange = Range1d.createNull();\n const newInside = arrayCache.grabFromCache();\n const newOutside = arrayCache.grabFromCache();\n IndexedXYZCollectionPolygonOps.splitConvexPolygonInsideOutsidePlane(\n this, xyz, newInside, newOutside, perpendicularRange,\n );\n ClipUtilities.captureOrDrop(newInside, 3, insideFragments, arrayCache);\n ClipUtilities.captureOrDrop(newOutside, 3, outsideFragments, arrayCache);\n }\n /** Project a point in space to the plane. */\n public projectPointToPlane(spacePoint: Point3d, result?: Point3d): Point3d {\n return this.projectXYZToPlane(spacePoint.x, spacePoint.y, spacePoint.z, result);\n }\n /** Return the projection of (x,y,z) onto the plane. */\n public override projectXYZToPlane(x: number, y: number, z: number, result?: Point3d): Point3d {\n const scale = -this.altitudeXYZ(x, y, z);\n return Point3d.create(x + scale * this._inwardNormal.x, y + scale * this._inwardNormal.y, z + scale * this._inwardNormal.z, result);\n }\n}\n"]}
@@ -70,30 +70,27 @@ export interface ClipPrimitiveShapeProps {
70
70
  */
71
71
  export type ClipPrimitiveProps = ClipPrimitivePlanesProps | ClipPrimitiveShapeProps;
72
72
  /**
73
- * * ClipPrimitive is a base class for clipping implementations that use
74
- * * A UnionOfConvexClipPlaneSets designated "clipPlanes".
73
+ * * ClipPrimitive is a base class for clipping implementations that use:
74
+ * * A [[UnionOfConvexClipPlaneSets]] designated "clipPlanes".
75
75
  * * An "invisible" flag.
76
- * * When constructed directly, objects of type ClipPrimitive (directly, not through a derived class) will have just planes.
77
- * * Derived classes (e.g. ClipShape) carry additional data such as a swept shape.
78
- * * ClipPrimitive can be constructed with no planes.
79
- * * Derived class is responsible for filling the plane sets.
80
- * * At discretion of derived classes, plane construction can be done at construction time or "on demand when" queries
81
- * call `ensurePlaneSets ()`
82
- * * ClipPrimitive can be constructed directly with planes (and no derived class).
83
- * * The prevailing use is via a ClipShape derived class.
84
- * * The ClipShape has an "isMask" property
85
- * * isMask === false means the plane sets should cover the inside of its polygon.
86
- * * isMask === true means the plane sets should cover the outside of its polygon.
87
- * * Note that the ClipShape's `isMask` property and the ClipPrimitive's `isInvisible` property are distinct controls.
88
- * * In normal usage, callers get "outside" clip behavior using ONLY the ClipShape isMask property.
89
- * * The ClipShape happens to pass the _invisible bit down to ClipPlanes that it creates.
90
- * * At that level, the flag controls whether the cut edges are produced on the plane
76
+ * * A ClipPrimitive can be constructed with or without planes. If without planes:
77
+ * * The derived class is responsible for filling the plane sets.
78
+ * * The derived class can populate the plane sets at construction time or afterwards with [[ClipPrimitive.ensurePlaneSets]].
79
+ * * The prevailing use is via derived class [[ClipShape]].
80
+ * * A ClipShape carries a swept shape that generates the planes.
81
+ * * A ClipShape has an `isMask` property
82
+ * * `isMask === false` means the plane sets should cover the inside of its polygon.
83
+ * * `isMask === true` means the plane sets should cover the outside of its polygon, i.e., the ClipShape acts as a hole.
84
+ * * Note that the ClipShape's `isMask` property and the ClipPrimitive's `invisible` property are distinct flags.
85
+ * * In normal usage, callers get "outside" clip behavior using ONLY the ClipShape `isMask` property.
86
+ * * The ClipShape passes its `invisible` flag down to ClipPlanes that it creates.
87
+ * * At that level, this flag controls whether cut edges are produced on the planes.
91
88
  * @public
92
89
  */
93
90
  export declare class ClipPrimitive implements Clipper {
94
- /** The (union of) convex regions. */
91
+ /** The union of convex regions. */
95
92
  protected _clipPlanes?: UnionOfConvexClipPlaneSets;
96
- /** If true, pointInside inverts the sense of the pointInside for the _clipPlanes. */
93
+ /** The invisible flag of the primitive, passed down to the clip planes. */
97
94
  protected _invisible: boolean;
98
95
  /**
99
96
  * Get a reference to the `UnionOfConvexClipPlaneSets`.
@@ -101,7 +98,7 @@ export declare class ClipPrimitive implements Clipper {
101
98
  * * Derived class typically caches the set on the first such call.
102
99
  */
103
100
  fetchClipPlanesRef(): UnionOfConvexClipPlaneSets | undefined;
104
- /** Ask if this primitive is a hole. */
101
+ /** Return whether this primitive is invisible. */
105
102
  get invisible(): boolean;
106
103
  protected constructor(planeSet?: UnionOfConvexClipPlaneSets | undefined, isInvisible?: boolean);
107
104
  /**
@@ -168,7 +165,7 @@ export declare class ClipPrimitive implements Clipper {
168
165
  multiplyPlanesByMatrix4d(matrix: Matrix4d, invert?: boolean, transpose?: boolean): boolean;
169
166
  /** Apply a transform to the clipper (e.g. transform all planes). */
170
167
  transformInPlace(transform: Transform): boolean;
171
- /** Sets both the clip plane set and the mask set visibility */
168
+ /** Sets the primitive visibility. */
172
169
  setInvisible(invisible: boolean): void;
173
170
  /**
174
171
  * Return true if any plane of the primary clipPlanes has (a) non-zero z component in its normal vector and
@@ -178,10 +175,9 @@ export declare class ClipPrimitive implements Clipper {
178
175
  /**
179
176
  * Quick test of whether the given points fall completely inside or outside.
180
177
  * @param points points to test.
181
- * @param ignoreInvisibleSetting if true, do the test with the clip planes and return that, ignoring the
182
- * invisible setting.
178
+ * @param _ignoreMasks unused. The [[ClipShape]] override inverts this test when `ignoreMasks` is false and the instance is masked.
183
179
  */
184
- classifyPointContainment(points: Point3d[], ignoreInvisibleSetting: boolean): ClipPlaneContainment;
180
+ classifyPointContainment(points: Point3d[], _ignoreMasks?: boolean): ClipPlaneContainment;
185
181
  /**
186
182
  * Promote json object form to class instance.
187
183
  * * First try to convert to a ClipShape.
@@ -366,5 +362,11 @@ export declare class ClipShape extends ClipPrimitive {
366
362
  performTransformToClip(point: Point3d): void;
367
363
  /** Transform the input point in place using this instance's `transformFromClip` member */
368
364
  performTransformFromClip(point: Point3d): void;
365
+ /**
366
+ * Quick test of whether the given points fall completely inside or outside.
367
+ * @param points points to test.
368
+ * @param ignoreMasks if false, invert the containment test on a masked (hole) instance; otherwise perform the containment test as usual.
369
+ */
370
+ classifyPointContainment(points: Point3d[], ignoreMasks: boolean): ClipPlaneContainment;
369
371
  }
370
372
  //# sourceMappingURL=ClipPrimitive.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClipPrimitive.d.ts","sourceRoot":"","sources":["../../../src/clipping/ClipPrimitive.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ClipPrimitive.d.ts","sourceRoot":"","sources":["../../../src/clipping/ClipPrimitive.ts"],"names":[],"mappings":"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"}
@@ -51,30 +51,27 @@ var ClipMaskXYZRangePlanes;
51
51
  ClipMaskXYZRangePlanes[ClipMaskXYZRangePlanes["All"] = 63] = "All";
52
52
  })(ClipMaskXYZRangePlanes || (exports.ClipMaskXYZRangePlanes = ClipMaskXYZRangePlanes = {}));
53
53
  /**
54
- * * ClipPrimitive is a base class for clipping implementations that use
55
- * * A UnionOfConvexClipPlaneSets designated "clipPlanes".
54
+ * * ClipPrimitive is a base class for clipping implementations that use:
55
+ * * A [[UnionOfConvexClipPlaneSets]] designated "clipPlanes".
56
56
  * * An "invisible" flag.
57
- * * When constructed directly, objects of type ClipPrimitive (directly, not through a derived class) will have just planes.
58
- * * Derived classes (e.g. ClipShape) carry additional data such as a swept shape.
59
- * * ClipPrimitive can be constructed with no planes.
60
- * * Derived class is responsible for filling the plane sets.
61
- * * At discretion of derived classes, plane construction can be done at construction time or "on demand when" queries
62
- * call `ensurePlaneSets ()`
63
- * * ClipPrimitive can be constructed directly with planes (and no derived class).
64
- * * The prevailing use is via a ClipShape derived class.
65
- * * The ClipShape has an "isMask" property
66
- * * isMask === false means the plane sets should cover the inside of its polygon.
67
- * * isMask === true means the plane sets should cover the outside of its polygon.
68
- * * Note that the ClipShape's `isMask` property and the ClipPrimitive's `isInvisible` property are distinct controls.
69
- * * In normal usage, callers get "outside" clip behavior using ONLY the ClipShape isMask property.
70
- * * The ClipShape happens to pass the _invisible bit down to ClipPlanes that it creates.
71
- * * At that level, the flag controls whether the cut edges are produced on the plane
57
+ * * A ClipPrimitive can be constructed with or without planes. If without planes:
58
+ * * The derived class is responsible for filling the plane sets.
59
+ * * The derived class can populate the plane sets at construction time or afterwards with [[ClipPrimitive.ensurePlaneSets]].
60
+ * * The prevailing use is via derived class [[ClipShape]].
61
+ * * A ClipShape carries a swept shape that generates the planes.
62
+ * * A ClipShape has an `isMask` property
63
+ * * `isMask === false` means the plane sets should cover the inside of its polygon.
64
+ * * `isMask === true` means the plane sets should cover the outside of its polygon, i.e., the ClipShape acts as a hole.
65
+ * * Note that the ClipShape's `isMask` property and the ClipPrimitive's `invisible` property are distinct flags.
66
+ * * In normal usage, callers get "outside" clip behavior using ONLY the ClipShape `isMask` property.
67
+ * * The ClipShape passes its `invisible` flag down to ClipPlanes that it creates.
68
+ * * At that level, this flag controls whether cut edges are produced on the planes.
72
69
  * @public
73
70
  */
74
71
  class ClipPrimitive {
75
- /** The (union of) convex regions. */
72
+ /** The union of convex regions. */
76
73
  _clipPlanes;
77
- /** If true, pointInside inverts the sense of the pointInside for the _clipPlanes. */
74
+ /** The invisible flag of the primitive, passed down to the clip planes. */
78
75
  _invisible;
79
76
  /**
80
77
  * Get a reference to the `UnionOfConvexClipPlaneSets`.
@@ -85,7 +82,7 @@ class ClipPrimitive {
85
82
  this.ensurePlaneSets();
86
83
  return this._clipPlanes;
87
84
  }
88
- /** Ask if this primitive is a hole. */
85
+ /** Return whether this primitive is invisible. */
89
86
  get invisible() {
90
87
  return this._invisible;
91
88
  }
@@ -221,7 +218,7 @@ class ClipPrimitive {
221
218
  this._clipPlanes.transformInPlace(transform);
222
219
  return true;
223
220
  }
224
- /** Sets both the clip plane set and the mask set visibility */
221
+ /** Sets the primitive visibility. */
225
222
  setInvisible(invisible) {
226
223
  this._invisible = invisible;
227
224
  }
@@ -242,24 +239,14 @@ class ClipPrimitive {
242
239
  /**
243
240
  * Quick test of whether the given points fall completely inside or outside.
244
241
  * @param points points to test.
245
- * @param ignoreInvisibleSetting if true, do the test with the clip planes and return that, ignoring the
246
- * invisible setting.
242
+ * @param _ignoreMasks unused. The [[ClipShape]] override inverts this test when `ignoreMasks` is false and the instance is masked.
247
243
  */
248
- classifyPointContainment(points, ignoreInvisibleSetting) {
244
+ classifyPointContainment(points, _ignoreMasks = true) {
249
245
  this.ensurePlaneSets();
250
246
  const planes = this._clipPlanes;
251
247
  let inside = ClipUtils_1.ClipPlaneContainment.StronglyInside;
252
248
  if (planes)
253
249
  inside = planes.classifyPointContainment(points, false);
254
- if (this._invisible && !ignoreInvisibleSetting)
255
- switch (inside) {
256
- case ClipUtils_1.ClipPlaneContainment.StronglyInside:
257
- return ClipUtils_1.ClipPlaneContainment.StronglyOutside;
258
- case ClipUtils_1.ClipPlaneContainment.StronglyOutside:
259
- return ClipUtils_1.ClipPlaneContainment.StronglyInside;
260
- case ClipUtils_1.ClipPlaneContainment.Ambiguous:
261
- return ClipUtils_1.ClipPlaneContainment.Ambiguous;
262
- }
263
250
  return inside;
264
251
  }
265
252
  /**
@@ -676,8 +663,8 @@ class ClipShape extends ClipPrimitive {
676
663
  if (nextPerpendicular)
677
664
  convexSet.addPlaneToConvexSet(ClipPlane_1.ClipPlane.createNormalAndPoint(nextPerpendicular, nextEdge.pointA, this._invisible, true));
678
665
  set.addConvexSet(convexSet);
679
- set.addOutsideZClipSets(this._invisible, this._zLow, this._zHigh);
680
666
  }
667
+ set.addOutsideZClipSets(this._invisible, this._zLow, this._zHigh);
681
668
  }
682
669
  else {
683
670
  const convexSet = ConvexClipPlaneSet_1.ConvexClipPlaneSet.createEmpty();
@@ -717,7 +704,7 @@ class ClipShape extends ClipPrimitive {
717
704
  if (!node.isMaskSet(Graph_1.HalfEdgeMask.EXTERIOR))
718
705
  return Point3dVector3d_1.Point3d.create(node.x, node.y, 0);
719
706
  });
720
- // parseConvexPolygonPlanes expects a closed loop (pushing the reference doesn't matter)
707
+ // parseConvexPolygonPlanes expects a closed loop
721
708
  convexFacetPoints.push(convexFacetPoints[0].clone());
722
709
  const direction = PolygonOps_1.PolygonOps.testXYPolygonTurningDirections(convexFacetPoints); // ###TODO: Can we expect a direction coming out of graph facet?
723
710
  this.parseConvexPolygonPlanes(set, convexFacetPoints, direction, false, cameraFocalLength);
@@ -807,6 +794,28 @@ class ClipShape extends ClipPrimitive {
807
794
  if (this._transformFromClip !== undefined)
808
795
  this._transformFromClip.multiplyPoint3d(point, point);
809
796
  }
797
+ /**
798
+ * Quick test of whether the given points fall completely inside or outside.
799
+ * @param points points to test.
800
+ * @param ignoreMasks if false, invert the containment test on a masked (hole) instance; otherwise perform the containment test as usual.
801
+ */
802
+ classifyPointContainment(points, ignoreMasks) {
803
+ this.ensurePlaneSets();
804
+ const planes = this._clipPlanes;
805
+ let inside = ClipUtils_1.ClipPlaneContainment.StronglyInside;
806
+ if (planes)
807
+ inside = planes.classifyPointContainment(points, false);
808
+ if (this._isMask && !ignoreMasks)
809
+ switch (inside) {
810
+ case ClipUtils_1.ClipPlaneContainment.StronglyInside:
811
+ return ClipUtils_1.ClipPlaneContainment.StronglyOutside;
812
+ case ClipUtils_1.ClipPlaneContainment.StronglyOutside:
813
+ return ClipUtils_1.ClipPlaneContainment.StronglyInside;
814
+ case ClipUtils_1.ClipPlaneContainment.Ambiguous:
815
+ return ClipUtils_1.ClipPlaneContainment.Ambiguous;
816
+ }
817
+ return inside;
818
+ }
810
819
  }
811
820
  exports.ClipShape = ClipShape;
812
821
  //# sourceMappingURL=ClipPrimitive.js.map