@metamesh/modeling 0.14.0 → 0.15.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 +42 -0
- package/README.md +25 -10
- package/dist/api/engine.d.ts +11 -4
- package/dist/api/geometry.d.ts +345 -341
- package/dist/api/index.d.ts +262 -144
- package/dist/api/text.d.ts +3 -1
- package/dist/docs/guides/concepts.md +22 -7
- package/dist/docs/guides/fundamentals.md +8 -5
- package/dist/docs/guides/hosting.md +21 -11
- package/dist/docs/guides/recipes.md +42 -21
- package/dist/docs/manifest.json +710 -507
- package/dist/docs/reference/engine/Export3mfOptions.md +1 -1
- package/dist/docs/reference/engine/ExportMeshPart.md +1 -1
- package/dist/docs/reference/engine/GenerationOptions.md +1 -1
- package/dist/docs/reference/engine/GeometryResource.md +1 -1
- package/dist/docs/reference/engine/ModelDependencies.md +1 -1
- package/dist/docs/reference/engine/ModelEngine.md +1 -1
- package/dist/docs/reference/engine/ModelEngineOptions.md +4 -8
- package/dist/docs/reference/engine/ModelSession.md +1 -1
- package/dist/docs/reference/engine/ModelSnapshot.md +20 -9
- package/dist/docs/reference/engine/SessionOptions.md +1 -1
- package/dist/docs/reference/engine/SnapshotPart.md +2 -2
- package/dist/docs/reference/engine/categories/host-lifecycle.md +2 -2
- package/dist/docs/reference/engine/createModelEngine.md +3 -3
- package/dist/docs/reference/engine/defaultModelingLimits.md +1 -1
- package/dist/docs/reference/engine/modelingWasmUrl.md +1 -1
- package/dist/docs/reference/engine/validateModel.md +1 -1
- package/dist/docs/reference/engine.md +2 -2
- package/dist/docs/reference/geometry/AcmeThreadProfileSpec.md +1 -1
- package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +4 -4
- package/dist/docs/reference/geometry/{Anchor3.md → Anchor3-type.md} +1 -1
- package/dist/docs/reference/geometry/ArcCurve2.md +5 -5
- package/dist/docs/reference/geometry/ArcCurve3.md +5 -5
- package/dist/docs/reference/geometry/{AttachTransformOptions.md → AttachOptions.md} +10 -5
- package/dist/docs/reference/geometry/AxisAngleRotation3.md +1 -1
- package/dist/docs/reference/geometry/Bounds2.md +1 -1
- package/dist/docs/reference/geometry/Bounds3.md +1 -1
- package/dist/docs/reference/geometry/BoundsFit2.md +1 -1
- package/dist/docs/reference/geometry/BoundsFit3.md +1 -1
- package/dist/docs/reference/geometry/BoundsFitOptions.md +1 -1
- package/dist/docs/reference/geometry/BoundsFromSizeOptions.md +1 -1
- package/dist/docs/reference/geometry/BoxAnchorFace.md +1 -1
- package/dist/docs/reference/geometry/BoxAnchorOptions.md +1 -1
- package/dist/docs/reference/geometry/BoxEdge.md +1 -1
- package/dist/docs/reference/geometry/BoxEdgeSelection.md +1 -1
- package/dist/docs/reference/geometry/BoxEdgeTreatments.md +1 -1
- package/dist/docs/reference/geometry/BoxOptions.md +8 -8
- package/dist/docs/reference/geometry/ButtressPressureFlankSide.md +1 -1
- package/dist/docs/reference/geometry/ButtressThreadProfileSpec.md +1 -1
- package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +1 -1
- package/dist/docs/reference/geometry/CircleContourOptions.md +1 -1
- package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +1 -1
- package/dist/docs/reference/geometry/CircularResolutionOptions.md +7 -7
- package/dist/docs/reference/geometry/ClearanceHoleDimensions.md +1 -1
- package/dist/docs/reference/geometry/ClearanceHoleFit.md +1 -1
- package/dist/docs/reference/geometry/CompensatedThreadDiameters.md +1 -1
- package/dist/docs/reference/geometry/Contour.md +1 -1
- package/dist/docs/reference/geometry/ContourCurve.md +1 -1
- package/dist/docs/reference/geometry/ContourPoint.md +1 -1
- package/dist/docs/reference/geometry/ContourSegment.md +1 -1
- package/dist/docs/reference/geometry/CorrespondingComponent.md +1 -1
- package/dist/docs/reference/geometry/CorrespondingContour.md +1 -1
- package/dist/docs/reference/geometry/CorrespondingProfile.md +1 -1
- package/dist/docs/reference/geometry/CorrespondingProfileStation.md +1 -1
- package/dist/docs/reference/geometry/CubicBezierCurve2.md +1 -1
- package/dist/docs/reference/geometry/CubicBezierCurve3.md +1 -1
- package/dist/docs/reference/geometry/Curve2.md +1 -1
- package/dist/docs/reference/geometry/Curve3.md +1 -1
- package/dist/docs/reference/geometry/CurveSamplingOptions.md +5 -3
- package/dist/docs/reference/geometry/CustomThreadProfileSpec.md +1 -1
- package/dist/docs/reference/geometry/CylinderAnchorFace.md +1 -1
- package/dist/docs/reference/geometry/CylinderAnchorOptions.md +3 -3
- package/dist/docs/reference/geometry/CylinderOptions.md +3 -3
- package/dist/docs/reference/geometry/CylindricalGearDimensions.md +3 -3
- package/dist/docs/reference/geometry/CylindricalGearMeshKind.md +1 -1
- package/dist/docs/reference/geometry/CylindricalGearOutlineOptions.md +1 -1
- package/dist/docs/reference/geometry/CylindricalGearPairDimensions.md +3 -3
- package/dist/docs/reference/geometry/CylindricalGearPairMotionOptions.md +1 -1
- package/dist/docs/reference/geometry/CylindricalGearPairMotionReport.md +1 -1
- package/dist/docs/reference/geometry/CylindricalGearPairSpec.md +1 -1
- package/dist/docs/reference/geometry/CylindricalGearSpec.md +6 -6
- package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +1 -1
- package/dist/docs/reference/geometry/EdgeTreatment.md +1 -1
- package/dist/docs/reference/geometry/EllipseContourOptions.md +1 -1
- package/dist/docs/reference/geometry/EndTreatments.md +1 -1
- package/dist/docs/reference/geometry/ExtrudeOptions.md +6 -6
- package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +5 -5
- package/dist/docs/reference/geometry/FittedTextLayout.md +1 -1
- package/dist/docs/reference/geometry/Frame3.md +1 -1
- package/dist/docs/reference/geometry/GeometryError.md +1 -1
- package/dist/docs/reference/geometry/GeometryErrorCode.md +1 -1
- package/dist/docs/reference/geometry/GeometryErrorContext.md +1 -1
- package/dist/docs/reference/geometry/GeometryResolution.md +5 -5
- package/dist/docs/reference/geometry/GeometrySamplingLimits.md +1 -1
- package/dist/docs/reference/geometry/GeometryToleranceOptions.md +1 -1
- package/dist/docs/reference/geometry/GridPatternOptions.md +9 -3
- package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +1 -1
- package/dist/docs/reference/geometry/HeightfieldOptions.md +1 -1
- package/dist/docs/reference/geometry/HeightfieldPreflight.md +1 -1
- package/dist/docs/reference/geometry/HelicalThreadRidgeMeshOptions.md +5 -5
- package/dist/docs/reference/geometry/HelicalThreadSolidMeshOptions.md +6 -6
- package/dist/docs/reference/geometry/HelicalThreadSolidMeshPreflight.md +1 -1
- package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +1 -1
- package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +6 -6
- package/dist/docs/reference/geometry/LineCurve2.md +1 -1
- package/dist/docs/reference/geometry/LineCurve3.md +1 -1
- package/dist/docs/reference/geometry/LinearPatternOptions.md +12 -5
- package/dist/docs/reference/geometry/LoftCorrespondence.md +1 -1
- package/dist/docs/reference/geometry/LoftMeshStation.md +4 -4
- package/dist/docs/reference/geometry/LoftOptions.md +1 -1
- package/dist/docs/reference/geometry/LoftPlacement.md +1 -1
- package/dist/docs/reference/geometry/METRIC_FASTENER_STANDARDS.md +1 -1
- package/dist/docs/reference/geometry/MatchProfilesOptions.md +1 -1
- package/dist/docs/reference/geometry/MetricFastenerSize.md +1 -1
- package/dist/docs/reference/geometry/MetricFastenerStandard.md +1 -1
- package/dist/docs/reference/geometry/MetricHexNutDimensions.md +1 -1
- package/dist/docs/reference/geometry/MetricSocketCapHeadDimensions.md +1 -1
- package/dist/docs/reference/geometry/ModelingLimits.md +1 -1
- package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +1 -1
- package/dist/docs/reference/geometry/Path2-type.md +192 -0
- package/dist/docs/reference/geometry/Path2Data.md +14 -0
- package/dist/docs/reference/geometry/Path2Input.md +15 -0
- package/dist/docs/reference/geometry/Path3-type.md +192 -0
- package/dist/docs/reference/geometry/Path3Data.md +14 -0
- package/dist/docs/reference/geometry/Path3Input.md +15 -0
- package/dist/docs/reference/geometry/PathFrame.md +1 -1
- package/dist/docs/reference/geometry/PathLocation.md +65 -0
- package/dist/docs/reference/geometry/PathNormalGuide.md +4 -3
- package/dist/docs/reference/geometry/PathOptions.md +34 -0
- package/dist/docs/reference/geometry/PathPatternOptions.md +3 -3
- package/dist/docs/reference/geometry/PathPlacement.md +1 -1
- package/dist/docs/reference/geometry/PathResamplingOptions.md +80 -0
- package/dist/docs/reference/geometry/Pivot2Options.md +1 -1
- package/dist/docs/reference/geometry/Pivot3Options.md +1 -1
- package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +1 -1
- package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +22 -22
- package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +1 -1
- package/dist/docs/reference/geometry/PlanarPatchQuality.md +1 -1
- package/dist/docs/reference/geometry/PolygonData.md +1 -1
- package/dist/docs/reference/geometry/PolylineResamplingOptions.md +4 -4
- package/dist/docs/reference/geometry/PrimitiveAttachment.md +31 -0
- package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +104 -0
- package/dist/docs/reference/geometry/PrintableThreadFit.md +1 -1
- package/dist/docs/reference/geometry/PrintableThreadFitPolicy.md +1 -1
- package/dist/docs/reference/geometry/Profile.md +1 -1
- package/dist/docs/reference/geometry/ProfileComponent2.md +1 -1
- package/dist/docs/reference/geometry/ProfileContour2.md +1 -1
- package/dist/docs/reference/geometry/ProfileSpan2.md +2 -2
- package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +1 -1
- package/dist/docs/reference/geometry/RackPitchDimensions.md +1 -1
- package/dist/docs/reference/geometry/RackPitchSpec.md +5 -5
- package/dist/docs/reference/geometry/RadialPatternOptions.md +17 -22
- package/dist/docs/reference/geometry/RadialSizing.md +1 -1
- package/dist/docs/reference/geometry/RadialSizingOptions.md +1 -1
- package/dist/docs/reference/geometry/RectangleContourOptions.md +1 -1
- package/dist/docs/reference/geometry/RectangleCornerTreatment.md +1 -1
- package/dist/docs/reference/geometry/RectangleCornerTreatments.md +1 -1
- package/dist/docs/reference/geometry/RectangleProfileOptions.md +1 -1
- package/dist/docs/reference/geometry/RegionData.md +1 -1
- package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +3 -3
- package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +1 -1
- package/dist/docs/reference/geometry/RevolveOptions.md +9 -4
- package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +1 -1
- package/dist/docs/reference/geometry/RowLayoutOptions.md +1 -1
- package/dist/docs/reference/geometry/SampleContourOptions.md +3 -3
- package/dist/docs/reference/geometry/SampleHelixOptions.md +1 -1
- package/dist/docs/reference/geometry/SampleSideProfileOptions.md +3 -3
- package/dist/docs/reference/geometry/SampledCurve2.md +1 -1
- package/dist/docs/reference/geometry/SampledCurve3.md +1 -1
- package/dist/docs/reference/geometry/SampledThreadHelices.md +3 -3
- package/dist/docs/reference/geometry/SideProfileCurve.md +1 -1
- package/dist/docs/reference/geometry/SideProfilePoint.md +1 -1
- package/dist/docs/reference/geometry/SideProfileSegment.md +1 -1
- package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +1 -1
- package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +3 -3
- package/dist/docs/reference/geometry/SphereOptions.md +3 -3
- package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +1 -1
- package/dist/docs/reference/geometry/StrokeCap.md +7 -0
- package/dist/docs/reference/geometry/StrokeJoin.md +7 -0
- package/dist/docs/reference/geometry/{StrokePathRegionOptions.md → StrokeOptions.md} +7 -7
- package/dist/docs/reference/geometry/SvgImportOptions.md +1 -1
- package/dist/docs/reference/geometry/SvgRegionPreflight.md +1 -1
- package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +13 -13
- package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +11 -11
- package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +9 -9
- package/dist/docs/reference/geometry/SweepOptions.md +6 -6
- package/dist/docs/reference/geometry/SweepOrientation.md +7 -7
- package/dist/docs/reference/geometry/ThreadBevelOptions.md +1 -1
- package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +5 -5
- package/dist/docs/reference/geometry/ThreadCompensationOptions.md +1 -1
- package/dist/docs/reference/geometry/ThreadEndStyle.md +1 -1
- package/dist/docs/reference/geometry/ThreadEndTreatmentOptions.md +1 -1
- package/dist/docs/reference/geometry/ThreadHandedness.md +1 -1
- package/dist/docs/reference/geometry/ThreadHelixOptions.md +3 -3
- package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +1 -1
- package/dist/docs/reference/geometry/ThreadLeadInShape.md +1 -1
- package/dist/docs/reference/geometry/{ThreadProfile.md → ThreadProfile-type.md} +1 -1
- package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +1 -1
- package/dist/docs/reference/geometry/ThreadProfileSpec.md +1 -1
- package/dist/docs/reference/geometry/ThreadRole.md +1 -1
- package/dist/docs/reference/geometry/ThreadedNutBevel.md +1 -1
- package/dist/docs/reference/geometry/ThreadedNutOptions.md +6 -6
- package/dist/docs/reference/geometry/ThreadedNutPreflight.md +1 -1
- package/dist/docs/reference/geometry/ThreadedNutShape.md +1 -1
- package/dist/docs/reference/geometry/ThreadedRodOptions.md +6 -6
- package/dist/docs/reference/geometry/TorusOptions.md +8 -8
- package/dist/docs/reference/geometry/Transform2-type.md +1 -1
- package/dist/docs/reference/geometry/Transform2Input.md +1 -1
- package/dist/docs/reference/geometry/Transform2Matrix.md +1 -1
- package/dist/docs/reference/geometry/Transform3-type.md +1 -1
- package/dist/docs/reference/geometry/Transform3Input.md +1 -1
- package/dist/docs/reference/geometry/Transform3Matrix.md +1 -1
- package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +5 -4
- package/dist/docs/reference/geometry/TriangleMesh.md +1 -1
- package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +2 -2
- package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +1 -1
- package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +1 -1
- package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +3 -3
- package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +1 -1
- package/dist/docs/reference/geometry/TriangleMeshSignature.md +2 -2
- package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +3 -3
- package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +1 -1
- package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +1 -1
- package/dist/docs/reference/geometry/TriangularThreadProfileSpec.md +1 -1
- package/dist/docs/reference/geometry/TubeOptions.md +8 -8
- package/dist/docs/reference/geometry/Vector2-type.md +1 -1
- package/dist/docs/reference/geometry/Vector2Input.md +1 -1
- package/dist/docs/reference/geometry/Vector2Tuple.md +1 -1
- package/dist/docs/reference/geometry/Vector3-type.md +1 -1
- package/dist/docs/reference/geometry/Vector3Input.md +1 -1
- package/dist/docs/reference/geometry/Vector3Tuple.md +1 -1
- package/dist/docs/reference/geometry/VectorTextArcBaseline.md +3 -3
- package/dist/docs/reference/geometry/VectorTextLayout.md +1 -1
- package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +1 -1
- package/dist/docs/reference/geometry/VectorTextMetrics.md +1 -1
- package/dist/docs/reference/geometry/VectorTextOptions.md +1 -1
- package/dist/docs/reference/geometry/add2.md +1 -1
- package/dist/docs/reference/geometry/add3.md +1 -1
- package/dist/docs/reference/geometry/analyzeTriangleMesh.md +1 -1
- package/dist/docs/reference/geometry/analyzeTriangleMeshQuality.md +2 -2
- package/dist/docs/reference/geometry/{createAnchor3.md → anchor3.md} +9 -9
- package/dist/docs/reference/geometry/anchorFrame3.md +5 -5
- package/dist/docs/reference/geometry/applyTransformDirection3.md +1 -1
- package/dist/docs/reference/geometry/applyTransformPoint3.md +1 -1
- package/dist/docs/reference/geometry/{attachTransform.md → attachmentTransform3.md} +13 -13
- package/dist/docs/reference/geometry/boundsCenter.md +1 -1
- package/dist/docs/reference/geometry/boundsFromSize.md +1 -1
- package/dist/docs/reference/geometry/boundsSize.md +1 -1
- package/dist/docs/reference/geometry/boxAnchor3.md +4 -4
- package/dist/docs/reference/geometry/categories/bounds-layout.md +1 -1
- package/dist/docs/reference/geometry/categories/curves-paths.md +15 -13
- package/dist/docs/reference/geometry/categories/mechanical.md +6 -6
- package/dist/docs/reference/geometry/categories/meshes.md +3 -4
- package/dist/docs/reference/geometry/categories/pattern-placement.md +6 -6
- package/dist/docs/reference/geometry/categories/primitive-options.md +4 -4
- package/dist/docs/reference/geometry/categories/profiles-regions.md +2 -3
- package/dist/docs/reference/geometry/categories/resolution-errors.md +1 -1
- package/dist/docs/reference/geometry/categories/transforms-math.md +5 -5
- package/dist/docs/reference/geometry/categories/vector-import.md +5 -5
- package/dist/docs/reference/geometry/circleContour.md +1 -1
- package/dist/docs/reference/geometry/closeToAxis.md +1 -1
- package/dist/docs/reference/geometry/compensateThreadDiameters.md +1 -1
- package/dist/docs/reference/geometry/compensateThreadProfileAxially.md +5 -5
- package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +5 -5
- package/dist/docs/reference/geometry/composeTransform3.md +1 -1
- package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +10 -6
- package/dist/docs/reference/geometry/computeParallelTransportFrames.md +8 -7
- package/dist/docs/reference/geometry/computeTriangleMeshCentroid.md +1 -1
- package/dist/docs/reference/geometry/{createTriangleMeshSignature.md → computeTriangleMeshSignature.md} +4 -4
- package/dist/docs/reference/geometry/containsBounds.md +1 -1
- package/dist/docs/reference/geometry/contourContainsPoint.md +1 -1
- package/dist/docs/reference/geometry/cross2.md +1 -1
- package/dist/docs/reference/geometry/cross3.md +1 -1
- package/dist/docs/reference/geometry/cylinderAnchor3.md +5 -5
- package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +1 -1
- package/dist/docs/reference/geometry/distance2.md +1 -1
- package/dist/docs/reference/geometry/distance3.md +1 -1
- package/dist/docs/reference/geometry/distributeAlongPath.md +8 -6
- package/dist/docs/reference/geometry/dot2.md +1 -1
- package/dist/docs/reference/geometry/dot3.md +1 -1
- package/dist/docs/reference/geometry/ellipseContour.md +1 -1
- package/dist/docs/reference/geometry/eulerTransform3.md +1 -1
- package/dist/docs/reference/geometry/extrudeMesh.md +8 -8
- package/dist/docs/reference/geometry/fitBounds.md +1 -1
- package/dist/docs/reference/geometry/fitTextLayout.md +1 -1
- package/dist/docs/reference/geometry/frameTransform3.md +1 -1
- package/dist/docs/reference/geometry/{getMetricClearanceHole.md → getMetricClearanceHoleDiameter.md} +3 -3
- package/dist/docs/reference/geometry/getMetricFastenerStandard.md +1 -1
- package/dist/docs/reference/geometry/gridPatternTransforms.md +2 -2
- package/dist/docs/reference/geometry/heightfieldMesh.md +1 -1
- package/dist/docs/reference/geometry/{buildHelicalThreadRidgeMesh.md → helicalThreadRidgeMesh.md} +5 -5
- package/dist/docs/reference/geometry/{buildHelicalThreadSolidMesh.md → helicalThreadSolidMesh.md} +5 -5
- package/dist/docs/reference/geometry/inverseTransform3.md +1 -1
- package/dist/docs/reference/geometry/isGeometryError.md +1 -1
- package/dist/docs/reference/geometry/joinTriangleMeshes.md +1 -1
- package/dist/docs/reference/geometry/layoutRow.md +1 -1
- package/dist/docs/reference/geometry/length2.md +1 -1
- package/dist/docs/reference/geometry/length3.md +1 -1
- package/dist/docs/reference/geometry/lerp2.md +1 -1
- package/dist/docs/reference/geometry/lerp3.md +1 -1
- package/dist/docs/reference/geometry/linearPatternTransforms.md +2 -2
- package/dist/docs/reference/geometry/loftMesh.md +2 -1
- package/dist/docs/reference/geometry/matchProfiles.md +1 -1
- package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +1 -1
- package/dist/docs/reference/geometry/meshBounds.md +1 -1
- package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +3 -3
- package/dist/docs/reference/geometry/normalize2.md +1 -1
- package/dist/docs/reference/geometry/normalize3.md +1 -1
- package/dist/docs/reference/geometry/normalizeContour.md +1 -1
- package/dist/docs/reference/geometry/normalizePolygon.md +1 -1
- package/dist/docs/reference/geometry/normalizeRegion.md +1 -1
- package/dist/docs/reference/geometry/optimizePlanarPatches.md +11 -11
- package/dist/docs/reference/geometry/path2.md +42 -0
- package/dist/docs/reference/geometry/path3.md +42 -0
- package/dist/docs/reference/geometry/pathPatternTransforms.md +6 -6
- package/dist/docs/reference/geometry/preflightHeightfield.md +1 -1
- package/dist/docs/reference/geometry/preflightHelicalThreadSolidMesh.md +3 -3
- package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +3 -3
- package/dist/docs/reference/geometry/preflightSvgRegion.md +1 -1
- package/dist/docs/reference/geometry/preflightThreadedNut.md +3 -3
- package/dist/docs/reference/geometry/preflightThreadedRod.md +3 -3
- package/dist/docs/reference/geometry/projectOntoPlane3.md +1 -1
- package/dist/docs/reference/geometry/radialPatternTransforms.md +1 -17
- package/dist/docs/reference/geometry/rectangleContour.md +1 -1
- package/dist/docs/reference/geometry/rectangleProfile.md +1 -1
- package/dist/docs/reference/geometry/regionArea.md +1 -1
- package/dist/docs/reference/geometry/regionBounds.md +1 -1
- package/dist/docs/reference/geometry/regularPolygonContour.md +2 -2
- package/dist/docs/reference/geometry/resamplePolyline2.md +2 -2
- package/dist/docs/reference/geometry/resamplePolyline3.md +2 -2
- package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +4 -4
- package/dist/docs/reference/geometry/resolveArcSegments.md +4 -4
- package/dist/docs/reference/geometry/resolveCircularSegments.md +1 -1
- package/dist/docs/reference/geometry/resolveCylindricalGear.md +1 -1
- package/dist/docs/reference/geometry/resolveCylindricalGearPair.md +1 -1
- package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +3 -3
- package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +1 -1
- package/dist/docs/reference/geometry/resolveGeometryTolerance.md +1 -1
- package/dist/docs/reference/geometry/resolvePrintableThreadFitPolicy.md +1 -1
- package/dist/docs/reference/geometry/resolveRackPitch.md +1 -1
- package/dist/docs/reference/geometry/resolveThreadCircularSegments.md +4 -4
- package/dist/docs/reference/geometry/reverseTriangleMesh.md +1 -1
- package/dist/docs/reference/geometry/revolveMesh.md +10 -10
- package/dist/docs/reference/geometry/rotate2.md +1 -1
- package/dist/docs/reference/geometry/rotationTransform3.md +1 -1
- package/dist/docs/reference/geometry/roundClosedPolylinePath.md +6 -4
- package/dist/docs/reference/geometry/sampleContour.md +3 -3
- package/dist/docs/reference/geometry/sampleCurve2.md +3 -3
- package/dist/docs/reference/geometry/sampleCurve3.md +2 -2
- package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +1 -1
- package/dist/docs/reference/geometry/sampleHelix.md +2 -2
- package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +1 -1
- package/dist/docs/reference/geometry/sampleRackToothPath.md +4 -4
- package/dist/docs/reference/geometry/sampleSideProfile.md +3 -3
- package/dist/docs/reference/geometry/sampleTextContours.md +1 -1
- package/dist/docs/reference/geometry/sampleThreadHelices.md +2 -2
- package/dist/docs/reference/geometry/scale2.md +1 -1
- package/dist/docs/reference/geometry/scale3.md +1 -1
- package/dist/docs/reference/geometry/scaleTransform3.md +1 -1
- package/dist/docs/reference/geometry/signedContourArea.md +1 -1
- package/dist/docs/reference/geometry/starContour.md +1 -1
- package/dist/docs/reference/geometry/strokeRegionData.md +63 -0
- package/dist/docs/reference/geometry/subtract2.md +1 -1
- package/dist/docs/reference/geometry/subtract3.md +1 -1
- package/dist/docs/reference/geometry/sweepMesh.md +9 -9
- package/dist/docs/reference/geometry/{createThreadProfile.md → threadProfile.md} +6 -6
- package/dist/docs/reference/geometry/transform2.md +1 -1
- package/dist/docs/reference/geometry/transform3.md +1 -1
- package/dist/docs/reference/geometry/transformDeterminant3.md +1 -1
- package/dist/docs/reference/geometry/transformRegionData.md +1 -1
- package/dist/docs/reference/geometry/transformTriangleMesh.md +6 -6
- package/dist/docs/reference/geometry/translationTransform3.md +1 -1
- package/dist/docs/reference/geometry/triangulateContour.md +1 -1
- package/dist/docs/reference/geometry/validateSolidMesh.md +2 -2
- package/dist/docs/reference/geometry/validateTransform3.md +1 -1
- package/dist/docs/reference/geometry/validateTriangleMesh.md +1 -1
- package/dist/docs/reference/geometry/vector2.md +1 -1
- package/dist/docs/reference/geometry/vector3.md +1 -1
- package/dist/docs/reference/geometry.md +2 -2
- package/dist/docs/reference/model/Anchor3.md +1 -1
- package/dist/docs/reference/model/AttachOptions.md +10 -5
- package/dist/docs/reference/model/Bounds2.md +1 -1
- package/dist/docs/reference/model/Bounds3.md +1 -1
- package/dist/docs/reference/model/BoxEdge.md +1 -1
- package/dist/docs/reference/model/BoxEdgeSelection.md +1 -1
- package/dist/docs/reference/model/BoxEdgeTreatments.md +1 -1
- package/dist/docs/reference/model/BoxOptions.md +8 -8
- package/dist/docs/reference/model/ChamferedEdgeTreatment.md +1 -1
- package/dist/docs/reference/model/CircleContourOptions.md +1 -1
- package/dist/docs/reference/model/CircleOptions.md +3 -3
- package/dist/docs/reference/model/CircularPrimitiveOptions.md +1 -1
- package/dist/docs/reference/model/Computed.md +1 -1
- package/dist/docs/reference/model/ComputedValue.md +1 -1
- package/dist/docs/reference/model/Contour.md +1 -1
- package/dist/docs/reference/model/CorrespondingComponent.md +1 -1
- package/dist/docs/reference/model/CorrespondingContour.md +1 -1
- package/dist/docs/reference/model/CorrespondingProfile.md +1 -1
- package/dist/docs/reference/model/CorrespondingProfileStation.md +1 -1
- package/dist/docs/reference/model/CylinderOptions.md +3 -3
- package/dist/docs/reference/model/DiagnosticOptions.md +1 -1
- package/dist/docs/reference/model/EdgeTreatment.md +1 -1
- package/dist/docs/reference/model/EllipseContourOptions.md +1 -1
- package/dist/docs/reference/model/EllipseOptions.md +3 -3
- package/dist/docs/reference/model/EndTreatments.md +1 -1
- package/dist/docs/reference/model/ExtrudeOptions.md +6 -6
- package/dist/docs/reference/model/FinalizedModel.md +18 -8
- package/dist/docs/reference/model/FinalizedPart.md +1 -1
- package/dist/docs/reference/model/Frame3.md +1 -1
- package/dist/docs/reference/model/GenerateCallback.md +1 -1
- package/dist/docs/reference/model/GenerateContext.md +1 -1
- package/dist/docs/reference/model/GeneratedPart.md +1 -1
- package/dist/docs/reference/model/GenerationDiagnostic.md +1 -1
- package/dist/docs/reference/model/GenerationError.md +1 -1
- package/dist/docs/reference/model/GeometryResolution.md +5 -5
- package/dist/docs/reference/model/GeometrySamplingLimits.md +1 -1
- package/dist/docs/reference/model/GeometryToleranceOptions.md +1 -1
- package/dist/docs/reference/model/GridPatternOptions.md +9 -3
- package/dist/docs/reference/model/HeightfieldOptions.md +1 -1
- package/dist/docs/reference/model/HelicalThreadRidgeMeshOptions.md +3 -3
- package/dist/docs/reference/model/HelicalThreadSolidMeshPreflight.md +1 -1
- package/dist/docs/reference/model/HullOptions.md +5 -5
- package/dist/docs/reference/model/ImmutableBuffer-type.md +1 -1
- package/dist/docs/reference/model/ImmutableTriangleMesh.md +1 -1
- package/dist/docs/reference/model/ImplicitOptions.md +1 -1
- package/dist/docs/reference/model/InternalThreadCutterOptions.md +4 -4
- package/dist/docs/reference/model/LinearPatternOptions.md +12 -5
- package/dist/docs/reference/model/LoftCorrespondence.md +1 -1
- package/dist/docs/reference/model/LoftOptions.md +1 -1
- package/dist/docs/reference/model/LoftPlacement.md +1 -1
- package/dist/docs/reference/model/LoftStation.md +3 -3
- package/dist/docs/reference/model/MatchProfilesOptions.md +1 -1
- package/dist/docs/reference/model/ModelProgram.md +1 -1
- package/dist/docs/reference/model/ModelingLimits.md +1 -1
- package/dist/docs/reference/model/NumericArray.md +1 -1
- package/dist/docs/reference/model/PartGeometry.md +1 -1
- package/dist/docs/reference/model/PartOptions.md +1 -1
- package/dist/docs/reference/model/Path2-type.md +192 -0
- package/dist/docs/reference/model/Path2Data.md +14 -0
- package/dist/docs/reference/model/Path2Input.md +15 -0
- package/dist/docs/reference/model/Path3-type.md +192 -0
- package/dist/docs/reference/model/Path3Data.md +14 -0
- package/dist/docs/reference/model/Path3Input.md +15 -0
- package/dist/docs/reference/model/PathLocation.md +65 -0
- package/dist/docs/reference/model/PathNormalGuide.md +4 -3
- package/dist/docs/reference/model/PathOptions.md +34 -0
- package/dist/docs/reference/model/PathPatternOptions.md +3 -3
- package/dist/docs/reference/model/PathResamplingOptions.md +79 -0
- package/dist/docs/reference/model/PatternSource.md +1 -1
- package/dist/docs/reference/model/Pivot2Options.md +1 -1
- package/dist/docs/reference/model/Pivot3Options.md +1 -1
- package/dist/docs/reference/model/PlaneOptions.md +3 -3
- package/dist/docs/reference/model/PolygonData.md +1 -1
- package/dist/docs/reference/model/PolygonOptions.md +8 -8
- package/dist/docs/reference/model/{PrimitivePlacement.md → PrimitiveAttachment.md} +7 -7
- package/dist/docs/reference/model/{PrimitivePlacementOptions.md → PrimitiveAttachmentOptions.md} +41 -20
- package/dist/docs/reference/model/PrintableThreadFit.md +1 -1
- package/dist/docs/reference/model/PrintableThreadFitPolicy.md +1 -1
- package/dist/docs/reference/model/Profile.md +1 -1
- package/dist/docs/reference/model/ProfileComponent2.md +1 -1
- package/dist/docs/reference/model/ProfileContour2.md +1 -1
- package/dist/docs/reference/model/ProfileSpan2.md +2 -2
- package/dist/docs/reference/model/ProfiledEdgeTreatment.md +1 -1
- package/dist/docs/reference/model/RadialPatternOptions.md +17 -22
- package/dist/docs/reference/model/RadialSizing.md +1 -1
- package/dist/docs/reference/model/RadialSizingOptions.md +1 -1
- package/dist/docs/reference/model/RectangleContourOptions.md +1 -1
- package/dist/docs/reference/model/RectangleCornerTreatment.md +1 -1
- package/dist/docs/reference/model/RectangleCornerTreatments.md +1 -1
- package/dist/docs/reference/model/RectangleOptions.md +8 -8
- package/dist/docs/reference/model/RegionData.md +1 -1
- package/dist/docs/reference/model/RegularPolygonOptions.md +5 -5
- package/dist/docs/reference/model/RevolveOptions.md +9 -4
- package/dist/docs/reference/model/RoundedEdgeTreatment.md +1 -1
- package/dist/docs/reference/model/Section.md +12 -11
- package/dist/docs/reference/model/SectionHullOptions.md +5 -5
- package/dist/docs/reference/model/SectionInspection.md +7 -7
- package/dist/docs/reference/model/SectionOffsetJoin.md +1 -1
- package/dist/docs/reference/model/SectionOffsetOptions.md +1 -1
- package/dist/docs/reference/model/SmoothEdgeTreatment.md +1 -1
- package/dist/docs/reference/model/Solid.md +23 -6
- package/dist/docs/reference/model/SolidInspection.md +4 -4
- package/dist/docs/reference/model/{SolidRayHit.md → SolidSegmentHit.md} +3 -3
- package/dist/docs/reference/model/SphereOptions.md +3 -3
- package/dist/docs/reference/model/StarOptions.md +10 -10
- package/dist/docs/reference/model/{StrokePathCap.md → StrokeCap.md} +3 -3
- package/dist/docs/reference/model/{StrokePathJoin.md → StrokeJoin.md} +3 -3
- package/dist/docs/reference/model/StrokeOptions.md +6 -6
- package/dist/docs/reference/model/SvgOrigin.md +1 -1
- package/dist/docs/reference/model/SvgPathSectionOptions.md +1 -1
- package/dist/docs/reference/model/SvgSectionOptions.md +1 -1
- package/dist/docs/reference/model/SweepOptions.md +6 -6
- package/dist/docs/reference/model/SweepOrientation.md +7 -7
- package/dist/docs/reference/model/TextSectionOptions.md +1 -1
- package/dist/docs/reference/model/ThreadEndStyle.md +1 -1
- package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +1 -1
- package/dist/docs/reference/model/ThreadHandedness.md +1 -1
- package/dist/docs/reference/model/ThreadLeadInEnvelope.md +1 -1
- package/dist/docs/reference/model/ThreadLeadInShape.md +1 -1
- package/dist/docs/reference/model/ThreadProfile.md +1 -1
- package/dist/docs/reference/model/ThreadRidgeOptions.md +1 -1
- package/dist/docs/reference/model/ThreadedNutBevel.md +1 -1
- package/dist/docs/reference/model/ThreadedNutOptions.md +4 -4
- package/dist/docs/reference/model/ThreadedNutPreflight.md +1 -1
- package/dist/docs/reference/model/ThreadedNutShape.md +1 -1
- package/dist/docs/reference/model/ThreadedRodOptions.md +4 -4
- package/dist/docs/reference/model/TorusOptions.md +8 -8
- package/dist/docs/reference/model/Transform2-type.md +1 -1
- package/dist/docs/reference/model/Transform2Input.md +1 -1
- package/dist/docs/reference/model/Transform2Matrix.md +1 -1
- package/dist/docs/reference/model/Transform3-type.md +1 -1
- package/dist/docs/reference/model/Transform3Input.md +1 -1
- package/dist/docs/reference/model/Transform3Matrix.md +1 -1
- package/dist/docs/reference/model/TriangleMesh.md +1 -1
- package/dist/docs/reference/model/TriangleMeshAnalysis.md +2 -2
- package/dist/docs/reference/model/TriangleMeshMeasurements.md +1 -1
- package/dist/docs/reference/model/TubeOptions.md +8 -8
- package/dist/docs/reference/model/Vector2-type.md +1 -1
- package/dist/docs/reference/model/Vector2Input.md +1 -1
- package/dist/docs/reference/model/Vector2Tuple.md +1 -1
- package/dist/docs/reference/model/Vector3-type.md +1 -1
- package/dist/docs/reference/model/Vector3Input.md +1 -1
- package/dist/docs/reference/model/Vector3Tuple.md +1 -1
- package/dist/docs/reference/model/VectorTextLayout.md +1 -1
- package/dist/docs/reference/model/VectorTextMetrics.md +1 -1
- package/dist/docs/reference/model/anchor.md +1 -1
- package/dist/docs/reference/model/box.md +3 -3
- package/dist/docs/reference/model/castSegment.md +40 -0
- package/dist/docs/reference/model/categories/boolean-operations.md +1 -1
- package/dist/docs/reference/model/categories/bounded-surfaces.md +1 -1
- package/dist/docs/reference/model/categories/contracts.md +2 -2
- package/dist/docs/reference/model/categories/core-values-errors.md +1 -1
- package/dist/docs/reference/model/categories/explicit-profiles.md +2 -2
- package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +2 -2
- package/dist/docs/reference/model/categories/generation.md +1 -1
- package/dist/docs/reference/model/categories/inspection.md +4 -5
- package/dist/docs/reference/model/categories/mesh-inspection.md +2 -2
- package/dist/docs/reference/model/categories/paths.md +33 -0
- package/dist/docs/reference/model/categories/primitives.md +2 -2
- package/dist/docs/reference/model/categories/resolution.md +2 -2
- package/dist/docs/reference/model/categories/sections.md +3 -4
- package/dist/docs/reference/model/categories/threads.md +5 -5
- package/dist/docs/reference/model/categories/transforms-placement.md +8 -8
- package/dist/docs/reference/model/circle.md +1 -1
- package/dist/docs/reference/model/components.md +6 -6
- package/dist/docs/reference/model/compose.md +1 -1
- package/dist/docs/reference/model/cylinder.md +1 -1
- package/dist/docs/reference/model/distance.md +1 -1
- package/dist/docs/reference/model/ellipse.md +1 -1
- package/dist/docs/reference/model/extrude.md +3 -3
- package/dist/docs/reference/model/generate.md +1 -1
- package/dist/docs/reference/model/gridPattern.md +4 -4
- package/dist/docs/reference/model/heightfield.md +1 -1
- package/dist/docs/reference/model/hull.md +1 -1
- package/dist/docs/reference/model/immutableBuffer.md +1 -1
- package/dist/docs/reference/model/immutableMesh.md +1 -1
- package/dist/docs/reference/model/implicit.md +1 -1
- package/dist/docs/reference/model/inspectSection.md +1 -1
- package/dist/docs/reference/model/inspectSolid.md +1 -1
- package/dist/docs/reference/model/internalThreadCutter.md +4 -4
- package/dist/docs/reference/model/intersect.md +1 -1
- package/dist/docs/reference/model/isEmpty.md +1 -1
- package/dist/docs/reference/model/linearPattern.md +4 -4
- package/dist/docs/reference/model/loft.md +1 -1
- package/dist/docs/reference/model/matchProfiles.md +2 -2
- package/dist/docs/reference/model/minkowskiSum.md +1 -1
- package/dist/docs/reference/model/path2.md +42 -0
- package/dist/docs/reference/model/path3.md +42 -0
- package/dist/docs/reference/model/pathPattern.md +13 -12
- package/dist/docs/reference/model/polygon.md +4 -4
- package/dist/docs/reference/model/preflightInternalThreadCutter.md +3 -3
- package/dist/docs/reference/model/preflightThreadedNut.md +3 -3
- package/dist/docs/reference/model/preflightThreadedRod.md +3 -3
- package/dist/docs/reference/model/radialPattern.md +5 -37
- package/dist/docs/reference/model/rectangle.md +3 -3
- package/dist/docs/reference/model/regularPolygon.md +1 -1
- package/dist/docs/reference/model/revolve.md +5 -4
- package/dist/docs/reference/model/solidFromMesh.md +1 -1
- package/dist/docs/reference/model/sphere.md +1 -1
- package/dist/docs/reference/model/split.md +1 -1
- package/dist/docs/reference/model/splitByPlane.md +1 -1
- package/dist/docs/reference/model/star.md +4 -4
- package/dist/docs/reference/model/stroke.md +8 -8
- package/dist/docs/reference/model/svgPathSection.md +1 -1
- package/dist/docs/reference/model/svgSection.md +1 -1
- package/dist/docs/reference/model/sweep.md +7 -7
- package/dist/docs/reference/model/textSection.md +1 -1
- package/dist/docs/reference/model/threadRidge.md +2 -2
- package/dist/docs/reference/model/threadedNut.md +4 -4
- package/dist/docs/reference/model/threadedRod.md +4 -4
- package/dist/docs/reference/model/torus.md +3 -3
- package/dist/docs/reference/model/transform2.md +1 -1
- package/dist/docs/reference/model/transform3.md +1 -1
- package/dist/docs/reference/model/tube.md +3 -3
- package/dist/docs/reference/model/union.md +1 -1
- package/dist/docs/reference/model/vector2.md +1 -1
- package/dist/docs/reference/model/vector3.md +1 -1
- package/dist/docs/reference/model.md +3 -2
- package/dist/docs/reference/text/Bounds2.md +1 -1
- package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +1 -1
- package/dist/docs/reference/text/Vector2Tuple.md +1 -1
- package/dist/docs/reference/text/VectorFont.md +2 -2
- package/dist/docs/reference/text/VectorFontOptions.md +1 -1
- package/dist/docs/reference/text/VectorTextArcBaseline.md +3 -3
- package/dist/docs/reference/text/VectorTextLayout.md +1 -1
- package/dist/docs/reference/text/VectorTextLayoutOptions.md +1 -1
- package/dist/docs/reference/text/VectorTextMetrics.md +1 -1
- package/dist/docs/reference/text/VectorTextOptions.md +1 -1
- package/dist/docs/reference/text/categories/font-preparation.md +3 -3
- package/dist/docs/reference/text/prepareVectorFont.md +2 -2
- package/dist/docs/reference/text.md +1 -1
- package/dist/engine/construction-operations.js +31 -14
- package/dist/engine/execution.js +39 -8
- package/dist/engine/extrusion-finishing.js +1 -1
- package/dist/engine/index.js +6 -1
- package/dist/engine/inspection-operations.js +13 -11
- package/dist/engine/loft-operations.js +35 -14
- package/dist/engine/model-summary.js +8 -5
- package/dist/engine/native/material-components.js +305 -0
- package/dist/engine/native/regions.js +2 -1
- package/dist/engine/native/threads.js +3 -3
- package/dist/engine/native/transforms.js +5 -7
- package/dist/engine/operation-environment.js +2 -2
- package/dist/engine/pattern-operations.js +1 -1
- package/dist/engine/placement.js +2 -2
- package/dist/engine/primitive-anchors.js +17 -17
- package/dist/engine/primitive-operations.js +1 -1
- package/dist/engine/primitive-profiles.js +7 -7
- package/dist/engine/profile-mesh.js +7 -7
- package/dist/engine/recipe-realization.js +6 -0
- package/dist/engine/section-operations.js +33 -8
- package/dist/engine/session-snapshot.js +14 -4
- package/dist/engine/session.js +10 -5
- package/dist/engine/shape-anchors.js +3 -3
- package/dist/engine/transform-operations.js +24 -24
- package/dist/geometry/anchors.js +40 -33
- package/dist/geometry/curves/sampling.js +14 -14
- package/dist/geometry/edge-finishing.js +1 -1
- package/dist/geometry/extrusion.js +13 -16
- package/dist/geometry/index.js +9 -10
- package/dist/geometry/loft/loft-simple-mesh.js +6 -6
- package/dist/geometry/loft/loft.js +22 -13
- package/dist/geometry/math/immutable-value.js +1 -1
- package/dist/geometry/mechanical/gear-motion.js +3 -3
- package/dist/geometry/mechanical/gears.js +38 -38
- package/dist/geometry/mechanical/index.js +3 -3
- package/dist/geometry/mechanical/standards.js +1 -1
- package/dist/geometry/mechanical/thread-helices.js +2 -3
- package/dist/geometry/mechanical/thread-mesh-plan.js +4 -5
- package/dist/geometry/mechanical/thread-mesh.js +7 -7
- package/dist/geometry/mechanical/thread-profiles.js +5 -5
- package/dist/geometry/mechanical/thread-solids.js +2 -2
- package/dist/geometry/mechanical/thread-surface.js +1 -1
- package/dist/geometry/mechanical/threads.js +8 -8
- package/dist/geometry/mesh/mesh-planar.js +25 -27
- package/dist/geometry/mesh/mesh-quality.js +5 -5
- package/dist/geometry/mesh/mesh-signature.js +13 -13
- package/dist/geometry/mesh/mesh-solid.js +7 -7
- package/dist/geometry/mesh/mesh.js +4 -15
- package/dist/geometry/paths/closest-point.js +8 -19
- package/dist/geometry/paths/frames.js +41 -11
- package/dist/geometry/paths/helix.js +16 -6
- package/dist/geometry/paths/path-value.js +252 -0
- package/dist/geometry/paths/planar.js +36 -23
- package/dist/geometry/paths/resampling.js +27 -5
- package/dist/geometry/patterns/placements.js +100 -27
- package/dist/geometry/patterns.js +2 -2
- package/dist/geometry/polygon-clipping.js +17 -0
- package/dist/geometry/profiles/contour.js +6 -6
- package/dist/geometry/profiles/matched.js +4 -4
- package/dist/geometry/profiles/profiles.js +4 -4
- package/dist/geometry/profiles/rectangle.js +4 -4
- package/dist/geometry/profiles/side-profile.js +7 -7
- package/dist/geometry/profiles/span-sampling.js +1 -1
- package/dist/geometry/resolution.js +34 -34
- package/dist/geometry/revolve/revolve-mesh.js +12 -7
- package/dist/geometry/stroke-path.js +12 -27
- package/dist/geometry/svg/fill.js +7 -21
- package/dist/geometry/svg-import.js +23 -23
- package/dist/geometry/sweeps/options.js +5 -4
- package/dist/geometry/sweeps/orientation.js +5 -5
- package/dist/geometry/sweeps/stations.js +10 -10
- package/dist/geometry/sweeps/sweep-closed.js +2 -2
- package/dist/geometry/sweeps/sweep-mesh.js +9 -3
- package/dist/geometry/sweeps/sweep-open.js +1 -1
- package/dist/geometry/sweeps/validation.js +4 -7
- package/dist/geometry/transform-geometry.js +7 -14
- package/dist/index.js +1 -0
- package/dist/model/execution-binding.js +3 -3
- package/dist/model/geometry-recipes.js +1 -1
- package/dist/model/immutable-generation-data.js +66 -6
- package/dist/model/operations.js +25 -26
- package/dist/model/recipe-declaration.js +13 -7
- package/dist/model/shape-handles.js +2 -1
- package/dist/text/index.js +15 -9
- package/dist/text/vector-text-layout.js +31 -26
- package/package.json +1 -1
- package/dist/docs/reference/geometry/ClosestPointOnPathOptions.md +0 -34
- package/dist/docs/reference/geometry/ClosestPointOnPathResult.md +0 -65
- package/dist/docs/reference/geometry/Path2.md +0 -14
- package/dist/docs/reference/geometry/Path3.md +0 -14
- package/dist/docs/reference/geometry/PrimitivePlacement.md +0 -31
- package/dist/docs/reference/geometry/PrimitivePlacementOptions.md +0 -83
- package/dist/docs/reference/geometry/StrokePathCap.md +0 -7
- package/dist/docs/reference/geometry/StrokePathJoin.md +0 -7
- package/dist/docs/reference/geometry/closestPointOnPath.md +0 -110
- package/dist/docs/reference/geometry/cumulativePathLengths.md +0 -33
- package/dist/docs/reference/geometry/measureTriangleMesh.md +0 -55
- package/dist/docs/reference/geometry/pathLength.md +0 -33
- package/dist/docs/reference/geometry/strokePathRegion.md +0 -63
- package/dist/docs/reference/geometry/transformContour.md +0 -42
- package/dist/docs/reference/geometry/transformPath2.md +0 -40
- package/dist/docs/reference/geometry/transformPath3.md +0 -33
- package/dist/docs/reference/model/Path2.md +0 -20
- package/dist/docs/reference/model/rayCast.md +0 -40
- package/dist/docs/reference/model/toTriangleMesh.md +0 -27
- package/dist/geometry/paths/path.js +0 -32
package/dist/geometry/anchors.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { GeometryError } from "./errors.js";
|
|
2
|
+
import { vector3Data } from "./math/vector-value.js";
|
|
3
|
+
import { cross3, dot3 } from "./math/vector3.js";
|
|
2
4
|
import { resolveGeometryTolerance } from "./tolerance.js";
|
|
3
5
|
import { composeTransform3, frameTransform3, inverseTransform3 } from "./transform3.js";
|
|
4
6
|
const boxFaces = {
|
|
@@ -71,7 +73,7 @@ export function boxAnchor3(options) {
|
|
|
71
73
|
return origin[axis] + (direction[axis] * size[axis]) / 2;
|
|
72
74
|
return (origin[axis] + (direction[axis] > 0 ? size[axis] : direction[axis] < 0 ? 0 : size[axis] / 2));
|
|
73
75
|
};
|
|
74
|
-
return
|
|
76
|
+
return anchor3([coordinate(0), coordinate(1), coordinate(2)], direction, up);
|
|
75
77
|
}
|
|
76
78
|
/** Creates a cap-center or radial-side anchor using cylinder()'s construction origin.
|
|
77
79
|
* @remarks Both centered and noncentered cylinders extend along +Z. Side angle uses degrees;
|
|
@@ -82,12 +84,12 @@ export function cylinderAnchor3(options) {
|
|
|
82
84
|
assertAnchorOptions(options, operation);
|
|
83
85
|
const origin = primitiveAnchorOrigin(options, operation);
|
|
84
86
|
const { radius, height, face } = options;
|
|
85
|
-
const
|
|
87
|
+
const angle = options.angle === undefined ? 0 : options.angle;
|
|
86
88
|
if (!Number.isFinite(radius) || radius <= 0 || !Number.isFinite(height) || height <= 0)
|
|
87
89
|
throw new GeometryError("INVALID_ARGUMENT", "Cylinder anchor dimensions must be positive.", {
|
|
88
90
|
operation,
|
|
89
91
|
});
|
|
90
|
-
if (!Number.isFinite(
|
|
92
|
+
if (!Number.isFinite(angle))
|
|
91
93
|
throw new GeometryError("NON_FINITE_VALUE", "Cylinder anchor angle must be finite.", {
|
|
92
94
|
operation,
|
|
93
95
|
});
|
|
@@ -95,19 +97,13 @@ export function cylinderAnchor3(options) {
|
|
|
95
97
|
throw new GeometryError("INVALID_ARGUMENT", "Unsupported cylinder anchor face.", { operation });
|
|
96
98
|
const center = options.center ?? true;
|
|
97
99
|
if (face === "top")
|
|
98
|
-
return
|
|
100
|
+
return anchor3([origin[0], origin[1], origin[2] + (center ? height / 2 : height)], [0, 0, 1], [0, 1, 0]);
|
|
99
101
|
if (face === "bottom")
|
|
100
|
-
return
|
|
101
|
-
const
|
|
102
|
-
const cosine = Math.cos(
|
|
103
|
-
return
|
|
102
|
+
return anchor3([origin[0], origin[1], origin[2] - (center ? height / 2 : 0)], [0, 0, -1], [0, 1, 0]);
|
|
103
|
+
const angleRadians = angle * (Math.PI / 180);
|
|
104
|
+
const cosine = Math.cos(angleRadians), sine = Math.sin(angleRadians);
|
|
105
|
+
return anchor3([origin[0] + radius * cosine, origin[1] + radius * sine, origin[2] + (center ? 0 : height / 2)], [cosine, sine, 0], [0, 0, 1]);
|
|
104
106
|
}
|
|
105
|
-
const dot = (a, b) => a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
|
106
|
-
const cross = (a, b) => [
|
|
107
|
-
a[1] * b[2] - a[2] * b[1],
|
|
108
|
-
a[2] * b[0] - a[0] * b[2],
|
|
109
|
-
a[0] * b[1] - a[1] * b[0],
|
|
110
|
-
];
|
|
111
107
|
const normalized = (vector, label, tolerance) => {
|
|
112
108
|
if (!vector.every(Number.isFinite)) {
|
|
113
109
|
throw new GeometryError("NON_FINITE_VALUE", `${label} coordinates must be finite.`);
|
|
@@ -134,34 +130,44 @@ const normalized = (vector, label, tolerance) => {
|
|
|
134
130
|
* @returns A frozen anchor with unit, orthogonal direction and up vectors.
|
|
135
131
|
* @throws {@link GeometryError} For non-finite or degenerate inputs.
|
|
136
132
|
*/
|
|
137
|
-
export function
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
133
|
+
export function anchor3(position, direction, up = [0, 1, 0], tolerance = {}) {
|
|
134
|
+
const coordinates = (input) => {
|
|
135
|
+
const values = vector3Data(input);
|
|
136
|
+
const point = [values[0], values[1], values[2]];
|
|
137
|
+
if (!point.every(Number.isFinite))
|
|
138
|
+
throw new GeometryError("NON_FINITE_VALUE", "Anchor coordinates must be finite.", {
|
|
139
|
+
operation: "anchor3",
|
|
140
|
+
});
|
|
141
|
+
return point;
|
|
142
|
+
};
|
|
143
|
+
const point = coordinates(position);
|
|
144
|
+
const normal = coordinates(direction);
|
|
145
|
+
const roll = coordinates(up);
|
|
146
|
+
const resolved = resolveGeometryTolerance(Math.max(1, Math.hypot(normal[0], normal[1], normal[2])), tolerance);
|
|
147
|
+
const zAxis = normalized(normal, "Anchor direction", resolved.linear);
|
|
148
|
+
const rollProjection = dot3(roll, zAxis);
|
|
143
149
|
const projectedUp = [
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
150
|
+
roll[0] - zAxis[0] * rollProjection,
|
|
151
|
+
roll[1] - zAxis[1] * rollProjection,
|
|
152
|
+
roll[2] - zAxis[2] * rollProjection,
|
|
147
153
|
];
|
|
148
154
|
const normalizedUp = normalized(projectedUp, "Anchor up direction", resolved.linear);
|
|
149
155
|
return Object.freeze({
|
|
150
156
|
direction: zAxis,
|
|
151
|
-
position: Object.freeze(
|
|
157
|
+
position: Object.freeze(point),
|
|
152
158
|
up: normalizedUp,
|
|
153
159
|
});
|
|
154
160
|
}
|
|
155
161
|
/**
|
|
156
162
|
* Converts an anchor into a right-handed frame with direction as local +Z.
|
|
157
163
|
*
|
|
158
|
-
* @param anchor - Anchor created by {@link
|
|
164
|
+
* @param anchor - Anchor created by {@link anchor3} or equivalent valid data.
|
|
159
165
|
* @param tolerance - Optional comparison overrides.
|
|
160
166
|
* @returns A normalized right-handed frame at the anchor position.
|
|
161
167
|
*/
|
|
162
168
|
export function anchorFrame3(anchor, tolerance = {}) {
|
|
163
|
-
const normalizedAnchor =
|
|
164
|
-
const xAxis = normalized(
|
|
169
|
+
const normalizedAnchor = anchor3(anchor.position, anchor.direction, anchor.up, tolerance);
|
|
170
|
+
const xAxis = normalized(cross3(normalizedAnchor.up, normalizedAnchor.direction), "Anchor X axis", 0);
|
|
165
171
|
return Object.freeze({
|
|
166
172
|
origin: normalizedAnchor.position,
|
|
167
173
|
xAxis,
|
|
@@ -183,9 +189,9 @@ export function anchorFrame3(anchor, tolerance = {}) {
|
|
|
183
189
|
* @returns A frozen affine transform for the moving object.
|
|
184
190
|
* @throws {@link GeometryError} For invalid anchors or non-finite options.
|
|
185
191
|
*/
|
|
186
|
-
export function
|
|
192
|
+
export function attachmentTransform3(source, target, options = {}) {
|
|
187
193
|
const gap = options.gap ?? 0;
|
|
188
|
-
const spin = options.
|
|
194
|
+
const spin = options.spin ?? 0;
|
|
189
195
|
if (options.alignment !== undefined &&
|
|
190
196
|
options.alignment !== "opposed" &&
|
|
191
197
|
options.alignment !== "same") {
|
|
@@ -195,13 +201,14 @@ export function attachTransform(source, target, options = {}) {
|
|
|
195
201
|
throw new GeometryError("NON_FINITE_VALUE", "Attachment gap and spin must be finite.");
|
|
196
202
|
}
|
|
197
203
|
const sourceFrame = anchorFrame3(source, options.tolerance);
|
|
198
|
-
const targetAnchor =
|
|
204
|
+
const targetAnchor = anchor3(target.position, target.direction, target.up, options.tolerance);
|
|
199
205
|
const desiredDirection = (options.alignment ?? "opposed") === "opposed"
|
|
200
206
|
? [-targetAnchor.direction[0], -targetAnchor.direction[1], -targetAnchor.direction[2]]
|
|
201
207
|
: targetAnchor.direction;
|
|
202
|
-
const baseFrame = anchorFrame3(
|
|
203
|
-
const
|
|
204
|
-
const
|
|
208
|
+
const baseFrame = anchorFrame3(anchor3(targetAnchor.position, desiredDirection, targetAnchor.up, options.tolerance), options.tolerance);
|
|
209
|
+
const spinRadians = ((spin % 360) * Math.PI) / 180;
|
|
210
|
+
const cosine = Math.cos(spinRadians);
|
|
211
|
+
const sine = Math.sin(spinRadians);
|
|
205
212
|
const spunX = [
|
|
206
213
|
baseFrame.xAxis[0] * cosine + baseFrame.yAxis[0] * sine,
|
|
207
214
|
baseFrame.xAxis[1] * cosine + baseFrame.yAxis[1] * sine,
|
|
@@ -28,10 +28,10 @@ export function createSpatialSampleWriter() {
|
|
|
28
28
|
/** @internal Exact counts override physical resolution, but never the finite output budget. */
|
|
29
29
|
export function resolveSamplingBudget(options) {
|
|
30
30
|
const selected = resolveGeometrySamplingLimits(options.limits).maxPathPoints;
|
|
31
|
-
const maximum = options.
|
|
32
|
-
if (options.
|
|
31
|
+
const maximum = options.maxVertices ?? selected;
|
|
32
|
+
if (options.maxVertices !== undefined &&
|
|
33
33
|
(!Number.isSafeInteger(maximum) || maximum < 2 || maximum > selected))
|
|
34
|
-
curveFailure("INVALID_ARGUMENT", "
|
|
34
|
+
curveFailure("INVALID_ARGUMENT", "maxVertices must be at least two and cannot raise maxPathPoints.");
|
|
35
35
|
if (options.segments !== undefined &&
|
|
36
36
|
(!Number.isSafeInteger(options.segments) || options.segments < 1))
|
|
37
37
|
curveFailure("INVALID_ARGUMENT", "segments must be a positive safe integer.");
|
|
@@ -76,10 +76,10 @@ function validateArc(curve) {
|
|
|
76
76
|
validateCurvePoint3(curve.yAxis);
|
|
77
77
|
if (!Number.isFinite(curve.radius) ||
|
|
78
78
|
curve.radius <= 0 ||
|
|
79
|
-
!Number.isFinite(curve.
|
|
80
|
-
curve.
|
|
81
|
-
Math.abs(curve.
|
|
82
|
-
!Number.isFinite(curve.
|
|
79
|
+
!Number.isFinite(curve.sweepAngle) ||
|
|
80
|
+
curve.sweepAngle === 0 ||
|
|
81
|
+
Math.abs(curve.sweepAngle) > 360 ||
|
|
82
|
+
!Number.isFinite(curve.startAngle ?? 0))
|
|
83
83
|
curveFailure("INVALID_ARGUMENT", "Arc radius must be positive and its nonzero degree sweep at most 360.");
|
|
84
84
|
if (Math.abs(Math.hypot(...curve.xAxis) - 1) > 1e-10 ||
|
|
85
85
|
Math.abs(Math.hypot(...curve.yAxis) - 1) > 1e-10 ||
|
|
@@ -91,17 +91,17 @@ function validateArc(curve) {
|
|
|
91
91
|
function sampleArc(curve, options, maximum, createWriter) {
|
|
92
92
|
validateArc(curve);
|
|
93
93
|
const segments = options.segments ??
|
|
94
|
-
resolveArcSegments(curve.radius, curve.
|
|
94
|
+
resolveArcSegments(curve.radius, curve.sweepAngle, options.resolution, options.limits);
|
|
95
95
|
assertSampleVertexCount(segments + 1, maximum);
|
|
96
96
|
const writer = createWriter();
|
|
97
97
|
const point = [0, 0, 0];
|
|
98
98
|
const tangent = [0, 0, 0];
|
|
99
99
|
const firstPoint = [0, 0, 0];
|
|
100
|
-
const sign = Math.sign(curve.
|
|
100
|
+
const sign = Math.sign(curve.sweepAngle);
|
|
101
101
|
for (let i = 0; i <= segments; i++) {
|
|
102
|
-
const angle = (((curve.
|
|
102
|
+
const angle = (((curve.startAngle ?? 0) + (curve.sweepAngle * i) / segments) * Math.PI) / 180;
|
|
103
103
|
const cos = Math.cos(angle), sin = Math.sin(angle);
|
|
104
|
-
if (i === segments && Math.abs(curve.
|
|
104
|
+
if (i === segments && Math.abs(curve.sweepAngle) === 360) {
|
|
105
105
|
point[0] = firstPoint[0];
|
|
106
106
|
point[1] = firstPoint[1];
|
|
107
107
|
point[2] = firstPoint[2];
|
|
@@ -138,8 +138,8 @@ export function cubicControlMeetsPolicy(control, policy) {
|
|
|
138
138
|
* Every control interval must meet the physical policy, including flatter regions subdivided to
|
|
139
139
|
* match curved ones. The depth-first traversal retains only one bounded stack, without output points.
|
|
140
140
|
*/
|
|
141
|
-
export function resolveUniformCubicSegments(control, policy, maximum,
|
|
142
|
-
let segments =
|
|
141
|
+
export function resolveUniformCubicSegments(control, policy, maximum, minSegments = 1) {
|
|
142
|
+
let segments = minSegments;
|
|
143
143
|
for (let depth = 0; depth <= 32; depth += 1) {
|
|
144
144
|
assertSampleVertexCount(segments, maximum);
|
|
145
145
|
const pending = [{ control, intervals: segments }];
|
|
@@ -241,7 +241,7 @@ export function sampleCurve3(curve, options = {}) {
|
|
|
241
241
|
* frozen. At stationary tangents, outgoing secants are preferred and endpoints use a backward fallback.
|
|
242
242
|
* @example
|
|
243
243
|
* ```ts
|
|
244
|
-
* const turn = sampleCurve2({kind: "arc", center: [0,0], radius: 10,
|
|
244
|
+
* const turn = sampleCurve2({kind: "arc", center: [0,0], radius: 10, sweepAngle: 90});
|
|
245
245
|
* ```
|
|
246
246
|
*/
|
|
247
247
|
export function sampleCurve2(curve, options = {}) {
|
|
@@ -113,7 +113,7 @@ export function edgeTreatmentPointCount(treatment, operation, options = {}) {
|
|
|
113
113
|
: exact;
|
|
114
114
|
if (!Number.isSafeInteger(intervals) || intervals < 1)
|
|
115
115
|
fail(operation, "Smooth treatment segments must be a positive safe integer.");
|
|
116
|
-
assertSamplingCount(intervals, operation, Math.min(policy?.
|
|
116
|
+
assertSamplingCount(intervals, operation, Math.min(policy?.maxSegments ?? selected.limits.maxCircularSegments, selected.limits.maxCircularSegments));
|
|
117
117
|
}
|
|
118
118
|
assertSamplingCount(intervals + 1, operation, selected.limits.maxProfilePoints);
|
|
119
119
|
return intervals + 1;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { GeometryError } from "./errors.js";
|
|
2
|
+
import { vector2Data } from "./math/vector-value.js";
|
|
2
3
|
import { assertPositivePrimitive, assertPrimitiveOptions } from "./primitive-resolvers.js";
|
|
3
4
|
import { resolveGeometryResolution } from "./resolution.js";
|
|
4
5
|
import { assertSamplingCount, resolveGeometrySamplingLimits } from "./sampling-limits.js";
|
|
@@ -12,17 +13,13 @@ export function resolveExtrusionControls(height, options, operation) {
|
|
|
12
13
|
operation,
|
|
13
14
|
});
|
|
14
15
|
}
|
|
15
|
-
const
|
|
16
|
-
if (!Number.isFinite(
|
|
17
|
-
throw new GeometryError("NON_FINITE_VALUE", "
|
|
16
|
+
const twist = options.twist ?? 0;
|
|
17
|
+
if (!Number.isFinite(twist)) {
|
|
18
|
+
throw new GeometryError("NON_FINITE_VALUE", "twist must be finite.", { operation });
|
|
18
19
|
}
|
|
19
20
|
const scaleTop = options.scaleTop ?? 1;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
operation,
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
const scales = typeof scaleTop === "number" ? [scaleTop, scaleTop] : scaleTop;
|
|
21
|
+
const values = typeof scaleTop === "number" ? [scaleTop, scaleTop] : vector2Data(scaleTop);
|
|
22
|
+
const scales = [values[0], values[1]];
|
|
26
23
|
if (!Number.isFinite(scales[0]) || !Number.isFinite(scales[1])) {
|
|
27
24
|
throw new GeometryError("NON_FINITE_VALUE", "scaleTop values must be finite.", { operation });
|
|
28
25
|
}
|
|
@@ -34,7 +31,7 @@ export function resolveExtrusionControls(height, options, operation) {
|
|
|
34
31
|
}
|
|
35
32
|
if (options.divisions !== undefined)
|
|
36
33
|
assertSamplingCount(options.divisions + 2, operation, resolveGeometrySamplingLimits(options.limits).maxPathPoints);
|
|
37
|
-
return { scales,
|
|
34
|
+
return { scales, twist, center: options.center ?? false };
|
|
38
35
|
}
|
|
39
36
|
/**
|
|
40
37
|
* Resolves intermediate profile copies for linear extrusion from physical curve resolution.
|
|
@@ -86,7 +83,7 @@ export function resolveExtrusionDivisions(profile, height, options = {}) {
|
|
|
86
83
|
/** @internal Shared sampling preflight over explicit contours, without rebuilding filled topology. */
|
|
87
84
|
export function resolveExtrusionContourDivisions(contours, height, options) {
|
|
88
85
|
const operation = "resolveExtrusionDivisions";
|
|
89
|
-
const { scales,
|
|
86
|
+
const { scales, twist } = resolveExtrusionControls(height, options, operation);
|
|
90
87
|
const limits = resolveGeometrySamplingLimits(options.limits);
|
|
91
88
|
let radius = 0, maximumEdgeLength = 0, profileCount = 0;
|
|
92
89
|
for (const contour of contours) {
|
|
@@ -115,7 +112,7 @@ export function resolveExtrusionContourDivisions(contours, height, options) {
|
|
|
115
112
|
if (options.divisions !== undefined)
|
|
116
113
|
return options.divisions;
|
|
117
114
|
const policy = resolveGeometryResolution(options.resolution, options.limits);
|
|
118
|
-
const angle = (Math.abs(
|
|
115
|
+
const angle = (Math.abs(twist) * Math.PI) / 180;
|
|
119
116
|
const maximumScale = Math.max(1, Math.abs(scales[0]), Math.abs(scales[1]));
|
|
120
117
|
const scaleChange = Math.max(Math.abs(scales[0] - 1), Math.abs(scales[1] - 1));
|
|
121
118
|
// A linear scale multiplied by a rotation has second derivative bounded by this magnitude.
|
|
@@ -127,13 +124,13 @@ export function resolveExtrusionContourDivisions(contours, height, options) {
|
|
|
127
124
|
b = (maximumEdgeLength * (maximumScale * angle + Math.abs(scales[0] - scales[1]))) / 4;
|
|
128
125
|
const chordSegments = policy.circularSegments === undefined
|
|
129
126
|
? Math.max(1, Math.ceil((b + Math.hypot(b, 2 * Math.sqrt(a * policy.maxChordError))) /
|
|
130
|
-
(2 * policy.maxChordError)), Math.ceil((policy.
|
|
131
|
-
: Math.max(1, Math.ceil((policy.circularSegments * Math.abs(
|
|
132
|
-
const angularCap = Math.max(1, scales[0] === scales[1] ? 0 : policy.
|
|
127
|
+
(2 * policy.maxChordError)), Math.ceil((policy.minSegments * Math.abs(twist)) / 360))
|
|
128
|
+
: Math.max(1, Math.ceil((policy.circularSegments * Math.abs(twist)) / 360));
|
|
129
|
+
const angularCap = Math.max(1, scales[0] === scales[1] ? 0 : policy.maxSegments, Math.ceil((policy.maxSegments * Math.abs(twist)) / 360));
|
|
133
130
|
if (chordSegments > angularCap) {
|
|
134
131
|
throw new GeometryError("COMPLEXITY_LIMIT", "Extrusion surface refinement exceeds the full-circle interval safety limit.", {
|
|
135
132
|
operation,
|
|
136
|
-
details: { requiredSegments: chordSegments,
|
|
133
|
+
details: { requiredSegments: chordSegments, maxSegments: angularCap },
|
|
137
134
|
});
|
|
138
135
|
}
|
|
139
136
|
const angularTravel = radius * maximumScale * angle;
|
package/dist/geometry/index.js
CHANGED
|
@@ -7,7 +7,7 @@ export { computeTriangleMeshCentroid } from "./mesh/mesh-centroid.js";
|
|
|
7
7
|
export { matchProfiles, } from "./profiles/matched.js";
|
|
8
8
|
export { heightfieldMesh, preflightHeightfield, } from "./heightfield.js";
|
|
9
9
|
export { preflightThreadedRodSolid as preflightThreadedRod, preflightInternalThreadCutterSolid as preflightInternalThreadCutter, preflightThreadedNutSolid as preflightThreadedNut, } from "./mechanical/thread-solids.js";
|
|
10
|
-
export { anchorFrame3,
|
|
10
|
+
export { anchorFrame3, attachmentTransform3, boxAnchor3, anchor3, cylinderAnchor3, } from "./anchors.js";
|
|
11
11
|
export { defaultGeometrySamplingLimits, resolveGeometrySamplingLimits, } from "./sampling-limits.js";
|
|
12
12
|
export { GeometryError, isGeometryError, } from "./errors.js";
|
|
13
13
|
export { resolveExtrusionDivisions, } from "./extrusion.js";
|
|
@@ -18,20 +18,19 @@ export { add2, subtract2, scale2, dot2, cross2, length2, distance2, normalize2,
|
|
|
18
18
|
export { add3, cross3, dot3, length3, distance3, lerp3, normalize3, projectOntoPlane3, scale3, subtract3, } from "./math/vector3.js";
|
|
19
19
|
export { minimumCylindricalGearToothCountWithoutUndercut, resolveCylindricalGear, resolveCylindricalGearPair, resolveRackPitch, sampleCylindricalGearOutline, sampleInternalCylindricalGearSpaceOutline, sampleRackToothPath, } from "./mechanical/gears.js";
|
|
20
20
|
export { measureInternalCylindricalGearPairMotion, } from "./mechanical/gear-motion.js";
|
|
21
|
-
export { METRIC_FASTENER_STANDARDS,
|
|
22
|
-
export {
|
|
23
|
-
export { compensateThreadProfileAxially, compensateThreadProfileForFaceting,
|
|
21
|
+
export { METRIC_FASTENER_STANDARDS, getMetricClearanceHoleDiameter, getMetricFastenerStandard, } from "./mechanical/standards.js";
|
|
22
|
+
export { helicalThreadRidgeMesh, helicalThreadSolidMesh } from "./mechanical/thread-mesh.js";
|
|
23
|
+
export { compensateThreadProfileAxially, compensateThreadProfileForFaceting, threadProfile, } from "./mechanical/thread-profiles.js";
|
|
24
24
|
export { preflightHelicalThreadSolidMesh, } from "./mechanical/thread-mesh-plan.js";
|
|
25
25
|
export { sampleConventionalThreadHelices as sampleThreadHelices, } from "./mechanical/thread-helices.js";
|
|
26
26
|
export { PRINTABLE_THREAD_FIT_POLICIES, compensateThreadDiameters, resolvePrintableThreadFitPolicy, resolveThreadCircularSegments, } from "./mechanical/threads.js";
|
|
27
|
-
export { analyzeTriangleMesh, joinTriangleMeshes,
|
|
28
|
-
export {
|
|
27
|
+
export { analyzeTriangleMesh, joinTriangleMeshes, meshBounds, reverseTriangleMesh, transformTriangleMesh, validateTriangleMesh, } from "./mesh/mesh.js";
|
|
28
|
+
export { computeTriangleMeshSignature, } from "./mesh/mesh-signature.js";
|
|
29
29
|
export { optimizePlanarPatches, } from "./mesh/mesh-planar.js";
|
|
30
30
|
export { analyzeTriangleMeshQuality, } from "./mesh/mesh-quality.js";
|
|
31
31
|
export { computeClosedParallelTransportFrames, computeParallelTransportFrames, } from "./paths/frames.js";
|
|
32
32
|
export { sampleHelix } from "./paths/helix.js";
|
|
33
|
-
export {
|
|
34
|
-
export { closestPointOnPath, } from "./paths/closest-point.js";
|
|
33
|
+
export { path2, path3, } from "./paths/path-value.js";
|
|
35
34
|
export { distributeAlongPath, roundClosedPolylinePath, } from "./paths/planar.js";
|
|
36
35
|
export { circleContour, rectangleContour, regularPolygonContour, starContour, } from "./profiles/profiles.js";
|
|
37
36
|
export { closeToAxis, sampleSideProfile, } from "./profiles/side-profile.js";
|
|
@@ -42,10 +41,10 @@ export { contourContainsPoint, normalizeContour, normalizePolygon, normalizeRegi
|
|
|
42
41
|
export { resolveAlignedCircularSegments, resolveArcSegments, resolveCircularSegments, } from "./resolution.js";
|
|
43
42
|
export { revolveMesh } from "./revolve/revolve-mesh.js";
|
|
44
43
|
export { preflightSvgRegion, } from "./svg-import.js";
|
|
45
|
-
export {
|
|
44
|
+
export { strokeRegionData, } from "./stroke-path.js";
|
|
46
45
|
export { sweepMesh } from "./sweeps/sweep-mesh.js";
|
|
47
46
|
export { DEFAULT_GEOMETRY_TOLERANCE, resolveGeometryTolerance, } from "./tolerance.js";
|
|
48
|
-
export {
|
|
47
|
+
export { transformRegionData } from "./transform-geometry.js";
|
|
49
48
|
export { IDENTITY_TRANSFORM3, applyTransformDirection3, applyTransformPoint3, composeTransform3, eulerTransform3, frameTransform3, inverseTransform3, rotationTransform3, scaleTransform3, transformDeterminant3, translationTransform3, validateTransform3, } from "./transform3.js";
|
|
50
49
|
export { sampleTextContours } from "./text-contours.js";
|
|
51
50
|
export { sampleCurve2, sampleCurve3 } from "./curves/sampling.js";
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { GeometryError } from "../errors.js";
|
|
2
|
-
import {
|
|
2
|
+
import { analyzeTriangleMesh, validateTriangleMesh } from "../mesh/mesh.js";
|
|
3
3
|
import { assertMeshAllocationWithinLimits } from "../model-limits.js";
|
|
4
4
|
import { writeMeshVertex } from "../numeric.js";
|
|
5
5
|
import { triangulateContour } from "./loft-triangulation.js";
|
|
6
6
|
/** @internal Pure closed simple-contour strips, retaining repeated correspondence slots as shared physical vertices. */
|
|
7
7
|
export function simpleLoftMesh(geometry, limits) {
|
|
8
8
|
const count = geometry.world[0][0].length, rowCount = geometry.world.length;
|
|
9
|
-
const
|
|
10
|
-
const bytes = 12 * (
|
|
11
|
-
assertMeshAllocationWithinLimits(
|
|
12
|
-
const positions = new Float32Array(
|
|
9
|
+
const maxVertices = count * rowCount, maximumTriangles = 2 * count * (rowCount - 1) + 2 * (count - 2);
|
|
10
|
+
const bytes = 12 * (maxVertices + maximumTriangles);
|
|
11
|
+
assertMeshAllocationWithinLimits(maxVertices, maximumTriangles, bytes, "loftMesh", limits);
|
|
12
|
+
const positions = new Float32Array(maxVertices * 3), indices = new Uint32Array(maximumTriangles * 3);
|
|
13
13
|
let vertexCount = 0, cursor = 0;
|
|
14
14
|
const rows = geometry.world.map((contours, row) => {
|
|
15
15
|
const points = [], vertices = [], slots = [];
|
|
@@ -78,7 +78,7 @@ export function simpleLoftMesh(geometry, limits) {
|
|
|
78
78
|
positions: positions.slice(0, vertexCount * 3),
|
|
79
79
|
indices: indices.slice(0, cursor),
|
|
80
80
|
};
|
|
81
|
-
const volume =
|
|
81
|
+
const volume = analyzeTriangleMesh(mesh).signedVolume;
|
|
82
82
|
if (volume === 0)
|
|
83
83
|
throw new GeometryError("DEGENERATE_GEOMETRY", "Loft stations collapse to zero enclosed volume.", { operation: "loftMesh" });
|
|
84
84
|
if (volume < 0)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { GeometryError } from "../errors.js";
|
|
2
2
|
import { resolveExtrusionControls, resolveExtrusionDivisions, } from "../extrusion.js";
|
|
3
3
|
import { assertMeshAllocationWithinLimits, resolveModelingLimits } from "../model-limits.js";
|
|
4
|
+
import { capturePath2Input, path2InputData } from "../paths/path-value.js";
|
|
4
5
|
import { assertSamplingCount } from "../sampling-limits.js";
|
|
5
6
|
import { pointLoftProfile, prepareLoftGeometry } from "./loft-geometry.js";
|
|
6
7
|
import {} from "./loft-options.js";
|
|
@@ -14,6 +15,7 @@ export { triangulateContour } from "./loft-triangulation.js";
|
|
|
14
15
|
* Both ends use ear-clipped caps, supporting concave profiles without center fans.
|
|
15
16
|
* Intermediate slices interpolate placed world vertices, never frame axes.
|
|
16
17
|
* Transformed coordinates must fit finite Float32 mesh storage.
|
|
18
|
+
* Path2 profiles must be closed; raw point collections are interpreted as closed.
|
|
17
19
|
*
|
|
18
20
|
* @example Loft with explicit point correspondence
|
|
19
21
|
* ```ts
|
|
@@ -30,21 +32,27 @@ export function loftMesh(stations, options) {
|
|
|
30
32
|
throw new GeometryError("INVALID_ARGUMENT", "Loft requires at least two stations.", {
|
|
31
33
|
operation: "loftMesh",
|
|
32
34
|
});
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
return sum + station.profile.length;
|
|
39
|
-
}, 0), "loftMesh", 1_000_000);
|
|
40
|
-
const profiles = input.map((station) => ({
|
|
41
|
-
...station,
|
|
42
|
-
profile: pointLoftProfile(station.profile),
|
|
35
|
+
assertSamplingCount(stations.length, "loftMesh", limits.maxPathPoints);
|
|
36
|
+
const inputs = stations;
|
|
37
|
+
const input = inputs.map(({ profile, ...placement }) => ({
|
|
38
|
+
...placement,
|
|
39
|
+
source: capturePath2Input(profile, true),
|
|
43
40
|
}));
|
|
41
|
+
assertSamplingCount(input.reduce((sum, station) => sum + station.source.count, 0), "loftMesh", 1_000_000);
|
|
42
|
+
let remaining = 1_000_000;
|
|
43
|
+
const profiles = input.map(({ source, ...placement }) => {
|
|
44
|
+
const points = path2InputData(source.input, true, {
|
|
45
|
+
maxPathPoints: Math.max(1, Math.min(limits.maxProfilePoints, remaining)),
|
|
46
|
+
}).points;
|
|
47
|
+
assertSamplingCount(points.length, "loftMesh", remaining);
|
|
48
|
+
remaining -= points.length;
|
|
49
|
+
return { ...placement, profile: pointLoftProfile(points) };
|
|
50
|
+
});
|
|
44
51
|
return simpleLoftMesh(prepareLoftGeometry(profiles, options, limits, false), limits);
|
|
45
52
|
}
|
|
46
53
|
/**
|
|
47
54
|
* Linearly extrudes one simple profile along +Z with robust ear-clipped caps.
|
|
55
|
+
* Path2 profiles must be closed; raw point collections have an implicit closing edge.
|
|
48
56
|
*
|
|
49
57
|
* @example Extrude point data without an engine
|
|
50
58
|
* ```ts
|
|
@@ -52,9 +60,9 @@ export function loftMesh(stations, options) {
|
|
|
52
60
|
* extrudeMesh(outline, { height: 8 });
|
|
53
61
|
* ```
|
|
54
62
|
*/
|
|
55
|
-
export function extrudeMesh(
|
|
63
|
+
export function extrudeMesh(input, options) {
|
|
56
64
|
const { height } = options;
|
|
57
|
-
const { center, scales,
|
|
65
|
+
const { center, scales, twist } = resolveExtrusionControls(height, options, "extrudeMesh");
|
|
58
66
|
if (!Number.isFinite(height) || height <= 0) {
|
|
59
67
|
throw new GeometryError("INVALID_ARGUMENT", "Extrusion height must be finite and positive.", {
|
|
60
68
|
operation: "extrudeMesh",
|
|
@@ -63,6 +71,7 @@ export function extrudeMesh(profile, options) {
|
|
|
63
71
|
}
|
|
64
72
|
const bottom = center ? -height / 2 : 0;
|
|
65
73
|
const limits = resolveModelingLimits(options.limits);
|
|
74
|
+
const profile = path2InputData(input, true, { maxPathPoints: limits.maxProfilePoints }).points;
|
|
66
75
|
assertSamplingCount(profile.length, "extrudeMesh", limits.maxProfilePoints);
|
|
67
76
|
const divisions = resolveExtrusionDivisions(profile, height, options);
|
|
68
77
|
const count = profile.length * (divisions + 2);
|
|
@@ -76,7 +85,7 @@ export function extrudeMesh(profile, options) {
|
|
|
76
85
|
});
|
|
77
86
|
const stations = Array.from({ length: divisions + 2 }, (_, index) => {
|
|
78
87
|
const amount = index / (divisions + 1);
|
|
79
|
-
const angle = ((
|
|
88
|
+
const angle = ((twist * Math.PI) / 180) * amount;
|
|
80
89
|
const cosine = Math.cos(angle), sine = Math.sin(angle);
|
|
81
90
|
const sx = 1 + (scales[0] - 1) * amount, sy = 1 + (scales[1] - 1) * amount;
|
|
82
91
|
return {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// A versioned realm protocol lets separately bundled authoring values cross the host boundary.
|
|
2
|
-
const immutableMath = Symbol.for("@metamesh/modeling/immutable-math/
|
|
2
|
+
const immutableMath = Symbol.for("@metamesh/modeling/immutable-math/7");
|
|
3
3
|
/**
|
|
4
4
|
* Brands and freezes only this constructor's prototype. Pure-annotated callers let bundlers
|
|
5
5
|
* discard unused classes without dropping initialization for classes that remain reachable.
|
|
@@ -71,12 +71,12 @@ export function measureInternalCylindricalGearPairMotion(spec, options = {}) {
|
|
|
71
71
|
const ringSpace = sampleInternalCylindricalGearSpaceOutline(spec.driven, options.outline);
|
|
72
72
|
const ringTipRadius = pair.driven.pitchRadius - pair.driven.addendum;
|
|
73
73
|
const contactWindow = contactWindowPolygon(pair.centerDistance, pair.driver.outsideRadius, ringTipRadius);
|
|
74
|
-
const initialRingPhase = pair.driven.toothCount % 2 === 0 ? 0 : pair.driven.
|
|
75
|
-
const initialDriverPhase = pair.driver.toothCount % 2 === 0 ? 0 : pair.driver.
|
|
74
|
+
const initialRingPhase = pair.driven.toothCount % 2 === 0 ? 0 : pair.driven.angularPitchRadians / 2;
|
|
75
|
+
const initialDriverPhase = pair.driver.toothCount % 2 === 0 ? 0 : pair.driver.angularPitchRadians / 2;
|
|
76
76
|
let maximumOverlapArea = 0;
|
|
77
77
|
let maximumPhase = initialDriverPhase;
|
|
78
78
|
for (let sample = 0; sample < samples; sample += 1) {
|
|
79
|
-
const phase = (pair.driver.
|
|
79
|
+
const phase = (pair.driver.angularPitchRadians * sample) / samples;
|
|
80
80
|
const driverPhase = initialDriverPhase + phase;
|
|
81
81
|
const drivenPhase = initialRingPhase + phase / pair.ratio;
|
|
82
82
|
const posedDriver = clippingPolygon(transformedLoop(driver, driverPhase));
|