@itwin/core-geometry 4.1.0-dev.8 → 4.1.0-dev.81
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.
- package/CHANGELOG.md +87 -1
- package/lib/cjs/Geometry.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurve.d.ts +1 -1
- package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
- package/lib/cjs/bspline/BSplineCurve.js +2 -2
- package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
- package/lib/cjs/bspline/BSplineSurface.d.ts.map +1 -1
- package/lib/cjs/bspline/BSplineSurface.js +1 -1
- package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
- package/lib/cjs/bspline/BezierCurveBase.d.ts +1 -1
- package/lib/cjs/bspline/BezierCurveBase.d.ts.map +1 -1
- package/lib/cjs/bspline/BezierCurveBase.js +2 -2
- package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
- package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
- package/lib/cjs/clipping/AlternatingConvexClipTree.d.ts +15 -17
- package/lib/cjs/clipping/AlternatingConvexClipTree.d.ts.map +1 -1
- package/lib/cjs/clipping/AlternatingConvexClipTree.js +24 -20
- package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
- package/lib/cjs/clipping/BooleanClipFactory.d.ts +28 -28
- package/lib/cjs/clipping/BooleanClipFactory.d.ts.map +1 -1
- package/lib/cjs/clipping/BooleanClipFactory.js +28 -28
- package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
- package/lib/cjs/clipping/BooleanClipNode.d.ts +11 -11
- package/lib/cjs/clipping/BooleanClipNode.d.ts.map +1 -1
- package/lib/cjs/clipping/BooleanClipNode.js +11 -11
- package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
- package/lib/cjs/clipping/ClipPlane.d.ts +73 -76
- package/lib/cjs/clipping/ClipPlane.d.ts.map +1 -1
- package/lib/cjs/clipping/ClipPlane.js +105 -86
- package/lib/cjs/clipping/ClipPlane.js.map +1 -1
- package/lib/cjs/clipping/ClipPrimitive.d.ts +78 -47
- package/lib/cjs/clipping/ClipPrimitive.d.ts.map +1 -1
- package/lib/cjs/clipping/ClipPrimitive.js +112 -54
- package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
- package/lib/cjs/clipping/ClipUtils.d.ts +54 -44
- package/lib/cjs/clipping/ClipUtils.d.ts.map +1 -1
- package/lib/cjs/clipping/ClipUtils.js +33 -29
- package/lib/cjs/clipping/ClipUtils.js.map +1 -1
- package/lib/cjs/clipping/ClipVector.d.ts +39 -25
- package/lib/cjs/clipping/ClipVector.d.ts.map +1 -1
- package/lib/cjs/clipping/ClipVector.js +35 -23
- package/lib/cjs/clipping/ClipVector.js.map +1 -1
- package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts +61 -38
- package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
- package/lib/cjs/clipping/ConvexClipPlaneSet.js +64 -41
- package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
- package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts +49 -30
- package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
- package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js +50 -30
- package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
- package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.d.ts +2 -2
- package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.d.ts.map +1 -1
- package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js +2 -2
- package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
- package/lib/cjs/core-geometry.d.ts +5 -1
- package/lib/cjs/core-geometry.d.ts.map +1 -1
- package/lib/cjs/core-geometry.js +5 -1
- package/lib/cjs/core-geometry.js.map +1 -1
- package/lib/cjs/curve/Arc3d.d.ts +4 -3
- package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
- package/lib/cjs/curve/Arc3d.js +7 -5
- package/lib/cjs/curve/Arc3d.js.map +1 -1
- package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts +62 -42
- package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js +71 -48
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/cjs/curve/CurveCollection.d.ts +36 -26
- package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
- package/lib/cjs/curve/CurveCollection.js +46 -39
- package/lib/cjs/curve/CurveCollection.js.map +1 -1
- package/lib/cjs/curve/CurveCurve.d.ts +6 -2
- package/lib/cjs/curve/CurveCurve.d.ts.map +1 -1
- package/lib/cjs/curve/CurveCurve.js +13 -9
- package/lib/cjs/curve/CurveCurve.js.map +1 -1
- package/lib/cjs/curve/CurveCurveCloseApproachXY.d.ts +74 -68
- package/lib/cjs/curve/CurveCurveCloseApproachXY.d.ts.map +1 -1
- package/lib/cjs/curve/CurveCurveCloseApproachXY.js +100 -108
- package/lib/cjs/curve/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/cjs/curve/CurveCurveIntersectXY.d.ts +46 -48
- package/lib/cjs/curve/CurveCurveIntersectXY.d.ts.map +1 -1
- package/lib/cjs/curve/CurveCurveIntersectXY.js +72 -61
- package/lib/cjs/curve/CurveCurveIntersectXY.js.map +1 -1
- package/lib/cjs/curve/CurveCurveIntersectXYZ.d.ts +32 -38
- package/lib/cjs/curve/CurveCurveIntersectXYZ.d.ts.map +1 -1
- package/lib/cjs/curve/CurveCurveIntersectXYZ.js +86 -97
- package/lib/cjs/curve/CurveCurveIntersectXYZ.js.map +1 -1
- package/lib/cjs/curve/CurveFactory.d.ts +67 -3
- package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
- package/lib/cjs/curve/CurveFactory.js +75 -7
- package/lib/cjs/curve/CurveFactory.js.map +1 -1
- package/lib/cjs/curve/CurveLocationDetail.d.ts +6 -6
- package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
- package/lib/cjs/curve/CurveLocationDetail.js +9 -7
- package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
- package/lib/cjs/curve/CurveOps.d.ts +77 -0
- package/lib/cjs/curve/CurveOps.d.ts.map +1 -0
- package/lib/cjs/curve/CurveOps.js +160 -0
- package/lib/cjs/curve/CurveOps.js.map +1 -0
- package/lib/cjs/curve/CurvePrimitive.d.ts +26 -18
- package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
- package/lib/cjs/curve/CurvePrimitive.js +4 -3
- package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
- package/lib/cjs/curve/GeometryQuery.d.ts +2 -2
- package/lib/cjs/curve/GeometryQuery.d.ts.map +1 -1
- package/lib/cjs/curve/GeometryQuery.js +2 -2
- package/lib/cjs/curve/GeometryQuery.js.map +1 -1
- package/lib/cjs/curve/LineSegment3d.d.ts +7 -5
- package/lib/cjs/curve/LineSegment3d.d.ts.map +1 -1
- package/lib/cjs/curve/LineSegment3d.js +6 -6
- package/lib/cjs/curve/LineSegment3d.js.map +1 -1
- package/lib/cjs/curve/LineString3d.d.ts +2 -2
- package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
- package/lib/cjs/curve/LineString3d.js +3 -3
- package/lib/cjs/curve/LineString3d.js.map +1 -1
- package/lib/cjs/curve/Loop.d.ts +7 -5
- package/lib/cjs/curve/Loop.d.ts.map +1 -1
- package/lib/cjs/curve/Loop.js +18 -6
- package/lib/cjs/curve/Loop.js.map +1 -1
- package/lib/cjs/curve/OffsetOptions.d.ts +97 -0
- package/lib/cjs/curve/OffsetOptions.d.ts.map +1 -0
- package/lib/cjs/curve/OffsetOptions.js +166 -0
- package/lib/cjs/curve/OffsetOptions.js.map +1 -0
- package/lib/cjs/curve/ParityRegion.d.ts +7 -7
- package/lib/cjs/curve/ParityRegion.d.ts.map +1 -1
- package/lib/cjs/curve/ParityRegion.js +19 -11
- package/lib/cjs/curve/ParityRegion.js.map +1 -1
- package/lib/cjs/curve/Path.d.ts +6 -6
- package/lib/cjs/curve/Path.d.ts.map +1 -1
- package/lib/cjs/curve/Path.js +15 -9
- package/lib/cjs/curve/Path.js.map +1 -1
- package/lib/cjs/curve/ProxyCurve.d.ts +5 -7
- package/lib/cjs/curve/ProxyCurve.d.ts.map +1 -1
- package/lib/cjs/curve/ProxyCurve.js +7 -7
- package/lib/cjs/curve/ProxyCurve.js.map +1 -1
- package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
- package/lib/cjs/curve/RegionOps.d.ts +76 -56
- package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
- package/lib/cjs/curve/RegionOps.js +83 -60
- package/lib/cjs/curve/RegionOps.js.map +1 -1
- package/lib/cjs/curve/RegionOpsClassificationSweeps.js +2 -2
- package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
- package/lib/cjs/curve/StrokeOptions.d.ts.map +1 -1
- package/lib/cjs/curve/StrokeOptions.js +6 -2
- package/lib/cjs/curve/StrokeOptions.js.map +1 -1
- package/lib/cjs/curve/UnionRegion.d.ts +6 -5
- package/lib/cjs/curve/UnionRegion.d.ts.map +1 -1
- package/lib/cjs/curve/UnionRegion.js +17 -8
- package/lib/cjs/curve/UnionRegion.js.map +1 -1
- package/lib/cjs/curve/{ChainCollectorContext.d.ts → internalContexts/ChainCollectorContext.d.ts} +4 -4
- package/lib/cjs/curve/internalContexts/ChainCollectorContext.d.ts.map +1 -0
- package/lib/cjs/curve/{ChainCollectorContext.js → internalContexts/ChainCollectorContext.js} +4 -4
- package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -0
- package/lib/cjs/curve/internalContexts/GapSearchContext.d.ts +2 -1
- package/lib/cjs/curve/internalContexts/GapSearchContext.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/GapSearchContext.js +6 -2
- package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts +59 -70
- package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/MultiChainCollector.js +130 -220
- package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
- package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.d.ts +14 -8
- package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js +14 -8
- package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts +23 -95
- package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +89 -178
- package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/SumLengthsContext.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/SumLengthsContext.js +4 -1
- package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
- package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +1 -1
- package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts +1 -1
- package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
- package/lib/cjs/curve/spiral/TransitionSpiral3d.js +2 -2
- package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/XYCurveEvaluator.js +1 -1
- package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
- package/lib/cjs/geometry3d/Angle.d.ts +9 -0
- package/lib/cjs/geometry3d/Angle.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Angle.js +13 -0
- package/lib/cjs/geometry3d/Angle.js.map +1 -1
- package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
- package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
- package/lib/cjs/geometry3d/BilinearPatch.d.ts +43 -48
- package/lib/cjs/geometry3d/BilinearPatch.d.ts.map +1 -1
- package/lib/cjs/geometry3d/BilinearPatch.js +51 -55
- package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
- package/lib/cjs/geometry3d/Ellipsoid.d.ts +1 -1
- package/lib/cjs/geometry3d/Ellipsoid.js +1 -1
- package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
- package/lib/cjs/geometry3d/FrameBuilder.d.ts.map +1 -1
- package/lib/cjs/geometry3d/FrameBuilder.js +13 -11
- package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
- package/lib/cjs/geometry3d/GeometryHandler.d.ts +103 -97
- package/lib/cjs/geometry3d/GeometryHandler.d.ts.map +1 -1
- package/lib/cjs/geometry3d/GeometryHandler.js +247 -124
- package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableBlockedArray.d.ts.map +1 -1
- package/lib/cjs/geometry3d/GrowableBlockedArray.js +1 -1
- package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableFloat64Array.d.ts.map +1 -1
- package/lib/cjs/geometry3d/GrowableFloat64Array.js +1 -1
- package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
- package/lib/cjs/geometry3d/Matrix3d.d.ts +18 -0
- package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Matrix3d.js +32 -5
- package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
- package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3d.d.ts +41 -32
- package/lib/cjs/geometry3d/Plane3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Plane3d.js +11 -8
- package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.d.ts +37 -34
- package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js +65 -43
- package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.d.ts +36 -32
- package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js +37 -32
- package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
- package/lib/cjs/geometry3d/Point2dVector2d.d.ts +8 -9
- package/lib/cjs/geometry3d/Point2dVector2d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Point2dVector2d.js +9 -10
- package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
- package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.d.ts +12 -4
- package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.js +18 -5
- package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/cjs/geometry3d/PointHelpers.d.ts.map +1 -1
- package/lib/cjs/geometry3d/PointHelpers.js +5 -5
- package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
- package/lib/cjs/geometry3d/PolygonOps.d.ts +6 -2
- package/lib/cjs/geometry3d/PolygonOps.d.ts.map +1 -1
- package/lib/cjs/geometry3d/PolygonOps.js +31 -22
- package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
- package/lib/cjs/geometry3d/PolylineOps.d.ts +16 -1
- package/lib/cjs/geometry3d/PolylineOps.d.ts.map +1 -1
- package/lib/cjs/geometry3d/PolylineOps.js +55 -0
- package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
- package/lib/cjs/geometry3d/Range.d.ts +134 -94
- package/lib/cjs/geometry3d/Range.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Range.js +297 -145
- package/lib/cjs/geometry3d/Range.js.map +1 -1
- package/lib/cjs/geometry3d/Ray2d.d.ts +69 -0
- package/lib/cjs/geometry3d/Ray2d.d.ts.map +1 -0
- package/lib/cjs/geometry3d/Ray2d.js +146 -0
- package/lib/cjs/geometry3d/Ray2d.js.map +1 -0
- package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
- package/lib/cjs/geometry3d/Transform.d.ts +10 -3
- package/lib/cjs/geometry3d/Transform.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Transform.js +18 -6
- package/lib/cjs/geometry3d/Transform.js.map +1 -1
- package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
- package/lib/cjs/numerics/ConvexPolygon2d.d.ts +7 -49
- package/lib/cjs/numerics/ConvexPolygon2d.d.ts.map +1 -1
- package/lib/cjs/numerics/ConvexPolygon2d.js +16 -107
- package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
- package/lib/cjs/numerics/Newton.js.map +1 -1
- package/lib/cjs/numerics/Polynomials.d.ts.map +1 -1
- package/lib/cjs/numerics/Polynomials.js +0 -2
- package/lib/cjs/numerics/Polynomials.js.map +1 -1
- package/lib/cjs/numerics/Quadrature.js +5 -5
- package/lib/cjs/numerics/Quadrature.js.map +1 -1
- package/lib/cjs/polyface/IndexedEdgeMatcher.js +1 -1
- package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.js +2 -2
- package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.d.ts +93 -14
- package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.js +173 -34
- package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/cjs/polyface/TaggedNumericData.js +1 -1
- package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
- package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js +2 -2
- package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.d.ts +27 -19
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.d.ts.map +1 -1
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js +30 -12
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.d.ts +12 -8
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.d.ts.map +1 -1
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js +18 -4
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
- package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.d.ts +3 -4
- package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.d.ts.map +1 -1
- package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js +3 -5
- package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
- package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
- package/lib/cjs/polyface/multiclip/Range2dSearchInterface.d.ts +15 -12
- package/lib/cjs/polyface/multiclip/Range2dSearchInterface.d.ts.map +1 -1
- package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
- package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.d.ts +38 -0
- package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.d.ts.map +1 -1
- package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js +104 -1
- package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
- package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
- package/lib/cjs/serialization/GeometrySamples.d.ts +11 -0
- package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
- package/lib/cjs/serialization/GeometrySamples.js +30 -0
- package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
- package/lib/cjs/serialization/IModelJsonSchema.d.ts +2 -7
- package/lib/cjs/serialization/IModelJsonSchema.d.ts.map +1 -1
- package/lib/cjs/serialization/IModelJsonSchema.js +2 -7
- package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
- package/lib/cjs/solid/LinearSweep.d.ts +2 -1
- package/lib/cjs/solid/LinearSweep.d.ts.map +1 -1
- package/lib/cjs/solid/LinearSweep.js.map +1 -1
- package/lib/cjs/solid/RotationalSweep.d.ts +2 -1
- package/lib/cjs/solid/RotationalSweep.d.ts.map +1 -1
- package/lib/cjs/solid/RotationalSweep.js.map +1 -1
- package/lib/cjs/solid/RuledSweep.d.ts +2 -1
- package/lib/cjs/solid/RuledSweep.d.ts.map +1 -1
- package/lib/cjs/solid/RuledSweep.js.map +1 -1
- package/lib/cjs/solid/SweepContour.d.ts +2 -2
- package/lib/cjs/solid/SweepContour.d.ts.map +1 -1
- package/lib/cjs/solid/SweepContour.js +9 -0
- package/lib/cjs/solid/SweepContour.js.map +1 -1
- package/lib/cjs/topology/ChainMerge.js +1 -1
- package/lib/cjs/topology/ChainMerge.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSearch.js +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSpineContext.js +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePriorityQueue.d.ts.map +1 -1
- package/lib/cjs/topology/HalfEdgePriorityQueue.js +1 -1
- package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
- package/lib/cjs/topology/RegularizeFace.js +3 -3
- package/lib/cjs/topology/RegularizeFace.js.map +1 -1
- package/lib/cjs/topology/Triangulation.js +1 -1
- package/lib/cjs/topology/Triangulation.js.map +1 -1
- package/lib/esm/Geometry.js.map +1 -1
- package/lib/esm/bspline/BSplineCurve.d.ts +1 -1
- package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
- package/lib/esm/bspline/BSplineCurve.js +1 -1
- package/lib/esm/bspline/BSplineCurve.js.map +1 -1
- package/lib/esm/bspline/BSplineSurface.d.ts.map +1 -1
- package/lib/esm/bspline/BSplineSurface.js +1 -1
- package/lib/esm/bspline/BSplineSurface.js.map +1 -1
- package/lib/esm/bspline/BezierCurveBase.d.ts +1 -1
- package/lib/esm/bspline/BezierCurveBase.d.ts.map +1 -1
- package/lib/esm/bspline/BezierCurveBase.js +1 -1
- package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
- package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
- package/lib/esm/clipping/AlternatingConvexClipTree.d.ts +15 -17
- package/lib/esm/clipping/AlternatingConvexClipTree.d.ts.map +1 -1
- package/lib/esm/clipping/AlternatingConvexClipTree.js +24 -20
- package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
- package/lib/esm/clipping/BooleanClipFactory.d.ts +28 -28
- package/lib/esm/clipping/BooleanClipFactory.d.ts.map +1 -1
- package/lib/esm/clipping/BooleanClipFactory.js +28 -28
- package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
- package/lib/esm/clipping/BooleanClipNode.d.ts +11 -11
- package/lib/esm/clipping/BooleanClipNode.d.ts.map +1 -1
- package/lib/esm/clipping/BooleanClipNode.js +11 -11
- package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
- package/lib/esm/clipping/ClipPlane.d.ts +73 -76
- package/lib/esm/clipping/ClipPlane.d.ts.map +1 -1
- package/lib/esm/clipping/ClipPlane.js +105 -86
- package/lib/esm/clipping/ClipPlane.js.map +1 -1
- package/lib/esm/clipping/ClipPrimitive.d.ts +78 -47
- package/lib/esm/clipping/ClipPrimitive.d.ts.map +1 -1
- package/lib/esm/clipping/ClipPrimitive.js +112 -54
- package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
- package/lib/esm/clipping/ClipUtils.d.ts +54 -44
- package/lib/esm/clipping/ClipUtils.d.ts.map +1 -1
- package/lib/esm/clipping/ClipUtils.js +33 -29
- package/lib/esm/clipping/ClipUtils.js.map +1 -1
- package/lib/esm/clipping/ClipVector.d.ts +39 -25
- package/lib/esm/clipping/ClipVector.d.ts.map +1 -1
- package/lib/esm/clipping/ClipVector.js +35 -23
- package/lib/esm/clipping/ClipVector.js.map +1 -1
- package/lib/esm/clipping/ConvexClipPlaneSet.d.ts +61 -38
- package/lib/esm/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
- package/lib/esm/clipping/ConvexClipPlaneSet.js +64 -41
- package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
- package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts +49 -30
- package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
- package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js +50 -30
- package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
- package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.d.ts +2 -2
- package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.d.ts.map +1 -1
- package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js +2 -2
- package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
- package/lib/esm/core-geometry.d.ts +5 -1
- package/lib/esm/core-geometry.d.ts.map +1 -1
- package/lib/esm/core-geometry.js +5 -1
- package/lib/esm/core-geometry.js.map +1 -1
- package/lib/esm/curve/Arc3d.d.ts +4 -3
- package/lib/esm/curve/Arc3d.d.ts.map +1 -1
- package/lib/esm/curve/Arc3d.js +6 -4
- package/lib/esm/curve/Arc3d.js.map +1 -1
- package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +62 -42
- package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
- package/lib/esm/curve/CurveChainWithDistanceIndex.js +70 -47
- package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/esm/curve/CurveCollection.d.ts +36 -26
- package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
- package/lib/esm/curve/CurveCollection.js +46 -39
- package/lib/esm/curve/CurveCollection.js.map +1 -1
- package/lib/esm/curve/CurveCurve.d.ts +6 -2
- package/lib/esm/curve/CurveCurve.d.ts.map +1 -1
- package/lib/esm/curve/CurveCurve.js +13 -9
- package/lib/esm/curve/CurveCurve.js.map +1 -1
- package/lib/esm/curve/CurveCurveCloseApproachXY.d.ts +74 -68
- package/lib/esm/curve/CurveCurveCloseApproachXY.d.ts.map +1 -1
- package/lib/esm/curve/CurveCurveCloseApproachXY.js +100 -108
- package/lib/esm/curve/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/esm/curve/CurveCurveIntersectXY.d.ts +46 -48
- package/lib/esm/curve/CurveCurveIntersectXY.d.ts.map +1 -1
- package/lib/esm/curve/CurveCurveIntersectXY.js +72 -61
- package/lib/esm/curve/CurveCurveIntersectXY.js.map +1 -1
- package/lib/esm/curve/CurveCurveIntersectXYZ.d.ts +32 -38
- package/lib/esm/curve/CurveCurveIntersectXYZ.d.ts.map +1 -1
- package/lib/esm/curve/CurveCurveIntersectXYZ.js +86 -97
- package/lib/esm/curve/CurveCurveIntersectXYZ.js.map +1 -1
- package/lib/esm/curve/CurveFactory.d.ts +67 -3
- package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
- package/lib/esm/curve/CurveFactory.js +74 -6
- package/lib/esm/curve/CurveFactory.js.map +1 -1
- package/lib/esm/curve/CurveLocationDetail.d.ts +6 -6
- package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
- package/lib/esm/curve/CurveLocationDetail.js +9 -7
- package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
- package/lib/esm/curve/CurveOps.d.ts +77 -0
- package/lib/esm/curve/CurveOps.d.ts.map +1 -0
- package/lib/esm/curve/CurveOps.js +156 -0
- package/lib/esm/curve/CurveOps.js.map +1 -0
- package/lib/esm/curve/CurvePrimitive.d.ts +26 -18
- package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
- package/lib/esm/curve/CurvePrimitive.js +4 -3
- package/lib/esm/curve/CurvePrimitive.js.map +1 -1
- package/lib/esm/curve/GeometryQuery.d.ts +2 -2
- package/lib/esm/curve/GeometryQuery.d.ts.map +1 -1
- package/lib/esm/curve/GeometryQuery.js +2 -2
- package/lib/esm/curve/GeometryQuery.js.map +1 -1
- package/lib/esm/curve/LineSegment3d.d.ts +7 -5
- package/lib/esm/curve/LineSegment3d.d.ts.map +1 -1
- package/lib/esm/curve/LineSegment3d.js +5 -5
- package/lib/esm/curve/LineSegment3d.js.map +1 -1
- package/lib/esm/curve/LineString3d.d.ts +2 -2
- package/lib/esm/curve/LineString3d.d.ts.map +1 -1
- package/lib/esm/curve/LineString3d.js +2 -2
- package/lib/esm/curve/LineString3d.js.map +1 -1
- package/lib/esm/curve/Loop.d.ts +7 -5
- package/lib/esm/curve/Loop.d.ts.map +1 -1
- package/lib/esm/curve/Loop.js +18 -6
- package/lib/esm/curve/Loop.js.map +1 -1
- package/lib/esm/curve/OffsetOptions.d.ts +97 -0
- package/lib/esm/curve/OffsetOptions.d.ts.map +1 -0
- package/lib/esm/curve/OffsetOptions.js +161 -0
- package/lib/esm/curve/OffsetOptions.js.map +1 -0
- package/lib/esm/curve/ParityRegion.d.ts +7 -7
- package/lib/esm/curve/ParityRegion.d.ts.map +1 -1
- package/lib/esm/curve/ParityRegion.js +19 -11
- package/lib/esm/curve/ParityRegion.js.map +1 -1
- package/lib/esm/curve/Path.d.ts +6 -6
- package/lib/esm/curve/Path.d.ts.map +1 -1
- package/lib/esm/curve/Path.js +15 -9
- package/lib/esm/curve/Path.js.map +1 -1
- package/lib/esm/curve/ProxyCurve.d.ts +5 -7
- package/lib/esm/curve/ProxyCurve.d.ts.map +1 -1
- package/lib/esm/curve/ProxyCurve.js +7 -7
- package/lib/esm/curve/ProxyCurve.js.map +1 -1
- package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
- package/lib/esm/curve/RegionOps.d.ts +76 -56
- package/lib/esm/curve/RegionOps.d.ts.map +1 -1
- package/lib/esm/curve/RegionOps.js +84 -61
- package/lib/esm/curve/RegionOps.js.map +1 -1
- package/lib/esm/curve/RegionOpsClassificationSweeps.js +2 -2
- package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
- package/lib/esm/curve/StrokeOptions.d.ts.map +1 -1
- package/lib/esm/curve/StrokeOptions.js +6 -2
- package/lib/esm/curve/StrokeOptions.js.map +1 -1
- package/lib/esm/curve/UnionRegion.d.ts +6 -5
- package/lib/esm/curve/UnionRegion.d.ts.map +1 -1
- package/lib/esm/curve/UnionRegion.js +17 -8
- package/lib/esm/curve/UnionRegion.js.map +1 -1
- package/lib/esm/curve/{ChainCollectorContext.d.ts → internalContexts/ChainCollectorContext.d.ts} +4 -4
- package/lib/esm/curve/internalContexts/ChainCollectorContext.d.ts.map +1 -0
- package/lib/esm/curve/{ChainCollectorContext.js → internalContexts/ChainCollectorContext.js} +4 -4
- package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -0
- package/lib/esm/curve/internalContexts/GapSearchContext.d.ts +2 -1
- package/lib/esm/curve/internalContexts/GapSearchContext.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/GapSearchContext.js +6 -2
- package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts +59 -70
- package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/MultiChainCollector.js +129 -218
- package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
- package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.d.ts +14 -8
- package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js +14 -8
- package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts +23 -95
- package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +86 -173
- package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/SumLengthsContext.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/SumLengthsContext.js +4 -1
- package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
- package/lib/esm/curve/spiral/IntegratedSpiral3d.js +1 -1
- package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts +1 -1
- package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
- package/lib/esm/curve/spiral/TransitionSpiral3d.js +1 -1
- package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/XYCurveEvaluator.js +1 -1
- package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
- package/lib/esm/geometry3d/Angle.d.ts +9 -0
- package/lib/esm/geometry3d/Angle.d.ts.map +1 -1
- package/lib/esm/geometry3d/Angle.js +13 -0
- package/lib/esm/geometry3d/Angle.js.map +1 -1
- package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
- package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
- package/lib/esm/geometry3d/BilinearPatch.d.ts +43 -48
- package/lib/esm/geometry3d/BilinearPatch.d.ts.map +1 -1
- package/lib/esm/geometry3d/BilinearPatch.js +51 -55
- package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
- package/lib/esm/geometry3d/Ellipsoid.d.ts +1 -1
- package/lib/esm/geometry3d/Ellipsoid.js +1 -1
- package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
- package/lib/esm/geometry3d/FrameBuilder.d.ts.map +1 -1
- package/lib/esm/geometry3d/FrameBuilder.js +13 -11
- package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
- package/lib/esm/geometry3d/GeometryHandler.d.ts +103 -97
- package/lib/esm/geometry3d/GeometryHandler.d.ts.map +1 -1
- package/lib/esm/geometry3d/GeometryHandler.js +247 -124
- package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
- package/lib/esm/geometry3d/GrowableBlockedArray.d.ts.map +1 -1
- package/lib/esm/geometry3d/GrowableBlockedArray.js +1 -1
- package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
- package/lib/esm/geometry3d/GrowableFloat64Array.d.ts.map +1 -1
- package/lib/esm/geometry3d/GrowableFloat64Array.js +1 -1
- package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
- package/lib/esm/geometry3d/Matrix3d.d.ts +18 -0
- package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Matrix3d.js +32 -5
- package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
- package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
- package/lib/esm/geometry3d/Plane3d.d.ts +41 -32
- package/lib/esm/geometry3d/Plane3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Plane3d.js +11 -8
- package/lib/esm/geometry3d/Plane3d.js.map +1 -1
- package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.d.ts +37 -34
- package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.d.ts.map +1 -1
- package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js +65 -43
- package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
- package/lib/esm/geometry3d/Plane3dByOriginAndVectors.d.ts +36 -32
- package/lib/esm/geometry3d/Plane3dByOriginAndVectors.d.ts.map +1 -1
- package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js +37 -32
- package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
- package/lib/esm/geometry3d/Point2dVector2d.d.ts +8 -9
- package/lib/esm/geometry3d/Point2dVector2d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Point2dVector2d.js +9 -10
- package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
- package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.d.ts +12 -4
- package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.js +18 -5
- package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/esm/geometry3d/PointHelpers.d.ts.map +1 -1
- package/lib/esm/geometry3d/PointHelpers.js +5 -5
- package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
- package/lib/esm/geometry3d/PolygonOps.d.ts +6 -2
- package/lib/esm/geometry3d/PolygonOps.d.ts.map +1 -1
- package/lib/esm/geometry3d/PolygonOps.js +31 -22
- package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
- package/lib/esm/geometry3d/PolylineOps.d.ts +16 -1
- package/lib/esm/geometry3d/PolylineOps.d.ts.map +1 -1
- package/lib/esm/geometry3d/PolylineOps.js +56 -1
- package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
- package/lib/esm/geometry3d/Range.d.ts +134 -94
- package/lib/esm/geometry3d/Range.d.ts.map +1 -1
- package/lib/esm/geometry3d/Range.js +297 -145
- package/lib/esm/geometry3d/Range.js.map +1 -1
- package/lib/esm/geometry3d/Ray2d.d.ts +69 -0
- package/lib/esm/geometry3d/Ray2d.d.ts.map +1 -0
- package/lib/esm/geometry3d/Ray2d.js +142 -0
- package/lib/esm/geometry3d/Ray2d.js.map +1 -0
- package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Ray3d.js.map +1 -1
- package/lib/esm/geometry3d/Transform.d.ts +10 -3
- package/lib/esm/geometry3d/Transform.d.ts.map +1 -1
- package/lib/esm/geometry3d/Transform.js +18 -6
- package/lib/esm/geometry3d/Transform.js.map +1 -1
- package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
- package/lib/esm/numerics/ConvexPolygon2d.d.ts +7 -49
- package/lib/esm/numerics/ConvexPolygon2d.d.ts.map +1 -1
- package/lib/esm/numerics/ConvexPolygon2d.js +14 -104
- package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
- package/lib/esm/numerics/Newton.js.map +1 -1
- package/lib/esm/numerics/Polynomials.d.ts.map +1 -1
- package/lib/esm/numerics/Polynomials.js +0 -2
- package/lib/esm/numerics/Polynomials.js.map +1 -1
- package/lib/esm/numerics/Quadrature.js +5 -5
- package/lib/esm/numerics/Quadrature.js.map +1 -1
- package/lib/esm/polyface/IndexedEdgeMatcher.js +1 -1
- package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.js +2 -2
- package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.d.ts +93 -14
- package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.js +173 -35
- package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/esm/polyface/TaggedNumericData.js +1 -1
- package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
- package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js +2 -2
- package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.d.ts +27 -19
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.d.ts.map +1 -1
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js +30 -12
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.d.ts +12 -8
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.d.ts.map +1 -1
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js +18 -4
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
- package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.d.ts +3 -4
- package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.d.ts.map +1 -1
- package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js +3 -5
- package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
- package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
- package/lib/esm/polyface/multiclip/Range2dSearchInterface.d.ts +15 -12
- package/lib/esm/polyface/multiclip/Range2dSearchInterface.d.ts.map +1 -1
- package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
- package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.d.ts +38 -0
- package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.d.ts.map +1 -1
- package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js +102 -1
- package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
- package/lib/esm/serialization/BGFBWriter.js.map +1 -1
- package/lib/esm/serialization/GeometrySamples.d.ts +11 -0
- package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
- package/lib/esm/serialization/GeometrySamples.js +30 -0
- package/lib/esm/serialization/GeometrySamples.js.map +1 -1
- package/lib/esm/serialization/IModelJsonSchema.d.ts +2 -7
- package/lib/esm/serialization/IModelJsonSchema.d.ts.map +1 -1
- package/lib/esm/serialization/IModelJsonSchema.js +2 -7
- package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
- package/lib/esm/solid/LinearSweep.d.ts +2 -1
- package/lib/esm/solid/LinearSweep.d.ts.map +1 -1
- package/lib/esm/solid/LinearSweep.js.map +1 -1
- package/lib/esm/solid/RotationalSweep.d.ts +2 -1
- package/lib/esm/solid/RotationalSweep.d.ts.map +1 -1
- package/lib/esm/solid/RotationalSweep.js.map +1 -1
- package/lib/esm/solid/RuledSweep.d.ts +2 -1
- package/lib/esm/solid/RuledSweep.d.ts.map +1 -1
- package/lib/esm/solid/RuledSweep.js.map +1 -1
- package/lib/esm/solid/SweepContour.d.ts +2 -2
- package/lib/esm/solid/SweepContour.d.ts.map +1 -1
- package/lib/esm/solid/SweepContour.js +9 -0
- package/lib/esm/solid/SweepContour.js.map +1 -1
- package/lib/esm/topology/ChainMerge.js +1 -1
- package/lib/esm/topology/ChainMerge.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphSearch.js +1 -1
- package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphSpineContext.js +1 -1
- package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
- package/lib/esm/topology/HalfEdgePriorityQueue.d.ts.map +1 -1
- package/lib/esm/topology/HalfEdgePriorityQueue.js +1 -1
- package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
- package/lib/esm/topology/RegularizeFace.js +3 -3
- package/lib/esm/topology/RegularizeFace.js.map +1 -1
- package/lib/esm/topology/Triangulation.js +1 -1
- package/lib/esm/topology/Triangulation.js.map +1 -1
- package/package.json +6 -17
- package/lib/cjs/curve/ChainCollectorContext.d.ts.map +0 -1
- package/lib/cjs/curve/ChainCollectorContext.js.map +0 -1
- package/lib/esm/curve/ChainCollectorContext.d.ts.map +0 -1
- package/lib/esm/curve/ChainCollectorContext.js.map +0 -1
|
@@ -18,17 +18,18 @@ const Point4d_1 = require("../geometry4d/Point4d");
|
|
|
18
18
|
const Polynomials_1 = require("../numerics/Polynomials");
|
|
19
19
|
const ClipUtils_1 = require("./ClipUtils");
|
|
20
20
|
const Plane3d_1 = require("../geometry3d/Plane3d");
|
|
21
|
-
/**
|
|
21
|
+
/**
|
|
22
|
+
* A ClipPlane is a single plane represented as
|
|
22
23
|
* * An inward unit normal (u,v,w)
|
|
23
24
|
* * A signedDistance
|
|
24
25
|
*
|
|
25
26
|
* Hence
|
|
26
|
-
* * The halfspace function evaluation for "point"
|
|
27
|
-
* * POSITIVE values of the halfspace function are "inside"
|
|
28
|
-
* * ZERO value of the halfspace function is "on"
|
|
29
|
-
* * NEGATIVE value of the halfspace function is "outside"
|
|
30
|
-
* * A representative point on the plane is (signedDistance*u, signedDistance * v, signedDistance *w)
|
|
31
|
-
* * Given a point and inward normal
|
|
27
|
+
* * The halfspace function evaluation for "point" (x,y,z) is `(x,y,z) DOT (u,v,w) - signedDistance`.
|
|
28
|
+
* * POSITIVE values of the halfspace function are "inside".
|
|
29
|
+
* * ZERO value of the halfspace function is "on".
|
|
30
|
+
* * NEGATIVE value of the halfspace function is "outside".
|
|
31
|
+
* * A representative point on the plane is (signedDistance * u, signedDistance * v, signedDistance * w).
|
|
32
|
+
* * Given a point on the plane and the inward normal of the plane, `signedDistance = point DOT normal`.
|
|
32
33
|
* @public
|
|
33
34
|
*/
|
|
34
35
|
class ClipPlane extends Plane3d_1.Plane3d {
|
|
@@ -55,12 +56,12 @@ class ClipPlane extends Plane3d_1.Plane3d {
|
|
|
55
56
|
&& this._interior === other._interior
|
|
56
57
|
&& this._invisible === other._invisible;
|
|
57
58
|
}
|
|
58
|
-
/**
|
|
59
|
+
/** Return a cloned plane */
|
|
59
60
|
clone() {
|
|
60
61
|
const result = new ClipPlane(this._inwardNormal.clone(), this._distanceFromOrigin, this._invisible, this._interior);
|
|
61
62
|
return result;
|
|
62
63
|
}
|
|
63
|
-
/**
|
|
64
|
+
/** Return a cloned plane with coordinate data negated. */
|
|
64
65
|
cloneNegated() {
|
|
65
66
|
const plane = new ClipPlane(this._inwardNormal.clone(), this._distanceFromOrigin, this._invisible, this._interior);
|
|
66
67
|
plane.negateInPlace();
|
|
@@ -79,7 +80,7 @@ class ClipPlane extends Plane3d_1.Plane3d {
|
|
|
79
80
|
return new ClipPlane(plane.getNormalRef().clone(), distance, invisible, interior);
|
|
80
81
|
}
|
|
81
82
|
/**
|
|
82
|
-
*
|
|
83
|
+
* Create a ClipPlane with direct normal and signedDistance.
|
|
83
84
|
* * The vector is normalized for storage.
|
|
84
85
|
*/
|
|
85
86
|
static createNormalAndDistance(normal, distance, invisible = false, interior = false, result) {
|
|
@@ -95,10 +96,12 @@ class ClipPlane extends Plane3d_1.Plane3d {
|
|
|
95
96
|
}
|
|
96
97
|
return undefined;
|
|
97
98
|
}
|
|
98
|
-
/**
|
|
99
|
-
*
|
|
99
|
+
/**
|
|
100
|
+
* Create a ClipPlane
|
|
101
|
+
* * "normal" is the inward normal of the plane (it is internally normalized).
|
|
100
102
|
* * "point" is any point of the plane.
|
|
101
|
-
* * The stored distance for the plane is the dot product of the point with the normal (i.e. treat the point's xyz as
|
|
103
|
+
* * The stored distance for the plane is the dot product of the point with the normal (i.e. treat the point's xyz as
|
|
104
|
+
* a vector from the origin.)
|
|
102
105
|
*/
|
|
103
106
|
static createNormalAndPoint(normal, point, invisible = false, interior = false, result) {
|
|
104
107
|
const normalized = normal.normalize();
|
|
@@ -114,11 +117,12 @@ class ClipPlane extends Plane3d_1.Plane3d {
|
|
|
114
117
|
}
|
|
115
118
|
return undefined;
|
|
116
119
|
}
|
|
117
|
-
/**
|
|
120
|
+
/**
|
|
121
|
+
* Create a clip plane
|
|
118
122
|
* @param origin any point on the plane.
|
|
119
123
|
* @param vectorA any vector in the plane
|
|
120
124
|
* @param vectorB any vector in the plane
|
|
121
|
-
*
|
|
125
|
+
* Returns undefined if the vectors are not independent.
|
|
122
126
|
* * The stored inward normal is vectorB.crossProduct(vectorA).
|
|
123
127
|
* * That is, the vectors are considered as a right-handed pair when viewed from the outside.
|
|
124
128
|
*/
|
|
@@ -126,11 +130,12 @@ class ClipPlane extends Plane3d_1.Plane3d {
|
|
|
126
130
|
const normalized = vectorB.crossProduct(vectorA);
|
|
127
131
|
return this.createNormalAndPoint(normalized, origin, invisible, interior, result);
|
|
128
132
|
}
|
|
129
|
-
/**
|
|
130
|
-
*
|
|
131
|
-
* *
|
|
132
|
-
* * "point" is any point of the plane.
|
|
133
|
-
* * The stored distance for the plane is the dot product of the point with the normal (i.e. treat the point's xyz
|
|
133
|
+
/**
|
|
134
|
+
* Create a ClipPlane
|
|
135
|
+
* * "normal" (normalX, normalY, normalZ) is the inward normal of the plane.
|
|
136
|
+
* * "point" (originX,originY,originZ) is any point of the plane.
|
|
137
|
+
* * The stored distance for the plane is the dot product of the point with the normal (i.e. treat the point's xyz
|
|
138
|
+
* as a vector from the origin.)
|
|
134
139
|
*/
|
|
135
140
|
static createNormalAndPointXYZXYZ(normalX, normalY, normalZ, originX, originY, originZ, invisible = false, interior = false, result) {
|
|
136
141
|
const q = Geometry_1.Geometry.hypotenuseXYZ(normalX, normalY, normalZ);
|
|
@@ -149,7 +154,7 @@ class ClipPlane extends Plane3d_1.Plane3d {
|
|
|
149
154
|
return undefined;
|
|
150
155
|
}
|
|
151
156
|
/**
|
|
152
|
-
*
|
|
157
|
+
* Return a json object of the form
|
|
153
158
|
* `{"normal":[u,v,w],"dist":signedDistanceValue,"interior":true,"invisible":true}`
|
|
154
159
|
*/
|
|
155
160
|
toJSON() {
|
|
@@ -163,7 +168,7 @@ class ClipPlane extends Plane3d_1.Plane3d {
|
|
|
163
168
|
props.invisible = true;
|
|
164
169
|
return props;
|
|
165
170
|
}
|
|
166
|
-
/**
|
|
171
|
+
/** Parse json object to ClipPlane instance */
|
|
167
172
|
static fromJSON(json, result) {
|
|
168
173
|
if (json && json.normal && undefined !== json.dist && Number.isFinite(json.dist))
|
|
169
174
|
return ClipPlane.createNormalAndDistance(Point3dVector3d_1.Vector3d.fromJSON(json.normal), json.dist, !!json.invisible, !!json.interior);
|
|
@@ -174,22 +179,22 @@ class ClipPlane extends Plane3d_1.Plane3d {
|
|
|
174
179
|
this._invisible = invisible;
|
|
175
180
|
this._interior = interior;
|
|
176
181
|
}
|
|
177
|
-
/**
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
/**
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
/**
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
182
|
+
/** Return the stored distanceFromOrigin property. */
|
|
183
|
+
get distance() {
|
|
184
|
+
return this._distanceFromOrigin;
|
|
185
|
+
}
|
|
186
|
+
/** * Return the stored inward normal property. */
|
|
187
|
+
get inwardNormalRef() {
|
|
188
|
+
return this._inwardNormal;
|
|
189
|
+
}
|
|
190
|
+
/** Return the "interior" property bit */
|
|
191
|
+
get interior() {
|
|
192
|
+
return this._interior;
|
|
193
|
+
}
|
|
194
|
+
/** Return the "invisible" property bit. */
|
|
195
|
+
get invisible() {
|
|
196
|
+
return this._invisible;
|
|
197
|
+
}
|
|
193
198
|
/**
|
|
194
199
|
* Create a plane defined by two points, an up vector, and a tilt angle relative to the up vector.
|
|
195
200
|
* @param point0 start point of the edge
|
|
@@ -213,9 +218,7 @@ class ClipPlane extends Plane3d_1.Plane3d {
|
|
|
213
218
|
}
|
|
214
219
|
return undefined;
|
|
215
220
|
}
|
|
216
|
-
/**
|
|
217
|
-
* Create a plane perpendicular to the edge between the xy parts of point0 and point1
|
|
218
|
-
*/
|
|
221
|
+
/** Create a plane perpendicular to the edge between the xy parts of point0 and point1. */
|
|
219
222
|
static createEdgeXY(point0, point1, result) {
|
|
220
223
|
const normal = Point3dVector3d_1.Vector3d.create(point0.y - point1.y, point1.x - point0.x);
|
|
221
224
|
if (normal.normalizeInPlace())
|
|
@@ -229,7 +232,7 @@ class ClipPlane extends Plane3d_1.Plane3d {
|
|
|
229
232
|
*/
|
|
230
233
|
getPlane3d() {
|
|
231
234
|
const d = this._distanceFromOrigin;
|
|
232
|
-
//
|
|
235
|
+
// normal should be normalized, will not return undefined
|
|
233
236
|
return Plane3dByOriginAndUnitNormal_1.Plane3dByOriginAndUnitNormal.create(Point3dVector3d_1.Point3d.create(this._inwardNormal.x * d, this._inwardNormal.y * d, this._inwardNormal.z * d), this._inwardNormal);
|
|
234
237
|
}
|
|
235
238
|
/**
|
|
@@ -243,8 +246,9 @@ class ClipPlane extends Plane3d_1.Plane3d {
|
|
|
243
246
|
/**
|
|
244
247
|
* Set the plane from DPoint4d style plane.
|
|
245
248
|
* * The saved plane has its direction normalized.
|
|
246
|
-
* * This preserves the plane itself as a zero set but make plane evaluations act as true distances (even if the
|
|
247
|
-
*
|
|
249
|
+
* * This preserves the plane itself as a zero set but make plane evaluations act as true distances (even if the
|
|
250
|
+
* plane coefficients are scaled otherwise).
|
|
251
|
+
* @param plane the DPoint4d style plane.
|
|
248
252
|
*/
|
|
249
253
|
setPlane4d(plane) {
|
|
250
254
|
const a = Math.sqrt(plane.x * plane.x + plane.y * plane.y + plane.z * plane.z);
|
|
@@ -255,49 +259,63 @@ class ClipPlane extends Plane3d_1.Plane3d {
|
|
|
255
259
|
this._distanceFromOrigin = -r * plane.w;
|
|
256
260
|
}
|
|
257
261
|
/**
|
|
258
|
-
* Evaluate the altitude in weighted space, i.e. (dot product with inward normal) minus distance, with point.w
|
|
259
|
-
*
|
|
262
|
+
* Evaluate the altitude in weighted space, i.e. (dot product with inward normal) minus distance, with point.w
|
|
263
|
+
* scale applied to distance.
|
|
264
|
+
* @param point space point to test.
|
|
260
265
|
*/
|
|
261
266
|
weightedAltitude(point) {
|
|
262
|
-
return point.x * this._inwardNormal.x
|
|
267
|
+
return point.x * this._inwardNormal.x
|
|
268
|
+
+ point.y * this._inwardNormal.y
|
|
269
|
+
+ point.z * this._inwardNormal.z
|
|
270
|
+
- point.w * this._distanceFromOrigin;
|
|
263
271
|
}
|
|
264
272
|
/**
|
|
265
|
-
* Evaluate the distance from the plane to a point in space, i.e. (dot product with inward normal) minus distance
|
|
266
|
-
* @param point space point to test
|
|
273
|
+
* Evaluate the distance from the plane to a point in space, i.e. (dot product with inward normal) minus distance.
|
|
274
|
+
* @param point space point to test.
|
|
267
275
|
*/
|
|
268
276
|
altitude(point) {
|
|
269
|
-
return point.x * this._inwardNormal.x
|
|
277
|
+
return point.x * this._inwardNormal.x
|
|
278
|
+
+ point.y * this._inwardNormal.y
|
|
279
|
+
+ point.z * this._inwardNormal.z
|
|
280
|
+
- this._distanceFromOrigin;
|
|
270
281
|
}
|
|
271
282
|
/**
|
|
272
|
-
* Evaluate the distance from the plane to a point in space with point given as x,y,z, i.e. (dot product with
|
|
273
|
-
*
|
|
283
|
+
* Evaluate the distance from the plane to a point in space with point given as x,y,z, i.e. (dot product with
|
|
284
|
+
* inward normal) minus distance.
|
|
285
|
+
* @param point space point to test.
|
|
274
286
|
*/
|
|
275
287
|
altitudeXYZ(x, y, z) {
|
|
276
|
-
return x * this._inwardNormal.x
|
|
288
|
+
return x * this._inwardNormal.x
|
|
289
|
+
+ y * this._inwardNormal.y
|
|
290
|
+
+ z * this._inwardNormal.z
|
|
291
|
+
- this._distanceFromOrigin;
|
|
277
292
|
}
|
|
278
|
-
/**
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
/**
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
/**
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
/** Return the dot product of the plane normal with the vector (NOT using the plane's distanceFromOrigin).
|
|
291
|
-
*/
|
|
293
|
+
/** Return the x component of the normal used to evaluate altitude. */
|
|
294
|
+
normalX() {
|
|
295
|
+
return this._inwardNormal.x;
|
|
296
|
+
}
|
|
297
|
+
/** Return the x component of the normal used to evaluate altitude. */
|
|
298
|
+
normalY() {
|
|
299
|
+
return this._inwardNormal.y;
|
|
300
|
+
}
|
|
301
|
+
/** Return the z component of the normal used to evaluate altitude. */
|
|
302
|
+
normalZ() {
|
|
303
|
+
return this._inwardNormal.z;
|
|
304
|
+
}
|
|
305
|
+
/** Return the dot product of the plane normal with the vector (NOT using the plane's distanceFromOrigin). */
|
|
292
306
|
velocity(vector) {
|
|
293
307
|
return vector.x * this._inwardNormal.x + vector.y * this._inwardNormal.y + vector.z * this._inwardNormal.z;
|
|
294
308
|
}
|
|
295
|
-
/**
|
|
309
|
+
/**
|
|
310
|
+
* Return the dot product of the plane normal with the x,yz, vector components (NOT using the plane's
|
|
311
|
+
* distanceFromOrigin).
|
|
296
312
|
*/
|
|
297
313
|
velocityXYZ(x, y, z) {
|
|
298
314
|
return x * this._inwardNormal.x + y * this._inwardNormal.y + z * this._inwardNormal.z;
|
|
299
315
|
}
|
|
300
|
-
/**
|
|
316
|
+
/**
|
|
317
|
+
* Return the dot product of the plane normal with the point (treating the point xyz as a vector, and NOT
|
|
318
|
+
* using the plane's distanceFromOrigin).
|
|
301
319
|
*/
|
|
302
320
|
dotProductPlaneNormalPoint(point) {
|
|
303
321
|
return point.x * this._inwardNormal.x + point.y * this._inwardNormal.y + point.z * this._inwardNormal.z;
|
|
@@ -346,7 +364,8 @@ class ClipPlane extends Plane3d_1.Plane3d {
|
|
|
346
364
|
const gamma = this.velocity(arcVectors.vector90);
|
|
347
365
|
Polynomials_1.AnalyticRoots.appendImplicitLineUnitCircleIntersections(alpha, beta, gamma, undefined, undefined, intersectionRadians);
|
|
348
366
|
}
|
|
349
|
-
/**
|
|
367
|
+
/**
|
|
368
|
+
* Announce fractional intervals of arc clip.
|
|
350
369
|
* * Each call to `announce(fraction0, fraction1, arc)` announces one interval that is inside the clip plane.
|
|
351
370
|
*/
|
|
352
371
|
announceClippedArcIntervals(arc, announce) {
|
|
@@ -357,7 +376,7 @@ class ClipPlane extends Plane3d_1.Plane3d {
|
|
|
357
376
|
return ClipUtils_1.ClipUtilities.selectIntervals01(arc, breaks, this, announce);
|
|
358
377
|
}
|
|
359
378
|
/**
|
|
360
|
-
*
|
|
379
|
+
* Compute intersection of (unbounded) segment with the plane.
|
|
361
380
|
* * If the ends are on the same side of the plane, return undefined.
|
|
362
381
|
* * If the intersection is an endpoint or interior to the segment return the fraction.
|
|
363
382
|
* * If both ends are on, return undefined.
|
|
@@ -372,7 +391,7 @@ class ClipPlane extends Plane3d_1.Plane3d {
|
|
|
372
391
|
}
|
|
373
392
|
return -h0 / (h1 - h0);
|
|
374
393
|
}
|
|
375
|
-
/** Apply transform to the origin.
|
|
394
|
+
/** Apply transform to the origin. Apply inverse transpose of the matrix part to th normal vector. */
|
|
376
395
|
transformInPlace(transform) {
|
|
377
396
|
const plane = this.getPlane3d();
|
|
378
397
|
const matrix = transform.matrix;
|
|
@@ -390,11 +409,11 @@ class ClipPlane extends Plane3d_1.Plane3d {
|
|
|
390
409
|
this._distanceFromOrigin = this._inwardNormal.dotProduct(plane.getOriginRef());
|
|
391
410
|
return true;
|
|
392
411
|
}
|
|
393
|
-
/** Set the invisible flag.
|
|
412
|
+
/** Set the invisible flag. Interpretation of this is up to the use code algorithms. */
|
|
394
413
|
setInvisible(invisible) {
|
|
395
414
|
this._invisible = invisible;
|
|
396
415
|
}
|
|
397
|
-
/**
|
|
416
|
+
/** Reverse the sign of all coefficients, so outside and inside reverse */
|
|
398
417
|
negateInPlace() {
|
|
399
418
|
this._inwardNormal = this._inwardNormal.negate();
|
|
400
419
|
this._distanceFromOrigin = -this._distanceFromOrigin;
|
|
@@ -422,11 +441,12 @@ class ClipPlane extends Plane3d_1.Plane3d {
|
|
|
422
441
|
* @param matrix matrix to apply.
|
|
423
442
|
* @param invert if true, use in verse of the matrix.
|
|
424
443
|
* @param transpose if true, use the transpose of the matrix (or inverse, per invert parameter)
|
|
425
|
-
* * Note that if matrixA is applied to all of space, the matrix to send to this method to get a corresponding effect on the plane is the inverse transpose of matrixA
|
|
426
|
-
* * Callers that will apply the same matrix to many planes should pre-invert the matrix for efficiency.
|
|
427
|
-
* * Both params default to true to get the full effect of transforming space.
|
|
428
444
|
* @param matrix matrix to apply
|
|
429
445
|
* @return false if unable to invert
|
|
446
|
+
* * Note that if matrixA is applied to all of space, the matrix to send to this method to get a corresponding
|
|
447
|
+
* effect on the plane is the inverse transpose of matrixA
|
|
448
|
+
* * Callers that will apply the same matrix to many planes should pre-invert the matrix for efficiency.
|
|
449
|
+
* * Both params default to true to get the full effect of transforming space.
|
|
430
450
|
*/
|
|
431
451
|
multiplyPlaneByMatrix4d(matrix, invert = true, transpose = true) {
|
|
432
452
|
const plane = this.getPlane4d();
|
|
@@ -443,7 +463,7 @@ class ClipPlane extends Plane3d_1.Plane3d {
|
|
|
443
463
|
this.setPlane4d(plane);
|
|
444
464
|
return true;
|
|
445
465
|
}
|
|
446
|
-
/**
|
|
466
|
+
/** Announce the interval (if any) where a line is within the clip plane half space. */
|
|
447
467
|
announceClippedSegmentIntervals(f0, f1, pointA, pointB, announce) {
|
|
448
468
|
if (f1 < f0)
|
|
449
469
|
return false;
|
|
@@ -478,7 +498,7 @@ class ClipPlane extends Plane3d_1.Plane3d {
|
|
|
478
498
|
* Return a coordinate frame with
|
|
479
499
|
* * origin at closest point to global origin
|
|
480
500
|
* * z axis points in
|
|
481
|
-
* x and y are "in plane"
|
|
501
|
+
* * x and y are "in plane"
|
|
482
502
|
*/
|
|
483
503
|
getFrame() {
|
|
484
504
|
const d = this._distanceFromOrigin;
|
|
@@ -514,11 +534,12 @@ class ClipPlane extends Plane3d_1.Plane3d {
|
|
|
514
534
|
xyzOut.pushWrap(1);
|
|
515
535
|
return xyzOut;
|
|
516
536
|
}
|
|
517
|
-
/** Implement appendPolygonClip, as defined in interface PolygonClipper.
|
|
518
|
-
*
|
|
537
|
+
/** Implement appendPolygonClip, as defined in interface PolygonClipper.
|
|
519
538
|
* @param xyz input polygon. This is not changed.
|
|
520
|
-
* @param insideFragments Array to receive "inside" fragments.
|
|
521
|
-
*
|
|
539
|
+
* @param insideFragments Array to receive "inside" fragments. Each fragment is a GrowableXYZArray grabbed
|
|
540
|
+
* from the cache. This is NOT cleared.
|
|
541
|
+
* @param outsideFragments Array to receive "outside" fragments. Each fragment is a GrowableXYZArray grabbed
|
|
542
|
+
* from the cache. This is NOT cleared.
|
|
522
543
|
* @param arrayCache cache for reusable GrowableXYZArray.
|
|
523
544
|
*/
|
|
524
545
|
appendPolygonClip(xyz, insideFragments, outsideFragments, arrayCache) {
|
|
@@ -529,9 +550,7 @@ class ClipPlane extends Plane3d_1.Plane3d {
|
|
|
529
550
|
ClipUtils_1.ClipUtilities.captureOrDrop(newInside, 3, insideFragments, arrayCache);
|
|
530
551
|
ClipUtils_1.ClipUtilities.captureOrDrop(newOutside, 3, outsideFragments, arrayCache);
|
|
531
552
|
}
|
|
532
|
-
/**
|
|
533
|
-
* Project a point in space to the plane.
|
|
534
|
-
*/
|
|
553
|
+
/** Project a point in space to the plane. */
|
|
535
554
|
projectPointToPlane(spacePoint, result) {
|
|
536
555
|
const d = -this.altitude(spacePoint);
|
|
537
556
|
return spacePoint.plusXYZ(d * this._inwardNormal.x, d * this._inwardNormal.y, d * this._inwardNormal.z, result);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClipPlane.js","sourceRoot":"","sources":["../../../src/clipping/ClipPlane.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module CartesianGeometry\r\n */\r\n\r\nimport { Arc3d } from \"../curve/Arc3d\";\r\nimport { AnnounceNumberNumberCurvePrimitive } from \"../curve/CurvePrimitive\";\r\nimport { AxisOrder, Geometry } from \"../Geometry\";\r\nimport { Angle } from \"../geometry3d/Angle\";\r\nimport { XYZProps } from \"../geometry3d/XYZProps\";\r\nimport { GrowableFloat64Array } from \"../geometry3d/GrowableFloat64Array\";\r\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\r\nimport { Matrix3d } from \"../geometry3d/Matrix3d\";\r\nimport { Plane3dByOriginAndUnitNormal } from \"../geometry3d/Plane3dByOriginAndUnitNormal\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { IndexedXYZCollectionPolygonOps } from \"../geometry3d/PolygonOps\";\r\nimport { Range1d, Range3d } from \"../geometry3d/Range\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { Matrix4d } from \"../geometry4d/Matrix4d\";\r\nimport { Point4d } from \"../geometry4d/Point4d\";\r\nimport { AnalyticRoots } from \"../numerics/Polynomials\";\r\nimport { Clipper, ClipUtilities, PolygonClipper } from \"./ClipUtils\";\r\nimport { GrowableXYZArrayCache } from \"../geometry3d/ReusableObjectCache\";\r\nimport { Plane3d } from \"../geometry3d/Plane3d\";\r\n\r\n/** Wire format describing a [[ClipPlane]].\r\n * If either [[normal]] or [[dist]] are omitted, defaults to a normal of [[Vector3d.unitZ]] and a distance of zero.\r\n * @public\r\n */\r\nexport interface ClipPlaneProps {\r\n /** The plane's inward normal. */\r\n normal?: XYZProps;\r\n /** The plane's distance from the origin. */\r\n dist?: number;\r\n /** Defaults to `false`. */\r\n invisible?: boolean;\r\n /** Defaults to `false`. */\r\n interior?: boolean;\r\n}\r\n\r\n/** A ClipPlane is a single plane represented as\r\n * * An inward unit normal (u,v,w)\r\n * * A signedDistance\r\n *\r\n * Hence\r\n * * The halfspace function evaluation for \"point\" [x,y,z,] is: ([x,y,z] DOT (u,v,w)l - signedDistance)\r\n * * POSITIVE values of the halfspace function are \"inside\"\r\n * * ZERO value of the halfspace function is \"on\"\r\n * * NEGATIVE value of the halfspace function is \"outside\"\r\n * * A representative point on the plane is (signedDistance*u, signedDistance * v, signedDistance *w)\r\n * * Given a point and inward normal, the signedDistance is (point DOT normal)\r\n * @public\r\n */\r\nexport class ClipPlane extends Plane3d implements Clipper, PolygonClipper {\r\n private _inwardNormal: Vector3d;\r\n /** Construct a parallel plane through the origin.\r\n * * Move it to the actual position.\r\n * * _distanceFromOrigin is the distance it moved, with the (inward) normal direction as positive\r\n */\r\n private _distanceFromOrigin: number;\r\n private _invisible: boolean;\r\n private _interior: boolean;\r\n\r\n private constructor(normal: Vector3d, distance: number, invisible: boolean, interior: boolean) {\r\n super();\r\n this._invisible = invisible;\r\n this._interior = interior;\r\n this._inwardNormal = normal;\r\n this._distanceFromOrigin = distance;\r\n }\r\n /*\r\n private safeSetXYZDistance(nx: number, ny: number, nz: number, d: number) {\r\n this._inwardNormal.set(nx, ny, nz);\r\n this._distanceFromOrigin = d;\r\n }\r\n */\r\n /**\r\n * Return true if all members are almostEqual to corresponding members of other.\r\n * @param other clip plane to compare\r\n */\r\n public isAlmostEqual(other: ClipPlane): boolean {\r\n return Geometry.isSameCoordinate(this._distanceFromOrigin, other._distanceFromOrigin)\r\n && this._inwardNormal.isAlmostEqual(other._inwardNormal)\r\n && this._interior === other._interior\r\n && this._invisible === other._invisible;\r\n }\r\n /** return a cloned plane */\r\n public clone(): ClipPlane {\r\n const result = new ClipPlane(this._inwardNormal.clone(), this._distanceFromOrigin, this._invisible, this._interior);\r\n return result;\r\n }\r\n /** return Return a cloned plane with coordinate data negated. */\r\n public cloneNegated(): ClipPlane {\r\n const plane = new ClipPlane(this._inwardNormal.clone(), this._distanceFromOrigin, this._invisible, this._interior);\r\n plane.negateInPlace();\r\n return plane;\r\n }\r\n /** Create a ClipPlane from Plane3dByOriginAndUnitNormal. */\r\n public static createPlane(plane: Plane3dByOriginAndUnitNormal, invisible: boolean = false, interior: boolean = false, result?: ClipPlane): ClipPlane {\r\n const distance = plane.getNormalRef().dotProduct(plane.getOriginRef());\r\n if (result) {\r\n result._invisible = invisible;\r\n result._interior = interior;\r\n result._inwardNormal = plane.getNormalRef().clone();\r\n result._distanceFromOrigin = distance;\r\n return result;\r\n }\r\n return new ClipPlane(plane.getNormalRef().clone(), distance, invisible, interior);\r\n }\r\n /**\r\n * * Create a ClipPlane with direct normal and signedDistance.\r\n * * The vector is normalized for storage.\r\n */\r\n public static createNormalAndDistance(normal: Vector3d, distance: number, invisible: boolean = false, interior: boolean = false, result?: ClipPlane): ClipPlane | undefined {\r\n const normalized = normal.normalize();\r\n if (normalized) {\r\n if (result) {\r\n result._invisible = invisible;\r\n result._interior = interior;\r\n result._inwardNormal = normalized;\r\n result._distanceFromOrigin = distance;\r\n }\r\n return new ClipPlane(normalized, distance, invisible, interior);\r\n }\r\n return undefined;\r\n }\r\n /** Create a ClipPlane\r\n * * \"normal\" is the inward normal of the plane. (It is internally normalized)\r\n * * \"point\" is any point of the plane.\r\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 a vector from the origin.)\r\n */\r\n public static createNormalAndPoint(normal: Vector3d, point: Point3d, invisible: boolean = false, interior: boolean = false, result?: ClipPlane): ClipPlane | undefined {\r\n const normalized = normal.normalize();\r\n if (normalized) {\r\n const distance = normalized.dotProduct(point);\r\n if (result) {\r\n result._invisible = invisible;\r\n result._interior = interior;\r\n result._inwardNormal = normalized;\r\n result._distanceFromOrigin = distance;\r\n }\r\n return new ClipPlane(normalized, distance, invisible, interior);\r\n }\r\n return undefined;\r\n }\r\n /** Create a clip plane\r\n * @param origin any point on the plane.\r\n * @param vectorA any vector in the plane\r\n * @param vectorB any vector in the plane\r\n * * returns undefined if the vectors are not independent.\r\n * * The stored inward normal is vectorB.crossProduct(vectorA).\r\n * * That is, the vectors are considered as a right-handed pair when viewed from the outside.\r\n */\r\n public static createOriginAndVectors(origin: Point3d,\r\n vectorA: Vector3d, vectorB: Vector3d,\r\n invisible: boolean = false, interior: boolean = false, result?: ClipPlane): ClipPlane | undefined {\r\n const normalized = vectorB.crossProduct(vectorA);\r\n return this.createNormalAndPoint(normalized, origin, invisible, interior, result);\r\n }\r\n\r\n /** Create a ClipPlane\r\n * * \"normal\" (normalX, normalY, nz) is the inward normal of the plane.\r\n * * The given (normalX,normalY,normalZ)\r\n * * \"point\" is any point of the plane.\r\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 a vector from the origin.)\r\n */\r\n public static createNormalAndPointXYZXYZ(normalX: number, normalY: number, normalZ: number,\r\n originX: number, originY: number, originZ: number,\r\n invisible: boolean = false, interior: boolean = false, result?: ClipPlane): ClipPlane | undefined {\r\n const q = Geometry.hypotenuseXYZ(normalX, normalY, normalZ);\r\n const r = Geometry.conditionalDivideFraction(1, q);\r\n if (r !== undefined) {\r\n if (result) {\r\n result._inwardNormal.set(normalX * r, normalY * r, normalZ * r);\r\n result._distanceFromOrigin = result._inwardNormal.dotProductXYZ(originX, originY, originZ);\r\n result._invisible = invisible;\r\n result._interior = interior;\r\n return result;\r\n }\r\n const normal = Vector3d.create(normalX * r, normalY * r, normalZ * r);\r\n return new ClipPlane(normal, normal.dotProductXYZ(originX, originY, originZ), invisible, interior);\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * return a json object of the form\r\n * `{\"normal\":[u,v,w],\"dist\":signedDistanceValue,\"interior\":true,\"invisible\":true}`\r\n */\r\n public toJSON(): ClipPlaneProps {\r\n const props: ClipPlaneProps = {\r\n normal: this.inwardNormalRef.toJSON(),\r\n dist: this.distance,\r\n };\r\n\r\n if (this.interior)\r\n props.interior = true;\r\n\r\n if (this.invisible)\r\n props.invisible = true;\r\n\r\n return props;\r\n }\r\n\r\n /** parse json object to ClipPlane instance */\r\n public static fromJSON(json: ClipPlaneProps, result?: ClipPlane): ClipPlane | undefined {\r\n if (json && json.normal && undefined !== json.dist && Number.isFinite(json.dist))\r\n return ClipPlane.createNormalAndDistance(Vector3d.fromJSON(json.normal), json.dist, !!json.invisible, !!json.interior);\r\n\r\n return ClipPlane.createNormalAndDistance(Vector3d.unitZ(), 0, false, false, result);\r\n }\r\n\r\n /** Set both the invisible and interior flags. */\r\n public setFlags(invisible: boolean, interior: boolean) {\r\n this._invisible = invisible;\r\n this._interior = interior;\r\n }\r\n\r\n /**\r\n * Return the stored distanceFromOrigin property.\r\n */\r\n public get distance() { return this._distanceFromOrigin; }\r\n /**\r\n * Return the stored inward normal property.\r\n */\r\n public get inwardNormalRef(): Vector3d { return this._inwardNormal; }\r\n /**\r\n * Return the \"interior\" property bit\r\n */\r\n public get interior() { return this._interior; }\r\n /**\r\n * Return the \"invisible\" property bit.\r\n */\r\n public get invisible() { return this._invisible; }\r\n\r\n /**\r\n * Create a plane defined by two points, an up vector, and a tilt angle relative to the up vector.\r\n * @param point0 start point of the edge\r\n * @param point1 end point of the edge\r\n * @param upVector vector perpendicular to the plane\r\n * @param tiltAngle angle to tilt the plane around the edge in the direction of the up vector.\r\n * @param result optional preallocated plane\r\n */\r\n public static createEdgeAndUpVector(point0: Point3d, point1: Point3d, upVector: Vector3d, tiltAngle?: Angle, result?: ClipPlane): ClipPlane | undefined {\r\n const edgeVector = Vector3d.createFrom(point1.minus(point0));\r\n let normal = (upVector.crossProduct(edgeVector)).normalize();\r\n\r\n if (normal) {\r\n if (tiltAngle !== undefined && !tiltAngle.isAlmostZero) {\r\n const tiltNormal = Vector3d.createRotateVectorAroundVector(normal, edgeVector, tiltAngle);\r\n if (tiltNormal) {\r\n normal = tiltNormal.clone();\r\n }\r\n }\r\n normal.negate(normal);\r\n return ClipPlane.createNormalAndPoint(normal, point0, false, false, result);\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Create a plane perpendicular to the edge between the xy parts of point0 and point1\r\n */\r\n public static createEdgeXY(point0: Point3d, point1: Point3d, result?: ClipPlane): ClipPlane | undefined {\r\n const normal = Vector3d.create(point0.y - point1.y, point1.x - point0.x);\r\n if (normal.normalizeInPlace())\r\n return ClipPlane.createNormalAndPoint(normal, point0, false, false, result);\r\n return undefined;\r\n }\r\n /**\r\n * Return the Plane3d form of the plane.\r\n * * The plane origin is the point `distance * inwardNormal`\r\n * * The plane normal is the inward normal of the ClipPlane.\r\n */\r\n public getPlane3d(): Plane3dByOriginAndUnitNormal {\r\n const d = this._distanceFromOrigin;\r\n // Normal should be normalized, will not return undefined\r\n return Plane3dByOriginAndUnitNormal.create(Point3d.create(this._inwardNormal.x * d, this._inwardNormal.y * d, this._inwardNormal.z * d), this._inwardNormal)!;\r\n }\r\n\r\n /**\r\n * Return the Point4d d form of the plane.\r\n * * The homogeneous xyz are the inward normal xyz.\r\n * * The homogeneous weight is the negated ClipPlane distance.\r\n */\r\n public getPlane4d(): Point4d {\r\n return Point4d.create(this._inwardNormal.x, this._inwardNormal.y, this._inwardNormal.z, - this._distanceFromOrigin);\r\n }\r\n /**\r\n * Set the plane from DPoint4d style plane.\r\n * * The saved plane has its direction normalized.\r\n * * This preserves the plane itself as a zero set but make plane evaluations act as true distances (even if the plane coefficients are scaled otherwise)\r\n * @param plane\r\n */\r\n public setPlane4d(plane: Point4d) {\r\n const a = Math.sqrt(plane.x * plane.x + plane.y * plane.y + plane.z * plane.z);\r\n const r = a === 0.0 ? 1.0 : 1.0 / a;\r\n this._inwardNormal.x = r * plane.x;\r\n this._inwardNormal.y = r * plane.y;\r\n this._inwardNormal.z = r * plane.z;\r\n this._distanceFromOrigin = -r * plane.w;\r\n }\r\n\r\n /**\r\n * Evaluate the altitude in weighted space, i.e. (dot product with inward normal) minus distance, with point.w scale applied to distance)\r\n * @param point space point to test\r\n */\r\n public weightedAltitude(point: Point4d): number {\r\n return point.x * this._inwardNormal.x + point.y * this._inwardNormal.y + point.z * this._inwardNormal.z - point.w * this._distanceFromOrigin;\r\n }\r\n\r\n /**\r\n * Evaluate the distance from the plane to a point in space, i.e. (dot product with inward normal) minus distance\r\n * @param point space point to test\r\n */\r\n public altitude(point: Point3d): number {\r\n return point.x * this._inwardNormal.x + point.y * this._inwardNormal.y + point.z * this._inwardNormal.z - this._distanceFromOrigin;\r\n }\r\n\r\n /**\r\n * Evaluate the distance from the plane to a point in space with point given as x,y,z, i.e. (dot product with inward normal) minus distance\r\n * @param point space point to test\r\n */\r\n public altitudeXYZ(x: number, y: number, z: number): number {\r\n return x * this._inwardNormal.x + y * this._inwardNormal.y + z * this._inwardNormal.z - this._distanceFromOrigin;\r\n }\r\n\r\n /**\r\n * Return the x component of the normal used to evaluate altitude.\r\n */\r\n public normalX(): number { return this._inwardNormal.x; }\r\n /**\r\n * Return the x component of the normal used to evaluate altitude.\r\n */\r\n public normalY(): number { return this._inwardNormal.y; }\r\n /**\r\n * Return the z component of the normal used to evaluate altitude.\r\n */\r\n public normalZ(): number { return this._inwardNormal.z; }\r\n\r\n /** Return the dot product of the plane normal with the vector (NOT using the plane's distanceFromOrigin).\r\n */\r\n public velocity(vector: Vector3d): number {\r\n return vector.x * this._inwardNormal.x + vector.y * this._inwardNormal.y + vector.z * this._inwardNormal.z;\r\n }\r\n\r\n /** Return the dot product of the plane normal with the x,yz, vector components (NOT using the plane's distanceFromOrigin).\r\n */\r\n public velocityXYZ(x: number, y: number, z: number): number {\r\n return x * this._inwardNormal.x + y * this._inwardNormal.y + z * this._inwardNormal.z;\r\n }\r\n\r\n /** Return the dot product of the plane normal with the point (treating the point xyz as a vector, and NOT using the plane's distanceFromOrigin).\r\n */\r\n public dotProductPlaneNormalPoint(point: Point3d): number {\r\n return point.x * this._inwardNormal.x + point.y * this._inwardNormal.y + point.z * this._inwardNormal.z;\r\n }\r\n /**\r\n * Return true if spacePoint is inside or on the plane, with tolerance applied to \"on\".\r\n * @param spacePoint point to test.\r\n * @param tolerance tolerance for considering \"near plane\" to be \"on plane\"\r\n */\r\n public isPointOnOrInside(spacePoint: Point3d, tolerance: number = Geometry.smallMetricDistance): boolean {\r\n let value = this.altitude(spacePoint);\r\n if (tolerance) { value += tolerance; }\r\n return value >= 0.0;\r\n }\r\n\r\n /**\r\n * Return true if spacePoint is strictly inside the halfspace, with tolerance applied to \"on\".\r\n * @param spacePoint point to test.\r\n * @param tolerance tolerance for considering \"near plane\" to be \"on plane\"\r\n */\r\n public isPointInside(point: Point3d, tolerance: number = Geometry.smallMetricDistance): boolean {\r\n let value = this.altitude(point);\r\n if (tolerance) { value -= tolerance; }\r\n return value > 0.0;\r\n }\r\n\r\n /**\r\n * Return true if spacePoint is strictly on the plane, within tolerance\r\n * @param spacePoint point to test.\r\n * @param tolerance tolerance for considering \"near plane\" to be \"on plane\"\r\n */\r\n public isPointOn(point: Point3d, tolerance: number = Geometry.smallMetricDistance): boolean {\r\n return Math.abs(this.altitude(point)) <= tolerance;\r\n }\r\n /**\r\n * Compute intersections of an (UNBOUNDED) arc with the plane. Append them (as radians) to a growing array.\r\n * @param arc arc to test. The angle limits of the arc are NOT considered.\r\n * @param intersectionRadians array to receive results\r\n */\r\n public appendIntersectionRadians(arc: Arc3d, intersectionRadians: GrowableFloat64Array) {\r\n const arcVectors = arc.toVectors();\r\n const alpha = this.altitude(arc.center);\r\n const beta = this.velocity(arcVectors.vector0);\r\n const gamma = this.velocity(arcVectors.vector90);\r\n AnalyticRoots.appendImplicitLineUnitCircleIntersections(alpha, beta, gamma, undefined, undefined, intersectionRadians);\r\n }\r\n\r\n private static _clipArcFractionArray = new GrowableFloat64Array();\r\n /** Announce fractional intervals of arc clip.\r\n * * Each call to `announce(fraction0, fraction1, arc)` announces one interval that is inside the clip plane.\r\n */\r\n public announceClippedArcIntervals(arc: Arc3d, announce?: AnnounceNumberNumberCurvePrimitive): boolean {\r\n const breaks = ClipPlane._clipArcFractionArray;\r\n breaks.clear();\r\n this.appendIntersectionRadians(arc, breaks);\r\n arc.sweep.radiansArrayToPositivePeriodicFractions(breaks);\r\n return ClipUtilities.selectIntervals01(arc, breaks, this, announce);\r\n }\r\n /**\r\n * * Compute intersection of (unbounded) segment with the plane.\r\n * * If the ends are on the same side of the plane, return undefined.\r\n * * If the intersection is an endpoint or interior to the segment return the fraction.\r\n * * If both ends are on, return undefined.\r\n */\r\n public getBoundedSegmentSimpleIntersection(pointA: Point3d, pointB: Point3d): number | undefined {\r\n const h0 = this.altitude(pointA);\r\n const h1 = this.altitude(pointB);\r\n if (h0 * h1 > 0.0)\r\n return undefined;\r\n if (h0 === 0.0 && h1 === 0.0) {\r\n return undefined;\r\n }\r\n return - h0 / (h1 - h0);\r\n }\r\n\r\n /** Apply transform to the origin. Apply inverse transpose of the matrix part to th normal vector. */\r\n public transformInPlace(transform: Transform): boolean {\r\n const plane: Plane3dByOriginAndUnitNormal = this.getPlane3d();\r\n const matrix: Matrix3d = transform.matrix;\r\n const newPoint = transform.multiplyPoint3d(plane.getOriginRef());\r\n // Normal transforms as the inverse transpose of the matrix part\r\n // BTW: If the matrix is orthogonal, this is a long way to multiply by the matrix part (mumble grumble)\r\n const newNormal = matrix.multiplyInverseTranspose(plane.getNormalRef());\r\n if (!newNormal)\r\n return false;\r\n\r\n plane.set(newPoint, newNormal);\r\n const normalized = (plane.getNormalRef()).normalize();\r\n if (!normalized)\r\n return false;\r\n this._inwardNormal = normalized;\r\n this._distanceFromOrigin = this._inwardNormal.dotProduct(plane.getOriginRef());\r\n return true;\r\n }\r\n /** Set the invisible flag. Interpretation of this is up to the use code algorithms. */\r\n public setInvisible(invisible: boolean) {\r\n this._invisible = invisible;\r\n }\r\n\r\n /** reverse the sign of all coefficients, so outside and inside reverse */\r\n public negateInPlace() {\r\n this._inwardNormal = this._inwardNormal.negate();\r\n this._distanceFromOrigin = - this._distanceFromOrigin;\r\n }\r\n /**\r\n * Move the plane INWARD by given distance\r\n * @param offset distance of shift inwards\r\n */\r\n public offsetDistance(offset: number) {\r\n this._distanceFromOrigin += offset;\r\n }\r\n\r\n /**\r\n * Clip a polygon to the inside or outside of the plane.\r\n * * Results with 2 or fewer points are ignored.\r\n * * Other than ensuring capacity in the arrays, there are no object allocations during execution of this function.\r\n * @param xyz input points.\r\n * @param work work buffer\r\n * @param tolerance tolerance for \"on plane\" decision.\r\n */\r\n public clipConvexPolygonInPlace(xyz: GrowableXYZArray, work: GrowableXYZArray, inside: boolean = true, tolerance: number = Geometry.smallMetricDistance) {\r\n return IndexedXYZCollectionPolygonOps.clipConvexPolygonInPlace(this, xyz, work, inside, tolerance);\r\n }\r\n\r\n /**\r\n * Multiply the ClipPlane's DPoint4d by matrix.\r\n * @param matrix matrix to apply.\r\n * @param invert if true, use in verse of the matrix.\r\n * @param transpose if true, use the transpose of the matrix (or inverse, per invert parameter)\r\n * * Note that if matrixA is applied to all of space, the matrix to send to this method to get a corresponding effect on the plane is the inverse transpose of matrixA\r\n * * Callers that will apply the same matrix to many planes should pre-invert the matrix for efficiency.\r\n * * Both params default to true to get the full effect of transforming space.\r\n * @param matrix matrix to apply\r\n * @return false if unable to invert\r\n */\r\n public multiplyPlaneByMatrix4d(matrix: Matrix4d, invert: boolean = true, transpose: boolean = true): boolean {\r\n const plane: Point4d = this.getPlane4d();\r\n if (invert) {\r\n const inverse = matrix.createInverse();\r\n if (inverse)\r\n return this.multiplyPlaneByMatrix4d(inverse, false, transpose);\r\n return false;\r\n }\r\n if (transpose)\r\n matrix.multiplyTransposePoint4d(plane, plane);\r\n else\r\n matrix.multiplyPoint4d(plane, plane);\r\n this.setPlane4d(plane);\r\n return true;\r\n }\r\n\r\n /** announce the interval (if any) where a line is within the clip plane half space. */\r\n public announceClippedSegmentIntervals(f0: number, f1: number, pointA: Point3d, pointB: Point3d, announce?: (fraction0: number, fraction1: number) => void): boolean {\r\n if (f1 < f0)\r\n return false;\r\n const h0 = - this.altitude(pointA);\r\n const h1 = - this.altitude(pointB);\r\n const delta = h1 - h0;\r\n const f = Geometry.conditionalDivideFraction(-h0, delta);\r\n if (f === undefined) { // The segment is parallel to the plane.\r\n if (h0 <= 0.0) { if (announce) announce(f0, f1); return true; }\r\n return false;\r\n }\r\n if (delta > 0) { // segment aims OUT\r\n if (f < f1) f1 = f;\r\n } else {\r\n // segment aims IN\r\n if (f > f0)\r\n f0 = f;\r\n }\r\n if (f1 < f0)\r\n return false;\r\n if (announce) announce(f0, f1);\r\n return true;\r\n }\r\n /**\r\n * Return a coordinate frame with\r\n * * origin at closest point to global origin\r\n * * z axis points in\r\n * x and y are \"in plane\"\r\n */\r\n public getFrame(): Transform {\r\n const d = this._distanceFromOrigin;\r\n const origin = Point3d.create(this._inwardNormal.x * d, this._inwardNormal.y * d, this._inwardNormal.z * d);\r\n const matrix = Matrix3d.createRigidHeadsUp(this._inwardNormal, AxisOrder.ZXY);\r\n return Transform.createOriginAndMatrix(origin, matrix);\r\n }\r\n /**\r\n * Return the intersection of the plane with a range cube.\r\n * @param range\r\n * @param xyzOut intersection polygon. This is convex.\r\n */\r\n public intersectRange(range: Range3d, addClosurePoint: boolean = false): GrowableXYZArray | undefined {\r\n if (range.isNull)\r\n return undefined;\r\n const corners = range.corners();\r\n const frameOnPlane = this.getFrame();\r\n frameOnPlane.multiplyInversePoint3dArrayInPlace(corners);\r\n const localRange = Range3d.createArray(corners);\r\n if (localRange.low.z * localRange.high.z > 0.0)\r\n return undefined;\r\n // oversized polygon on local z= 0\r\n const xyzOut = new GrowableXYZArray();\r\n xyzOut.pushXYZ(localRange.low.x, localRange.low.y, 0);\r\n xyzOut.pushXYZ(localRange.high.x, localRange.low.y, 0);\r\n xyzOut.pushXYZ(localRange.high.x, localRange.high.y, 0);\r\n xyzOut.pushXYZ(localRange.low.x, localRange.high.y, 0);\r\n xyzOut.multiplyTransformInPlace(frameOnPlane);\r\n IndexedXYZCollectionPolygonOps.intersectRangeConvexPolygonInPlace(range, xyzOut);\r\n if (xyzOut.length === 0)\r\n return undefined;\r\n if (addClosurePoint)\r\n xyzOut.pushWrap(1);\r\n return xyzOut;\r\n }\r\n /** Implement appendPolygonClip, as defined in interface PolygonClipper. /**\r\n *\r\n * @param xyz input polygon. This is not changed.\r\n * @param insideFragments Array to receive \"inside\" fragments. Each fragment is a GrowableXYZArray grabbed from the cache. This is NOT cleared.\r\n * @param outsideFragments Array to receive \"outside\" fragments. Each fragment is a GrowableXYZArray grabbed from the cache. This is NOT cleared.\r\n * @param arrayCache cache for reusable GrowableXYZArray.\r\n */\r\n public appendPolygonClip(\r\n xyz: GrowableXYZArray,\r\n insideFragments: GrowableXYZArray[],\r\n outsideFragments: GrowableXYZArray[],\r\n arrayCache: GrowableXYZArrayCache): void {\r\n const perpendicularRange = Range1d.createNull();\r\n const newInside = arrayCache.grabFromCache();\r\n const newOutside = arrayCache.grabFromCache();\r\n IndexedXYZCollectionPolygonOps.splitConvexPolygonInsideOutsidePlane(this, xyz, newInside, newOutside, perpendicularRange);\r\n ClipUtilities.captureOrDrop(newInside, 3, insideFragments, arrayCache);\r\n ClipUtilities.captureOrDrop(newOutside, 3, outsideFragments, arrayCache);\r\n }\r\n /**\r\n * Project a point in space to the plane.\r\n */\r\n public projectPointToPlane(spacePoint: Point3d, result?: Point3d): Point3d {\r\n const d = -this.altitude(spacePoint);\r\n return spacePoint.plusXYZ(d * this._inwardNormal.x, d * this._inwardNormal.y, d * this._inwardNormal.z, result);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"ClipPlane.js","sourceRoot":"","sources":["../../../src/clipping/ClipPlane.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module CartesianGeometry\r\n */\r\n\r\nimport { Arc3d } from \"../curve/Arc3d\";\r\nimport { AnnounceNumberNumberCurvePrimitive } from \"../curve/CurvePrimitive\";\r\nimport { AxisOrder, Geometry } from \"../Geometry\";\r\nimport { Angle } from \"../geometry3d/Angle\";\r\nimport { XYZProps } from \"../geometry3d/XYZProps\";\r\nimport { GrowableFloat64Array } from \"../geometry3d/GrowableFloat64Array\";\r\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\r\nimport { Matrix3d } from \"../geometry3d/Matrix3d\";\r\nimport { Plane3dByOriginAndUnitNormal } from \"../geometry3d/Plane3dByOriginAndUnitNormal\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { IndexedXYZCollectionPolygonOps } from \"../geometry3d/PolygonOps\";\r\nimport { Range1d, Range3d } from \"../geometry3d/Range\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { Matrix4d } from \"../geometry4d/Matrix4d\";\r\nimport { Point4d } from \"../geometry4d/Point4d\";\r\nimport { AnalyticRoots } from \"../numerics/Polynomials\";\r\nimport { Clipper, ClipUtilities, PolygonClipper } from \"./ClipUtils\";\r\nimport { GrowableXYZArrayCache } from \"../geometry3d/ReusableObjectCache\";\r\nimport { Plane3d } from \"../geometry3d/Plane3d\";\r\n\r\n/** Wire format describing a [[ClipPlane]].\r\n * If either [[normal]] or [[dist]] are omitted, defaults to a normal of [[Vector3d.unitZ]] and a distance of zero.\r\n * @public\r\n */\r\nexport interface ClipPlaneProps {\r\n /** The plane's inward normal. */\r\n normal?: XYZProps;\r\n /** The plane's distance from the origin. */\r\n dist?: number;\r\n /** Defaults to `false`. */\r\n invisible?: boolean;\r\n /** Defaults to `false`. */\r\n interior?: boolean;\r\n}\r\n\r\n/**\r\n * A ClipPlane is a single plane represented as\r\n * * An inward unit normal (u,v,w)\r\n * * A signedDistance\r\n *\r\n * Hence\r\n * * The halfspace function evaluation for \"point\" (x,y,z) is `(x,y,z) DOT (u,v,w) - signedDistance`.\r\n * * POSITIVE values of the halfspace function are \"inside\".\r\n * * ZERO value of the halfspace function is \"on\".\r\n * * NEGATIVE value of the halfspace function is \"outside\".\r\n * * A representative point on the plane is (signedDistance * u, signedDistance * v, signedDistance * w).\r\n * * Given a point on the plane and the inward normal of the plane, `signedDistance = point DOT normal`.\r\n * @public\r\n */\r\nexport class ClipPlane extends Plane3d implements Clipper, PolygonClipper {\r\n private _inwardNormal: Vector3d;\r\n /**\r\n * Construct a parallel plane through the origin.\r\n * * Move it to the actual position.\r\n * * _distanceFromOrigin is the distance it moved, with the (inward) normal direction as positive\r\n */\r\n private _distanceFromOrigin: number;\r\n private _invisible: boolean;\r\n private _interior: boolean;\r\n\r\n private constructor(normal: Vector3d, distance: number, invisible: boolean, interior: boolean) {\r\n super();\r\n this._invisible = invisible;\r\n this._interior = interior;\r\n this._inwardNormal = normal;\r\n this._distanceFromOrigin = distance;\r\n }\r\n /*\r\n private safeSetXYZDistance(nx: number, ny: number, nz: number, d: number) {\r\n this._inwardNormal.set(nx, ny, nz);\r\n this._distanceFromOrigin = d;\r\n }\r\n */\r\n /**\r\n * Return true if all members are almostEqual to corresponding members of other.\r\n * @param other clip plane to compare\r\n */\r\n public isAlmostEqual(other: ClipPlane): boolean {\r\n return Geometry.isSameCoordinate(this._distanceFromOrigin, other._distanceFromOrigin)\r\n && this._inwardNormal.isAlmostEqual(other._inwardNormal)\r\n && this._interior === other._interior\r\n && this._invisible === other._invisible;\r\n }\r\n /** Return a cloned plane */\r\n public clone(): ClipPlane {\r\n const result = new ClipPlane(this._inwardNormal.clone(), this._distanceFromOrigin, this._invisible, this._interior);\r\n return result;\r\n }\r\n /** Return a cloned plane with coordinate data negated. */\r\n public cloneNegated(): ClipPlane {\r\n const plane = new ClipPlane(this._inwardNormal.clone(), this._distanceFromOrigin, this._invisible, this._interior);\r\n plane.negateInPlace();\r\n return plane;\r\n }\r\n /** Create a ClipPlane from Plane3dByOriginAndUnitNormal. */\r\n public static createPlane(\r\n plane: Plane3dByOriginAndUnitNormal, invisible: boolean = false, interior: boolean = false, result?: ClipPlane,\r\n ): ClipPlane {\r\n const distance = plane.getNormalRef().dotProduct(plane.getOriginRef());\r\n if (result) {\r\n result._invisible = invisible;\r\n result._interior = interior;\r\n result._inwardNormal = plane.getNormalRef().clone();\r\n result._distanceFromOrigin = distance;\r\n return result;\r\n }\r\n return new ClipPlane(plane.getNormalRef().clone(), distance, invisible, interior);\r\n }\r\n /**\r\n * Create a ClipPlane with direct normal and signedDistance.\r\n * * The vector is normalized for storage.\r\n */\r\n public static createNormalAndDistance(\r\n normal: Vector3d, distance: number, invisible: boolean = false, interior: boolean = false, result?: ClipPlane,\r\n ): ClipPlane | undefined {\r\n const normalized = normal.normalize();\r\n if (normalized) {\r\n if (result) {\r\n result._invisible = invisible;\r\n result._interior = interior;\r\n result._inwardNormal = normalized;\r\n result._distanceFromOrigin = distance;\r\n }\r\n return new ClipPlane(normalized, distance, invisible, interior);\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Create a ClipPlane\r\n * * \"normal\" is the inward normal of the plane (it is internally normalized).\r\n * * \"point\" is any point of the plane.\r\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\r\n * a vector from the origin.)\r\n */\r\n public static createNormalAndPoint(\r\n normal: Vector3d, point: Point3d, invisible: boolean = false, interior: boolean = false, result?: ClipPlane,\r\n ): ClipPlane | undefined {\r\n const normalized = normal.normalize();\r\n if (normalized) {\r\n const distance = normalized.dotProduct(point);\r\n if (result) {\r\n result._invisible = invisible;\r\n result._interior = interior;\r\n result._inwardNormal = normalized;\r\n result._distanceFromOrigin = distance;\r\n }\r\n return new ClipPlane(normalized, distance, invisible, interior);\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Create a clip plane\r\n * @param origin any point on the plane.\r\n * @param vectorA any vector in the plane\r\n * @param vectorB any vector in the plane\r\n * Returns undefined if the vectors are not independent.\r\n * * The stored inward normal is vectorB.crossProduct(vectorA).\r\n * * That is, the vectors are considered as a right-handed pair when viewed from the outside.\r\n */\r\n public static createOriginAndVectors(\r\n origin: Point3d,\r\n vectorA: Vector3d,\r\n vectorB: Vector3d,\r\n invisible: boolean = false,\r\n interior: boolean = false,\r\n result?: ClipPlane,\r\n ): ClipPlane | undefined {\r\n const normalized = vectorB.crossProduct(vectorA);\r\n return this.createNormalAndPoint(normalized, origin, invisible, interior, result);\r\n }\r\n /**\r\n * Create a ClipPlane\r\n * * \"normal\" (normalX, normalY, normalZ) is the inward normal of the plane.\r\n * * \"point\" (originX,originY,originZ) is any point of the plane.\r\n * * The stored distance for the plane is the dot product of the point with the normal (i.e. treat the point's xyz\r\n * as a vector from the origin.)\r\n */\r\n public static createNormalAndPointXYZXYZ(\r\n normalX: number, normalY: number, normalZ: number,\r\n originX: number, originY: number, originZ: number,\r\n invisible: boolean = false, interior: boolean = false,\r\n result?: ClipPlane,\r\n ): ClipPlane | undefined {\r\n const q = Geometry.hypotenuseXYZ(normalX, normalY, normalZ);\r\n const r = Geometry.conditionalDivideFraction(1, q);\r\n if (r !== undefined) {\r\n if (result) {\r\n result._inwardNormal.set(normalX * r, normalY * r, normalZ * r);\r\n result._distanceFromOrigin = result._inwardNormal.dotProductXYZ(originX, originY, originZ);\r\n result._invisible = invisible;\r\n result._interior = interior;\r\n return result;\r\n }\r\n const normal = Vector3d.create(normalX * r, normalY * r, normalZ * r);\r\n return new ClipPlane(normal, normal.dotProductXYZ(originX, originY, originZ), invisible, interior);\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Return a json object of the form\r\n * `{\"normal\":[u,v,w],\"dist\":signedDistanceValue,\"interior\":true,\"invisible\":true}`\r\n */\r\n public toJSON(): ClipPlaneProps {\r\n const props: ClipPlaneProps = {\r\n normal: this.inwardNormalRef.toJSON(),\r\n dist: this.distance,\r\n };\r\n if (this.interior)\r\n props.interior = true;\r\n if (this.invisible)\r\n props.invisible = true;\r\n return props;\r\n }\r\n /** Parse json object to ClipPlane instance */\r\n public static fromJSON(json: ClipPlaneProps, result?: ClipPlane): ClipPlane | undefined {\r\n if (json && json.normal && undefined !== json.dist && Number.isFinite(json.dist))\r\n return ClipPlane.createNormalAndDistance(\r\n Vector3d.fromJSON(json.normal), json.dist, !!json.invisible, !!json.interior,\r\n );\r\n return ClipPlane.createNormalAndDistance(Vector3d.unitZ(), 0, false, false, result);\r\n }\r\n /** Set both the invisible and interior flags. */\r\n public setFlags(invisible: boolean, interior: boolean) {\r\n this._invisible = invisible;\r\n this._interior = interior;\r\n }\r\n /** Return the stored distanceFromOrigin property. */\r\n public get distance() {\r\n return this._distanceFromOrigin;\r\n }\r\n /** * Return the stored inward normal property. */\r\n public get inwardNormalRef(): Vector3d {\r\n return this._inwardNormal;\r\n }\r\n /** Return the \"interior\" property bit */\r\n public get interior() {\r\n return this._interior;\r\n }\r\n /** Return the \"invisible\" property bit. */\r\n public get invisible() {\r\n return this._invisible;\r\n }\r\n /**\r\n * Create a plane defined by two points, an up vector, and a tilt angle relative to the up vector.\r\n * @param point0 start point of the edge\r\n * @param point1 end point of the edge\r\n * @param upVector vector perpendicular to the plane\r\n * @param tiltAngle angle to tilt the plane around the edge in the direction of the up vector.\r\n * @param result optional preallocated plane\r\n */\r\n public static createEdgeAndUpVector(\r\n point0: Point3d, point1: Point3d, upVector: Vector3d, tiltAngle?: Angle, result?: ClipPlane,\r\n ): ClipPlane | undefined {\r\n const edgeVector = Vector3d.createFrom(point1.minus(point0));\r\n let normal = (upVector.crossProduct(edgeVector)).normalize();\r\n\r\n if (normal) {\r\n if (tiltAngle !== undefined && !tiltAngle.isAlmostZero) {\r\n const tiltNormal = Vector3d.createRotateVectorAroundVector(normal, edgeVector, tiltAngle);\r\n if (tiltNormal) {\r\n normal = tiltNormal.clone();\r\n }\r\n }\r\n normal.negate(normal);\r\n return ClipPlane.createNormalAndPoint(normal, point0, false, false, result);\r\n }\r\n return undefined;\r\n }\r\n /** Create a plane perpendicular to the edge between the xy parts of point0 and point1. */\r\n public static createEdgeXY(point0: Point3d, point1: Point3d, result?: ClipPlane): ClipPlane | undefined {\r\n const normal = Vector3d.create(point0.y - point1.y, point1.x - point0.x);\r\n if (normal.normalizeInPlace())\r\n return ClipPlane.createNormalAndPoint(normal, point0, false, false, result);\r\n return undefined;\r\n }\r\n /**\r\n * Return the Plane3d form of the plane.\r\n * * The plane origin is the point `distance * inwardNormal`\r\n * * The plane normal is the inward normal of the ClipPlane.\r\n */\r\n public getPlane3d(): Plane3dByOriginAndUnitNormal {\r\n const d = this._distanceFromOrigin;\r\n // normal should be normalized, will not return undefined\r\n return Plane3dByOriginAndUnitNormal.create(\r\n Point3d.create(this._inwardNormal.x * d, this._inwardNormal.y * d, this._inwardNormal.z * d),\r\n this._inwardNormal,\r\n )!;\r\n }\r\n /**\r\n * Return the Point4d d form of the plane.\r\n * * The homogeneous xyz are the inward normal xyz.\r\n * * The homogeneous weight is the negated ClipPlane distance.\r\n */\r\n public getPlane4d(): Point4d {\r\n return Point4d.create(\r\n this._inwardNormal.x, this._inwardNormal.y, this._inwardNormal.z, - this._distanceFromOrigin,\r\n );\r\n }\r\n /**\r\n * Set the plane from DPoint4d style plane.\r\n * * The saved plane has its direction normalized.\r\n * * This preserves the plane itself as a zero set but make plane evaluations act as true distances (even if the\r\n * plane coefficients are scaled otherwise).\r\n * @param plane the DPoint4d style plane.\r\n */\r\n public setPlane4d(plane: Point4d) {\r\n const a = Math.sqrt(plane.x * plane.x + plane.y * plane.y + plane.z * plane.z);\r\n const r = a === 0.0 ? 1.0 : 1.0 / a;\r\n this._inwardNormal.x = r * plane.x;\r\n this._inwardNormal.y = r * plane.y;\r\n this._inwardNormal.z = r * plane.z;\r\n this._distanceFromOrigin = -r * plane.w;\r\n }\r\n /**\r\n * Evaluate the altitude in weighted space, i.e. (dot product with inward normal) minus distance, with point.w\r\n * scale applied to distance.\r\n * @param point space point to test.\r\n */\r\n public weightedAltitude(point: Point4d): number {\r\n return point.x * this._inwardNormal.x\r\n + point.y * this._inwardNormal.y\r\n + point.z * this._inwardNormal.z\r\n - point.w * this._distanceFromOrigin;\r\n }\r\n /**\r\n * Evaluate the distance from the plane to a point in space, i.e. (dot product with inward normal) minus distance.\r\n * @param point space point to test.\r\n */\r\n public altitude(point: Point3d): number {\r\n return point.x * this._inwardNormal.x\r\n + point.y * this._inwardNormal.y\r\n + point.z * this._inwardNormal.z\r\n - this._distanceFromOrigin;\r\n }\r\n /**\r\n * Evaluate the distance from the plane to a point in space with point given as x,y,z, i.e. (dot product with\r\n * inward normal) minus distance.\r\n * @param point space point to test.\r\n */\r\n public altitudeXYZ(x: number, y: number, z: number): number {\r\n return x * this._inwardNormal.x\r\n + y * this._inwardNormal.y\r\n + z * this._inwardNormal.z\r\n - this._distanceFromOrigin;\r\n }\r\n /** Return the x component of the normal used to evaluate altitude. */\r\n public normalX(): number {\r\n return this._inwardNormal.x;\r\n }\r\n /** Return the x component of the normal used to evaluate altitude. */\r\n public normalY(): number {\r\n return this._inwardNormal.y;\r\n }\r\n /** Return the z component of the normal used to evaluate altitude. */\r\n public normalZ(): number {\r\n return this._inwardNormal.z;\r\n }\r\n /** Return the dot product of the plane normal with the vector (NOT using the plane's distanceFromOrigin). */\r\n public velocity(vector: Vector3d): number {\r\n return vector.x * this._inwardNormal.x + vector.y * this._inwardNormal.y + vector.z * this._inwardNormal.z;\r\n }\r\n /**\r\n * Return the dot product of the plane normal with the x,yz, vector components (NOT using the plane's\r\n * distanceFromOrigin).\r\n */\r\n public velocityXYZ(x: number, y: number, z: number): number {\r\n return x * this._inwardNormal.x + y * this._inwardNormal.y + z * this._inwardNormal.z;\r\n }\r\n /**\r\n * Return the dot product of the plane normal with the point (treating the point xyz as a vector, and NOT\r\n * using the plane's distanceFromOrigin).\r\n */\r\n public dotProductPlaneNormalPoint(point: Point3d): number {\r\n return point.x * this._inwardNormal.x + point.y * this._inwardNormal.y + point.z * this._inwardNormal.z;\r\n }\r\n /**\r\n * Return true if spacePoint is inside or on the plane, with tolerance applied to \"on\".\r\n * @param spacePoint point to test.\r\n * @param tolerance tolerance for considering \"near plane\" to be \"on plane\"\r\n */\r\n public isPointOnOrInside(spacePoint: Point3d, tolerance: number = Geometry.smallMetricDistance): boolean {\r\n let value = this.altitude(spacePoint);\r\n if (tolerance) { value += tolerance; }\r\n return value >= 0.0;\r\n }\r\n /**\r\n * Return true if spacePoint is strictly inside the halfspace, with tolerance applied to \"on\".\r\n * @param spacePoint point to test.\r\n * @param tolerance tolerance for considering \"near plane\" to be \"on plane\"\r\n */\r\n public isPointInside(point: Point3d, tolerance: number = Geometry.smallMetricDistance): boolean {\r\n let value = this.altitude(point);\r\n if (tolerance) { value -= tolerance; }\r\n return value > 0.0;\r\n }\r\n /**\r\n * Return true if spacePoint is strictly on the plane, within tolerance\r\n * @param spacePoint point to test.\r\n * @param tolerance tolerance for considering \"near plane\" to be \"on plane\"\r\n */\r\n public isPointOn(point: Point3d, tolerance: number = Geometry.smallMetricDistance): boolean {\r\n return Math.abs(this.altitude(point)) <= tolerance;\r\n }\r\n /**\r\n * Compute intersections of an (UNBOUNDED) arc with the plane. Append them (as radians) to a growing array.\r\n * @param arc arc to test. The angle limits of the arc are NOT considered.\r\n * @param intersectionRadians array to receive results\r\n */\r\n public appendIntersectionRadians(arc: Arc3d, intersectionRadians: GrowableFloat64Array) {\r\n const arcVectors = arc.toVectors();\r\n const alpha = this.altitude(arc.center);\r\n const beta = this.velocity(arcVectors.vector0);\r\n const gamma = this.velocity(arcVectors.vector90);\r\n AnalyticRoots.appendImplicitLineUnitCircleIntersections(\r\n alpha, beta, gamma, undefined, undefined, intersectionRadians,\r\n );\r\n }\r\n private static _clipArcFractionArray = new GrowableFloat64Array();\r\n /**\r\n * Announce fractional intervals of arc clip.\r\n * * Each call to `announce(fraction0, fraction1, arc)` announces one interval that is inside the clip plane.\r\n */\r\n public announceClippedArcIntervals(arc: Arc3d, announce?: AnnounceNumberNumberCurvePrimitive): boolean {\r\n const breaks = ClipPlane._clipArcFractionArray;\r\n breaks.clear();\r\n this.appendIntersectionRadians(arc, breaks);\r\n arc.sweep.radiansArrayToPositivePeriodicFractions(breaks);\r\n return ClipUtilities.selectIntervals01(arc, breaks, this, announce);\r\n }\r\n /**\r\n * Compute intersection of (unbounded) segment with the plane.\r\n * * If the ends are on the same side of the plane, return undefined.\r\n * * If the intersection is an endpoint or interior to the segment return the fraction.\r\n * * If both ends are on, return undefined.\r\n */\r\n public getBoundedSegmentSimpleIntersection(pointA: Point3d, pointB: Point3d): number | undefined {\r\n const h0 = this.altitude(pointA);\r\n const h1 = this.altitude(pointB);\r\n if (h0 * h1 > 0.0)\r\n return undefined;\r\n if (h0 === 0.0 && h1 === 0.0) {\r\n return undefined;\r\n }\r\n return - h0 / (h1 - h0);\r\n }\r\n /** Apply transform to the origin. Apply inverse transpose of the matrix part to th normal vector. */\r\n public transformInPlace(transform: Transform): boolean {\r\n const plane: Plane3dByOriginAndUnitNormal = this.getPlane3d();\r\n const matrix: Matrix3d = transform.matrix;\r\n const newPoint = transform.multiplyPoint3d(plane.getOriginRef());\r\n // Normal transforms as the inverse transpose of the matrix part\r\n // BTW: If the matrix is orthogonal, this is a long way to multiply by the matrix part (mumble grumble)\r\n const newNormal = matrix.multiplyInverseTranspose(plane.getNormalRef());\r\n if (!newNormal)\r\n return false;\r\n\r\n plane.set(newPoint, newNormal);\r\n const normalized = (plane.getNormalRef()).normalize();\r\n if (!normalized)\r\n return false;\r\n this._inwardNormal = normalized;\r\n this._distanceFromOrigin = this._inwardNormal.dotProduct(plane.getOriginRef());\r\n return true;\r\n }\r\n /** Set the invisible flag. Interpretation of this is up to the use code algorithms. */\r\n public setInvisible(invisible: boolean) {\r\n this._invisible = invisible;\r\n }\r\n /** Reverse the sign of all coefficients, so outside and inside reverse */\r\n public negateInPlace() {\r\n this._inwardNormal = this._inwardNormal.negate();\r\n this._distanceFromOrigin = - this._distanceFromOrigin;\r\n }\r\n /**\r\n * Move the plane INWARD by given distance\r\n * @param offset distance of shift inwards\r\n */\r\n public offsetDistance(offset: number) {\r\n this._distanceFromOrigin += offset;\r\n }\r\n /**\r\n * Clip a polygon to the inside or outside of the plane.\r\n * * Results with 2 or fewer points are ignored.\r\n * * Other than ensuring capacity in the arrays, there are no object allocations during execution of this function.\r\n * @param xyz input points.\r\n * @param work work buffer\r\n * @param tolerance tolerance for \"on plane\" decision.\r\n */\r\n public clipConvexPolygonInPlace(\r\n xyz: GrowableXYZArray,\r\n work: GrowableXYZArray,\r\n inside: boolean = true,\r\n tolerance: number = Geometry.smallMetricDistance,\r\n ) {\r\n return IndexedXYZCollectionPolygonOps.clipConvexPolygonInPlace(this, xyz, work, inside, tolerance);\r\n }\r\n /**\r\n * Multiply the ClipPlane's DPoint4d by matrix.\r\n * @param matrix matrix to apply.\r\n * @param invert if true, use in verse of the matrix.\r\n * @param transpose if true, use the transpose of the matrix (or inverse, per invert parameter)\r\n * @param matrix matrix to apply\r\n * @return false if unable to invert\r\n * * Note that if matrixA is applied to all of space, the matrix to send to this method to get a corresponding\r\n * effect on the plane is the inverse transpose of matrixA\r\n * * Callers that will apply the same matrix to many planes should pre-invert the matrix for efficiency.\r\n * * Both params default to true to get the full effect of transforming space.\r\n */\r\n public multiplyPlaneByMatrix4d(matrix: Matrix4d, invert: boolean = true, transpose: boolean = true): boolean {\r\n const plane: Point4d = this.getPlane4d();\r\n if (invert) {\r\n const inverse = matrix.createInverse();\r\n if (inverse)\r\n return this.multiplyPlaneByMatrix4d(inverse, false, transpose);\r\n return false;\r\n }\r\n if (transpose)\r\n matrix.multiplyTransposePoint4d(plane, plane);\r\n else\r\n matrix.multiplyPoint4d(plane, plane);\r\n this.setPlane4d(plane);\r\n return true;\r\n }\r\n /** Announce the interval (if any) where a line is within the clip plane half space. */\r\n public announceClippedSegmentIntervals(\r\n f0: number, f1: number, pointA: Point3d, pointB: Point3d, announce?: (fraction0: number, fraction1: number) => void,\r\n ): boolean {\r\n if (f1 < f0)\r\n return false;\r\n const h0 = - this.altitude(pointA);\r\n const h1 = - this.altitude(pointB);\r\n const delta = h1 - h0;\r\n const f = Geometry.conditionalDivideFraction(-h0, delta);\r\n if (f === undefined) { // The segment is parallel to the plane.\r\n if (h0 <= 0.0) { if (announce) announce(f0, f1); return true; }\r\n return false;\r\n }\r\n if (delta > 0) { // segment aims OUT\r\n if (f < f1) f1 = f;\r\n } else {\r\n // segment aims IN\r\n if (f > f0)\r\n f0 = f;\r\n }\r\n if (f1 < f0)\r\n return false;\r\n if (announce) announce(f0, f1);\r\n return true;\r\n }\r\n /**\r\n * Return a coordinate frame with\r\n * * origin at closest point to global origin\r\n * * z axis points in\r\n * * x and y are \"in plane\"\r\n */\r\n public getFrame(): Transform {\r\n const d = this._distanceFromOrigin;\r\n const origin = Point3d.create(this._inwardNormal.x * d, this._inwardNormal.y * d, this._inwardNormal.z * d);\r\n const matrix = Matrix3d.createRigidHeadsUp(this._inwardNormal, AxisOrder.ZXY);\r\n return Transform.createOriginAndMatrix(origin, matrix);\r\n }\r\n /**\r\n * Return the intersection of the plane with a range cube.\r\n * @param range\r\n * @param xyzOut intersection polygon. This is convex.\r\n */\r\n public intersectRange(range: Range3d, addClosurePoint: boolean = false): GrowableXYZArray | undefined {\r\n if (range.isNull)\r\n return undefined;\r\n const corners = range.corners();\r\n const frameOnPlane = this.getFrame();\r\n frameOnPlane.multiplyInversePoint3dArrayInPlace(corners);\r\n const localRange = Range3d.createArray(corners);\r\n if (localRange.low.z * localRange.high.z > 0.0)\r\n return undefined;\r\n // oversized polygon on local z= 0\r\n const xyzOut = new GrowableXYZArray();\r\n xyzOut.pushXYZ(localRange.low.x, localRange.low.y, 0);\r\n xyzOut.pushXYZ(localRange.high.x, localRange.low.y, 0);\r\n xyzOut.pushXYZ(localRange.high.x, localRange.high.y, 0);\r\n xyzOut.pushXYZ(localRange.low.x, localRange.high.y, 0);\r\n xyzOut.multiplyTransformInPlace(frameOnPlane);\r\n IndexedXYZCollectionPolygonOps.intersectRangeConvexPolygonInPlace(range, xyzOut);\r\n if (xyzOut.length === 0)\r\n return undefined;\r\n if (addClosurePoint)\r\n xyzOut.pushWrap(1);\r\n return xyzOut;\r\n }\r\n /** Implement appendPolygonClip, as defined in interface PolygonClipper.\r\n * @param xyz input polygon. This is not changed.\r\n * @param insideFragments Array to receive \"inside\" fragments. Each fragment is a GrowableXYZArray grabbed\r\n * from the cache. This is NOT cleared.\r\n * @param outsideFragments Array to receive \"outside\" fragments. Each fragment is a GrowableXYZArray grabbed\r\n * from the cache. This is NOT cleared.\r\n * @param arrayCache cache for reusable GrowableXYZArray.\r\n */\r\n public appendPolygonClip(\r\n xyz: GrowableXYZArray,\r\n insideFragments: GrowableXYZArray[],\r\n outsideFragments: GrowableXYZArray[],\r\n arrayCache: GrowableXYZArrayCache,\r\n ): void {\r\n const perpendicularRange = Range1d.createNull();\r\n const newInside = arrayCache.grabFromCache();\r\n const newOutside = arrayCache.grabFromCache();\r\n IndexedXYZCollectionPolygonOps.splitConvexPolygonInsideOutsidePlane(\r\n this, xyz, newInside, newOutside, perpendicularRange,\r\n );\r\n ClipUtilities.captureOrDrop(newInside, 3, insideFragments, arrayCache);\r\n ClipUtilities.captureOrDrop(newOutside, 3, outsideFragments, arrayCache);\r\n }\r\n /** Project a point in space to the plane. */\r\n public projectPointToPlane(spacePoint: Point3d, result?: Point3d): Point3d {\r\n const d = -this.altitude(spacePoint);\r\n return spacePoint.plusXYZ(d * this._inwardNormal.x, d * this._inwardNormal.y, d * this._inwardNormal.z, result);\r\n }\r\n}\r\n"]}
|