@itwin/core-geometry 3.3.0-dev.9 → 3.3.0
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 +57 -1
- package/lib/cjs/curve/Arc3d.d.ts +13 -2
- package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
- package/lib/cjs/curve/Arc3d.js +21 -3
- package/lib/cjs/curve/Arc3d.js.map +1 -1
- package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts +36 -2
- package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js +157 -7
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/cjs/curve/CurveCollection.d.ts +2 -0
- package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
- package/lib/cjs/curve/CurveCollection.js +8 -0
- package/lib/cjs/curve/CurveCollection.js.map +1 -1
- package/lib/cjs/curve/CurvePrimitive.d.ts +23 -0
- package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
- package/lib/cjs/curve/CurvePrimitive.js +65 -0
- package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
- package/lib/cjs/curve/LineSegment3d.d.ts +5 -0
- package/lib/cjs/curve/LineSegment3d.d.ts.map +1 -1
- package/lib/cjs/curve/LineSegment3d.js +21 -0
- package/lib/cjs/curve/LineSegment3d.js.map +1 -1
- package/lib/cjs/curve/LineString3d.d.ts +2 -0
- package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
- package/lib/cjs/curve/LineString3d.js +28 -0
- package/lib/cjs/curve/LineString3d.js.map +1 -1
- package/lib/cjs/curve/spiral/DirectSpiral3d.d.ts +2 -5
- package/lib/cjs/curve/spiral/DirectSpiral3d.d.ts.map +1 -1
- package/lib/cjs/curve/spiral/DirectSpiral3d.js +6 -8
- package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/IntegratedSpiral3d.d.ts +0 -3
- package/lib/cjs/curve/spiral/IntegratedSpiral3d.d.ts.map +1 -1
- package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +0 -4
- package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts +7 -0
- package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
- package/lib/cjs/curve/spiral/TransitionSpiral3d.js +17 -0
- package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableBlockedArray.d.ts +32 -3
- package/lib/cjs/geometry3d/GrowableBlockedArray.d.ts.map +1 -1
- package/lib/cjs/geometry3d/GrowableBlockedArray.js +63 -14
- package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableFloat64Array.d.ts +24 -8
- package/lib/cjs/geometry3d/GrowableFloat64Array.d.ts.map +1 -1
- package/lib/cjs/geometry3d/GrowableFloat64Array.js +72 -54
- package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableXYArray.d.ts +51 -26
- package/lib/cjs/geometry3d/GrowableXYArray.d.ts.map +1 -1
- package/lib/cjs/geometry3d/GrowableXYArray.js +136 -116
- package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableXYZArray.d.ts +35 -21
- package/lib/cjs/geometry3d/GrowableXYZArray.d.ts.map +1 -1
- package/lib/cjs/geometry3d/GrowableXYZArray.js +124 -137
- package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.d.ts +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.js +2 -3
- package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/cjs/geometry3d/PolygonOps.d.ts +8 -2
- package/lib/cjs/geometry3d/PolygonOps.d.ts.map +1 -1
- package/lib/cjs/geometry3d/PolygonOps.js +40 -3
- package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
- package/lib/cjs/geometry3d/Range.d.ts +12 -0
- package/lib/cjs/geometry3d/Range.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Range.js +32 -0
- package/lib/cjs/geometry3d/Range.js.map +1 -1
- package/lib/cjs/geometry3d/Transform.d.ts +1 -1
- package/lib/cjs/geometry3d/Transform.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Transform.js +1 -1
- package/lib/cjs/geometry3d/Transform.js.map +1 -1
- package/lib/cjs/geometry3d/XYZProps.d.ts +10 -3
- package/lib/cjs/geometry3d/XYZProps.d.ts.map +1 -1
- package/lib/cjs/geometry3d/XYZProps.js +21 -0
- package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.d.ts +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.js +2 -2
- package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceClip.d.ts.map +1 -1
- package/lib/cjs/polyface/PolyfaceClip.js +1 -1
- package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.d.ts +4 -2
- package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.js +10 -6
- package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/cjs/serialization/GeometrySamples.d.ts +2 -0
- package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
- package/lib/cjs/serialization/GeometrySamples.js +20 -0
- package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
- package/lib/cjs/topology/Merging.js +3 -3
- package/lib/cjs/topology/Merging.js.map +1 -1
- package/lib/cjs/topology/Triangulation.d.ts +1 -3
- package/lib/cjs/topology/Triangulation.d.ts.map +1 -1
- package/lib/cjs/topology/Triangulation.js +31 -21
- package/lib/cjs/topology/Triangulation.js.map +1 -1
- package/lib/esm/curve/Arc3d.d.ts +13 -2
- package/lib/esm/curve/Arc3d.d.ts.map +1 -1
- package/lib/esm/curve/Arc3d.js +22 -4
- package/lib/esm/curve/Arc3d.js.map +1 -1
- package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +36 -2
- package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
- package/lib/esm/curve/CurveChainWithDistanceIndex.js +157 -7
- package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/esm/curve/CurveCollection.d.ts +2 -0
- package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
- package/lib/esm/curve/CurveCollection.js +8 -0
- package/lib/esm/curve/CurveCollection.js.map +1 -1
- package/lib/esm/curve/CurvePrimitive.d.ts +23 -0
- package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
- package/lib/esm/curve/CurvePrimitive.js +65 -0
- package/lib/esm/curve/CurvePrimitive.js.map +1 -1
- package/lib/esm/curve/LineSegment3d.d.ts +5 -0
- package/lib/esm/curve/LineSegment3d.d.ts.map +1 -1
- package/lib/esm/curve/LineSegment3d.js +21 -0
- package/lib/esm/curve/LineSegment3d.js.map +1 -1
- package/lib/esm/curve/LineString3d.d.ts +2 -0
- package/lib/esm/curve/LineString3d.d.ts.map +1 -1
- package/lib/esm/curve/LineString3d.js +28 -0
- package/lib/esm/curve/LineString3d.js.map +1 -1
- package/lib/esm/curve/spiral/DirectSpiral3d.d.ts +2 -5
- package/lib/esm/curve/spiral/DirectSpiral3d.d.ts.map +1 -1
- package/lib/esm/curve/spiral/DirectSpiral3d.js +6 -8
- package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/IntegratedSpiral3d.d.ts +0 -3
- package/lib/esm/curve/spiral/IntegratedSpiral3d.d.ts.map +1 -1
- package/lib/esm/curve/spiral/IntegratedSpiral3d.js +0 -4
- package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts +7 -0
- package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
- package/lib/esm/curve/spiral/TransitionSpiral3d.js +17 -0
- package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
- package/lib/esm/geometry3d/GrowableBlockedArray.d.ts +32 -3
- package/lib/esm/geometry3d/GrowableBlockedArray.d.ts.map +1 -1
- package/lib/esm/geometry3d/GrowableBlockedArray.js +63 -14
- package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
- package/lib/esm/geometry3d/GrowableFloat64Array.d.ts +24 -8
- package/lib/esm/geometry3d/GrowableFloat64Array.d.ts.map +1 -1
- package/lib/esm/geometry3d/GrowableFloat64Array.js +72 -54
- package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
- package/lib/esm/geometry3d/GrowableXYArray.d.ts +51 -26
- package/lib/esm/geometry3d/GrowableXYArray.d.ts.map +1 -1
- package/lib/esm/geometry3d/GrowableXYArray.js +136 -116
- package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
- package/lib/esm/geometry3d/GrowableXYZArray.d.ts +35 -21
- package/lib/esm/geometry3d/GrowableXYZArray.d.ts.map +1 -1
- package/lib/esm/geometry3d/GrowableXYZArray.js +124 -137
- package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.d.ts +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.js +2 -3
- package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/esm/geometry3d/PolygonOps.d.ts +8 -2
- package/lib/esm/geometry3d/PolygonOps.d.ts.map +1 -1
- package/lib/esm/geometry3d/PolygonOps.js +40 -3
- package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
- package/lib/esm/geometry3d/Range.d.ts +12 -0
- package/lib/esm/geometry3d/Range.d.ts.map +1 -1
- package/lib/esm/geometry3d/Range.js +32 -0
- package/lib/esm/geometry3d/Range.js.map +1 -1
- package/lib/esm/geometry3d/Transform.d.ts +1 -1
- package/lib/esm/geometry3d/Transform.d.ts.map +1 -1
- package/lib/esm/geometry3d/Transform.js +1 -1
- package/lib/esm/geometry3d/Transform.js.map +1 -1
- package/lib/esm/geometry3d/XYZProps.d.ts +10 -3
- package/lib/esm/geometry3d/XYZProps.d.ts.map +1 -1
- package/lib/esm/geometry3d/XYZProps.js +20 -1
- package/lib/esm/geometry3d/XYZProps.js.map +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.d.ts +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.js +2 -2
- package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/esm/polyface/PolyfaceClip.d.ts.map +1 -1
- package/lib/esm/polyface/PolyfaceClip.js +1 -1
- package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.d.ts +4 -2
- package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.js +10 -6
- package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/esm/serialization/GeometrySamples.d.ts +2 -0
- package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
- package/lib/esm/serialization/GeometrySamples.js +20 -0
- package/lib/esm/serialization/GeometrySamples.js.map +1 -1
- package/lib/esm/topology/Merging.js +3 -3
- package/lib/esm/topology/Merging.js.map +1 -1
- package/lib/esm/topology/Triangulation.d.ts +1 -3
- package/lib/esm/topology/Triangulation.d.ts.map +1 -1
- package/lib/esm/topology/Triangulation.js +31 -21
- package/lib/esm/topology/Triangulation.js.map +1 -1
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolyfaceQuery.js","sourceRoot":"","sources":["../../../src/polyface/PolyfaceQuery.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 Polyface\r\n */\r\n\r\n// import { Point2d } from \"./Geometry2d\";\r\n/* eslint-disable @typescript-eslint/naming-convention, no-empty */\r\nimport { BagOfCurves, CurveCollection } from \"../curve/CurveCollection\";\r\nimport { CurveLocationDetail } from \"../curve/CurveLocationDetail\";\r\nimport { LineSegment3d } from \"../curve/LineSegment3d\";\r\nimport { LineString3d } from \"../curve/LineString3d\";\r\nimport { Loop } from \"../curve/Loop\";\r\nimport { StrokeOptions } from \"../curve/StrokeOptions\";\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Angle } from \"../geometry3d/Angle\";\r\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\r\nimport { Plane3dByOriginAndUnitNormal } from \"../geometry3d/Plane3dByOriginAndUnitNormal\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { PolygonOps } from \"../geometry3d/PolygonOps\";\r\nimport { Range3d } from \"../geometry3d/Range\";\r\nimport { Matrix4d } from \"../geometry4d/Matrix4d\";\r\nimport { MomentData } from \"../geometry4d/MomentData\";\r\nimport { UnionFindContext } from \"../numerics/UnionFind\";\r\nimport { ChainMergeContext } from \"../topology/ChainMerge\";\r\nimport { FacetOrientationFixup } from \"./FacetOrientation\";\r\nimport { IndexedEdgeMatcher, SortableEdge, SortableEdgeCluster } from \"./IndexedEdgeMatcher\";\r\nimport { IndexedPolyfaceSubsetVisitor } from \"./IndexedPolyfaceVisitor\";\r\nimport { BuildAverageNormalsContext } from \"./multiclip/BuildAverageNormalsContext\";\r\nimport { SweepLineStringToFacetContext } from \"./multiclip/SweepLineStringToFacetContext\";\r\nimport { XYPointBuckets } from \"./multiclip/XYPointBuckets\";\r\nimport { IndexedPolyface, Polyface, PolyfaceVisitor } from \"./Polyface\";\r\nimport { PolyfaceBuilder } from \"./PolyfaceBuilder\";\r\nimport { RangeLengthData } from \"./RangeLengthData\";\r\n\r\n/**\r\n * Structure to return multiple results from volume between facets and plane\r\n * @public\r\n */\r\nexport interface FacetProjectedVolumeSums {\r\n /** Summed (signed) volume */\r\n volume: number;\r\n /** summed area moments for positive contributions */\r\n positiveProjectedFacetAreaMoments?: MomentData;\r\n /** summed area moments for negative contributions */\r\n negativeProjectedFacetAreaMoments?: MomentData;\r\n}\r\n/**\r\n * Enumeration of cases for retaining facets among duplicates\r\n * @public\r\n */\r\nexport enum DuplicateFacetClusterSelector {\r\n /** retain none of the duplicates */\r\n SelectNone = 0,\r\n /** retain any one member among duplicates */\r\n SelectAny = 1,\r\n /** retain all members among duplicates */\r\n SelectAll = 2,\r\n /** retain one from any cluster with an odd number of faces */\r\n SelectOneByParity = 3,\r\n}\r\n/** PolyfaceQuery is a static class whose methods implement queries on a polyface or polyface visitor provided as a parameter to each method.\r\n * @public\r\n */\r\nexport class PolyfaceQuery {\r\n /** copy the points from a visitor into a Linestring3d in a Loop object */\r\n public static visitorToLoop(visitor: PolyfaceVisitor) {\r\n const ls = LineString3d.createPoints(visitor.point.getPoint3dArray());\r\n return Loop.create(ls);\r\n }\r\n /** Create a linestring loop for each facet of the polyface. */\r\n public static indexedPolyfaceToLoops(polyface: Polyface): BagOfCurves {\r\n const result = BagOfCurves.create();\r\n const visitor = polyface.createVisitor(1);\r\n while (visitor.moveToNextFacet()) {\r\n const loop = PolyfaceQuery.visitorToLoop(visitor);\r\n result.tryAddChild(loop);\r\n }\r\n return result;\r\n }\r\n /** Return the sum of all facet areas.\r\n * @param vectorToEye compute facet area projected to a view plane perpendicular to this vector\r\n */\r\n public static sumFacetAreas(source: Polyface | PolyfaceVisitor | undefined, vectorToEye?: Vector3d): number {\r\n let s = 0;\r\n if (source !== undefined) {\r\n if (source instanceof Polyface)\r\n return PolyfaceQuery.sumFacetAreas(source.createVisitor(1), vectorToEye);\r\n let unitVectorToEye: Vector3d | undefined;\r\n if (vectorToEye !== undefined)\r\n unitVectorToEye = vectorToEye.normalize();\r\n source.reset();\r\n while (source.moveToNextFacet()) {\r\n const scaledNormal = PolygonOps.areaNormal(source.point.getPoint3dArray());\r\n let area = scaledNormal.magnitude();\r\n if (unitVectorToEye !== undefined) {\r\n const scale = Geometry.conditionalDivideCoordinate(1.0, area);\r\n if (scale !== undefined)\r\n area *= scaledNormal.dotProduct(unitVectorToEye) * scale;\r\n }\r\n s += area;\r\n }\r\n }\r\n return s;\r\n }\r\n /** sum volumes of tetrahedra from origin to all facets.\r\n * * if origin is omitted, the first point encountered (by the visitor) is used as origin.\r\n * * If the mesh is closed, this sum is the volume.\r\n * * If the mesh is not closed, this sum is the volume of a mesh with various additional facets\r\n * from the origin to facets.\r\n */\r\n public static sumTetrahedralVolumes(source: Polyface | PolyfaceVisitor, origin?: Point3d): number {\r\n let s = 0;\r\n if (source instanceof Polyface)\r\n return PolyfaceQuery.sumTetrahedralVolumes(source.createVisitor(0), origin);\r\n let myOrigin = origin;\r\n const facetOrigin = Point3d.create();\r\n const targetA = Point3d.create();\r\n const targetB = Point3d.create();\r\n source.reset();\r\n while (source.moveToNextFacet()) {\r\n if (myOrigin === undefined)\r\n myOrigin = source.point.getPoint3dAtUncheckedPointIndex(0);\r\n source.point.getPoint3dAtUncheckedPointIndex(0, facetOrigin);\r\n for (let i = 1; i + 1 < source.point.length; i++) {\r\n source.point.getPoint3dAtUncheckedPointIndex(i, targetA);\r\n source.point.getPoint3dAtUncheckedPointIndex(i + 1, targetB);\r\n s += myOrigin.tripleProductToPoints(facetOrigin, targetA, targetB);\r\n }\r\n }\r\n return s / 6.0;\r\n }\r\n /** sum (signed) volumes between facets and a plane.\r\n * Return a structure with multiple sums:\r\n * * volume = the sum of (signed) volumes between facets and the plane.\r\n * * positiveAreaMomentData, negativeProjectedFacetAreaMoments = moment data with centroid, area, and second moments with respect to the centroid.\r\n *\r\n */\r\n public static sumVolumeBetweenFacetsAndPlane(source: Polyface | PolyfaceVisitor, plane: Plane3dByOriginAndUnitNormal): FacetProjectedVolumeSums {\r\n if (source instanceof Polyface)\r\n return PolyfaceQuery.sumVolumeBetweenFacetsAndPlane(source.createVisitor(0), plane);\r\n const facetOrigin = Point3d.create();\r\n const targetA = Point3d.create();\r\n const targetB = Point3d.create();\r\n const triangleNormal = Vector3d.create();\r\n const planeNormal = plane.getNormalRef();\r\n let h0, hA, hB;\r\n let signedVolumeSum = 0.0;\r\n let signedTriangleArea;\r\n let singleFacetArea;\r\n const positiveAreaMomentSums = MomentData.create(undefined, true);\r\n const negativeAreaMomentSums = MomentData.create(undefined, true);\r\n const singleFacetProducts = Matrix4d.createZero();\r\n const projectToPlane = plane.getProjectionToPlane();\r\n\r\n source.reset();\r\n // For each facet ..\r\n // Form triangles from facet origin to each far edge.\r\n // Sum signed area and volume contributions\r\n // each \"projectedArea\" contribution is twice the area of a triangle.\r\n // each volume contribution is 3 times the actual volume -- (1/3) of the altitude sums was the centroid altitude.\r\n while (source.moveToNextFacet()) {\r\n source.point.getPoint3dAtUncheckedPointIndex(0, facetOrigin);\r\n h0 = plane.altitude(facetOrigin);\r\n singleFacetArea = 0;\r\n // within a single facets, the singleFacetArea sum is accumulated with signs of individual triangles.\r\n // For a non-convex facet, this can be a mixture of positive and negative areas.\r\n // The absoluteProjectedAreaSum contribution is forced positive after the sum for the facet.\r\n for (let i = 1; i + 1 < source.point.length; i++) {\r\n source.point.getPoint3dAtUncheckedPointIndex(i, targetA);\r\n source.point.getPoint3dAtUncheckedPointIndex(i + 1, targetB);\r\n facetOrigin.crossProductToPoints(targetA, targetB, triangleNormal);\r\n hA = plane.altitude(targetA);\r\n hB = plane.altitude(targetB);\r\n signedTriangleArea = planeNormal.dotProduct(triangleNormal);\r\n singleFacetArea += signedTriangleArea;\r\n signedVolumeSum += signedTriangleArea * (h0 + hA + hB);\r\n }\r\n\r\n singleFacetProducts.setZero();\r\n source.point.multiplyTransformInPlace(projectToPlane);\r\n PolygonOps.addSecondMomentAreaProducts(source.point, facetOrigin, singleFacetProducts);\r\n\r\n if (singleFacetArea > 0) {\r\n positiveAreaMomentSums.accumulateProductsFromOrigin(facetOrigin, singleFacetProducts, 1.0);\r\n } else {\r\n negativeAreaMomentSums.accumulateProductsFromOrigin(facetOrigin, singleFacetProducts, 1.0);\r\n\r\n }\r\n }\r\n positiveAreaMomentSums.shiftOriginAndSumsToCentroidOfSums();\r\n negativeAreaMomentSums.shiftOriginAndSumsToCentroidOfSums();\r\n const positiveAreaMoments = MomentData.inertiaProductsToPrincipalAxes(positiveAreaMomentSums.origin, positiveAreaMomentSums.sums);\r\n const negativeAreaMoments = MomentData.inertiaProductsToPrincipalAxes(negativeAreaMomentSums.origin, negativeAreaMomentSums.sums);\r\n\r\n return {\r\n volume: signedVolumeSum / 6.0,\r\n positiveProjectedFacetAreaMoments: positiveAreaMoments,\r\n negativeProjectedFacetAreaMoments: negativeAreaMoments,\r\n };\r\n }\r\n\r\n /** Return the inertia products [xx,xy,xz,xw, yw, etc] integrated over all all facets, as viewed from origin. */\r\n public static sumFacetSecondAreaMomentProducts(source: Polyface | PolyfaceVisitor, origin: Point3d): Matrix4d {\r\n if (source instanceof Polyface)\r\n return PolyfaceQuery.sumFacetSecondAreaMomentProducts(source.createVisitor(0), origin);\r\n const products = Matrix4d.createZero();\r\n source.reset();\r\n while (source.moveToNextFacet()) {\r\n PolygonOps.addSecondMomentAreaProducts(source.point, origin, products);\r\n }\r\n return products;\r\n }\r\n /** Return the inertia products [xx,xy,xz,xw, yw, etc] integrated over all tetrahedral volumes from origin */\r\n public static sumFacetSecondVolumeMomentProducts(source: Polyface | PolyfaceVisitor, origin: Point3d): Matrix4d {\r\n if (source instanceof Polyface)\r\n return PolyfaceQuery.sumFacetSecondVolumeMomentProducts(source.createVisitor(0), origin);\r\n const products = Matrix4d.createZero();\r\n source.reset();\r\n while (source.moveToNextFacet()) {\r\n PolygonOps.addSecondMomentVolumeProducts(source.point, origin, products);\r\n }\r\n return products;\r\n }\r\n\r\n /** Compute area moments for the mesh. In the returned MomentData:\r\n * * origin is the centroid.\r\n * * localToWorldMap has the origin and principal directions\r\n * * radiiOfGyration radii for rotation around the x,y,z axes.\r\n */\r\n public static computePrincipalAreaMoments(source: Polyface): MomentData | undefined {\r\n const origin = source.data.getPoint(0);\r\n if (!origin) return undefined;\r\n const inertiaProducts = PolyfaceQuery.sumFacetSecondAreaMomentProducts(source, origin);\r\n return MomentData.inertiaProductsToPrincipalAxes(origin, inertiaProducts);\r\n }\r\n /** Compute area moments for the mesh. In the returned MomentData:\r\n * * origin is the centroid.\r\n * * localToWorldMap has the origin and principal directions\r\n * * radiiOfGyration radii for rotation around the x,y,z axes.\r\n * * The result is only valid if the mesh is closed.\r\n * * There is no test for closure. Use `PolyfaceQuery.isPolyfaceClosedByEdgePairing(polyface)` to test for closure.\r\n */\r\n public static computePrincipalVolumeMoments(source: Polyface): MomentData | undefined {\r\n const origin = source.data.getPoint(0);\r\n if (!origin) return undefined;\r\n const inertiaProducts = PolyfaceQuery.sumFacetSecondVolumeMomentProducts(source, origin);\r\n return MomentData.inertiaProductsToPrincipalAxes(origin, inertiaProducts);\r\n }\r\n\r\n /**\r\n * Test if the facets in `source` occur in perfectly mated pairs, as is required for a closed manifold volume.\r\n */\r\n public static isPolyfaceClosedByEdgePairing(source: Polyface): boolean {\r\n return this.isPolyfaceManifold(source, false);\r\n }\r\n /** Test edges pairing in `source` mesh.\r\n * * for `allowSimpleBoundaries === false` true return means this is a closed 2-manifold surface\r\n * * for `allowSimpleBoundaries === true` true means this is a 2-manifold surface which may have boundary, but is still properly matched internally.\r\n * * Any edge with 3 or more incident facets triggers `false` return.\r\n * * Any edge with 2 incident facets in the same direction triggers a `false` return.\r\n */\r\n public static isPolyfaceManifold(source: Polyface, allowSimpleBoundaries: boolean = false): boolean {\r\n const edges = new IndexedEdgeMatcher();\r\n const visitor = source.createVisitor(1);\r\n visitor.reset();\r\n while (visitor.moveToNextFacet()) {\r\n const numEdges = visitor.pointCount - 1;\r\n for (let i = 0; i < numEdges; i++) {\r\n edges.addEdge(visitor.clientPointIndex(i), visitor.clientPointIndex(i + 1), visitor.currentReadIndex());\r\n }\r\n }\r\n const badClusters: SortableEdgeCluster[] = [];\r\n edges.sortAndCollectClusters(undefined, allowSimpleBoundaries ? undefined : badClusters, undefined, badClusters);\r\n return badClusters.length === 0;\r\n }\r\n\r\n /**\r\n * Test if the facets in `source` occur in perfectly mated pairs, as is required for a closed manifold volume.\r\n * If not, extract the boundary edges as lines.\r\n * @param source\r\n */\r\n public static boundaryEdges(source: Polyface | PolyfaceVisitor | undefined, includeDanglers: boolean = true, includeMismatch: boolean = true, includeNull: boolean = true): CurveCollection | undefined {\r\n if (source === undefined)\r\n return undefined;\r\n const edges = new IndexedEdgeMatcher();\r\n const visitor = source instanceof Polyface ? source.createVisitor(1) : source;\r\n visitor.reset();\r\n while (visitor.moveToNextFacet()) {\r\n const numEdges = visitor.pointCount - 1;\r\n for (let i = 0; i < numEdges; i++) {\r\n edges.addEdge(visitor.clientPointIndex(i), visitor.clientPointIndex(i + 1), visitor.currentReadIndex());\r\n }\r\n }\r\n const bad1: SortableEdgeCluster[] = [];\r\n const bad2: SortableEdgeCluster[] = [];\r\n const bad0: SortableEdgeCluster[] = [];\r\n edges.sortAndCollectClusters(undefined, bad1, bad0, bad2);\r\n const badList = [];\r\n if (includeDanglers && bad1.length > 0)\r\n badList.push(bad1);\r\n if (includeMismatch && bad2.length > 0)\r\n badList.push(bad2);\r\n if (includeNull && bad0.length > 0)\r\n badList.push(bad0);\r\n if (badList.length === 0)\r\n return undefined;\r\n const sourcePolyface = visitor.clientPolyface()!;\r\n const result = new BagOfCurves();\r\n for (const list of badList) {\r\n for (const e of list) {\r\n const e1 = e instanceof SortableEdge ? e : e[0];\r\n const indexA = e1.vertexIndexA;\r\n const indexB = e1.vertexIndexB;\r\n const pointA = sourcePolyface.data.getPoint(indexA);\r\n const pointB = sourcePolyface.data.getPoint(indexB);\r\n if (pointA && pointB)\r\n result.tryAddChild(LineSegment3d.create(pointA, pointB));\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /** Find segments (within the linestring) which project to facets.\r\n * * Announce each pair of linestring segment and on-facet segment through a callback.\r\n * * Facets are ASSUMED to be convex and planar.\r\n */\r\n public static announceSweepLinestringToConvexPolyfaceXY(linestringPoints: GrowableXYZArray, polyface: Polyface,\r\n announce: AnnounceDrapePanel): any {\r\n const context = SweepLineStringToFacetContext.create(linestringPoints);\r\n if (context) {\r\n const visitor = polyface.createVisitor(0);\r\n for (visitor.reset(); visitor.moveToNextFacet();) {\r\n context.projectToPolygon(visitor.point, announce, polyface, visitor.currentReadIndex());\r\n }\r\n }\r\n }\r\n\r\n /** Execute context.projectToPolygon until its work estimates accumulate to workLimit */\r\n private static async continueAnnounceSweepLinestringToConvexPolyfaceXY(\r\n context: SweepLineStringToFacetContext, visitor: PolyfaceVisitor, announce: AnnounceDrapePanel): Promise<number> {\r\n let workCount = 0;\r\n while ((workCount < this.asyncWorkLimit) && visitor.moveToNextFacet()) {\r\n workCount += context.projectToPolygon(visitor.point, announce, visitor.clientPolyface()!, visitor.currentReadIndex());\r\n }\r\n return workCount;\r\n }\r\n // amount of computation to do per step of async methods.\r\n private static _asyncWorkLimit = 1.e06;\r\n /** Set the limit on work during an async time blocks, and return the old value.\r\n * * This should be a large number -- default is 1.0e6\r\n * @internal\r\n */\r\n public static setAsyncWorkLimit(value: number): number { const a = this._asyncWorkLimit; this._asyncWorkLimit = value; return a; }\r\n /** Query the current limit on work during an async time block.\r\n * @internal\r\n */\r\n public static get asyncWorkLimit(): number { return this._asyncWorkLimit; }\r\n /** Number of \"await\" steps executed in recent async calls.\r\n * @internal\r\n */\r\n public static awaitBlockCount = 0;\r\n\r\n /** Find segments (within the linestring) which project to facets.\r\n * * Announce each pair of linestring segment and on-facet segment through a callback.\r\n * * Facets are ASSUMED to be convex and planar.\r\n * * REMARK: Although this is public, the usual use is via slightly higher level public methods, viz:\r\n * * asyncSweepLinestringToFacetsXYReturnChains\r\n * @internal\r\n */\r\n public static async asyncAnnounceSweepLinestringToConvexPolyfaceXY(linestringPoints: GrowableXYZArray, polyface: Polyface,\r\n announce: AnnounceDrapePanel): Promise<number> {\r\n const context = SweepLineStringToFacetContext.create(linestringPoints);\r\n this.awaitBlockCount = 0;\r\n let workTotal = 0;\r\n if (context) {\r\n const visitor = polyface.createVisitor(0);\r\n let workCount;\r\n while (0 < (workCount = await Promise.resolve(PolyfaceQuery.continueAnnounceSweepLinestringToConvexPolyfaceXY(context, visitor, announce)))) {\r\n workTotal += workCount;\r\n this.awaitBlockCount++;\r\n // console.log({ myWorkCount: workCount, myBlockCount: this.awaitBlockCount });\r\n }\r\n }\r\n // eslint-disable-next-line no-console\r\n // console.log({ myWorkTotal: workTotal, myBlockCount: this.awaitBlockCount });\r\n return workTotal;\r\n }\r\n\r\n /** Search the facets for facet subsets that are connected with at least vertex contact.\r\n * * Return array of arrays of facet indices.\r\n */\r\n public static partitionFacetIndicesByVertexConnectedComponent(polyface: Polyface | PolyfaceVisitor): number[][] {\r\n if (polyface instanceof Polyface) {\r\n return this.partitionFacetIndicesByVertexConnectedComponent(polyface.createVisitor(0));\r\n }\r\n // The polyface is really a visitor !!!\r\n const context = new UnionFindContext(this.visitorClientPointCount(polyface));\r\n for (polyface.reset(); polyface.moveToNextFacet();) {\r\n const firstVertexIndexOnThisFacet = polyface.pointIndex[0];\r\n for (const vertexIndex of polyface.pointIndex)\r\n context.mergeSubsets(firstVertexIndexOnThisFacet, vertexIndex);\r\n }\r\n const roots = context.collectRootIndices();\r\n const facetsInComponent: number[][] = [];\r\n const numRoots = roots.length;\r\n for (let i = 0; i < numRoots; i++) {\r\n facetsInComponent.push([]);\r\n }\r\n for (polyface.reset(); polyface.moveToNextFacet();) {\r\n const firstVertexIndexOnThisFacet = polyface.pointIndex[0];\r\n const rootVertexForThisFacet = context.findRoot(firstVertexIndexOnThisFacet);\r\n for (let rootIndex = 0; rootIndex < numRoots; rootIndex++) {\r\n if (roots[rootIndex] === rootVertexForThisFacet) {\r\n facetsInComponent[rootIndex].push(polyface.currentReadIndex());\r\n break;\r\n }\r\n }\r\n }\r\n return facetsInComponent;\r\n }\r\n /**\r\n * * Examine the normal orientation for each faces.\r\n * * Separate to 3 partitions:\r\n * * facets with normal in the positive direction of the vectorToEye (partition 0)\r\n * * facets with normal in the negative direction of the vectorToEye (partition 1)\r\n * * facets nearly perpendicular to the view vector (partition 2)\r\n * * Return array of arrays of facet indices.\r\n */\r\n public static partitionFacetIndicesByVisibilityVector(polyface: Polyface | PolyfaceVisitor, vectorToEye: Vector3d, sideAngleTolerance: Angle): number[][] {\r\n if (polyface instanceof Polyface) {\r\n return this.partitionFacetIndicesByVisibilityVector(polyface.createVisitor(0), vectorToEye, sideAngleTolerance);\r\n }\r\n const facetsInComponent: number[][] = [];\r\n for (let i = 0; i < 3; i++) {\r\n facetsInComponent.push([]);\r\n }\r\n const forwardComponent = facetsInComponent[0];\r\n const rearComponent = facetsInComponent[1];\r\n const sideComponent = facetsInComponent[2];\r\n const radiansTol = Math.max(sideAngleTolerance.radians, 1.0e-8);\r\n for (polyface.reset(); polyface.moveToNextFacet();) {\r\n const areaNormal = PolygonOps.areaNormalGo(polyface.point);\r\n const index = polyface.currentReadIndex();\r\n if (areaNormal) {\r\n const angle = areaNormal.angleFromPerpendicular(vectorToEye);\r\n if (Math.abs(angle.radians) < radiansTol) {\r\n sideComponent.push(index);\r\n } else if (areaNormal.dotProduct(vectorToEye) < 0) {\r\n rearComponent.push(index);\r\n } else {\r\n forwardComponent.push(index);\r\n }\r\n }\r\n }\r\n return facetsInComponent;\r\n }\r\n\r\n /**\r\n * Return the boundary of facets that are facing the eye.\r\n * @param polyface\r\n * @param visibilitySubset selector among the visible facet sets extracted by partitionFacetIndicesByVisibilityVector\r\n * * 0 ==> forward facing\r\n * * 1 ==> rear facing\r\n * * 2 ==> side facing\r\n * @param vectorToEye\r\n * @param sideAngleTolerance\r\n */\r\n public static boundaryOfVisibleSubset(polyface: IndexedPolyface, visibilitySelect: 0 | 1 | 2, vectorToEye: Vector3d, sideAngleTolerance: Angle = Angle.createDegrees(1.0e-3)): CurveCollection | undefined {\r\n const partitionedIndices = this.partitionFacetIndicesByVisibilityVector(polyface, vectorToEye, sideAngleTolerance);\r\n if (partitionedIndices[visibilitySelect].length === 0)\r\n return undefined;\r\n const visitor = IndexedPolyfaceSubsetVisitor.createSubsetVisitor(polyface, partitionedIndices[visibilitySelect], 1);\r\n return this.boundaryEdges(visitor, true, false, false);\r\n }\r\n\r\n /** Clone the facets in each partition to a separate polyface.\r\n *\r\n */\r\n public static clonePartitions(polyface: Polyface | PolyfaceVisitor, partitions: number[][]): Polyface[] {\r\n if (polyface instanceof Polyface) {\r\n return this.clonePartitions(polyface.createVisitor(0), partitions);\r\n }\r\n polyface.setNumWrap(0);\r\n const polyfaces: Polyface[] = [];\r\n const options = StrokeOptions.createForFacets();\r\n options.needNormals = polyface.normal !== undefined;\r\n options.needParams = polyface.param !== undefined;\r\n options.needColors = polyface.color !== undefined;\r\n options.needTwoSided = polyface.twoSided;\r\n for (const partition of partitions) {\r\n const builder = PolyfaceBuilder.create(options);\r\n polyface.reset();\r\n for (const facetIndex of partition) {\r\n polyface.moveToReadIndex(facetIndex);\r\n builder.addFacetFromVisitor(polyface);\r\n }\r\n polyfaces.push(builder.claimPolyface(true));\r\n }\r\n return polyfaces;\r\n }\r\n\r\n /** Clone facets that pass an filter function\r\n */\r\n public static cloneFiltered(source: Polyface | PolyfaceVisitor, filter: (visitor: PolyfaceVisitor) => boolean): Polyface{\r\n if (source instanceof Polyface) {\r\n return this.cloneFiltered(source.createVisitor(0), filter);\r\n }\r\n source.setNumWrap(0);\r\n const options = StrokeOptions.createForFacets();\r\n options.needNormals = source.normal !== undefined;\r\n options.needParams = source.param !== undefined;\r\n options.needColors = source.color !== undefined;\r\n options.needTwoSided = source.twoSided;\r\n const builder = PolyfaceBuilder.create(options);\r\n source.reset();\r\n for (; source.moveToNextFacet();){\r\n if (filter (source))\r\n builder.addFacetFromVisitor(source);\r\n }\r\n return builder.claimPolyface(true);\r\n }\r\n /** If the visitor's client is a polyface, simply return its point array length.\r\n * If not a polyface, visit all facets to find the largest index.\r\n */\r\n private static visitorClientPointCount(visitor: PolyfaceVisitor): number {\r\n const polyface = visitor.clientPolyface();\r\n if (polyface !== undefined)\r\n return polyface.data.point.length;\r\n visitor.reset();\r\n let maxIndex = -1;\r\n while (visitor.moveToNextFacet()) {\r\n for (const pointIndex of visitor.pointIndex)\r\n if (pointIndex > maxIndex)\r\n maxIndex = pointIndex;\r\n }\r\n return maxIndex + 1;\r\n }\r\n\r\n /** Search the facets for facet subsets that are connected with at least edge contact.\r\n * * Return array of arrays of facet indices.\r\n */\r\n public static partitionFacetIndicesByEdgeConnectedComponent(polyface: Polyface | PolyfaceVisitor): number[][] {\r\n if (polyface instanceof Polyface) {\r\n return this.partitionFacetIndicesByEdgeConnectedComponent(polyface.createVisitor(0));\r\n }\r\n polyface.setNumWrap(1);\r\n const matcher = new IndexedEdgeMatcher();\r\n polyface.reset();\r\n let numFacets = 0;\r\n while (polyface.moveToNextFacet()) {\r\n const numEdges = polyface.pointCount - 1;\r\n numFacets++;\r\n for (let i = 0; i < numEdges; i++) {\r\n matcher.addEdge(polyface.clientPointIndex(i), polyface.clientPointIndex(i + 1), polyface.currentReadIndex());\r\n }\r\n }\r\n const allEdges: SortableEdgeCluster[] = [];\r\n matcher.sortAndCollectClusters(allEdges, allEdges, allEdges, allEdges);\r\n const context = new UnionFindContext(numFacets);\r\n for (const cluster of allEdges) {\r\n if (cluster instanceof SortableEdge) {\r\n // this edge does not connect anywhere. Ignore it!!\r\n } else {\r\n const edge0 = cluster[0];\r\n for (let i = 1; i < cluster.length; i++)\r\n context.mergeSubsets(edge0.facetIndex, cluster[i].facetIndex);\r\n }\r\n }\r\n\r\n const roots = context.collectRootIndices();\r\n const facetsInComponent: number[][] = [];\r\n const numRoots = roots.length;\r\n for (let i = 0; i < numRoots; i++) {\r\n facetsInComponent.push([]);\r\n }\r\n\r\n for (let facetIndex = 0; facetIndex < numFacets; facetIndex++) {\r\n const rootOfFacet = context.findRoot(facetIndex);\r\n for (let rootIndex = 0; rootIndex < numRoots; rootIndex++) {\r\n if (roots[rootIndex] === rootOfFacet) {\r\n facetsInComponent[rootIndex].push(facetIndex);\r\n break;\r\n }\r\n }\r\n }\r\n return facetsInComponent;\r\n }\r\n /** Find segments (within the linestring) which project to facets.\r\n * * Assemble each segment pair as a facet in a new polyface\r\n * * Facets are ASSUMED to be convex and planar.\r\n */\r\n public static sweepLinestringToFacetsXYreturnSweptFacets(linestringPoints: GrowableXYZArray, polyface: Polyface): Polyface {\r\n const builder = PolyfaceBuilder.create();\r\n this.announceSweepLinestringToConvexPolyfaceXY(linestringPoints, polyface,\r\n (_linestring: GrowableXYZArray, _segmentIndex: number,\r\n _polyface: Polyface, _facetIndex: number, points: Point3d[]) => {\r\n if (points.length === 4)\r\n builder.addQuadFacet(points);\r\n else if (points.length === 3)\r\n builder.addTriangleFacet(points);\r\n\r\n });\r\n return builder.claimPolyface(true);\r\n }\r\n /** Find segments (within the linestring) which project to facets.\r\n * * Return collected line segments\r\n */\r\n public static sweepLinestringToFacetsXYReturnLines(linestringPoints: GrowableXYZArray, polyface: Polyface): LineSegment3d[] {\r\n const drapeGeometry: LineSegment3d[] = [];\r\n this.announceSweepLinestringToConvexPolyfaceXY(linestringPoints, polyface,\r\n (_linestring: GrowableXYZArray, _segmentIndex: number,\r\n _polyface: Polyface, _facetIndex: number, points: Point3d[], indexA: number, indexB: number) => {\r\n drapeGeometry.push(LineSegment3d.create(points[indexA], points[indexB]));\r\n });\r\n return drapeGeometry;\r\n }\r\n\r\n /** Find segments (within the linestring) which project to facets.\r\n * * Return chains.\r\n */\r\n public static sweepLinestringToFacetsXYReturnChains(linestringPoints: GrowableXYZArray, polyface: Polyface): LineString3d[] {\r\n const chainContext = ChainMergeContext.create();\r\n\r\n this.announceSweepLinestringToConvexPolyfaceXY(linestringPoints, polyface,\r\n (_linestring: GrowableXYZArray, _segmentIndex: number,\r\n _polyface: Polyface, _facetIndex: number, points: Point3d[], indexA: number, indexB: number) => {\r\n chainContext.addSegment(points[indexA], points[indexB]);\r\n });\r\n chainContext.clusterAndMergeVerticesXYZ();\r\n return chainContext.collectMaximalChains();\r\n }\r\n /** Find segments (within the linestring) which project to facets.\r\n * * This is done as a sequence of \"await\" steps.\r\n * * Each \"await\" step deals with approximately PolyfaceQuery.asyncWorkLimit pairings of (linestring edge) with (facet edge)\r\n * * PolyfaceQuery.setAsyncWorkLimit () to change work blocks from default\r\n * * Return chains.\r\n */\r\n public static async asyncSweepLinestringToFacetsXYReturnChains(linestringPoints: GrowableXYZArray, polyface: Polyface): Promise<LineString3d[]> {\r\n const chainContext = ChainMergeContext.create();\r\n\r\n await Promise.resolve(this.asyncAnnounceSweepLinestringToConvexPolyfaceXY(linestringPoints, polyface,\r\n (_linestring: GrowableXYZArray, _segmentIndex: number,\r\n _polyface: Polyface, _facetIndex: number, points: Point3d[], indexA: number, indexB: number) => {\r\n chainContext.addSegment(points[indexA], points[indexB]);\r\n }));\r\n chainContext.clusterAndMergeVerticesXYZ();\r\n const chains = chainContext.collectMaximalChains();\r\n return chains;\r\n }\r\n\r\n /**\r\n * * Examine ranges of facets.\r\n * * Return statistical summary of x,y,z ranges.\r\n */\r\n public static collectRangeLengthData(polyface: Polyface | PolyfaceVisitor): RangeLengthData {\r\n if (polyface instanceof Polyface) {\r\n return this.collectRangeLengthData(polyface.createVisitor(0));\r\n }\r\n const rangeData = new RangeLengthData();\r\n // polyface is a visitor ...\r\n for (polyface.reset(); polyface.moveToNextFacet();)\r\n rangeData.accumulateGrowableXYZArrayRange(polyface.point);\r\n return rangeData;\r\n }\r\n\r\n /** Clone the facets, inserting vertices (within edges) where points not part of each facet's vertex indices impinge within edges.\r\n *\r\n */\r\n public static cloneWithTVertexFixup(polyface: Polyface): IndexedPolyface {\r\n const oldFacetVisitor = polyface.createVisitor(1); // This is to visit the existing facets.\r\n const newFacetVisitor = polyface.createVisitor(0); // This is to build the new facets.\r\n const rangeSearcher = XYPointBuckets.create(polyface.data.point, 30)!;\r\n const builder = PolyfaceBuilder.create();\r\n const edgeRange = Range3d.createNull();\r\n const point0 = Point3d.create();\r\n const point1 = Point3d.create();\r\n const spacePoint = Point3d.create();\r\n const segment = LineSegment3d.create(point0, point1);\r\n\r\n for (oldFacetVisitor.reset(); oldFacetVisitor.moveToNextFacet();) {\r\n newFacetVisitor.clearArrays();\r\n for (let i = 0; i + 1 < oldFacetVisitor.point.length; i++) {\r\n // each base vertex is part of the result ...\r\n oldFacetVisitor.point.getPoint3dAtUncheckedPointIndex(i, point0);\r\n oldFacetVisitor.point.getPoint3dAtUncheckedPointIndex(i + 1, point1);\r\n newFacetVisitor.pushDataFrom(oldFacetVisitor, i);\r\n edgeRange.setNull();\r\n LineSegment3d.create(point0, point1, segment);\r\n let detailArray: CurveLocationDetail[] | undefined;\r\n edgeRange.extend(point0);\r\n edgeRange.extend(point1);\r\n rangeSearcher.announcePointsInRange(edgeRange, (index: number, _x: number, _y: number, _z: number) => {\r\n // x,y,z has x,y within the range of the search ... test for exact on (in full 3d!)\r\n polyface.data.point.getPoint3dAtUncheckedPointIndex(index, spacePoint);\r\n const detail = segment.closestPoint(spacePoint, false);\r\n if (undefined !== detail) {\r\n if (detail.fraction >= 0.0 && detail.fraction < 1.0 && !detail.point.isAlmostEqual(point0) && !detail.point.isAlmostEqual(point1)\r\n && spacePoint.isAlmostEqual(detail.point)) {\r\n if (detailArray === undefined)\r\n detailArray = [];\r\n detail.a = index;\r\n detailArray.push(detail);\r\n }\r\n }\r\n return true;\r\n });\r\n if (detailArray !== undefined) {\r\n detailArray.sort((a: CurveLocationDetail, b: CurveLocationDetail) => (a.fraction - b.fraction));\r\n for (const d of detailArray) {\r\n newFacetVisitor.pushInterpolatedDataFrom(oldFacetVisitor, i, d.fraction, i + 1);\r\n }\r\n }\r\n }\r\n builder.addFacetFromGrowableArrays(newFacetVisitor.point, newFacetVisitor.normal, newFacetVisitor.param, newFacetVisitor.color);\r\n }\r\n\r\n return builder.claimPolyface();\r\n }\r\n /**\r\n * * Each array input structure is: [facetIndex, vertexIndex0, vertexIndex1, ....]\r\n * * Vertex indices assumed reversed so it\r\n * * vertexIndex0 is the lowest index on the facet\r\n * * vertexIndex1 is the lowest neighbor of vertex0\r\n * * first different entry among vertex indices determines lexical result.\r\n * * Hence facets with duplicate indices (whether forward or reversed) are considered equal.\r\n * @param arrayA\r\n * @param arrayB\r\n */\r\n private static compareFacetIndexAndVertexIndices(arrayA: number[], arrayB: number[]): number {\r\n if (arrayA.length !== arrayB.length)\r\n return arrayA.length - arrayB.length;\r\n for (let i = 1; i < arrayA.length; i++) {\r\n if (arrayA[i] !== arrayB[i]) {\r\n return arrayA[i] - arrayB[i];\r\n }\r\n }\r\n return 0;\r\n }\r\n /**\r\n * * Return an array of arrays describing facet duplication.\r\n * @param includeSingletons if true, non-duplicated facets are included in the output.\r\n * * Each array `entry` in the output contains read indices of a cluster of facets with the same vertex indices.\r\n */\r\n public static collectDuplicateFacetIndices(polyface: Polyface, includeSingletons: boolean = false): number[][] {\r\n const result: number[][] = [];\r\n this.announceDuplicateFacetIndices(polyface,\r\n (clusterFacetIndices: number[]) => {\r\n if (includeSingletons || clusterFacetIndices.length > 1)\r\n result.push(clusterFacetIndices.slice());\r\n });\r\n return result;\r\n }\r\n /**\r\n * * Return an array of arrays describing facet duplication.\r\n * @param includeSingletons if true, non-duplicated facets are included in the output.\r\n * * Each array `entry` in the output contains read indices of a cluster of facets with the same vertex indices.\r\n */\r\n public static announceDuplicateFacetIndices(polyface: Polyface, announceCluster: (clusterFacetIndices: number[]) => void) {\r\n const visitor = polyface.createVisitor(0); // This is to visit the existing facets.\r\n const facetIndexAndVertexIndices: number[][] = [];\r\n for (visitor.reset(); visitor.moveToNextFacet();) {\r\n const facetIndex = visitor.currentReadIndex();\r\n const entry = [facetIndex];\r\n const pointIndex = visitor.pointIndex;\r\n const numPointsThisFacet = pointIndex.length;\r\n let lowIndex = 0;\r\n // find the lowest point index ...\r\n for (let i = 1; i < visitor.pointIndex.length; i++) {\r\n if (pointIndex[i] < pointIndex[lowIndex])\r\n lowIndex = i;\r\n }\r\n // find its lowest neighbor -- assemble sort array in that direction\r\n if (pointIndex[(lowIndex + 1) % numPointsThisFacet] < pointIndex[(lowIndex + numPointsThisFacet - 1) % numPointsThisFacet]) {\r\n for (let i = 0; i < numPointsThisFacet; i++) {\r\n entry.push(pointIndex[(lowIndex + i) % numPointsThisFacet]);\r\n }\r\n } else {\r\n for (let i = 0; i < numPointsThisFacet; i++) {\r\n entry.push(pointIndex[(lowIndex + numPointsThisFacet - i) % numPointsThisFacet]);\r\n }\r\n }\r\n facetIndexAndVertexIndices.push(entry);\r\n }\r\n facetIndexAndVertexIndices.sort(this.compareFacetIndexAndVertexIndices);\r\n let i0, i1;\r\n const n = facetIndexAndVertexIndices.length;\r\n const clusterArray = [];\r\n for (i0 = 0; i0 < n; i0 = i1) {\r\n i1 = i0 + 1;\r\n clusterArray.length = 0;\r\n clusterArray.push(facetIndexAndVertexIndices[i0][0]);\r\n while (i1 < n && 0 === this.compareFacetIndexAndVertexIndices(facetIndexAndVertexIndices[i0], facetIndexAndVertexIndices[i1])) {\r\n clusterArray.push(facetIndexAndVertexIndices[i1][0]);\r\n i1++;\r\n }\r\n announceCluster(clusterArray);\r\n }\r\n }\r\n /** Return a new facet set with a subset of facets in source\r\n * @param includeSingletons true to copy facets that only appear once\r\n * @param clusterSelector indicates whether duplicate clusters are to have 0, 1, or all facets included\r\n */\r\n public static cloneByFacetDuplication(source: Polyface, includeSingletons: boolean, clusterSelector: DuplicateFacetClusterSelector): Polyface {\r\n const builder = PolyfaceBuilder.create();\r\n const visitor = source.createVisitor(0);\r\n this.announceDuplicateFacetIndices(source,\r\n (clusterFacetIndices: number[]) => {\r\n let numToSelect = 0;\r\n if (clusterFacetIndices.length === 1) {\r\n if (includeSingletons)\r\n numToSelect = 1;\r\n } else if (clusterFacetIndices.length > 1) {\r\n if (clusterSelector === DuplicateFacetClusterSelector.SelectAny)\r\n numToSelect = 1;\r\n else if (clusterSelector === DuplicateFacetClusterSelector.SelectAll)\r\n numToSelect = clusterFacetIndices.length;\r\n else if (clusterSelector === DuplicateFacetClusterSelector.SelectOneByParity)\r\n numToSelect = (clusterFacetIndices.length & 0x01) === 0x01 ? 1 : 0;\r\n }\r\n for (let i = 0; i < numToSelect; i++) {\r\n visitor.moveToReadIndex(clusterFacetIndices[i]);\r\n builder.addFacetFromVisitor(visitor);\r\n }\r\n });\r\n return builder.claimPolyface();\r\n }\r\n /** Clone the facets, inserting removing points that are simply within colinear edges.\r\n *\r\n */\r\n public static cloneWithColinearEdgeFixup(polyface: Polyface): Polyface {\r\n const oldFacetVisitor = polyface.createVisitor(2); // This is to visit the existing facets.\r\n const newFacetVisitor = polyface.createVisitor(0); // This is to build the new facets.\r\n const builder = PolyfaceBuilder.create();\r\n const vector01 = Vector3d.create();\r\n const vector12 = Vector3d.create();\r\n const numPoint = polyface.data.point.length;\r\n const pointState = new Int32Array(numPoint);\r\n // FIRST PASS -- in each sector of each facet, determine if the sector has colinear incoming and outgoing vectors.\r\n // Mark each point as\r\n // 0 unvisited\r\n // -1 incident to a non-colinear sector\r\n // n incident to n colinear sectors\r\n for (oldFacetVisitor.reset(); oldFacetVisitor.moveToNextFacet();) {\r\n for (let i = 0; i + 2 < oldFacetVisitor.point.length; i++) {\r\n // each base vertex is part of the result ...\r\n oldFacetVisitor.point.vectorIndexIndex(i, i + 1, vector01);\r\n oldFacetVisitor.point.vectorIndexIndex(i + 1, i + 2, vector12);\r\n const pointIndex = oldFacetVisitor.clientPointIndex(i + 1);\r\n if (pointState[pointIndex] >= 0) {\r\n const theta = vector01.angleTo(vector12);\r\n if (theta.isAlmostZero) {\r\n pointState[pointIndex]++;\r\n } else {\r\n pointState[pointIndex] = -1;\r\n }\r\n }\r\n }\r\n }\r\n // SECOND PASS -- make copies, omitting references to points at colinear sectors\r\n for (oldFacetVisitor.reset(); oldFacetVisitor.moveToNextFacet();) {\r\n newFacetVisitor.clearArrays();\r\n for (let i = 0; i + 2 < oldFacetVisitor.point.length; i++) {\r\n const pointIndex = oldFacetVisitor.clientPointIndex(i);\r\n if (pointState[pointIndex] < 0) {\r\n newFacetVisitor.pushDataFrom(oldFacetVisitor, i);\r\n }\r\n }\r\n if (newFacetVisitor.point.length > 2)\r\n builder.addFacetFromGrowableArrays(newFacetVisitor.point, newFacetVisitor.normal, newFacetVisitor.param, newFacetVisitor.color);\r\n }\r\n return builder.claimPolyface();\r\n }\r\n\r\n /**\r\n * Set the edge visibility for specified edges in the polyface.\r\n * @param polyface mesh to be edited\r\n * @param clusters array of edge references\r\n * @param value visibility value (true or false)\r\n */\r\n private static setEdgeVisibility(polyface: IndexedPolyface, clusters: SortableEdgeCluster[], value: boolean) {\r\n for (const cluster of clusters) {\r\n if (cluster instanceof SortableEdge) {\r\n this.setSingleEdgeVisibility(polyface, cluster.facetIndex, cluster.vertexIndexA, value);\r\n } else if (Array.isArray(cluster)) {\r\n for (const e1 of cluster)\r\n this.setSingleEdgeVisibility(polyface, e1.facetIndex, e1.vertexIndexA, value);\r\n }\r\n }\r\n }\r\n /**\r\n * Set the visibility of a particular edge of a particular facet.\r\n * @param polyface containing polyface\r\n * @param facetIndex facet index\r\n * @param vertexIndex vertex index (in vertex array)\r\n * @param value visibility value.\r\n */\r\n public static setSingleEdgeVisibility(polyface: IndexedPolyface, facetIndex: number, vertexIndex: number, value: boolean) {\r\n const data = polyface.data;\r\n const index0 = polyface.facetIndex0(facetIndex);\r\n const index1 = polyface.facetIndex1(facetIndex);\r\n for (let i = index0; i < index1; i++)\r\n if (data.pointIndex[i] === vertexIndex)\r\n data.edgeVisible[i] = value;\r\n }\r\n /** Load all half edges from a mesh to an IndexedEdgeMatcher */\r\n public static createIndexedEdges(visitor: PolyfaceVisitor): IndexedEdgeMatcher {\r\n const edges = new IndexedEdgeMatcher();\r\n visitor.reset();\r\n while (visitor.moveToNextFacet()) {\r\n const numEdges = visitor.pointCount - 1;\r\n for (let i = 0; i < numEdges; i++) {\r\n edges.addEdge(visitor.clientPointIndex(i), visitor.clientPointIndex(i + 1), visitor.currentReadIndex());\r\n }\r\n }\r\n return edges;\r\n }\r\n /**\r\n * * Find mated pairs among facet edges.\r\n * * Mated pairs have the same vertex indices appearing in opposite order.\r\n * * Mark all non-mated pairs invisible.\r\n * * At mated pairs\r\n * * if angle across the edge is larger than `sharpEdgeAngle`, mark visible\r\n * * otherwise mark invisible.\r\n * @param mesh mesh to be marked\r\n */\r\n public static markPairedEdgesInvisible(mesh: IndexedPolyface, sharpEdgeAngle?: Angle) {\r\n const visitor = mesh.createVisitor(1);\r\n const edges = this.createIndexedEdges(visitor);\r\n\r\n const pairedEdges: SortableEdgeCluster[] = [];\r\n const boundaryEdges: SortableEdgeCluster[] = [];\r\n edges.sortAndCollectClusters(pairedEdges, boundaryEdges, boundaryEdges, boundaryEdges);\r\n this.markAllEdgeVisibility(mesh, false);\r\n this.setEdgeVisibility(mesh, boundaryEdges, true);\r\n if (sharpEdgeAngle !== undefined) {\r\n const normal0 = Vector3d.create();\r\n const normal1 = Vector3d.create();\r\n for (const pair of pairedEdges) {\r\n if (Array.isArray(pair) && pair.length === 2) {\r\n const e0 = pair[0];\r\n const e1 = pair[1];\r\n if (undefined !== PolyfaceQuery.computeFacetUnitNormal(visitor, e0.facetIndex, normal0)\r\n && undefined !== PolyfaceQuery.computeFacetUnitNormal(visitor, e1.facetIndex, normal1)) {\r\n const edgeAngle = normal0.smallerUnorientedAngleTo(normal1);\r\n if (edgeAngle.radians > sharpEdgeAngle.radians) {\r\n this.setSingleEdgeVisibility(mesh, e0.facetIndex, e0.vertexIndexA, true);\r\n this.setSingleEdgeVisibility(mesh, e1.facetIndex, e1.vertexIndexA, true);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n /** Try to compute a unit normal for a facet accessible through a visitor.\r\n * * Unit normal is computed by `PolygonOps.unitNormal` with the points around the facet.\r\n */\r\n public static computeFacetUnitNormal(visitor: PolyfaceVisitor, facetIndex: number, result?: Vector3d): Vector3d | undefined {\r\n if (!result)\r\n result = Vector3d.create();\r\n if (visitor.moveToReadIndex(facetIndex)) {\r\n if (PolygonOps.unitNormal(visitor.point, result))\r\n return result;\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * * Mark all edge visibilities in the IndexedPolyface\r\n * @param mesh mesh to be marked\r\n * @param value true for visible, false for hidden\r\n */\r\n\r\n public static markAllEdgeVisibility(mesh: IndexedPolyface, value: boolean) {\r\n const data = mesh.data;\r\n for (let i = 0; i < data.edgeVisible.length; i++)\r\n data.edgeVisible[i] = value;\r\n }\r\n /**\r\n * * Examine adjacent facet orientations throughout the mesh\r\n * * If possible, reverse a subset to achieve proper pairing.\r\n * @param mesh\r\n */\r\n public static reorientVertexOrderAroundFacetsForConsistentOrientation(mesh: IndexedPolyface): boolean {\r\n return FacetOrientationFixup.doFixup(mesh);\r\n }\r\n\r\n /**\r\n * Set up indexed normals with one normal in the plane of each facet of the mesh.\r\n * @param polyface\r\n */\r\n public static buildPerFaceNormals(polyface: IndexedPolyface) {\r\n BuildAverageNormalsContext.buildPerFaceNormals(polyface);\r\n }\r\n\r\n /**\r\n * * At each vertex of the mesh\r\n * * Find clusters of almost parallel normals\r\n * * Compute simple average of those normals\r\n * * Index to the averages\r\n * * For typical meshes, this correctly clusters adjacent normals.\r\n * * One cam imagine a vertex with multiple \"smooth cone-like\" sets of incident facets such that averaging occurs among two nonadjacent cones. But this does not seem to be a problem in practice.\r\n * @param polyface polyface to update.\r\n * @param toleranceAngle averaging is done between normals up to this angle.\r\n */\r\n public static buildAverageNormals(polyface: IndexedPolyface, toleranceAngle: Angle = Angle.createDegrees(31.0)) {\r\n BuildAverageNormalsContext.buildFastAverageNormals(polyface, toleranceAngle);\r\n }\r\n\r\n}\r\n\r\n/** Announce the points on a drape panel.\r\n * * The first two points in the array are always along the draped line segment.\r\n * * The last two are always on the facet.\r\n * * If there are 4 points, those two pairs are distinct, i.e. both segment points are to the same side of the facet.\r\n * * If there are 3 points, those two pairs share an on-facet point.\r\n * * The panel is ordered so the outward normal is to the right of the draped segment.\r\n * @param indexAOnFacet index (in points) of the point that is the first facet point for moving forward along the linestring\r\n * @param indexBOnFacet index (in points) of the point that is the second facet point for moving forward along the linestring\r\n * @public\r\n */\r\nexport type AnnounceDrapePanel = (linestring: GrowableXYZArray, segmentIndex: number,\r\n polyface: Polyface, facetIndex: number, points: Point3d[], indexAOnFacet: number, indexBOnFacet: number) => any;\r\n\r\n"]}
|
|
1
|
+
{"version":3,"file":"PolyfaceQuery.js","sourceRoot":"","sources":["../../../src/polyface/PolyfaceQuery.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 Polyface\r\n */\r\n\r\n// import { Point2d } from \"./Geometry2d\";\r\n/* eslint-disable @typescript-eslint/naming-convention, no-empty */\r\nimport { BagOfCurves, CurveCollection } from \"../curve/CurveCollection\";\r\nimport { CurveLocationDetail } from \"../curve/CurveLocationDetail\";\r\nimport { LineSegment3d } from \"../curve/LineSegment3d\";\r\nimport { LineString3d } from \"../curve/LineString3d\";\r\nimport { Loop } from \"../curve/Loop\";\r\nimport { StrokeOptions } from \"../curve/StrokeOptions\";\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Angle } from \"../geometry3d/Angle\";\r\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\r\nimport { Plane3dByOriginAndUnitNormal } from \"../geometry3d/Plane3dByOriginAndUnitNormal\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { PolygonOps } from \"../geometry3d/PolygonOps\";\r\nimport { Range3d } from \"../geometry3d/Range\";\r\nimport { Matrix4d } from \"../geometry4d/Matrix4d\";\r\nimport { MomentData } from \"../geometry4d/MomentData\";\r\nimport { UnionFindContext } from \"../numerics/UnionFind\";\r\nimport { ChainMergeContext } from \"../topology/ChainMerge\";\r\nimport { FacetOrientationFixup } from \"./FacetOrientation\";\r\nimport { IndexedEdgeMatcher, SortableEdge, SortableEdgeCluster } from \"./IndexedEdgeMatcher\";\r\nimport { IndexedPolyfaceSubsetVisitor } from \"./IndexedPolyfaceVisitor\";\r\nimport { BuildAverageNormalsContext } from \"./multiclip/BuildAverageNormalsContext\";\r\nimport { SweepLineStringToFacetContext } from \"./multiclip/SweepLineStringToFacetContext\";\r\nimport { XYPointBuckets } from \"./multiclip/XYPointBuckets\";\r\nimport { IndexedPolyface, Polyface, PolyfaceVisitor } from \"./Polyface\";\r\nimport { PolyfaceBuilder } from \"./PolyfaceBuilder\";\r\nimport { RangeLengthData } from \"./RangeLengthData\";\r\n\r\n/**\r\n * Structure to return multiple results from volume between facets and plane\r\n * @public\r\n */\r\nexport interface FacetProjectedVolumeSums {\r\n /** Summed (signed) volume */\r\n volume: number;\r\n /** summed area moments for positive contributions */\r\n positiveProjectedFacetAreaMoments?: MomentData;\r\n /** summed area moments for negative contributions */\r\n negativeProjectedFacetAreaMoments?: MomentData;\r\n}\r\n/**\r\n * Enumeration of cases for retaining facets among duplicates\r\n * @public\r\n */\r\nexport enum DuplicateFacetClusterSelector {\r\n /** retain none of the duplicates */\r\n SelectNone = 0,\r\n /** retain any one member among duplicates */\r\n SelectAny = 1,\r\n /** retain all members among duplicates */\r\n SelectAll = 2,\r\n /** retain one from any cluster with an odd number of faces */\r\n SelectOneByParity = 3,\r\n}\r\n/** PolyfaceQuery is a static class whose methods implement queries on a polyface or polyface visitor provided as a parameter to each method.\r\n * @public\r\n */\r\nexport class PolyfaceQuery {\r\n /** copy the points from a visitor into a Linestring3d in a Loop object */\r\n public static visitorToLoop(visitor: PolyfaceVisitor) {\r\n const ls = LineString3d.createPoints(visitor.point.getPoint3dArray());\r\n return Loop.create(ls);\r\n }\r\n /** Create a linestring loop for each facet of the polyface. */\r\n public static indexedPolyfaceToLoops(polyface: Polyface): BagOfCurves {\r\n const result = BagOfCurves.create();\r\n const visitor = polyface.createVisitor(1);\r\n while (visitor.moveToNextFacet()) {\r\n const loop = PolyfaceQuery.visitorToLoop(visitor);\r\n result.tryAddChild(loop);\r\n }\r\n return result;\r\n }\r\n /** Return the sum of all facet areas.\r\n * @param vectorToEye compute facet area projected to a view plane perpendicular to this vector\r\n */\r\n public static sumFacetAreas(source: Polyface | PolyfaceVisitor | undefined, vectorToEye?: Vector3d): number {\r\n let s = 0;\r\n if (source !== undefined) {\r\n if (source instanceof Polyface)\r\n return PolyfaceQuery.sumFacetAreas(source.createVisitor(1), vectorToEye);\r\n let unitVectorToEye: Vector3d | undefined;\r\n if (vectorToEye !== undefined)\r\n unitVectorToEye = vectorToEye.normalize();\r\n source.reset();\r\n while (source.moveToNextFacet()) {\r\n const scaledNormal = PolygonOps.areaNormal(source.point.getPoint3dArray());\r\n let area = scaledNormal.magnitude();\r\n if (unitVectorToEye !== undefined) {\r\n const scale = Geometry.conditionalDivideCoordinate(1.0, area);\r\n if (scale !== undefined)\r\n area *= scaledNormal.dotProduct(unitVectorToEye) * scale;\r\n }\r\n s += area;\r\n }\r\n }\r\n return s;\r\n }\r\n /** sum volumes of tetrahedra from origin to all facets.\r\n * * if origin is omitted, the first point encountered (by the visitor) is used as origin.\r\n * * If the mesh is closed, this sum is the volume.\r\n * * If the mesh is not closed, this sum is the volume of a mesh with various additional facets\r\n * from the origin to facets.\r\n */\r\n public static sumTetrahedralVolumes(source: Polyface | PolyfaceVisitor, origin?: Point3d): number {\r\n let s = 0;\r\n if (source instanceof Polyface)\r\n return PolyfaceQuery.sumTetrahedralVolumes(source.createVisitor(0), origin);\r\n let myOrigin = origin;\r\n const facetOrigin = Point3d.create();\r\n const targetA = Point3d.create();\r\n const targetB = Point3d.create();\r\n source.reset();\r\n while (source.moveToNextFacet()) {\r\n if (myOrigin === undefined)\r\n myOrigin = source.point.getPoint3dAtUncheckedPointIndex(0);\r\n source.point.getPoint3dAtUncheckedPointIndex(0, facetOrigin);\r\n for (let i = 1; i + 1 < source.point.length; i++) {\r\n source.point.getPoint3dAtUncheckedPointIndex(i, targetA);\r\n source.point.getPoint3dAtUncheckedPointIndex(i + 1, targetB);\r\n s += myOrigin.tripleProductToPoints(facetOrigin, targetA, targetB);\r\n }\r\n }\r\n return s / 6.0;\r\n }\r\n /** sum (signed) volumes between facets and a plane.\r\n * Return a structure with multiple sums:\r\n * * volume = the sum of (signed) volumes between facets and the plane.\r\n * * positiveAreaMomentData, negativeProjectedFacetAreaMoments = moment data with centroid, area, and second moments with respect to the centroid.\r\n *\r\n */\r\n public static sumVolumeBetweenFacetsAndPlane(source: Polyface | PolyfaceVisitor, plane: Plane3dByOriginAndUnitNormal): FacetProjectedVolumeSums {\r\n if (source instanceof Polyface)\r\n return PolyfaceQuery.sumVolumeBetweenFacetsAndPlane(source.createVisitor(0), plane);\r\n const facetOrigin = Point3d.create();\r\n const targetA = Point3d.create();\r\n const targetB = Point3d.create();\r\n const triangleNormal = Vector3d.create();\r\n const planeNormal = plane.getNormalRef();\r\n let h0, hA, hB;\r\n let signedVolumeSum = 0.0;\r\n let signedTriangleArea;\r\n let singleFacetArea;\r\n const positiveAreaMomentSums = MomentData.create(undefined, true);\r\n const negativeAreaMomentSums = MomentData.create(undefined, true);\r\n const singleFacetProducts = Matrix4d.createZero();\r\n const projectToPlane = plane.getProjectionToPlane();\r\n\r\n source.reset();\r\n // For each facet ..\r\n // Form triangles from facet origin to each far edge.\r\n // Sum signed area and volume contributions\r\n // each \"projectedArea\" contribution is twice the area of a triangle.\r\n // each volume contribution is 3 times the actual volume -- (1/3) of the altitude sums was the centroid altitude.\r\n while (source.moveToNextFacet()) {\r\n source.point.getPoint3dAtUncheckedPointIndex(0, facetOrigin);\r\n h0 = plane.altitude(facetOrigin);\r\n singleFacetArea = 0;\r\n // within a single facets, the singleFacetArea sum is accumulated with signs of individual triangles.\r\n // For a non-convex facet, this can be a mixture of positive and negative areas.\r\n // The absoluteProjectedAreaSum contribution is forced positive after the sum for the facet.\r\n for (let i = 1; i + 1 < source.point.length; i++) {\r\n source.point.getPoint3dAtUncheckedPointIndex(i, targetA);\r\n source.point.getPoint3dAtUncheckedPointIndex(i + 1, targetB);\r\n facetOrigin.crossProductToPoints(targetA, targetB, triangleNormal);\r\n hA = plane.altitude(targetA);\r\n hB = plane.altitude(targetB);\r\n signedTriangleArea = planeNormal.dotProduct(triangleNormal);\r\n singleFacetArea += signedTriangleArea;\r\n signedVolumeSum += signedTriangleArea * (h0 + hA + hB);\r\n }\r\n\r\n singleFacetProducts.setZero();\r\n source.point.multiplyTransformInPlace(projectToPlane);\r\n PolygonOps.addSecondMomentAreaProducts(source.point, facetOrigin, singleFacetProducts);\r\n\r\n if (singleFacetArea > 0) {\r\n positiveAreaMomentSums.accumulateProductsFromOrigin(facetOrigin, singleFacetProducts, 1.0);\r\n } else {\r\n negativeAreaMomentSums.accumulateProductsFromOrigin(facetOrigin, singleFacetProducts, 1.0);\r\n\r\n }\r\n }\r\n positiveAreaMomentSums.shiftOriginAndSumsToCentroidOfSums();\r\n negativeAreaMomentSums.shiftOriginAndSumsToCentroidOfSums();\r\n const positiveAreaMoments = MomentData.inertiaProductsToPrincipalAxes(positiveAreaMomentSums.origin, positiveAreaMomentSums.sums);\r\n const negativeAreaMoments = MomentData.inertiaProductsToPrincipalAxes(negativeAreaMomentSums.origin, negativeAreaMomentSums.sums);\r\n\r\n return {\r\n volume: signedVolumeSum / 6.0,\r\n positiveProjectedFacetAreaMoments: positiveAreaMoments,\r\n negativeProjectedFacetAreaMoments: negativeAreaMoments,\r\n };\r\n }\r\n\r\n /** Return the inertia products [xx,xy,xz,xw, yw, etc] integrated over all all facets, as viewed from origin. */\r\n public static sumFacetSecondAreaMomentProducts(source: Polyface | PolyfaceVisitor, origin: Point3d): Matrix4d {\r\n if (source instanceof Polyface)\r\n return PolyfaceQuery.sumFacetSecondAreaMomentProducts(source.createVisitor(0), origin);\r\n const products = Matrix4d.createZero();\r\n source.reset();\r\n while (source.moveToNextFacet()) {\r\n PolygonOps.addSecondMomentAreaProducts(source.point, origin, products);\r\n }\r\n return products;\r\n }\r\n /** Return the inertia products [xx,xy,xz,xw, yw, etc] integrated over all tetrahedral volumes from origin */\r\n public static sumFacetSecondVolumeMomentProducts(source: Polyface | PolyfaceVisitor, origin: Point3d): Matrix4d {\r\n if (source instanceof Polyface)\r\n return PolyfaceQuery.sumFacetSecondVolumeMomentProducts(source.createVisitor(0), origin);\r\n const products = Matrix4d.createZero();\r\n source.reset();\r\n while (source.moveToNextFacet()) {\r\n PolygonOps.addSecondMomentVolumeProducts(source.point, origin, products);\r\n }\r\n return products;\r\n }\r\n\r\n /** Compute area moments for the mesh. In the returned MomentData:\r\n * * origin is the centroid.\r\n * * localToWorldMap has the origin and principal directions\r\n * * radiiOfGyration radii for rotation around the x,y,z axes.\r\n */\r\n public static computePrincipalAreaMoments(source: Polyface): MomentData | undefined {\r\n const origin = source.data.getPoint(0);\r\n if (!origin) return undefined;\r\n const inertiaProducts = PolyfaceQuery.sumFacetSecondAreaMomentProducts(source, origin);\r\n return MomentData.inertiaProductsToPrincipalAxes(origin, inertiaProducts);\r\n }\r\n /** Compute area moments for the mesh. In the returned MomentData:\r\n * * origin is the centroid.\r\n * * localToWorldMap has the origin and principal directions\r\n * * radiiOfGyration radii for rotation around the x,y,z axes.\r\n * * The result is only valid if the mesh is closed.\r\n * * There is no test for closure. Use `PolyfaceQuery.isPolyfaceClosedByEdgePairing(polyface)` to test for closure.\r\n */\r\n public static computePrincipalVolumeMoments(source: Polyface): MomentData | undefined {\r\n const origin = source.data.getPoint(0);\r\n if (!origin) return undefined;\r\n const inertiaProducts = PolyfaceQuery.sumFacetSecondVolumeMomentProducts(source, origin);\r\n return MomentData.inertiaProductsToPrincipalAxes(origin, inertiaProducts);\r\n }\r\n\r\n /**\r\n * Test if the facets in `source` occur in perfectly mated pairs, as is required for a closed manifold volume.\r\n */\r\n public static isPolyfaceClosedByEdgePairing(source: Polyface): boolean {\r\n return this.isPolyfaceManifold(source, false);\r\n }\r\n /** Test edges pairing in `source` mesh.\r\n * * for `allowSimpleBoundaries === false` true return means this is a closed 2-manifold surface\r\n * * for `allowSimpleBoundaries === true` true means this is a 2-manifold surface which may have boundary, but is still properly matched internally.\r\n * * Any edge with 3 or more incident facets triggers `false` return.\r\n * * Any edge with 2 incident facets in the same direction triggers a `false` return.\r\n */\r\n public static isPolyfaceManifold(source: Polyface, allowSimpleBoundaries: boolean = false): boolean {\r\n const edges = new IndexedEdgeMatcher();\r\n const visitor = source.createVisitor(1);\r\n visitor.reset();\r\n while (visitor.moveToNextFacet()) {\r\n const numEdges = visitor.pointCount - 1;\r\n for (let i = 0; i < numEdges; i++) {\r\n edges.addEdge(visitor.clientPointIndex(i), visitor.clientPointIndex(i + 1), visitor.currentReadIndex());\r\n }\r\n }\r\n const badClusters: SortableEdgeCluster[] = [];\r\n edges.sortAndCollectClusters(undefined, allowSimpleBoundaries ? undefined : badClusters, undefined, badClusters);\r\n return badClusters.length === 0;\r\n }\r\n\r\n /**\r\n * Test if the facets in `source` occur in perfectly mated pairs, as is required for a closed manifold volume.\r\n * If not, extract the boundary edges as lines.\r\n * @param source\r\n */\r\n public static boundaryEdges(source: Polyface | PolyfaceVisitor | undefined, includeDanglers: boolean = true, includeMismatch: boolean = true, includeNull: boolean = true): CurveCollection | undefined {\r\n if (source === undefined)\r\n return undefined;\r\n const edges = new IndexedEdgeMatcher();\r\n const visitor = source instanceof Polyface ? source.createVisitor(1) : source;\r\n visitor.reset();\r\n while (visitor.moveToNextFacet()) {\r\n const numEdges = visitor.pointCount - 1;\r\n for (let i = 0; i < numEdges; i++) {\r\n edges.addEdge(visitor.clientPointIndex(i), visitor.clientPointIndex(i + 1), visitor.currentReadIndex());\r\n }\r\n }\r\n const bad1: SortableEdgeCluster[] = [];\r\n const bad2: SortableEdgeCluster[] = [];\r\n const bad0: SortableEdgeCluster[] = [];\r\n edges.sortAndCollectClusters(undefined, bad1, bad0, bad2);\r\n const badList = [];\r\n if (includeDanglers && bad1.length > 0)\r\n badList.push(bad1);\r\n if (includeMismatch && bad2.length > 0)\r\n badList.push(bad2);\r\n if (includeNull && bad0.length > 0)\r\n badList.push(bad0);\r\n if (badList.length === 0)\r\n return undefined;\r\n const sourcePolyface = visitor.clientPolyface()!;\r\n const result = new BagOfCurves();\r\n for (const list of badList) {\r\n for (const e of list) {\r\n const e1 = e instanceof SortableEdge ? e : e[0];\r\n const indexA = e1.vertexIndexA;\r\n const indexB = e1.vertexIndexB;\r\n const pointA = sourcePolyface.data.getPoint(indexA);\r\n const pointB = sourcePolyface.data.getPoint(indexB);\r\n if (pointA && pointB)\r\n result.tryAddChild(LineSegment3d.create(pointA, pointB));\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /** Find segments (within the linestring) which project to facets.\r\n * * Announce each pair of linestring segment and on-facet segment through a callback.\r\n * * Facets are ASSUMED to be convex and planar.\r\n */\r\n public static announceSweepLinestringToConvexPolyfaceXY(linestringPoints: GrowableXYZArray, polyface: Polyface,\r\n announce: AnnounceDrapePanel): any {\r\n const context = SweepLineStringToFacetContext.create(linestringPoints);\r\n if (context) {\r\n const visitor = polyface.createVisitor(0);\r\n for (visitor.reset(); visitor.moveToNextFacet();) {\r\n context.projectToPolygon(visitor.point, announce, polyface, visitor.currentReadIndex());\r\n }\r\n }\r\n }\r\n\r\n /** Execute context.projectToPolygon until its work estimates accumulate to workLimit */\r\n private static async continueAnnounceSweepLinestringToConvexPolyfaceXY(\r\n context: SweepLineStringToFacetContext, visitor: PolyfaceVisitor, announce: AnnounceDrapePanel): Promise<number> {\r\n let workCount = 0;\r\n while ((workCount < this.asyncWorkLimit) && visitor.moveToNextFacet()) {\r\n workCount += context.projectToPolygon(visitor.point, announce, visitor.clientPolyface()!, visitor.currentReadIndex());\r\n }\r\n return workCount;\r\n }\r\n // amount of computation to do per step of async methods.\r\n private static _asyncWorkLimit = 1.e06;\r\n /** Set the limit on work during an async time blocks, and return the old value.\r\n * * This should be a large number -- default is 1.0e6\r\n * @internal\r\n */\r\n public static setAsyncWorkLimit(value: number): number { const a = this._asyncWorkLimit; this._asyncWorkLimit = value; return a; }\r\n /** Query the current limit on work during an async time block.\r\n * @internal\r\n */\r\n public static get asyncWorkLimit(): number { return this._asyncWorkLimit; }\r\n /** Number of \"await\" steps executed in recent async calls.\r\n * @internal\r\n */\r\n public static awaitBlockCount = 0;\r\n\r\n /** Find segments (within the linestring) which project to facets.\r\n * * Announce each pair of linestring segment and on-facet segment through a callback.\r\n * * Facets are ASSUMED to be convex and planar.\r\n * * REMARK: Although this is public, the usual use is via slightly higher level public methods, viz:\r\n * * asyncSweepLinestringToFacetsXYReturnChains\r\n * @internal\r\n */\r\n public static async asyncAnnounceSweepLinestringToConvexPolyfaceXY(linestringPoints: GrowableXYZArray, polyface: Polyface,\r\n announce: AnnounceDrapePanel): Promise<number> {\r\n const context = SweepLineStringToFacetContext.create(linestringPoints);\r\n this.awaitBlockCount = 0;\r\n let workTotal = 0;\r\n if (context) {\r\n const visitor = polyface.createVisitor(0);\r\n let workCount;\r\n while (0 < (workCount = await Promise.resolve(PolyfaceQuery.continueAnnounceSweepLinestringToConvexPolyfaceXY(context, visitor, announce)))) {\r\n workTotal += workCount;\r\n this.awaitBlockCount++;\r\n // console.log({ myWorkCount: workCount, myBlockCount: this.awaitBlockCount });\r\n }\r\n }\r\n // eslint-disable-next-line no-console\r\n // console.log({ myWorkTotal: workTotal, myBlockCount: this.awaitBlockCount });\r\n return workTotal;\r\n }\r\n\r\n /** Search the facets for facet subsets that are connected with at least vertex contact.\r\n * * Return array of arrays of facet indices.\r\n */\r\n public static partitionFacetIndicesByVertexConnectedComponent(polyface: Polyface | PolyfaceVisitor): number[][] {\r\n if (polyface instanceof Polyface) {\r\n return this.partitionFacetIndicesByVertexConnectedComponent(polyface.createVisitor(0));\r\n }\r\n // The polyface is really a visitor !!!\r\n const context = new UnionFindContext(this.visitorClientPointCount(polyface));\r\n for (polyface.reset(); polyface.moveToNextFacet();) {\r\n const firstVertexIndexOnThisFacet = polyface.pointIndex[0];\r\n for (const vertexIndex of polyface.pointIndex)\r\n context.mergeSubsets(firstVertexIndexOnThisFacet, vertexIndex);\r\n }\r\n const roots = context.collectRootIndices();\r\n const facetsInComponent: number[][] = [];\r\n const numRoots = roots.length;\r\n for (let i = 0; i < numRoots; i++) {\r\n facetsInComponent.push([]);\r\n }\r\n for (polyface.reset(); polyface.moveToNextFacet();) {\r\n const firstVertexIndexOnThisFacet = polyface.pointIndex[0];\r\n const rootVertexForThisFacet = context.findRoot(firstVertexIndexOnThisFacet);\r\n for (let rootIndex = 0; rootIndex < numRoots; rootIndex++) {\r\n if (roots[rootIndex] === rootVertexForThisFacet) {\r\n facetsInComponent[rootIndex].push(polyface.currentReadIndex());\r\n break;\r\n }\r\n }\r\n }\r\n return facetsInComponent;\r\n }\r\n /**\r\n * * Examine the normal orientation for each faces.\r\n * * Separate to 3 partitions:\r\n * * facets with normal in the positive direction of the vectorToEye (partition 0)\r\n * * facets with normal in the negative direction of the vectorToEye (partition 1)\r\n * * facets nearly perpendicular to the view vector (partition 2)\r\n * * Return array of arrays of facet indices.\r\n */\r\n public static partitionFacetIndicesByVisibilityVector(polyface: Polyface | PolyfaceVisitor, vectorToEye: Vector3d, sideAngleTolerance: Angle): number[][] {\r\n if (polyface instanceof Polyface) {\r\n return this.partitionFacetIndicesByVisibilityVector(polyface.createVisitor(0), vectorToEye, sideAngleTolerance);\r\n }\r\n const facetsInComponent: number[][] = [];\r\n for (let i = 0; i < 3; i++) {\r\n facetsInComponent.push([]);\r\n }\r\n const forwardComponent = facetsInComponent[0];\r\n const rearComponent = facetsInComponent[1];\r\n const sideComponent = facetsInComponent[2];\r\n const radiansTol = Math.max(sideAngleTolerance.radians, 1.0e-8);\r\n for (polyface.reset(); polyface.moveToNextFacet();) {\r\n const areaNormal = PolygonOps.areaNormalGo(polyface.point);\r\n const index = polyface.currentReadIndex();\r\n if (areaNormal) {\r\n const angle = areaNormal.angleFromPerpendicular(vectorToEye);\r\n if (Math.abs(angle.radians) < radiansTol) {\r\n sideComponent.push(index);\r\n } else if (areaNormal.dotProduct(vectorToEye) < 0) {\r\n rearComponent.push(index);\r\n } else {\r\n forwardComponent.push(index);\r\n }\r\n }\r\n }\r\n return facetsInComponent;\r\n }\r\n\r\n /**\r\n * Return the boundary of facets that are facing the eye.\r\n * @param polyface\r\n * @param visibilitySubset selector among the visible facet sets extracted by partitionFacetIndicesByVisibilityVector\r\n * * 0 ==> forward facing\r\n * * 1 ==> rear facing\r\n * * 2 ==> side facing\r\n * @param vectorToEye\r\n * @param sideAngleTolerance\r\n */\r\n public static boundaryOfVisibleSubset(polyface: IndexedPolyface, visibilitySelect: 0 | 1 | 2, vectorToEye: Vector3d, sideAngleTolerance: Angle = Angle.createDegrees(1.0e-3)): CurveCollection | undefined {\r\n const partitionedIndices = this.partitionFacetIndicesByVisibilityVector(polyface, vectorToEye, sideAngleTolerance);\r\n if (partitionedIndices[visibilitySelect].length === 0)\r\n return undefined;\r\n const visitor = IndexedPolyfaceSubsetVisitor.createSubsetVisitor(polyface, partitionedIndices[visibilitySelect], 1);\r\n return this.boundaryEdges(visitor, true, false, false);\r\n }\r\n\r\n /** Clone the facets in each partition to a separate polyface.\r\n *\r\n */\r\n public static clonePartitions(polyface: Polyface | PolyfaceVisitor, partitions: number[][]): Polyface[] {\r\n if (polyface instanceof Polyface) {\r\n return this.clonePartitions(polyface.createVisitor(0), partitions);\r\n }\r\n polyface.setNumWrap(0);\r\n const polyfaces: Polyface[] = [];\r\n const options = StrokeOptions.createForFacets();\r\n options.needNormals = polyface.normal !== undefined;\r\n options.needParams = polyface.param !== undefined;\r\n options.needColors = polyface.color !== undefined;\r\n options.needTwoSided = polyface.twoSided;\r\n for (const partition of partitions) {\r\n const builder = PolyfaceBuilder.create(options);\r\n polyface.reset();\r\n for (const facetIndex of partition) {\r\n polyface.moveToReadIndex(facetIndex);\r\n builder.addFacetFromVisitor(polyface);\r\n }\r\n polyfaces.push(builder.claimPolyface(true));\r\n }\r\n return polyfaces;\r\n }\r\n\r\n /** Clone facets that pass an filter function\r\n */\r\n public static cloneFiltered(source: Polyface | PolyfaceVisitor, filter: (visitor: PolyfaceVisitor) => boolean): Polyface{\r\n if (source instanceof Polyface) {\r\n return this.cloneFiltered(source.createVisitor(0), filter);\r\n }\r\n source.setNumWrap(0);\r\n const options = StrokeOptions.createForFacets();\r\n options.needNormals = source.normal !== undefined;\r\n options.needParams = source.param !== undefined;\r\n options.needColors = source.color !== undefined;\r\n options.needTwoSided = source.twoSided;\r\n const builder = PolyfaceBuilder.create(options);\r\n source.reset();\r\n for (; source.moveToNextFacet();){\r\n if (filter (source))\r\n builder.addFacetFromVisitor(source);\r\n }\r\n return builder.claimPolyface(true);\r\n }\r\n /** If the visitor's client is a polyface, simply return its point array length.\r\n * If not a polyface, visit all facets to find the largest index.\r\n */\r\n private static visitorClientPointCount(visitor: PolyfaceVisitor): number {\r\n const polyface = visitor.clientPolyface();\r\n if (polyface !== undefined)\r\n return polyface.data.point.length;\r\n visitor.reset();\r\n let maxIndex = -1;\r\n while (visitor.moveToNextFacet()) {\r\n for (const pointIndex of visitor.pointIndex)\r\n if (pointIndex > maxIndex)\r\n maxIndex = pointIndex;\r\n }\r\n return maxIndex + 1;\r\n }\r\n\r\n /** Search the facets for facet subsets that are connected with at least edge contact.\r\n * * Return array of arrays of facet indices.\r\n */\r\n public static partitionFacetIndicesByEdgeConnectedComponent(polyface: Polyface | PolyfaceVisitor): number[][] {\r\n if (polyface instanceof Polyface) {\r\n return this.partitionFacetIndicesByEdgeConnectedComponent(polyface.createVisitor(0));\r\n }\r\n polyface.setNumWrap(1);\r\n const matcher = new IndexedEdgeMatcher();\r\n polyface.reset();\r\n let numFacets = 0;\r\n while (polyface.moveToNextFacet()) {\r\n const numEdges = polyface.pointCount - 1;\r\n numFacets++;\r\n for (let i = 0; i < numEdges; i++) {\r\n matcher.addEdge(polyface.clientPointIndex(i), polyface.clientPointIndex(i + 1), polyface.currentReadIndex());\r\n }\r\n }\r\n const allEdges: SortableEdgeCluster[] = [];\r\n matcher.sortAndCollectClusters(allEdges, allEdges, allEdges, allEdges);\r\n const context = new UnionFindContext(numFacets);\r\n for (const cluster of allEdges) {\r\n if (cluster instanceof SortableEdge) {\r\n // this edge does not connect anywhere. Ignore it!!\r\n } else {\r\n const edge0 = cluster[0];\r\n for (let i = 1; i < cluster.length; i++)\r\n context.mergeSubsets(edge0.facetIndex, cluster[i].facetIndex);\r\n }\r\n }\r\n\r\n const roots = context.collectRootIndices();\r\n const facetsInComponent: number[][] = [];\r\n const numRoots = roots.length;\r\n for (let i = 0; i < numRoots; i++) {\r\n facetsInComponent.push([]);\r\n }\r\n\r\n for (let facetIndex = 0; facetIndex < numFacets; facetIndex++) {\r\n const rootOfFacet = context.findRoot(facetIndex);\r\n for (let rootIndex = 0; rootIndex < numRoots; rootIndex++) {\r\n if (roots[rootIndex] === rootOfFacet) {\r\n facetsInComponent[rootIndex].push(facetIndex);\r\n break;\r\n }\r\n }\r\n }\r\n return facetsInComponent;\r\n }\r\n /** Find segments (within the linestring) which project to facets.\r\n * * Assemble each segment pair as a facet in a new polyface\r\n * * Facets are ASSUMED to be convex and planar.\r\n */\r\n public static sweepLinestringToFacetsXYreturnSweptFacets(linestringPoints: GrowableXYZArray, polyface: Polyface): Polyface {\r\n const builder = PolyfaceBuilder.create();\r\n this.announceSweepLinestringToConvexPolyfaceXY(linestringPoints, polyface,\r\n (_linestring: GrowableXYZArray, _segmentIndex: number,\r\n _polyface: Polyface, _facetIndex: number, points: Point3d[]) => {\r\n if (points.length === 4)\r\n builder.addQuadFacet(points);\r\n else if (points.length === 3)\r\n builder.addTriangleFacet(points);\r\n\r\n });\r\n return builder.claimPolyface(true);\r\n }\r\n /** Find segments (within the linestring) which project to facets.\r\n * * Return collected line segments\r\n */\r\n public static sweepLinestringToFacetsXYReturnLines(linestringPoints: GrowableXYZArray, polyface: Polyface): LineSegment3d[] {\r\n const drapeGeometry: LineSegment3d[] = [];\r\n this.announceSweepLinestringToConvexPolyfaceXY(linestringPoints, polyface,\r\n (_linestring: GrowableXYZArray, _segmentIndex: number,\r\n _polyface: Polyface, _facetIndex: number, points: Point3d[], indexA: number, indexB: number) => {\r\n drapeGeometry.push(LineSegment3d.create(points[indexA], points[indexB]));\r\n });\r\n return drapeGeometry;\r\n }\r\n\r\n /** Find segments (within the linestring) which project to facets.\r\n * * Return chains.\r\n */\r\n public static sweepLinestringToFacetsXYReturnChains(linestringPoints: GrowableXYZArray, polyface: Polyface): LineString3d[] {\r\n const chainContext = ChainMergeContext.create();\r\n\r\n this.announceSweepLinestringToConvexPolyfaceXY(linestringPoints, polyface,\r\n (_linestring: GrowableXYZArray, _segmentIndex: number,\r\n _polyface: Polyface, _facetIndex: number, points: Point3d[], indexA: number, indexB: number) => {\r\n chainContext.addSegment(points[indexA], points[indexB]);\r\n });\r\n chainContext.clusterAndMergeVerticesXYZ();\r\n return chainContext.collectMaximalChains();\r\n }\r\n /** Find segments (within the linestring) which project to facets.\r\n * * This is done as a sequence of \"await\" steps.\r\n * * Each \"await\" step deals with approximately PolyfaceQuery.asyncWorkLimit pairings of (linestring edge) with (facet edge)\r\n * * PolyfaceQuery.setAsyncWorkLimit () to change work blocks from default\r\n * * Return chains.\r\n */\r\n public static async asyncSweepLinestringToFacetsXYReturnChains(linestringPoints: GrowableXYZArray, polyface: Polyface): Promise<LineString3d[]> {\r\n const chainContext = ChainMergeContext.create();\r\n\r\n await Promise.resolve(this.asyncAnnounceSweepLinestringToConvexPolyfaceXY(linestringPoints, polyface,\r\n (_linestring: GrowableXYZArray, _segmentIndex: number,\r\n _polyface: Polyface, _facetIndex: number, points: Point3d[], indexA: number, indexB: number) => {\r\n chainContext.addSegment(points[indexA], points[indexB]);\r\n }));\r\n chainContext.clusterAndMergeVerticesXYZ();\r\n const chains = chainContext.collectMaximalChains();\r\n return chains;\r\n }\r\n\r\n /**\r\n * * Examine ranges of facets.\r\n * * Return statistical summary of x,y,z ranges.\r\n */\r\n public static collectRangeLengthData(polyface: Polyface | PolyfaceVisitor): RangeLengthData {\r\n if (polyface instanceof Polyface) {\r\n return this.collectRangeLengthData(polyface.createVisitor(0));\r\n }\r\n const rangeData = new RangeLengthData();\r\n // polyface is a visitor ...\r\n for (polyface.reset(); polyface.moveToNextFacet();)\r\n rangeData.accumulateGrowableXYZArrayRange(polyface.point);\r\n return rangeData;\r\n }\r\n\r\n /** Clone the facets, inserting vertices (within edges) where points not part of each facet's vertex indices impinge within edges.\r\n *\r\n */\r\n public static cloneWithTVertexFixup(polyface: Polyface): IndexedPolyface {\r\n const oldFacetVisitor = polyface.createVisitor(1); // This is to visit the existing facets.\r\n const newFacetVisitor = polyface.createVisitor(0); // This is to build the new facets.\r\n const rangeSearcher = XYPointBuckets.create(polyface.data.point, 30)!;\r\n const builder = PolyfaceBuilder.create();\r\n const edgeRange = Range3d.createNull();\r\n const point0 = Point3d.create();\r\n const point1 = Point3d.create();\r\n const spacePoint = Point3d.create();\r\n const segment = LineSegment3d.create(point0, point1);\r\n\r\n for (oldFacetVisitor.reset(); oldFacetVisitor.moveToNextFacet();) {\r\n newFacetVisitor.clearArrays();\r\n for (let i = 0; i + 1 < oldFacetVisitor.point.length; i++) {\r\n // each base vertex is part of the result ...\r\n oldFacetVisitor.point.getPoint3dAtUncheckedPointIndex(i, point0);\r\n oldFacetVisitor.point.getPoint3dAtUncheckedPointIndex(i + 1, point1);\r\n newFacetVisitor.pushDataFrom(oldFacetVisitor, i);\r\n edgeRange.setNull();\r\n LineSegment3d.create(point0, point1, segment);\r\n let detailArray: CurveLocationDetail[] | undefined;\r\n edgeRange.extend(point0);\r\n edgeRange.extend(point1);\r\n rangeSearcher.announcePointsInRange(edgeRange, (index: number, _x: number, _y: number, _z: number) => {\r\n // x,y,z has x,y within the range of the search ... test for exact on (in full 3d!)\r\n polyface.data.point.getPoint3dAtUncheckedPointIndex(index, spacePoint);\r\n const detail = segment.closestPoint(spacePoint, false);\r\n if (undefined !== detail) {\r\n if (detail.fraction >= 0.0 && detail.fraction < 1.0 && !detail.point.isAlmostEqual(point0) && !detail.point.isAlmostEqual(point1)\r\n && spacePoint.isAlmostEqual(detail.point)) {\r\n if (detailArray === undefined)\r\n detailArray = [];\r\n detail.a = index;\r\n detailArray.push(detail);\r\n }\r\n }\r\n return true;\r\n });\r\n if (detailArray !== undefined) {\r\n detailArray.sort((a: CurveLocationDetail, b: CurveLocationDetail) => (a.fraction - b.fraction));\r\n for (const d of detailArray) {\r\n newFacetVisitor.pushInterpolatedDataFrom(oldFacetVisitor, i, d.fraction, i + 1);\r\n }\r\n }\r\n }\r\n builder.addFacetFromGrowableArrays(newFacetVisitor.point, newFacetVisitor.normal, newFacetVisitor.param, newFacetVisitor.color);\r\n }\r\n\r\n return builder.claimPolyface();\r\n }\r\n /**\r\n * * Each array input structure is: [facetIndex, vertexIndex0, vertexIndex1, ....]\r\n * * Vertex indices assumed reversed so it\r\n * * vertexIndex0 is the lowest index on the facet\r\n * * vertexIndex1 is the lowest neighbor of vertex0\r\n * * first different entry among vertex indices determines lexical result.\r\n * * Hence facets with duplicate indices (whether forward or reversed) are considered equal.\r\n * @param arrayA\r\n * @param arrayB\r\n */\r\n private static compareFacetIndexAndVertexIndices(arrayA: number[], arrayB: number[]): number {\r\n if (arrayA.length !== arrayB.length)\r\n return arrayA.length - arrayB.length;\r\n for (let i = 1; i < arrayA.length; i++) {\r\n if (arrayA[i] !== arrayB[i]) {\r\n return arrayA[i] - arrayB[i];\r\n }\r\n }\r\n return 0;\r\n }\r\n /**\r\n * * Return an array of arrays describing facet duplication.\r\n * @param includeSingletons if true, non-duplicated facets are included in the output.\r\n * * Each array `entry` in the output contains read indices of a cluster of facets with the same vertex indices.\r\n */\r\n public static collectDuplicateFacetIndices(polyface: Polyface, includeSingletons: boolean = false): number[][] {\r\n const result: number[][] = [];\r\n this.announceDuplicateFacetIndices(polyface,\r\n (clusterFacetIndices: number[]) => {\r\n if (includeSingletons || clusterFacetIndices.length > 1)\r\n result.push(clusterFacetIndices.slice());\r\n });\r\n return result;\r\n }\r\n /**\r\n * * Return an array of arrays describing facet duplication.\r\n * @param includeSingletons if true, non-duplicated facets are included in the output.\r\n * * Each array `entry` in the output contains read indices of a cluster of facets with the same vertex indices.\r\n */\r\n public static announceDuplicateFacetIndices(polyface: Polyface, announceCluster: (clusterFacetIndices: number[]) => void) {\r\n const visitor = polyface.createVisitor(0); // This is to visit the existing facets.\r\n const facetIndexAndVertexIndices: number[][] = [];\r\n for (visitor.reset(); visitor.moveToNextFacet();) {\r\n const facetIndex = visitor.currentReadIndex();\r\n const entry = [facetIndex];\r\n const pointIndex = visitor.pointIndex;\r\n const numPointsThisFacet = pointIndex.length;\r\n let lowIndex = 0;\r\n // find the lowest point index ...\r\n for (let i = 1; i < visitor.pointIndex.length; i++) {\r\n if (pointIndex[i] < pointIndex[lowIndex])\r\n lowIndex = i;\r\n }\r\n // find its lowest neighbor -- assemble sort array in that direction\r\n if (pointIndex[(lowIndex + 1) % numPointsThisFacet] < pointIndex[(lowIndex + numPointsThisFacet - 1) % numPointsThisFacet]) {\r\n for (let i = 0; i < numPointsThisFacet; i++) {\r\n entry.push(pointIndex[(lowIndex + i) % numPointsThisFacet]);\r\n }\r\n } else {\r\n for (let i = 0; i < numPointsThisFacet; i++) {\r\n entry.push(pointIndex[(lowIndex + numPointsThisFacet - i) % numPointsThisFacet]);\r\n }\r\n }\r\n facetIndexAndVertexIndices.push(entry);\r\n }\r\n facetIndexAndVertexIndices.sort(this.compareFacetIndexAndVertexIndices);\r\n let i0, i1;\r\n const n = facetIndexAndVertexIndices.length;\r\n const clusterArray = [];\r\n for (i0 = 0; i0 < n; i0 = i1) {\r\n i1 = i0 + 1;\r\n clusterArray.length = 0;\r\n clusterArray.push(facetIndexAndVertexIndices[i0][0]);\r\n while (i1 < n && 0 === this.compareFacetIndexAndVertexIndices(facetIndexAndVertexIndices[i0], facetIndexAndVertexIndices[i1])) {\r\n clusterArray.push(facetIndexAndVertexIndices[i1][0]);\r\n i1++;\r\n }\r\n announceCluster(clusterArray);\r\n }\r\n }\r\n /** Return a new facet set with a subset of facets in source\r\n * @param includeSingletons true to copy facets that only appear once\r\n * @param clusterSelector indicates whether duplicate clusters are to have 0, 1, or all facets included\r\n */\r\n public static cloneByFacetDuplication(source: Polyface, includeSingletons: boolean, clusterSelector: DuplicateFacetClusterSelector): Polyface {\r\n const builder = PolyfaceBuilder.create();\r\n const visitor = source.createVisitor(0);\r\n this.announceDuplicateFacetIndices(source,\r\n (clusterFacetIndices: number[]) => {\r\n let numToSelect = 0;\r\n if (clusterFacetIndices.length === 1) {\r\n if (includeSingletons)\r\n numToSelect = 1;\r\n } else if (clusterFacetIndices.length > 1) {\r\n if (clusterSelector === DuplicateFacetClusterSelector.SelectAny)\r\n numToSelect = 1;\r\n else if (clusterSelector === DuplicateFacetClusterSelector.SelectAll)\r\n numToSelect = clusterFacetIndices.length;\r\n else if (clusterSelector === DuplicateFacetClusterSelector.SelectOneByParity)\r\n numToSelect = (clusterFacetIndices.length & 0x01) === 0x01 ? 1 : 0;\r\n }\r\n for (let i = 0; i < numToSelect; i++) {\r\n visitor.moveToReadIndex(clusterFacetIndices[i]);\r\n builder.addFacetFromVisitor(visitor);\r\n }\r\n });\r\n return builder.claimPolyface();\r\n }\r\n /** Clone the facets, inserting removing points that are simply within colinear edges.\r\n *\r\n */\r\n public static cloneWithColinearEdgeFixup(polyface: Polyface): Polyface {\r\n const oldFacetVisitor = polyface.createVisitor(2); // This is to visit the existing facets.\r\n const newFacetVisitor = polyface.createVisitor(0); // This is to build the new facets.\r\n const builder = PolyfaceBuilder.create();\r\n const vector01 = Vector3d.create();\r\n const vector12 = Vector3d.create();\r\n const numPoint = polyface.data.point.length;\r\n const pointState = new Int32Array(numPoint);\r\n // FIRST PASS -- in each sector of each facet, determine if the sector has colinear incoming and outgoing vectors.\r\n // Mark each point as\r\n // 0 unvisited\r\n // -1 incident to a non-colinear sector\r\n // n incident to n colinear sectors\r\n for (oldFacetVisitor.reset(); oldFacetVisitor.moveToNextFacet();) {\r\n for (let i = 0; i + 2 < oldFacetVisitor.point.length; i++) {\r\n // each base vertex is part of the result ...\r\n oldFacetVisitor.point.vectorIndexIndex(i, i + 1, vector01);\r\n oldFacetVisitor.point.vectorIndexIndex(i + 1, i + 2, vector12);\r\n const pointIndex = oldFacetVisitor.clientPointIndex(i + 1);\r\n if (pointState[pointIndex] >= 0) {\r\n const theta = vector01.angleTo(vector12);\r\n if (theta.isAlmostZero) {\r\n pointState[pointIndex]++;\r\n } else {\r\n pointState[pointIndex] = -1;\r\n }\r\n }\r\n }\r\n }\r\n // SECOND PASS -- make copies, omitting references to points at colinear sectors\r\n for (oldFacetVisitor.reset(); oldFacetVisitor.moveToNextFacet();) {\r\n newFacetVisitor.clearArrays();\r\n for (let i = 0; i + 2 < oldFacetVisitor.point.length; i++) {\r\n const pointIndex = oldFacetVisitor.clientPointIndex(i);\r\n if (pointState[pointIndex] < 0) {\r\n newFacetVisitor.pushDataFrom(oldFacetVisitor, i);\r\n }\r\n }\r\n if (newFacetVisitor.point.length > 2)\r\n builder.addFacetFromGrowableArrays(newFacetVisitor.point, newFacetVisitor.normal, newFacetVisitor.param, newFacetVisitor.color);\r\n }\r\n return builder.claimPolyface();\r\n }\r\n\r\n /**\r\n * Set the edge visibility for specified edges in the polyface.\r\n * @param polyface mesh to be edited\r\n * @param clusters array of edge references\r\n * @param value visibility value (true or false)\r\n */\r\n private static setEdgeVisibility(polyface: IndexedPolyface, clusters: SortableEdgeCluster[], value: boolean) {\r\n for (const cluster of clusters) {\r\n if (cluster instanceof SortableEdge) {\r\n this.setSingleEdgeVisibility(polyface, cluster.facetIndex, cluster.vertexIndexA, value);\r\n } else if (Array.isArray(cluster)) {\r\n for (const e1 of cluster)\r\n this.setSingleEdgeVisibility(polyface, e1.facetIndex, e1.vertexIndexA, value);\r\n }\r\n }\r\n }\r\n /**\r\n * Set the visibility of a particular edge of a particular facet.\r\n * @param polyface containing polyface\r\n * @param facetIndex facet index\r\n * @param vertexIndex vertex index (in vertex array)\r\n * @param value visibility value.\r\n */\r\n public static setSingleEdgeVisibility(polyface: IndexedPolyface, facetIndex: number, vertexIndex: number, value: boolean) {\r\n const data = polyface.data;\r\n const index0 = polyface.facetIndex0(facetIndex);\r\n const index1 = polyface.facetIndex1(facetIndex);\r\n for (let i = index0; i < index1; i++)\r\n if (data.pointIndex[i] === vertexIndex)\r\n data.edgeVisible[i] = value;\r\n }\r\n /** Load all half edges from a mesh to an IndexedEdgeMatcher.\r\n * @param polyface a mesh, or a visitor assumed to have numWrap === 1\r\n */\r\n public static createIndexedEdges(polyface: Polyface | PolyfaceVisitor): IndexedEdgeMatcher {\r\n if (polyface instanceof Polyface)\r\n return this.createIndexedEdges(polyface.createVisitor(1));\r\n const edges = new IndexedEdgeMatcher();\r\n polyface.reset();\r\n while (polyface.moveToNextFacet()) {\r\n const numEdges = polyface.pointCount - 1;\r\n for (let i = 0; i < numEdges; i++) {\r\n edges.addEdge(polyface.clientPointIndex(i), polyface.clientPointIndex(i + 1), polyface.currentReadIndex());\r\n }\r\n }\r\n return edges;\r\n }\r\n /**\r\n * * Find mated pairs among facet edges.\r\n * * Mated pairs have the same vertex indices appearing in opposite order.\r\n * * Mark all non-mated pairs invisible.\r\n * * At mated pairs\r\n * * if angle across the edge is larger than `sharpEdgeAngle`, mark visible\r\n * * otherwise mark invisible.\r\n * @param mesh mesh to be marked\r\n */\r\n public static markPairedEdgesInvisible(mesh: IndexedPolyface, sharpEdgeAngle?: Angle) {\r\n const visitor = mesh.createVisitor(1);\r\n const edges = this.createIndexedEdges(visitor);\r\n\r\n const pairedEdges: SortableEdgeCluster[] = [];\r\n const boundaryEdges: SortableEdgeCluster[] = [];\r\n edges.sortAndCollectClusters(pairedEdges, boundaryEdges, boundaryEdges, boundaryEdges);\r\n this.markAllEdgeVisibility(mesh, false);\r\n this.setEdgeVisibility(mesh, boundaryEdges, true);\r\n if (sharpEdgeAngle !== undefined) {\r\n const normal0 = Vector3d.create();\r\n const normal1 = Vector3d.create();\r\n for (const pair of pairedEdges) {\r\n if (Array.isArray(pair) && pair.length === 2) {\r\n const e0 = pair[0];\r\n const e1 = pair[1];\r\n if (undefined !== PolyfaceQuery.computeFacetUnitNormal(visitor, e0.facetIndex, normal0)\r\n && undefined !== PolyfaceQuery.computeFacetUnitNormal(visitor, e1.facetIndex, normal1)) {\r\n const edgeAngle = normal0.smallerUnorientedAngleTo(normal1);\r\n if (edgeAngle.radians > sharpEdgeAngle.radians) {\r\n this.setSingleEdgeVisibility(mesh, e0.facetIndex, e0.vertexIndexA, true);\r\n this.setSingleEdgeVisibility(mesh, e1.facetIndex, e1.vertexIndexA, true);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n /** Try to compute a unit normal for a facet accessible through a visitor.\r\n * * Unit normal is computed by `PolygonOps.unitNormal` with the points around the facet.\r\n */\r\n public static computeFacetUnitNormal(visitor: PolyfaceVisitor, facetIndex: number, result?: Vector3d): Vector3d | undefined {\r\n if (!result)\r\n result = Vector3d.create();\r\n if (visitor.moveToReadIndex(facetIndex)) {\r\n if (PolygonOps.unitNormal(visitor.point, result))\r\n return result;\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * * Mark all edge visibilities in the IndexedPolyface\r\n * @param mesh mesh to be marked\r\n * @param value true for visible, false for hidden\r\n */\r\n\r\n public static markAllEdgeVisibility(mesh: IndexedPolyface, value: boolean) {\r\n const data = mesh.data;\r\n for (let i = 0; i < data.edgeVisible.length; i++)\r\n data.edgeVisible[i] = value;\r\n }\r\n /**\r\n * * Examine adjacent facet orientations throughout the mesh\r\n * * If possible, reverse a subset to achieve proper pairing.\r\n * @param mesh\r\n */\r\n public static reorientVertexOrderAroundFacetsForConsistentOrientation(mesh: IndexedPolyface): boolean {\r\n return FacetOrientationFixup.doFixup(mesh);\r\n }\r\n\r\n /**\r\n * Set up indexed normals with one normal in the plane of each facet of the mesh.\r\n * @param polyface\r\n */\r\n public static buildPerFaceNormals(polyface: IndexedPolyface) {\r\n BuildAverageNormalsContext.buildPerFaceNormals(polyface);\r\n }\r\n\r\n /**\r\n * * At each vertex of the mesh\r\n * * Find clusters of almost parallel normals\r\n * * Compute simple average of those normals\r\n * * Index to the averages\r\n * * For typical meshes, this correctly clusters adjacent normals.\r\n * * One cam imagine a vertex with multiple \"smooth cone-like\" sets of incident facets such that averaging occurs among two nonadjacent cones. But this does not seem to be a problem in practice.\r\n * @param polyface polyface to update.\r\n * @param toleranceAngle averaging is done between normals up to this angle.\r\n */\r\n public static buildAverageNormals(polyface: IndexedPolyface, toleranceAngle: Angle = Angle.createDegrees(31.0)) {\r\n BuildAverageNormalsContext.buildFastAverageNormals(polyface, toleranceAngle);\r\n }\r\n\r\n}\r\n\r\n/** Announce the points on a drape panel.\r\n * * The first two points in the array are always along the draped line segment.\r\n * * The last two are always on the facet.\r\n * * If there are 4 points, those two pairs are distinct, i.e. both segment points are to the same side of the facet.\r\n * * If there are 3 points, those two pairs share an on-facet point.\r\n * * The panel is ordered so the outward normal is to the right of the draped segment.\r\n * @param indexAOnFacet index (in points) of the point that is the first facet point for moving forward along the linestring\r\n * @param indexBOnFacet index (in points) of the point that is the second facet point for moving forward along the linestring\r\n * @public\r\n */\r\nexport type AnnounceDrapePanel = (linestring: GrowableXYZArray, segmentIndex: number,\r\n polyface: Polyface, facetIndex: number, points: Point3d[], indexAOnFacet: number, indexBOnFacet: number) => any;\r\n\r\n"]}
|
|
@@ -130,6 +130,8 @@ export declare class Sample {
|
|
|
130
130
|
* order varies from 2 to 5
|
|
131
131
|
*/
|
|
132
132
|
static createBspline3dHCurves(): BSplineCurve3dH[];
|
|
133
|
+
/** Create various orders of non-rational B-spline curves with helical poles */
|
|
134
|
+
static createBsplineCurveHelices(radius: number, height: number, numTurns: number, numSamplesPerTurn: number): BSplineCurve3d[];
|
|
133
135
|
/** Create weighted bsplines for circular arcs.
|
|
134
136
|
*/
|
|
135
137
|
static createBspline3dHArcs(): BSplineCurve3dH[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeometrySamples.d.ts","sourceRoot":"","sources":["../../../src/serialization/GeometrySamples.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GeometrySamples.d.ts","sourceRoot":"","sources":["../../../src/serialization/GeometrySamples.ts"],"names":[],"mappings":"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"}
|
|
@@ -278,6 +278,26 @@ class Sample {
|
|
|
278
278
|
}
|
|
279
279
|
return result;
|
|
280
280
|
}
|
|
281
|
+
/** Create various orders of non-rational B-spline curves with helical poles */
|
|
282
|
+
static createBsplineCurveHelices(radius, height, numTurns, numSamplesPerTurn) {
|
|
283
|
+
const pts = [];
|
|
284
|
+
const zDelta = (height / numTurns) / numSamplesPerTurn;
|
|
285
|
+
const aDelta = 2 * Math.PI / numSamplesPerTurn;
|
|
286
|
+
for (let iTurn = 0; iTurn < numTurns; ++iTurn) {
|
|
287
|
+
for (let iSample = 0; iSample < numSamplesPerTurn; iSample++) {
|
|
288
|
+
pts.push(Point3dVector3d_1.Point3d.create(radius * Math.cos(iSample * aDelta), radius * Math.sin(iSample * aDelta), pts.length * zDelta));
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
const result = [];
|
|
292
|
+
for (const order of [2, 3, 4, 9, 16, 25]) {
|
|
293
|
+
if (order > pts.length)
|
|
294
|
+
continue;
|
|
295
|
+
const curve = BSplineCurve_1.BSplineCurve3d.createUniformKnots(pts, order);
|
|
296
|
+
if (curve !== undefined)
|
|
297
|
+
result.push(curve);
|
|
298
|
+
}
|
|
299
|
+
return result;
|
|
300
|
+
}
|
|
281
301
|
/** Create weighted bsplines for circular arcs.
|
|
282
302
|
*/
|
|
283
303
|
static createBspline3dHArcs() {
|