@metamesh/modeling 0.12.0 → 0.14.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 +40 -0
- package/README.md +103 -72
- package/dist/api/engine.d.ts +123 -97
- package/dist/api/geometry.d.ts +4232 -3307
- package/dist/api/index.d.ts +2758 -2268
- package/dist/api/text.d.ts +119 -107
- package/dist/docs/guides/concepts.md +300 -0
- package/dist/docs/guides/fonts.md +59 -0
- package/dist/docs/guides/fundamentals.md +137 -0
- package/dist/docs/guides/generation.md +223 -0
- package/dist/docs/guides/hosting.md +91 -0
- package/dist/docs/guides/recipes.md +718 -0
- package/dist/docs/manifest.json +10703 -0
- package/dist/docs/reference/engine/Export3mfOptions.md +29 -0
- package/dist/docs/reference/engine/ExportMeshPart.md +65 -0
- package/dist/docs/reference/engine/GenerationOptions.md +62 -0
- package/dist/docs/reference/engine/GeometryResource.md +77 -0
- package/dist/docs/reference/engine/ModelDependencies.md +41 -0
- package/dist/docs/reference/engine/ModelEngine.md +103 -0
- package/dist/docs/reference/engine/ModelEngineOptions.md +33 -0
- package/dist/docs/reference/engine/ModelSession.md +96 -0
- package/dist/docs/reference/engine/ModelSnapshot.md +173 -0
- package/dist/docs/reference/engine/SessionOptions.md +123 -0
- package/dist/docs/reference/engine/SnapshotPart.md +130 -0
- package/dist/docs/reference/engine/categories/host-lifecycle.md +37 -0
- package/dist/docs/reference/engine/createModelEngine.md +56 -0
- package/dist/docs/reference/engine/defaultModelingLimits.md +7 -0
- package/dist/docs/reference/engine/modelingWasmUrl.md +7 -0
- package/dist/docs/reference/engine/validateModel.md +48 -0
- package/dist/docs/reference/engine.md +25 -0
- package/dist/docs/reference/geometry/AcmeThreadProfileSpec.md +75 -0
- package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +92 -0
- package/dist/docs/reference/geometry/Anchor3.md +53 -0
- package/dist/docs/reference/geometry/ArcCurve2.md +70 -0
- package/dist/docs/reference/geometry/ArcCurve3.md +94 -0
- package/dist/docs/reference/geometry/AttachTransformOptions.md +62 -0
- package/dist/docs/reference/geometry/AxisAngleRotation3.md +66 -0
- package/dist/docs/reference/geometry/Bounds2.md +39 -0
- package/dist/docs/reference/geometry/Bounds3.md +39 -0
- package/dist/docs/reference/geometry/BoundsFit2.md +52 -0
- package/dist/docs/reference/geometry/BoundsFit3.md +52 -0
- package/dist/docs/reference/geometry/BoundsFitOptions.md +23 -0
- package/dist/docs/reference/geometry/BoundsFromSizeOptions.md +23 -0
- package/dist/docs/reference/geometry/BoxAnchorFace.md +14 -0
- package/dist/docs/reference/geometry/BoxAnchorOptions.md +63 -0
- package/dist/docs/reference/geometry/BoxEdge.md +7 -0
- package/dist/docs/reference/geometry/BoxEdgeSelection.md +14 -0
- package/dist/docs/reference/geometry/BoxEdgeTreatments.md +15 -0
- package/dist/docs/reference/geometry/BoxOptions.md +87 -0
- package/dist/docs/reference/geometry/ButtressPressureFlankSide.md +7 -0
- package/dist/docs/reference/geometry/ButtressThreadProfileSpec.md +93 -0
- package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +29 -0
- package/dist/docs/reference/geometry/CircleContourOptions.md +15 -0
- package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +59 -0
- package/dist/docs/reference/geometry/CircularResolutionOptions.md +107 -0
- package/dist/docs/reference/geometry/ClearanceHoleDimensions.md +41 -0
- package/dist/docs/reference/geometry/ClearanceHoleFit.md +7 -0
- package/dist/docs/reference/geometry/ClosestPointOnPathOptions.md +34 -0
- package/dist/docs/reference/geometry/ClosestPointOnPathResult.md +65 -0
- package/dist/docs/reference/geometry/CompensatedThreadDiameters.md +53 -0
- package/dist/docs/reference/geometry/Contour.md +17 -0
- package/dist/docs/reference/geometry/ContourCurve.md +35 -0
- package/dist/docs/reference/geometry/ContourPoint.md +29 -0
- package/dist/docs/reference/geometry/ContourSegment.md +86 -0
- package/dist/docs/reference/geometry/CorrespondingComponent.md +46 -0
- package/dist/docs/reference/geometry/CorrespondingContour.md +46 -0
- package/dist/docs/reference/geometry/CorrespondingProfile.md +22 -0
- package/dist/docs/reference/geometry/CorrespondingProfileStation.md +27 -0
- package/dist/docs/reference/geometry/CubicBezierCurve2.md +70 -0
- package/dist/docs/reference/geometry/CubicBezierCurve3.md +70 -0
- package/dist/docs/reference/geometry/Curve2.md +16 -0
- package/dist/docs/reference/geometry/Curve3.md +16 -0
- package/dist/docs/reference/geometry/CurveSamplingOptions.md +64 -0
- package/dist/docs/reference/geometry/CustomThreadProfileSpec.md +73 -0
- package/dist/docs/reference/geometry/CylinderAnchorFace.md +14 -0
- package/dist/docs/reference/geometry/CylinderAnchorOptions.md +87 -0
- package/dist/docs/reference/geometry/CylinderOptions.md +53 -0
- package/dist/docs/reference/geometry/CylindricalGearDimensions.md +209 -0
- package/dist/docs/reference/geometry/CylindricalGearMeshKind.md +7 -0
- package/dist/docs/reference/geometry/CylindricalGearOutlineOptions.md +71 -0
- package/dist/docs/reference/geometry/CylindricalGearPairDimensions.md +82 -0
- package/dist/docs/reference/geometry/CylindricalGearPairMotionOptions.md +34 -0
- package/dist/docs/reference/geometry/CylindricalGearPairMotionReport.md +41 -0
- package/dist/docs/reference/geometry/CylindricalGearPairSpec.md +47 -0
- package/dist/docs/reference/geometry/CylindricalGearSpec.md +82 -0
- package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +7 -0
- package/dist/docs/reference/geometry/EdgeTreatment.md +17 -0
- package/dist/docs/reference/geometry/EllipseContourOptions.md +15 -0
- package/dist/docs/reference/geometry/EndTreatments.md +34 -0
- package/dist/docs/reference/geometry/ExtrudeOptions.md +134 -0
- package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +77 -0
- package/dist/docs/reference/geometry/FittedTextLayout.md +60 -0
- package/dist/docs/reference/geometry/Frame3.md +58 -0
- package/dist/docs/reference/geometry/GeometryError.md +97 -0
- package/dist/docs/reference/geometry/GeometryErrorCode.md +7 -0
- package/dist/docs/reference/geometry/GeometryErrorContext.md +29 -0
- package/dist/docs/reference/geometry/GeometryResolution.md +74 -0
- package/dist/docs/reference/geometry/GeometrySamplingLimits.md +62 -0
- package/dist/docs/reference/geometry/GeometryToleranceOptions.md +41 -0
- package/dist/docs/reference/geometry/GridPatternOptions.md +42 -0
- package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +14 -0
- package/dist/docs/reference/geometry/HeightfieldOptions.md +67 -0
- package/dist/docs/reference/geometry/HeightfieldPreflight.md +53 -0
- package/dist/docs/reference/geometry/HelicalThreadRidgeMeshOptions.md +141 -0
- package/dist/docs/reference/geometry/HelicalThreadSolidMeshOptions.md +265 -0
- package/dist/docs/reference/geometry/HelicalThreadSolidMeshPreflight.md +53 -0
- package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +18 -0
- package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +242 -0
- package/dist/docs/reference/geometry/LineCurve2.md +46 -0
- package/dist/docs/reference/geometry/LineCurve3.md +46 -0
- package/dist/docs/reference/geometry/LinearPatternOptions.md +30 -0
- package/dist/docs/reference/geometry/LoftCorrespondence.md +19 -0
- package/dist/docs/reference/geometry/LoftMeshStation.md +27 -0
- package/dist/docs/reference/geometry/LoftOptions.md +84 -0
- package/dist/docs/reference/geometry/LoftPlacement.md +66 -0
- package/dist/docs/reference/geometry/METRIC_FASTENER_STANDARDS.md +18 -0
- package/dist/docs/reference/geometry/MatchProfilesOptions.md +35 -0
- package/dist/docs/reference/geometry/MetricFastenerSize.md +7 -0
- package/dist/docs/reference/geometry/MetricFastenerStandard.md +72 -0
- package/dist/docs/reference/geometry/MetricHexNutDimensions.md +29 -0
- package/dist/docs/reference/geometry/MetricSocketCapHeadDimensions.md +41 -0
- package/dist/docs/reference/geometry/ModelingLimits.md +126 -0
- package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +17 -0
- package/dist/docs/reference/geometry/Path2.md +14 -0
- package/dist/docs/reference/geometry/Path3.md +14 -0
- package/dist/docs/reference/geometry/PathFrame.md +46 -0
- package/dist/docs/reference/geometry/PathNormalGuide.md +38 -0
- package/dist/docs/reference/geometry/PathPatternOptions.md +46 -0
- package/dist/docs/reference/geometry/PathPlacement.md +34 -0
- package/dist/docs/reference/geometry/Pivot2Options.md +26 -0
- package/dist/docs/reference/geometry/Pivot3Options.md +26 -0
- package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +7 -0
- package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +156 -0
- package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +120 -0
- package/dist/docs/reference/geometry/PlanarPatchQuality.md +190 -0
- package/dist/docs/reference/geometry/PolygonData.md +38 -0
- package/dist/docs/reference/geometry/PolylineResamplingOptions.md +92 -0
- package/dist/docs/reference/geometry/PrimitivePlacement.md +31 -0
- package/dist/docs/reference/geometry/PrimitivePlacementOptions.md +83 -0
- package/dist/docs/reference/geometry/PrintableThreadFit.md +7 -0
- package/dist/docs/reference/geometry/PrintableThreadFitPolicy.md +45 -0
- package/dist/docs/reference/geometry/Profile.md +22 -0
- package/dist/docs/reference/geometry/ProfileComponent2.md +46 -0
- package/dist/docs/reference/geometry/ProfileContour2.md +34 -0
- package/dist/docs/reference/geometry/ProfileSpan2.md +47 -0
- package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +36 -0
- package/dist/docs/reference/geometry/RackPitchDimensions.md +113 -0
- package/dist/docs/reference/geometry/RackPitchSpec.md +77 -0
- package/dist/docs/reference/geometry/RadialPatternOptions.md +62 -0
- package/dist/docs/reference/geometry/RadialSizing.md +7 -0
- package/dist/docs/reference/geometry/RadialSizingOptions.md +40 -0
- package/dist/docs/reference/geometry/RectangleContourOptions.md +66 -0
- package/dist/docs/reference/geometry/RectangleCornerTreatment.md +34 -0
- package/dist/docs/reference/geometry/RectangleCornerTreatments.md +14 -0
- package/dist/docs/reference/geometry/RectangleProfileOptions.md +94 -0
- package/dist/docs/reference/geometry/RegionData.md +14 -0
- package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +84 -0
- package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +65 -0
- package/dist/docs/reference/geometry/RevolveOptions.md +82 -0
- package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +91 -0
- package/dist/docs/reference/geometry/RowLayoutOptions.md +23 -0
- package/dist/docs/reference/geometry/SampleContourOptions.md +71 -0
- package/dist/docs/reference/geometry/SampleHelixOptions.md +95 -0
- package/dist/docs/reference/geometry/SampleSideProfileOptions.md +71 -0
- package/dist/docs/reference/geometry/SampledCurve2.md +34 -0
- package/dist/docs/reference/geometry/SampledCurve3.md +34 -0
- package/dist/docs/reference/geometry/SampledThreadHelices.md +58 -0
- package/dist/docs/reference/geometry/SideProfileCurve.md +35 -0
- package/dist/docs/reference/geometry/SideProfilePoint.md +29 -0
- package/dist/docs/reference/geometry/SideProfileSegment.md +86 -0
- package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +71 -0
- package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +34 -0
- package/dist/docs/reference/geometry/SphereOptions.md +15 -0
- package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +75 -0
- package/dist/docs/reference/geometry/StrokePathCap.md +7 -0
- package/dist/docs/reference/geometry/StrokePathJoin.md +7 -0
- package/dist/docs/reference/geometry/StrokePathRegionOptions.md +85 -0
- package/dist/docs/reference/geometry/SvgImportOptions.md +60 -0
- package/dist/docs/reference/geometry/SvgRegionPreflight.md +61 -0
- package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +118 -0
- package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +65 -0
- package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +53 -0
- package/dist/docs/reference/geometry/SweepOptions.md +109 -0
- package/dist/docs/reference/geometry/SweepOrientation.md +109 -0
- package/dist/docs/reference/geometry/ThreadBevelOptions.md +53 -0
- package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +100 -0
- package/dist/docs/reference/geometry/ThreadCompensationOptions.md +73 -0
- package/dist/docs/reference/geometry/ThreadEndStyle.md +7 -0
- package/dist/docs/reference/geometry/ThreadEndTreatmentOptions.md +113 -0
- package/dist/docs/reference/geometry/ThreadHandedness.md +7 -0
- package/dist/docs/reference/geometry/ThreadHelixOptions.md +120 -0
- package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +7 -0
- package/dist/docs/reference/geometry/ThreadLeadInShape.md +7 -0
- package/dist/docs/reference/geometry/ThreadProfile.md +82 -0
- package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +49 -0
- package/dist/docs/reference/geometry/ThreadProfileSpec.md +19 -0
- package/dist/docs/reference/geometry/ThreadRole.md +7 -0
- package/dist/docs/reference/geometry/ThreadedNutBevel.md +7 -0
- package/dist/docs/reference/geometry/ThreadedNutOptions.md +269 -0
- package/dist/docs/reference/geometry/ThreadedNutPreflight.md +94 -0
- package/dist/docs/reference/geometry/ThreadedNutShape.md +7 -0
- package/dist/docs/reference/geometry/ThreadedRodOptions.md +242 -0
- package/dist/docs/reference/geometry/TorusOptions.md +105 -0
- package/dist/docs/reference/geometry/Transform2-type.md +255 -0
- package/dist/docs/reference/geometry/Transform2Input.md +19 -0
- package/dist/docs/reference/geometry/Transform2Matrix.md +14 -0
- package/dist/docs/reference/geometry/Transform3-type.md +295 -0
- package/dist/docs/reference/geometry/Transform3Input.md +19 -0
- package/dist/docs/reference/geometry/Transform3Matrix.md +17 -0
- package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +91 -0
- package/dist/docs/reference/geometry/TriangleMesh.md +34 -0
- package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +119 -0
- package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +75 -0
- package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +75 -0
- package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +39 -0
- package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +190 -0
- package/dist/docs/reference/geometry/TriangleMeshSignature.md +107 -0
- package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +41 -0
- package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +29 -0
- package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +51 -0
- package/dist/docs/reference/geometry/TriangularThreadProfileSpec.md +91 -0
- package/dist/docs/reference/geometry/TubeOptions.md +138 -0
- package/dist/docs/reference/geometry/Vector2-type.md +269 -0
- package/dist/docs/reference/geometry/Vector2Input.md +19 -0
- package/dist/docs/reference/geometry/Vector2Tuple.md +14 -0
- package/dist/docs/reference/geometry/Vector3-type.md +281 -0
- package/dist/docs/reference/geometry/Vector3Input.md +19 -0
- package/dist/docs/reference/geometry/Vector3Tuple.md +14 -0
- package/dist/docs/reference/geometry/VectorTextArcBaseline.md +53 -0
- package/dist/docs/reference/geometry/VectorTextLayout.md +39 -0
- package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +111 -0
- package/dist/docs/reference/geometry/VectorTextMetrics.md +94 -0
- package/dist/docs/reference/geometry/VectorTextOptions.md +50 -0
- package/dist/docs/reference/geometry/add2.md +36 -0
- package/dist/docs/reference/geometry/add3.md +42 -0
- package/dist/docs/reference/geometry/analyzeTriangleMesh.md +57 -0
- package/dist/docs/reference/geometry/analyzeTriangleMeshQuality.md +52 -0
- package/dist/docs/reference/geometry/anchorFrame3.md +40 -0
- package/dist/docs/reference/geometry/applyTransformDirection3.md +45 -0
- package/dist/docs/reference/geometry/applyTransformPoint3.md +43 -0
- package/dist/docs/reference/geometry/attachTransform.md +77 -0
- package/dist/docs/reference/geometry/boundsCenter.md +62 -0
- package/dist/docs/reference/geometry/boundsFromSize.md +83 -0
- package/dist/docs/reference/geometry/boundsSize.md +62 -0
- package/dist/docs/reference/geometry/boxAnchor3.md +52 -0
- package/dist/docs/reference/geometry/buildHelicalThreadRidgeMesh.md +68 -0
- package/dist/docs/reference/geometry/buildHelicalThreadSolidMesh.md +102 -0
- package/dist/docs/reference/geometry/categories/bounds-layout.md +35 -0
- package/dist/docs/reference/geometry/categories/curves-paths.md +66 -0
- package/dist/docs/reference/geometry/categories/mechanical.md +101 -0
- package/dist/docs/reference/geometry/categories/meshes.md +73 -0
- package/dist/docs/reference/geometry/categories/pattern-placement.md +34 -0
- package/dist/docs/reference/geometry/categories/primitive-options.md +36 -0
- package/dist/docs/reference/geometry/categories/profiles-regions.md +74 -0
- package/dist/docs/reference/geometry/categories/resolution-errors.md +47 -0
- package/dist/docs/reference/geometry/categories/transforms-math.md +92 -0
- package/dist/docs/reference/geometry/categories/vector-import.md +40 -0
- package/dist/docs/reference/geometry/circleContour.md +33 -0
- package/dist/docs/reference/geometry/closeToAxis.md +34 -0
- package/dist/docs/reference/geometry/closestPointOnPath.md +110 -0
- package/dist/docs/reference/geometry/compensateThreadDiameters.md +51 -0
- package/dist/docs/reference/geometry/compensateThreadProfileAxially.md +42 -0
- package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +56 -0
- package/dist/docs/reference/geometry/composeTransform3.md +44 -0
- package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +45 -0
- package/dist/docs/reference/geometry/computeParallelTransportFrames.md +47 -0
- package/dist/docs/reference/geometry/computeTriangleMeshCentroid.md +31 -0
- package/dist/docs/reference/geometry/containsBounds.md +72 -0
- package/dist/docs/reference/geometry/contourContainsPoint.md +33 -0
- package/dist/docs/reference/geometry/createAnchor3.md +67 -0
- package/dist/docs/reference/geometry/createThreadProfile.md +37 -0
- package/dist/docs/reference/geometry/createTriangleMeshSignature.md +60 -0
- package/dist/docs/reference/geometry/cross2.md +36 -0
- package/dist/docs/reference/geometry/cross3.md +42 -0
- package/dist/docs/reference/geometry/cumulativePathLengths.md +33 -0
- package/dist/docs/reference/geometry/cylinderAnchor3.md +60 -0
- package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +14 -0
- package/dist/docs/reference/geometry/distance2.md +36 -0
- package/dist/docs/reference/geometry/distance3.md +36 -0
- package/dist/docs/reference/geometry/distributeAlongPath.md +51 -0
- package/dist/docs/reference/geometry/dot2.md +36 -0
- package/dist/docs/reference/geometry/dot3.md +42 -0
- package/dist/docs/reference/geometry/ellipseContour.md +33 -0
- package/dist/docs/reference/geometry/eulerTransform3.md +42 -0
- package/dist/docs/reference/geometry/extrudeMesh.md +73 -0
- package/dist/docs/reference/geometry/fitBounds.md +95 -0
- package/dist/docs/reference/geometry/fitTextLayout.md +57 -0
- package/dist/docs/reference/geometry/frameTransform3.md +48 -0
- package/dist/docs/reference/geometry/getMetricClearanceHole.md +33 -0
- package/dist/docs/reference/geometry/getMetricFastenerStandard.md +27 -0
- package/dist/docs/reference/geometry/gridPatternTransforms.md +31 -0
- package/dist/docs/reference/geometry/heightfieldMesh.md +43 -0
- package/dist/docs/reference/geometry/inverseTransform3.md +34 -0
- package/dist/docs/reference/geometry/isGeometryError.md +26 -0
- package/dist/docs/reference/geometry/joinTriangleMeshes.md +36 -0
- package/dist/docs/reference/geometry/layoutRow.md +43 -0
- package/dist/docs/reference/geometry/length2.md +30 -0
- package/dist/docs/reference/geometry/length3.md +30 -0
- package/dist/docs/reference/geometry/lerp2.md +42 -0
- package/dist/docs/reference/geometry/lerp3.md +42 -0
- package/dist/docs/reference/geometry/linearPatternTransforms.md +31 -0
- package/dist/docs/reference/geometry/loftMesh.md +72 -0
- package/dist/docs/reference/geometry/matchProfiles.md +51 -0
- package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +48 -0
- package/dist/docs/reference/geometry/measureTriangleMesh.md +55 -0
- package/dist/docs/reference/geometry/meshBounds.md +35 -0
- package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +29 -0
- package/dist/docs/reference/geometry/normalize2.md +36 -0
- package/dist/docs/reference/geometry/normalize3.md +36 -0
- package/dist/docs/reference/geometry/normalizeContour.md +45 -0
- package/dist/docs/reference/geometry/normalizePolygon.md +37 -0
- package/dist/docs/reference/geometry/normalizeRegion.md +33 -0
- package/dist/docs/reference/geometry/optimizePlanarPatches.md +91 -0
- package/dist/docs/reference/geometry/pathLength.md +33 -0
- package/dist/docs/reference/geometry/pathPatternTransforms.md +57 -0
- package/dist/docs/reference/geometry/preflightHeightfield.md +34 -0
- package/dist/docs/reference/geometry/preflightHelicalThreadSolidMesh.md +96 -0
- package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +85 -0
- package/dist/docs/reference/geometry/preflightSvgRegion.md +56 -0
- package/dist/docs/reference/geometry/preflightThreadedNut.md +96 -0
- package/dist/docs/reference/geometry/preflightThreadedRod.md +85 -0
- package/dist/docs/reference/geometry/projectOntoPlane3.md +36 -0
- package/dist/docs/reference/geometry/radialPatternTransforms.md +47 -0
- package/dist/docs/reference/geometry/rectangleContour.md +49 -0
- package/dist/docs/reference/geometry/rectangleProfile.md +53 -0
- package/dist/docs/reference/geometry/regionArea.md +34 -0
- package/dist/docs/reference/geometry/regionBounds.md +27 -0
- package/dist/docs/reference/geometry/regularPolygonContour.md +53 -0
- package/dist/docs/reference/geometry/resamplePolyline2.md +64 -0
- package/dist/docs/reference/geometry/resamplePolyline3.md +67 -0
- package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +83 -0
- package/dist/docs/reference/geometry/resolveArcSegments.md +67 -0
- package/dist/docs/reference/geometry/resolveCircularSegments.md +62 -0
- package/dist/docs/reference/geometry/resolveCylindricalGear.md +31 -0
- package/dist/docs/reference/geometry/resolveCylindricalGearPair.md +31 -0
- package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +74 -0
- package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +26 -0
- package/dist/docs/reference/geometry/resolveGeometryTolerance.md +59 -0
- package/dist/docs/reference/geometry/resolvePrintableThreadFitPolicy.md +27 -0
- package/dist/docs/reference/geometry/resolveRackPitch.md +27 -0
- package/dist/docs/reference/geometry/resolveThreadCircularSegments.md +59 -0
- package/dist/docs/reference/geometry/reverseTriangleMesh.md +30 -0
- package/dist/docs/reference/geometry/revolveMesh.md +76 -0
- package/dist/docs/reference/geometry/rotate2.md +36 -0
- package/dist/docs/reference/geometry/rotationTransform3.md +53 -0
- package/dist/docs/reference/geometry/roundClosedPolylinePath.md +50 -0
- package/dist/docs/reference/geometry/sampleContour.md +77 -0
- package/dist/docs/reference/geometry/sampleCurve2.md +61 -0
- package/dist/docs/reference/geometry/sampleCurve3.md +61 -0
- package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +58 -0
- package/dist/docs/reference/geometry/sampleHelix.md +41 -0
- package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +59 -0
- package/dist/docs/reference/geometry/sampleRackToothPath.md +39 -0
- package/dist/docs/reference/geometry/sampleSideProfile.md +73 -0
- package/dist/docs/reference/geometry/sampleTextContours.md +53 -0
- package/dist/docs/reference/geometry/sampleThreadHelices.md +63 -0
- package/dist/docs/reference/geometry/scale2.md +36 -0
- package/dist/docs/reference/geometry/scale3.md +42 -0
- package/dist/docs/reference/geometry/scaleTransform3.md +38 -0
- package/dist/docs/reference/geometry/signedContourArea.md +26 -0
- package/dist/docs/reference/geometry/starContour.md +51 -0
- package/dist/docs/reference/geometry/strokePathRegion.md +63 -0
- package/dist/docs/reference/geometry/subtract2.md +36 -0
- package/dist/docs/reference/geometry/subtract3.md +42 -0
- package/dist/docs/reference/geometry/sweepMesh.md +82 -0
- package/dist/docs/reference/geometry/transform2.md +38 -0
- package/dist/docs/reference/geometry/transform3.md +38 -0
- package/dist/docs/reference/geometry/transformContour.md +42 -0
- package/dist/docs/reference/geometry/transformDeterminant3.md +36 -0
- package/dist/docs/reference/geometry/transformPath2.md +40 -0
- package/dist/docs/reference/geometry/transformPath3.md +33 -0
- package/dist/docs/reference/geometry/transformRegionData.md +40 -0
- package/dist/docs/reference/geometry/transformTriangleMesh.md +42 -0
- package/dist/docs/reference/geometry/translationTransform3.md +35 -0
- package/dist/docs/reference/geometry/triangulateContour.md +26 -0
- package/dist/docs/reference/geometry/validateSolidMesh.md +52 -0
- package/dist/docs/reference/geometry/validateTransform3.md +47 -0
- package/dist/docs/reference/geometry/validateTriangleMesh.md +59 -0
- package/dist/docs/reference/geometry/vector2.md +31 -0
- package/dist/docs/reference/geometry/vector3.md +38 -0
- package/dist/docs/reference/geometry.md +30 -0
- package/dist/docs/reference/model/Anchor3.md +54 -0
- package/dist/docs/reference/model/AttachOptions.md +63 -0
- package/dist/docs/reference/model/Bounds2.md +39 -0
- package/dist/docs/reference/model/Bounds3.md +39 -0
- package/dist/docs/reference/model/BoxEdge.md +15 -0
- package/dist/docs/reference/model/BoxEdgeSelection.md +19 -0
- package/dist/docs/reference/model/BoxEdgeTreatments.md +20 -0
- package/dist/docs/reference/model/BoxOptions.md +92 -0
- package/dist/docs/reference/model/ChamferedEdgeTreatment.md +35 -0
- package/dist/docs/reference/model/CircleContourOptions.md +21 -0
- package/dist/docs/reference/model/CircleOptions.md +21 -0
- package/dist/docs/reference/model/CircularPrimitiveOptions.md +64 -0
- package/dist/docs/reference/model/Computed.md +35 -0
- package/dist/docs/reference/model/ComputedValue.md +20 -0
- package/dist/docs/reference/model/Contour.md +22 -0
- package/dist/docs/reference/model/CorrespondingComponent.md +46 -0
- package/dist/docs/reference/model/CorrespondingContour.md +46 -0
- package/dist/docs/reference/model/CorrespondingProfile.md +22 -0
- package/dist/docs/reference/model/CorrespondingProfileStation.md +27 -0
- package/dist/docs/reference/model/CylinderOptions.md +58 -0
- package/dist/docs/reference/model/DiagnosticOptions.md +23 -0
- package/dist/docs/reference/model/EdgeTreatment.md +22 -0
- package/dist/docs/reference/model/EllipseContourOptions.md +21 -0
- package/dist/docs/reference/model/EllipseOptions.md +21 -0
- package/dist/docs/reference/model/EndTreatments.md +39 -0
- package/dist/docs/reference/model/ExtrudeOptions.md +140 -0
- package/dist/docs/reference/model/FinalizedModel.md +121 -0
- package/dist/docs/reference/model/FinalizedPart.md +87 -0
- package/dist/docs/reference/model/Frame3.md +63 -0
- package/dist/docs/reference/model/GenerateCallback.md +37 -0
- package/dist/docs/reference/model/GenerateContext.md +277 -0
- package/dist/docs/reference/model/GeneratedPart.md +93 -0
- package/dist/docs/reference/model/GenerationDiagnostic.md +41 -0
- package/dist/docs/reference/model/GenerationError.md +54 -0
- package/dist/docs/reference/model/GeometryResolution.md +70 -0
- package/dist/docs/reference/model/GeometrySamplingLimits.md +62 -0
- package/dist/docs/reference/model/GeometryToleranceOptions.md +46 -0
- package/dist/docs/reference/model/GridPatternOptions.md +43 -0
- package/dist/docs/reference/model/HeightfieldOptions.md +67 -0
- package/dist/docs/reference/model/HelicalThreadRidgeMeshOptions.md +140 -0
- package/dist/docs/reference/model/HelicalThreadSolidMeshPreflight.md +58 -0
- package/dist/docs/reference/model/HullOptions.md +72 -0
- package/dist/docs/reference/model/ImmutableBuffer-type.md +80 -0
- package/dist/docs/reference/model/ImmutableTriangleMesh.md +34 -0
- package/dist/docs/reference/model/ImplicitOptions.md +83 -0
- package/dist/docs/reference/model/InternalThreadCutterOptions.md +245 -0
- package/dist/docs/reference/model/LinearPatternOptions.md +31 -0
- package/dist/docs/reference/model/LoftCorrespondence.md +27 -0
- package/dist/docs/reference/model/LoftOptions.md +91 -0
- package/dist/docs/reference/model/LoftPlacement.md +73 -0
- package/dist/docs/reference/model/LoftStation.md +35 -0
- package/dist/docs/reference/model/MatchProfilesOptions.md +35 -0
- package/dist/docs/reference/model/ModelProgram.md +44 -0
- package/dist/docs/reference/model/ModelingLimits.md +126 -0
- package/dist/docs/reference/model/NumericArray.md +7 -0
- package/dist/docs/reference/model/PartGeometry.md +16 -0
- package/dist/docs/reference/model/PartOptions.md +65 -0
- package/dist/docs/reference/model/Path2.md +20 -0
- package/dist/docs/reference/model/PathNormalGuide.md +45 -0
- package/dist/docs/reference/model/PathPatternOptions.md +47 -0
- package/dist/docs/reference/model/PatternSource.md +26 -0
- package/dist/docs/reference/model/Pivot2Options.md +27 -0
- package/dist/docs/reference/model/Pivot3Options.md +27 -0
- package/dist/docs/reference/model/PlaneOptions.md +39 -0
- package/dist/docs/reference/model/PolygonData.md +43 -0
- package/dist/docs/reference/model/PolygonOptions.md +189 -0
- package/dist/docs/reference/model/PrimitivePlacement.md +40 -0
- package/dist/docs/reference/model/PrimitivePlacementOptions.md +88 -0
- package/dist/docs/reference/model/PrintableThreadFit.md +14 -0
- package/dist/docs/reference/model/PrintableThreadFitPolicy.md +50 -0
- package/dist/docs/reference/model/Profile.md +22 -0
- package/dist/docs/reference/model/ProfileComponent2.md +46 -0
- package/dist/docs/reference/model/ProfileContour2.md +34 -0
- package/dist/docs/reference/model/ProfileSpan2.md +47 -0
- package/dist/docs/reference/model/ProfiledEdgeTreatment.md +41 -0
- package/dist/docs/reference/model/RadialPatternOptions.md +63 -0
- package/dist/docs/reference/model/RadialSizing.md +15 -0
- package/dist/docs/reference/model/RadialSizingOptions.md +40 -0
- package/dist/docs/reference/model/RectangleContourOptions.md +72 -0
- package/dist/docs/reference/model/RectangleCornerTreatment.md +40 -0
- package/dist/docs/reference/model/RectangleCornerTreatments.md +20 -0
- package/dist/docs/reference/model/RectangleOptions.md +107 -0
- package/dist/docs/reference/model/RegionData.md +19 -0
- package/dist/docs/reference/model/RegularPolygonOptions.md +53 -0
- package/dist/docs/reference/model/RevolveOptions.md +89 -0
- package/dist/docs/reference/model/RoundedEdgeTreatment.md +96 -0
- package/dist/docs/reference/model/Section.md +490 -0
- package/dist/docs/reference/model/SectionHullOptions.md +72 -0
- package/dist/docs/reference/model/SectionInspection.md +98 -0
- package/dist/docs/reference/model/SectionOffsetJoin.md +16 -0
- package/dist/docs/reference/model/SectionOffsetOptions.md +65 -0
- package/dist/docs/reference/model/SmoothEdgeTreatment.md +76 -0
- package/dist/docs/reference/model/Solid.md +373 -0
- package/dist/docs/reference/model/SolidInspection.md +98 -0
- package/dist/docs/reference/model/SolidRayHit.md +58 -0
- package/dist/docs/reference/model/SphereOptions.md +20 -0
- package/dist/docs/reference/model/StarOptions.md +98 -0
- package/dist/docs/reference/model/StrokeOptions.md +91 -0
- package/dist/docs/reference/model/StrokePathCap.md +16 -0
- package/dist/docs/reference/model/StrokePathJoin.md +16 -0
- package/dist/docs/reference/model/SvgOrigin.md +16 -0
- package/dist/docs/reference/model/SvgPathSectionOptions.md +78 -0
- package/dist/docs/reference/model/SvgSectionOptions.md +66 -0
- package/dist/docs/reference/model/SweepOptions.md +116 -0
- package/dist/docs/reference/model/SweepOrientation.md +116 -0
- package/dist/docs/reference/model/TextSectionOptions.md +41 -0
- package/dist/docs/reference/model/ThreadEndStyle.md +14 -0
- package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +117 -0
- package/dist/docs/reference/model/ThreadHandedness.md +14 -0
- package/dist/docs/reference/model/ThreadLeadInEnvelope.md +14 -0
- package/dist/docs/reference/model/ThreadLeadInShape.md +14 -0
- package/dist/docs/reference/model/ThreadProfile.md +86 -0
- package/dist/docs/reference/model/ThreadRidgeOptions.md +18 -0
- package/dist/docs/reference/model/ThreadedNutBevel.md +14 -0
- package/dist/docs/reference/model/ThreadedNutOptions.md +273 -0
- package/dist/docs/reference/model/ThreadedNutPreflight.md +98 -0
- package/dist/docs/reference/model/ThreadedNutShape.md +14 -0
- package/dist/docs/reference/model/ThreadedRodOptions.md +245 -0
- package/dist/docs/reference/model/TorusOptions.md +110 -0
- package/dist/docs/reference/model/Transform2-type.md +256 -0
- package/dist/docs/reference/model/Transform2Input.md +20 -0
- package/dist/docs/reference/model/Transform2Matrix.md +15 -0
- package/dist/docs/reference/model/Transform3-type.md +296 -0
- package/dist/docs/reference/model/Transform3Input.md +20 -0
- package/dist/docs/reference/model/Transform3Matrix.md +18 -0
- package/dist/docs/reference/model/TriangleMesh.md +42 -0
- package/dist/docs/reference/model/TriangleMeshAnalysis.md +123 -0
- package/dist/docs/reference/model/TriangleMeshMeasurements.md +79 -0
- package/dist/docs/reference/model/TubeOptions.md +143 -0
- package/dist/docs/reference/model/Vector2-type.md +270 -0
- package/dist/docs/reference/model/Vector2Input.md +20 -0
- package/dist/docs/reference/model/Vector2Tuple.md +15 -0
- package/dist/docs/reference/model/Vector3-type.md +282 -0
- package/dist/docs/reference/model/Vector3Input.md +20 -0
- package/dist/docs/reference/model/Vector3Tuple.md +15 -0
- package/dist/docs/reference/model/VectorTextLayout.md +40 -0
- package/dist/docs/reference/model/VectorTextMetrics.md +100 -0
- package/dist/docs/reference/model/anchor.md +46 -0
- package/dist/docs/reference/model/box.md +62 -0
- package/dist/docs/reference/model/categories/boolean-operations.md +37 -0
- package/dist/docs/reference/model/categories/bounded-surfaces.md +26 -0
- package/dist/docs/reference/model/categories/contracts.md +16 -0
- package/dist/docs/reference/model/categories/core-values-errors.md +30 -0
- package/dist/docs/reference/model/categories/explicit-profiles.md +32 -0
- package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +42 -0
- package/dist/docs/reference/model/categories/generation.md +44 -0
- package/dist/docs/reference/model/categories/inspection.md +23 -0
- package/dist/docs/reference/model/categories/mesh-inspection.md +29 -0
- package/dist/docs/reference/model/categories/primitives.md +61 -0
- package/dist/docs/reference/model/categories/resolution.md +18 -0
- package/dist/docs/reference/model/categories/sections.md +62 -0
- package/dist/docs/reference/model/categories/threads.md +50 -0
- package/dist/docs/reference/model/categories/transforms-placement.md +57 -0
- package/dist/docs/reference/model/circle.md +39 -0
- package/dist/docs/reference/model/components.md +71 -0
- package/dist/docs/reference/model/compose.md +31 -0
- package/dist/docs/reference/model/cylinder.md +52 -0
- package/dist/docs/reference/model/distance.md +45 -0
- package/dist/docs/reference/model/ellipse.md +39 -0
- package/dist/docs/reference/model/extrude.md +83 -0
- package/dist/docs/reference/model/generate.md +46 -0
- package/dist/docs/reference/model/gridPattern.md +80 -0
- package/dist/docs/reference/model/heightfield.md +40 -0
- package/dist/docs/reference/model/hull.md +74 -0
- package/dist/docs/reference/model/immutableBuffer.md +44 -0
- package/dist/docs/reference/model/immutableMesh.md +40 -0
- package/dist/docs/reference/model/implicit.md +47 -0
- package/dist/docs/reference/model/inspectSection.md +38 -0
- package/dist/docs/reference/model/inspectSolid.md +38 -0
- package/dist/docs/reference/model/internalThreadCutter.md +100 -0
- package/dist/docs/reference/model/intersect.md +70 -0
- package/dist/docs/reference/model/isEmpty.md +39 -0
- package/dist/docs/reference/model/linearPattern.md +80 -0
- package/dist/docs/reference/model/loft.md +137 -0
- package/dist/docs/reference/model/matchProfiles.md +42 -0
- package/dist/docs/reference/model/minkowskiSum.md +37 -0
- package/dist/docs/reference/model/pathPattern.md +118 -0
- package/dist/docs/reference/model/polygon.md +40 -0
- package/dist/docs/reference/model/preflightInternalThreadCutter.md +89 -0
- package/dist/docs/reference/model/preflightThreadedNut.md +100 -0
- package/dist/docs/reference/model/preflightThreadedRod.md +89 -0
- package/dist/docs/reference/model/radialPattern.md +113 -0
- package/dist/docs/reference/model/rayCast.md +40 -0
- package/dist/docs/reference/model/rectangle.md +59 -0
- package/dist/docs/reference/model/regularPolygon.md +39 -0
- package/dist/docs/reference/model/revolve.md +74 -0
- package/dist/docs/reference/model/solidFromMesh.md +42 -0
- package/dist/docs/reference/model/sphere.md +42 -0
- package/dist/docs/reference/model/split.md +54 -0
- package/dist/docs/reference/model/splitByPlane.md +66 -0
- package/dist/docs/reference/model/star.md +63 -0
- package/dist/docs/reference/model/stroke.md +74 -0
- package/dist/docs/reference/model/svgPathSection.md +65 -0
- package/dist/docs/reference/model/svgSection.md +64 -0
- package/dist/docs/reference/model/sweep.md +92 -0
- package/dist/docs/reference/model/textSection.md +57 -0
- package/dist/docs/reference/model/threadRidge.md +72 -0
- package/dist/docs/reference/model/threadedNut.md +110 -0
- package/dist/docs/reference/model/threadedRod.md +99 -0
- package/dist/docs/reference/model/toTriangleMesh.md +27 -0
- package/dist/docs/reference/model/torus.md +70 -0
- package/dist/docs/reference/model/transform2.md +39 -0
- package/dist/docs/reference/model/transform3.md +39 -0
- package/dist/docs/reference/model/tube.md +77 -0
- package/dist/docs/reference/model/union.md +72 -0
- package/dist/docs/reference/model/vector2.md +32 -0
- package/dist/docs/reference/model/vector3.md +39 -0
- package/dist/docs/reference/model.md +39 -0
- package/dist/docs/reference/text/Bounds2.md +34 -0
- package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +7 -0
- package/dist/docs/reference/text/Vector2Tuple.md +7 -0
- package/dist/docs/reference/text/VectorFont.md +186 -0
- package/dist/docs/reference/text/VectorFontOptions.md +17 -0
- package/dist/docs/reference/text/VectorTextArcBaseline.md +53 -0
- package/dist/docs/reference/text/VectorTextLayout.md +34 -0
- package/dist/docs/reference/text/VectorTextLayoutOptions.md +111 -0
- package/dist/docs/reference/text/VectorTextMetrics.md +94 -0
- package/dist/docs/reference/text/VectorTextOptions.md +50 -0
- package/dist/docs/reference/text/categories/font-preparation.md +38 -0
- package/dist/docs/reference/text/prepareVectorFont.md +46 -0
- package/dist/docs/reference/text.md +21 -0
- package/dist/engine/construction-operations.js +10 -3
- package/dist/engine/deferred-context.js +11 -172
- package/dist/engine/execution.js +1 -1
- package/dist/engine/export-3mf.js +2 -2
- package/dist/engine/finalization.js +3 -3
- package/dist/engine/loft-operations.js +4 -4
- package/dist/engine/native/adapter.js +1 -1
- package/dist/engine/native/regions.js +9 -9
- package/dist/engine/native/transforms.js +6 -1
- package/dist/engine/pattern-operations.js +24 -13
- package/dist/engine/placement.js +2 -2
- package/dist/engine/primitive-operations.js +10 -10
- package/dist/engine/primitive-profiles.js +1 -0
- package/dist/engine/profile-mesh.js +7 -7
- package/dist/engine/recipe-realization.js +29 -21
- package/dist/engine/section-operations.js +44 -17
- package/dist/engine/session-graph.js +6 -4
- package/dist/engine/session-native.js +1 -1
- package/dist/engine/session-snapshot.js +3 -2
- package/dist/engine/session.js +4 -5
- package/dist/engine/shape-anchors.js +3 -9
- package/dist/engine/transform-operations.js +42 -25
- package/dist/geometry/bounds.js +117 -0
- package/dist/geometry/cylinder.js +5 -1
- package/dist/geometry/edge-finishing.js +2 -2
- package/dist/geometry/heightfield.js +1 -1
- package/dist/geometry/index.js +20 -13
- package/dist/geometry/{loft-correspondence.js → loft/loft-correspondence.js} +3 -3
- package/dist/geometry/{loft-geometry.js → loft/loft-geometry.js} +8 -8
- package/dist/geometry/{loft-options.js → loft/loft-options.js} +2 -2
- package/dist/geometry/{loft-simple-mesh.js → loft/loft-simple-mesh.js} +6 -6
- package/dist/geometry/{loft-triangulation.js → loft/loft-triangulation.js} +6 -6
- package/dist/geometry/{loft.js → loft/loft.js} +8 -8
- package/dist/geometry/math/immutable-value.js +20 -0
- package/dist/geometry/math/vector-value.js +168 -0
- package/dist/geometry/math/vector2.js +80 -0
- package/dist/geometry/math/vector3.js +42 -8
- package/dist/geometry/mechanical/gear-motion.js +7 -4
- package/dist/geometry/mechanical/gears.js +2 -2
- package/dist/geometry/mechanical/thread-mesh.js +3 -3
- package/dist/geometry/mechanical/thread-profiles.js +2 -2
- package/dist/geometry/mechanical/thread-surface.js +14 -5
- package/dist/geometry/{mesh-centroid.js → mesh/mesh-centroid.js} +1 -1
- package/dist/geometry/{mesh-planar.js → mesh/mesh-planar.js} +1 -1
- package/dist/geometry/{mesh-quality.js → mesh/mesh-quality.js} +2 -2
- package/dist/geometry/{mesh-signature.js → mesh/mesh-signature.js} +2 -2
- package/dist/geometry/{mesh-solid-intersections.js → mesh/mesh-solid-intersections.js} +5 -1
- package/dist/geometry/{mesh-solid.js → mesh/mesh-solid.js} +2 -2
- package/dist/geometry/{mesh.js → mesh/mesh.js} +7 -8
- package/dist/geometry/paths/closest-point.js +74 -0
- package/dist/geometry/paths/frames.js +7 -8
- package/dist/geometry/patterns/options.js +1 -0
- package/dist/{engine/pattern-placements.js → geometry/patterns/placements.js} +22 -8
- package/dist/geometry/patterns.js +25 -0
- package/dist/geometry/primitive-resolution.js +4 -1
- package/dist/geometry/primitive-resolvers.js +9 -9
- package/dist/geometry/profiles/contour.js +3 -3
- package/dist/geometry/profiles/matched.js +3 -3
- package/dist/geometry/profiles/profiles.js +10 -10
- package/dist/geometry/profiles/rectangle.js +7 -7
- package/dist/geometry/profiles/shapes.js +9 -9
- package/dist/geometry/profiles/side-profile.js +37 -0
- package/dist/geometry/regions.js +15 -15
- package/dist/geometry/resolution.js +17 -5
- package/dist/geometry/revolve/revolve-mesh.js +5 -5
- package/dist/geometry/stroke-path.js +50 -46
- package/dist/geometry/svg/errors.js +0 -3
- package/dist/geometry/svg/fill.js +7 -7
- package/dist/geometry/svg/index.js +1 -1
- package/dist/geometry/svg/matrix.js +0 -114
- package/dist/geometry/svg/parser.js +1 -439
- package/dist/geometry/svg-import.js +3 -3
- package/dist/geometry/sweeps/stations.js +4 -4
- package/dist/geometry/sweeps/sweep-closed.js +4 -4
- package/dist/geometry/sweeps/sweep-mesh.js +1 -1
- package/dist/geometry/sweeps/sweep-open.js +6 -6
- package/dist/geometry/sweeps/validation.js +2 -2
- package/dist/geometry/text-fitting.js +85 -0
- package/dist/geometry/tolerance.js +2 -2
- package/dist/geometry/transform-chain.js +172 -0
- package/dist/geometry/transform-geometry.js +31 -27
- package/dist/geometry/transform-matrix.js +14 -0
- package/dist/geometry/transform2.js +60 -0
- package/dist/geometry/transform3.js +70 -26
- package/dist/index.js +3 -0
- package/dist/model/execution-binding.js +10 -5
- package/dist/model/generation.js +1 -1
- package/dist/model/geometry-recipes.js +15 -0
- package/dist/{engine → model}/immutable-generation-data.js +25 -3
- package/dist/model/operation-contracts.js +1 -0
- package/dist/model/operation-dispatch.js +13 -0
- package/dist/model/operations.js +40 -59
- package/dist/model/recipe-declaration.js +193 -0
- package/dist/model/shape-handles.js +15 -4
- package/package.json +10 -8
- package/dist/engine/geometry-recipes.js +0 -12
- /package/dist/geometry/{mesh-edge-table.js → mesh/mesh-edge-table.js} +0 -0
|
@@ -18,8 +18,8 @@ const positiveFinite = (value, label) => {
|
|
|
18
18
|
* Resolves comparison tolerances for a characteristic model scale.
|
|
19
19
|
*
|
|
20
20
|
* The effective linear tolerance is `max(absolute, relative * abs(scale))`.
|
|
21
|
-
*
|
|
22
|
-
*
|
|
21
|
+
* A zero scale retains the absolute floor. Returns a new frozen value with finite distance and
|
|
22
|
+
* area thresholds without mutating `options`.
|
|
23
23
|
*
|
|
24
24
|
* @param scale - Finite characteristic size in model units.
|
|
25
25
|
* @param options - Optional policy overrides.
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { GeometryError } from "./errors.js";
|
|
2
|
+
import { immutableMathClass } from "./math/immutable-value.js";
|
|
3
|
+
import { vector2, vector2Data, vector3, vector3Data, } from "./math/vector-value.js";
|
|
4
|
+
import { readTransformMatrix } from "./transform-matrix.js";
|
|
5
|
+
import { embedTransform2, restrictTransform3 } from "./transform2.js";
|
|
6
|
+
import { applyInverseTranspose3, applyValidatedTransformDirection3, applyValidatedTransformPoint3, composeTransform3, eulerTransform3, IDENTITY_TRANSFORM3, inverseLinearTransform3, inverseTransform3, rotationTransform3, scaleTransform3, translationTransform3, validateTransform3, } from "./transform3.js";
|
|
7
|
+
const pivotTransform = (matrix, pivot) => pivot === undefined
|
|
8
|
+
? matrix
|
|
9
|
+
: composeTransform3(translationTransform3(pivot), composeTransform3(matrix, translationTransform3([-pivot[0], -pivot[1], -pivot[2]])));
|
|
10
|
+
const xyz = (point) => [point[0], point[1], 0];
|
|
11
|
+
const xy = (point) => [point[0], point[1]];
|
|
12
|
+
const pivot2 = (options) => {
|
|
13
|
+
validatePivotOptions(options);
|
|
14
|
+
return options?.pivot === undefined ? undefined : xyz(vector2Data(options.pivot));
|
|
15
|
+
};
|
|
16
|
+
const pivot3 = (options) => {
|
|
17
|
+
validatePivotOptions(options);
|
|
18
|
+
return options?.pivot === undefined ? undefined : vector3Data(options.pivot);
|
|
19
|
+
};
|
|
20
|
+
function validatePivotOptions(options) {
|
|
21
|
+
if (options !== undefined &&
|
|
22
|
+
(options === null || typeof options !== "object" || Array.isArray(options))) {
|
|
23
|
+
throw new GeometryError("INVALID_ARGUMENT", "Rotation and scaling options require a named pivot.");
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
// Translation does not affect normals. Inverting only the linear component also avoids
|
|
27
|
+
// irrelevant overflow from a large inverse translation. Cache once per immutable placement.
|
|
28
|
+
const normalMatrices = new WeakMap();
|
|
29
|
+
function applyNormal(owner, matrix, normal) {
|
|
30
|
+
let inverse = normalMatrices.get(owner);
|
|
31
|
+
if (inverse === undefined) {
|
|
32
|
+
inverse = inverseLinearTransform3(matrix);
|
|
33
|
+
normalMatrices.set(owner, inverse);
|
|
34
|
+
}
|
|
35
|
+
return applyInverseTranspose3(inverse, normal);
|
|
36
|
+
}
|
|
37
|
+
const snapshotTransform3 = (matrix) => {
|
|
38
|
+
validateTransform3(matrix);
|
|
39
|
+
return Object.freeze([
|
|
40
|
+
matrix[0],
|
|
41
|
+
matrix[1],
|
|
42
|
+
matrix[2],
|
|
43
|
+
matrix[3],
|
|
44
|
+
matrix[4],
|
|
45
|
+
matrix[5],
|
|
46
|
+
matrix[6],
|
|
47
|
+
matrix[7],
|
|
48
|
+
matrix[8],
|
|
49
|
+
matrix[9],
|
|
50
|
+
matrix[10],
|
|
51
|
+
matrix[11],
|
|
52
|
+
0,
|
|
53
|
+
0,
|
|
54
|
+
0,
|
|
55
|
+
1,
|
|
56
|
+
]);
|
|
57
|
+
};
|
|
58
|
+
const Placement3 = /* @__PURE__ */ immutableMathClass(class Placement3 {
|
|
59
|
+
matrix;
|
|
60
|
+
constructor(matrix) {
|
|
61
|
+
this.matrix = matrix;
|
|
62
|
+
Object.freeze(this);
|
|
63
|
+
}
|
|
64
|
+
translate(offset) {
|
|
65
|
+
return this.andThen(translationTransform3(vector3Data(offset)));
|
|
66
|
+
}
|
|
67
|
+
rotate(degrees, options) {
|
|
68
|
+
return this.andThen(pivotTransform(eulerTransform3(vector3Data(degrees)), pivot3(options)));
|
|
69
|
+
}
|
|
70
|
+
rotateAxis(axis, degrees, options) {
|
|
71
|
+
return this.andThen(pivotTransform(rotationTransform3(vector3Data(axis), { degrees }), pivot3(options)));
|
|
72
|
+
}
|
|
73
|
+
scale(factors, options) {
|
|
74
|
+
const values = typeof factors === "number" ? [factors, factors, factors] : vector3Data(factors);
|
|
75
|
+
return this.andThen(pivotTransform(scaleTransform3(values), pivot3(options)));
|
|
76
|
+
}
|
|
77
|
+
andThen(next) {
|
|
78
|
+
return new Placement3(composeTransform3(snapshotTransform3(readTransformMatrix(next, 3)), this.matrix));
|
|
79
|
+
}
|
|
80
|
+
inverse() {
|
|
81
|
+
return new Placement3(inverseTransform3(this.matrix));
|
|
82
|
+
}
|
|
83
|
+
applyPoint(point) {
|
|
84
|
+
return vector3(applyValidatedTransformPoint3(this.matrix, vector3Data(point)));
|
|
85
|
+
}
|
|
86
|
+
applyDirection(direction) {
|
|
87
|
+
return vector3(applyValidatedTransformDirection3(this.matrix, vector3Data(direction)));
|
|
88
|
+
}
|
|
89
|
+
applyNormal(normal) {
|
|
90
|
+
return vector3(applyNormal(this, this.matrix, vector3Data(normal)));
|
|
91
|
+
}
|
|
92
|
+
toMatrix() {
|
|
93
|
+
return this.matrix;
|
|
94
|
+
}
|
|
95
|
+
to2D() {
|
|
96
|
+
return transform2(restrictTransform3(this.matrix));
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
const Placement2 = /* @__PURE__ */ immutableMathClass(class Placement2 {
|
|
100
|
+
spatial;
|
|
101
|
+
matrix;
|
|
102
|
+
constructor(spatial) {
|
|
103
|
+
this.spatial = spatial;
|
|
104
|
+
this.matrix = restrictTransform3(spatial.toMatrix());
|
|
105
|
+
Object.freeze(this);
|
|
106
|
+
}
|
|
107
|
+
translate(offset) {
|
|
108
|
+
return new Placement2(this.spatial.translate(xyz(vector2Data(offset))));
|
|
109
|
+
}
|
|
110
|
+
rotate(degrees, options) {
|
|
111
|
+
const pivot = pivot2(options);
|
|
112
|
+
return new Placement2(this.spatial.rotateAxis([0, 0, 1], degrees, pivot === undefined ? undefined : { pivot }));
|
|
113
|
+
}
|
|
114
|
+
scale(factors, options) {
|
|
115
|
+
const pair = typeof factors === "number" ? [factors, factors] : vector2Data(factors);
|
|
116
|
+
const values = [pair[0], pair[1], 1];
|
|
117
|
+
const pivot = pivot2(options);
|
|
118
|
+
return new Placement2(this.spatial.scale(values, pivot === undefined ? undefined : { pivot }));
|
|
119
|
+
}
|
|
120
|
+
andThen(next) {
|
|
121
|
+
return new Placement2(this.spatial.andThen(embedTransform2(readTransformMatrix(next, 2))));
|
|
122
|
+
}
|
|
123
|
+
inverse() {
|
|
124
|
+
return new Placement2(this.spatial.inverse());
|
|
125
|
+
}
|
|
126
|
+
applyPoint(point) {
|
|
127
|
+
return vector2(xy(applyValidatedTransformPoint3(this.spatial.toMatrix(), xyz(vector2Data(point)))));
|
|
128
|
+
}
|
|
129
|
+
applyDirection(direction) {
|
|
130
|
+
return vector2(xy(applyValidatedTransformDirection3(this.spatial.toMatrix(), xyz(vector2Data(direction)))));
|
|
131
|
+
}
|
|
132
|
+
applyNormal(normal) {
|
|
133
|
+
return vector2(xy(applyNormal(this, this.spatial.toMatrix(), xyz(vector2Data(normal)))));
|
|
134
|
+
}
|
|
135
|
+
toMatrix() {
|
|
136
|
+
return this.matrix;
|
|
137
|
+
}
|
|
138
|
+
to3D() {
|
|
139
|
+
return this.spatial;
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
/**
|
|
143
|
+
* Creates an immutable XY transform, identity by default. Matrices are copied and validated.
|
|
144
|
+
* Pass it directly to Section.transform() and planar data helpers; to3D() explicitly crosses into XYZ.
|
|
145
|
+
* Zero scales and singular matrices throw GeometryError; negative scales reflect.
|
|
146
|
+
*
|
|
147
|
+
* @example
|
|
148
|
+
* ```ts
|
|
149
|
+
* const placement = transform2().rotate(90).translate([10, 0]);
|
|
150
|
+
* placement.applyPoint([1, 0]).toArray(); // approximately [10, 1]
|
|
151
|
+
* ```
|
|
152
|
+
*/
|
|
153
|
+
export function transform2(matrix) {
|
|
154
|
+
return new Placement2(matrix === undefined
|
|
155
|
+
? new Placement3(IDENTITY_TRANSFORM3)
|
|
156
|
+
: new Placement3(embedTransform2(matrix)));
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Creates an immutable XYZ transform, identity by default. Matrices are copied and validated.
|
|
160
|
+
* Calls apply in written order; rotations use degrees and pivots use current world coordinates.
|
|
161
|
+
* Zero scales, singular matrices, nonfinite inputs and zero rotation axes throw GeometryError.
|
|
162
|
+
* Use frameTransform3(frame) as the input for existing orthonormal frame placement.
|
|
163
|
+
*
|
|
164
|
+
* @example
|
|
165
|
+
* ```ts
|
|
166
|
+
* const placement = transform3().rotate([0, 0, 90]).translate([10, 0, 0]);
|
|
167
|
+
* placement.applyPoint([1, 0, 0]).toArray(); // approximately [10, 1, 0]
|
|
168
|
+
* ```
|
|
169
|
+
*/
|
|
170
|
+
export function transform3(matrix = IDENTITY_TRANSFORM3) {
|
|
171
|
+
return new Placement3(snapshotTransform3(matrix));
|
|
172
|
+
}
|
|
@@ -1,41 +1,45 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { vector2Data } from "./math/vector-value.js";
|
|
2
|
+
import { normalizeContour, normalizeRegion, signedContourArea } from "./regions.js";
|
|
3
|
+
import { readTransformMatrix } from "./transform-matrix.js";
|
|
4
|
+
import { embedTransform2 } from "./transform2.js";
|
|
5
|
+
import { applyValidatedTransformPoint3, validateTransform3 } from "./transform3.js";
|
|
5
6
|
/** Applies an affine transform to a 3D path without mutating its points. */
|
|
6
|
-
export function transformPath3(path,
|
|
7
|
+
export function transformPath3(path, placement) {
|
|
8
|
+
const transform = readTransformMatrix(placement, 3);
|
|
7
9
|
validateTransform3(transform);
|
|
8
|
-
return Object.freeze(path.map((point) => Object.freeze(
|
|
10
|
+
return Object.freeze(path.map((point) => Object.freeze(applyValidatedTransformPoint3(transform, point))));
|
|
9
11
|
}
|
|
10
|
-
const transformPoint2 = (point, transform
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
if (Math.abs(transformed[2]) > resolved.linear) {
|
|
14
|
-
throw new GeometryError("INVALID_ARGUMENT", "A 2D transform must preserve the XY plane.", {
|
|
15
|
-
operation: "transformPath2",
|
|
16
|
-
});
|
|
17
|
-
}
|
|
12
|
+
const transformPoint2 = (point, transform) => {
|
|
13
|
+
const values = vector2Data(point);
|
|
14
|
+
const transformed = applyValidatedTransformPoint3(transform, [values[0], values[1], 0]);
|
|
18
15
|
return Object.freeze([transformed[0], transformed[1]]);
|
|
19
16
|
};
|
|
20
|
-
|
|
17
|
+
const transformPlanarPath = (path, transform) => Object.freeze(path.map((point) => transformPoint2(point, transform)));
|
|
18
|
+
/** Applies a canonical affine XY transform to a 2D path without changing point order. */
|
|
21
19
|
export function transformPath2(path, transform, tolerance = {}) {
|
|
22
|
-
|
|
23
|
-
return Object.freeze(path.map((point) => transformPoint2(point, transform, tolerance)));
|
|
20
|
+
return transformPlanarPath(path, embedTransform2(readTransformMatrix(transform, 2), tolerance));
|
|
24
21
|
}
|
|
22
|
+
const transformContourWithMatrix = (loop, transform, tolerance) => {
|
|
23
|
+
const counterClockwise = signedContourArea(loop) > 0;
|
|
24
|
+
const normalized = normalizeContour(loop, counterClockwise, tolerance);
|
|
25
|
+
return normalizeContour(transformPlanarPath(normalized, transform), counterClockwise, tolerance);
|
|
26
|
+
};
|
|
25
27
|
/**
|
|
26
|
-
*
|
|
28
|
+
* Applies a canonical affine XY transform to a closed loop and preserves its original winding.
|
|
27
29
|
*
|
|
28
30
|
* Reflections reverse the point order automatically through normalization.
|
|
29
31
|
*/
|
|
30
|
-
export function
|
|
31
|
-
|
|
32
|
-
const normalized = normalizeLoop2(loop, counterClockwise, tolerance);
|
|
33
|
-
return normalizeLoop2(transformPath2(normalized, transform, tolerance), counterClockwise, tolerance);
|
|
32
|
+
export function transformContour(loop, transform, tolerance = {}) {
|
|
33
|
+
return transformContourWithMatrix(loop, embedTransform2(readTransformMatrix(transform, 2), tolerance), tolerance);
|
|
34
34
|
}
|
|
35
|
-
/**
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Transforms serialized polygon data with reflection-safe winding, without an engine.
|
|
37
|
+
* Use Section.transform(placement) when authoring filled geometry; this utility serves pure data preparation.
|
|
38
|
+
*/
|
|
39
|
+
export function transformRegionData(region, transform, tolerance = {}) {
|
|
40
|
+
const planar = embedTransform2(readTransformMatrix(transform, 2), tolerance);
|
|
41
|
+
return normalizeRegion(region.map((polygon) => ({
|
|
42
|
+
holes: polygon.holes.map((hole) => transformContourWithMatrix(hole, planar, tolerance)),
|
|
43
|
+
outer: transformContourWithMatrix(polygon.outer, planar, tolerance),
|
|
40
44
|
})), tolerance);
|
|
41
45
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { GeometryError } from "./errors.js";
|
|
2
|
+
export function readTransformMatrix(input, dimension) {
|
|
3
|
+
let matrix = input;
|
|
4
|
+
if (typeof input === "object" && input !== null && !Array.isArray(input)) {
|
|
5
|
+
const method = Reflect.get(input, "toMatrix");
|
|
6
|
+
if (typeof method === "function")
|
|
7
|
+
matrix = Reflect.apply(method, input, []);
|
|
8
|
+
}
|
|
9
|
+
const length = dimension === 2 ? 9 : 16;
|
|
10
|
+
if (!Array.isArray(matrix) || matrix.length !== length) {
|
|
11
|
+
throw new GeometryError("INVALID_ARGUMENT", `A ${dimension}D placement requires a canonical ${length}-element matrix.`);
|
|
12
|
+
}
|
|
13
|
+
return matrix;
|
|
14
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { GeometryError } from "./errors.js";
|
|
2
|
+
import { resolveGeometryTolerance } from "./tolerance.js";
|
|
3
|
+
import { validateTransform3 } from "./transform3.js";
|
|
4
|
+
/** Embeds a validated affine XY matrix into XYZ, leaving Z unchanged. */
|
|
5
|
+
export function embedTransform2(matrix, options = {}) {
|
|
6
|
+
if (!Array.isArray(matrix) || matrix.length !== 9) {
|
|
7
|
+
throw new GeometryError("INVALID_ARGUMENT", "XY matrices require exactly nine entries.");
|
|
8
|
+
}
|
|
9
|
+
if (!matrix.every(Number.isFinite)) {
|
|
10
|
+
throw new GeometryError("NON_FINITE_VALUE", "XY transforms require nine finite values.");
|
|
11
|
+
}
|
|
12
|
+
const tolerance = resolveGeometryTolerance(1, options);
|
|
13
|
+
if (Math.abs(matrix[6]) > tolerance.angular ||
|
|
14
|
+
Math.abs(matrix[7]) > tolerance.angular ||
|
|
15
|
+
Math.abs(matrix[8] - 1) > tolerance.angular) {
|
|
16
|
+
throw new GeometryError("INVALID_ARGUMENT", "XY transform final row must be [0, 0, 1].");
|
|
17
|
+
}
|
|
18
|
+
return Object.freeze(validateTransform3([
|
|
19
|
+
matrix[0],
|
|
20
|
+
matrix[1],
|
|
21
|
+
0,
|
|
22
|
+
matrix[2],
|
|
23
|
+
matrix[3],
|
|
24
|
+
matrix[4],
|
|
25
|
+
0,
|
|
26
|
+
matrix[5],
|
|
27
|
+
0,
|
|
28
|
+
0,
|
|
29
|
+
1,
|
|
30
|
+
0,
|
|
31
|
+
0,
|
|
32
|
+
0,
|
|
33
|
+
0,
|
|
34
|
+
1,
|
|
35
|
+
], options));
|
|
36
|
+
}
|
|
37
|
+
/** Restricts an affine XYZ matrix to XY; validates the plane independently of sampled points. */
|
|
38
|
+
export function restrictTransform3(matrix, options = {}) {
|
|
39
|
+
validateTransform3(matrix, options);
|
|
40
|
+
const tolerance = resolveGeometryTolerance(1, options);
|
|
41
|
+
if (Math.abs(matrix[8]) > tolerance.angular ||
|
|
42
|
+
Math.abs(matrix[9]) > tolerance.angular ||
|
|
43
|
+
Math.abs(matrix[11]) > tolerance.linear) {
|
|
44
|
+
throw new GeometryError("INVALID_ARGUMENT", "A 2D transform must preserve the XY plane.");
|
|
45
|
+
}
|
|
46
|
+
const result = [
|
|
47
|
+
matrix[0],
|
|
48
|
+
matrix[1],
|
|
49
|
+
matrix[3],
|
|
50
|
+
matrix[4],
|
|
51
|
+
matrix[5],
|
|
52
|
+
matrix[7],
|
|
53
|
+
0,
|
|
54
|
+
0,
|
|
55
|
+
1,
|
|
56
|
+
];
|
|
57
|
+
// Restriction can be singular even when the tolerated 3D matrix is invertible.
|
|
58
|
+
embedTransform2(result, options);
|
|
59
|
+
return Object.freeze(result);
|
|
60
|
+
}
|
|
@@ -1,20 +1,17 @@
|
|
|
1
1
|
import { GeometryError } from "./errors.js";
|
|
2
|
+
import { cross3, dot3, length3, normalize3 } from "./math/vector3.js";
|
|
2
3
|
import { resolveGeometryTolerance } from "./tolerance.js";
|
|
3
4
|
const finiteVector = (vector, label) => {
|
|
5
|
+
if (!Array.isArray(vector) || vector.length !== 3) {
|
|
6
|
+
throw new GeometryError("INVALID_ARGUMENT", `${label} requires exactly three coordinates.`);
|
|
7
|
+
}
|
|
4
8
|
if (!vector.every(Number.isFinite)) {
|
|
5
9
|
throw new GeometryError("NON_FINITE_VALUE", `${label} coordinates must be finite.`);
|
|
6
10
|
}
|
|
7
11
|
};
|
|
8
|
-
const dot = (a, b) => a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
|
9
|
-
const cross = (a, b) => [
|
|
10
|
-
a[1] * b[2] - a[2] * b[1],
|
|
11
|
-
a[2] * b[0] - a[0] * b[2],
|
|
12
|
-
a[0] * b[1] - a[1] * b[0],
|
|
13
|
-
];
|
|
14
|
-
const length = (vector) => Math.hypot(vector[0], vector[1], vector[2]);
|
|
15
12
|
const normalized = (vector, label, tolerance) => {
|
|
16
13
|
finiteVector(vector, label);
|
|
17
|
-
const magnitude =
|
|
14
|
+
const magnitude = length3(vector);
|
|
18
15
|
if (magnitude <= tolerance) {
|
|
19
16
|
throw new GeometryError("DEGENERATE_GEOMETRY", `${label} must have non-zero length.`);
|
|
20
17
|
}
|
|
@@ -34,7 +31,10 @@ export const IDENTITY_TRANSFORM3 = frozenTransform([
|
|
|
34
31
|
* @throws {@link GeometryError} For non-finite, non-affine, or singular matrices.
|
|
35
32
|
*/
|
|
36
33
|
export function validateTransform3(transform, tolerance = {}) {
|
|
37
|
-
if (transform.length !== 16
|
|
34
|
+
if (!Array.isArray(transform) || transform.length !== 16) {
|
|
35
|
+
throw new GeometryError("INVALID_ARGUMENT", "XYZ matrices require exactly sixteen entries.");
|
|
36
|
+
}
|
|
37
|
+
if (!transform.every(Number.isFinite)) {
|
|
38
38
|
throw new GeometryError("NON_FINITE_VALUE", "Transforms require sixteen finite values.");
|
|
39
39
|
}
|
|
40
40
|
const scale = Math.max(Math.abs(transform[0]), Math.abs(transform[1]), Math.abs(transform[2]), Math.abs(transform[4]), Math.abs(transform[5]), Math.abs(transform[6]), Math.abs(transform[8]), Math.abs(transform[9]), Math.abs(transform[10]));
|
|
@@ -120,7 +120,12 @@ export function rotationTransform3(axis, angle, tolerance = {}) {
|
|
|
120
120
|
if (!Number.isFinite(radians)) {
|
|
121
121
|
throw new GeometryError("NON_FINITE_VALUE", "Rotation angle must be finite.");
|
|
122
122
|
}
|
|
123
|
-
|
|
123
|
+
finiteVector(axis, "Rotation axis");
|
|
124
|
+
const axisLength = length3(axis);
|
|
125
|
+
if (!Number.isFinite(axisLength)) {
|
|
126
|
+
throw new GeometryError("NON_FINITE_VALUE", "Rotation axis length must be finite.");
|
|
127
|
+
}
|
|
128
|
+
const resolved = resolveGeometryTolerance(axisLength, tolerance);
|
|
124
129
|
const [x, y, z] = normalized(axis, "Rotation axis", resolved.linear);
|
|
125
130
|
const cosine = Math.cos(radians);
|
|
126
131
|
const sine = Math.sin(radians);
|
|
@@ -156,10 +161,7 @@ export function rotationTransform3(axis, angle, tolerance = {}) {
|
|
|
156
161
|
*/
|
|
157
162
|
export function eulerTransform3(rotationDegrees) {
|
|
158
163
|
finiteVector(rotationDegrees, "Euler rotation");
|
|
159
|
-
|
|
160
|
-
const y = (rotationDegrees[1] * Math.PI) / 180;
|
|
161
|
-
const z = (rotationDegrees[2] * Math.PI) / 180;
|
|
162
|
-
return composeTransform3(rotationTransform3([0, 0, 1], { radians: z }), composeTransform3(rotationTransform3([0, 1, 0], { radians: y }), rotationTransform3([1, 0, 0], { radians: x })));
|
|
164
|
+
return composeTransform3(rotationTransform3([0, 0, 1], { degrees: rotationDegrees[2] }), composeTransform3(rotationTransform3([0, 1, 0], { degrees: rotationDegrees[1] }), rotationTransform3([1, 0, 0], { degrees: rotationDegrees[0] })));
|
|
163
165
|
}
|
|
164
166
|
/**
|
|
165
167
|
* Composes two affine transforms without mutating either matrix.
|
|
@@ -196,12 +198,18 @@ export function composeTransform3(after, before) {
|
|
|
196
198
|
*/
|
|
197
199
|
export function applyTransformPoint3(transform, point) {
|
|
198
200
|
validateTransform3(transform);
|
|
201
|
+
return applyValidatedTransformPoint3(transform, point);
|
|
202
|
+
}
|
|
203
|
+
/** Internal application kernel for a matrix already validated by its collection or immutable chain. */
|
|
204
|
+
export function applyValidatedTransformPoint3(transform, point) {
|
|
199
205
|
finiteVector(point, "Point");
|
|
200
|
-
|
|
206
|
+
const result = [
|
|
201
207
|
transform[0] * point[0] + transform[1] * point[1] + transform[2] * point[2] + transform[3],
|
|
202
208
|
transform[4] * point[0] + transform[5] * point[1] + transform[6] * point[2] + transform[7],
|
|
203
209
|
transform[8] * point[0] + transform[9] * point[1] + transform[10] * point[2] + transform[11],
|
|
204
210
|
];
|
|
211
|
+
finiteVector(result, "Transformed point");
|
|
212
|
+
return result;
|
|
205
213
|
}
|
|
206
214
|
/**
|
|
207
215
|
* Applies only the linear component of an affine transform to a direction.
|
|
@@ -214,12 +222,18 @@ export function applyTransformPoint3(transform, point) {
|
|
|
214
222
|
*/
|
|
215
223
|
export function applyTransformDirection3(transform, direction) {
|
|
216
224
|
validateTransform3(transform);
|
|
225
|
+
return applyValidatedTransformDirection3(transform, direction);
|
|
226
|
+
}
|
|
227
|
+
/** Internal application kernel for a matrix already validated by an immutable chain. */
|
|
228
|
+
export function applyValidatedTransformDirection3(transform, direction) {
|
|
217
229
|
finiteVector(direction, "Direction");
|
|
218
|
-
|
|
230
|
+
const result = [
|
|
219
231
|
transform[0] * direction[0] + transform[1] * direction[1] + transform[2] * direction[2],
|
|
220
232
|
transform[4] * direction[0] + transform[5] * direction[1] + transform[6] * direction[2],
|
|
221
233
|
transform[8] * direction[0] + transform[9] * direction[1] + transform[10] * direction[2],
|
|
222
234
|
];
|
|
235
|
+
finiteVector(result, "Transformed direction");
|
|
236
|
+
return result;
|
|
223
237
|
}
|
|
224
238
|
/**
|
|
225
239
|
* Returns the determinant of a transform's linear 3x3 component.
|
|
@@ -266,9 +280,9 @@ export function inverseTransform3(transform) {
|
|
|
266
280
|
];
|
|
267
281
|
const translation = [transform[3], transform[7], transform[11]];
|
|
268
282
|
const inverseTranslation = [
|
|
269
|
-
-
|
|
270
|
-
-
|
|
271
|
-
-
|
|
283
|
+
-dot3([inverseLinear[0], inverseLinear[1], inverseLinear[2]], translation),
|
|
284
|
+
-dot3([inverseLinear[3], inverseLinear[4], inverseLinear[5]], translation),
|
|
285
|
+
-dot3([inverseLinear[6], inverseLinear[7], inverseLinear[8]], translation),
|
|
272
286
|
];
|
|
273
287
|
const inverse = frozenTransform([
|
|
274
288
|
inverseLinear[0],
|
|
@@ -291,6 +305,36 @@ export function inverseTransform3(transform) {
|
|
|
291
305
|
validateTransform3(inverse);
|
|
292
306
|
return inverse;
|
|
293
307
|
}
|
|
308
|
+
/** Internal inverse linear map; translation cannot affect normals or overflow their inverse. */
|
|
309
|
+
export function inverseLinearTransform3(matrix) {
|
|
310
|
+
return inverseTransform3([
|
|
311
|
+
matrix[0],
|
|
312
|
+
matrix[1],
|
|
313
|
+
matrix[2],
|
|
314
|
+
0,
|
|
315
|
+
matrix[4],
|
|
316
|
+
matrix[5],
|
|
317
|
+
matrix[6],
|
|
318
|
+
0,
|
|
319
|
+
matrix[8],
|
|
320
|
+
matrix[9],
|
|
321
|
+
matrix[10],
|
|
322
|
+
0,
|
|
323
|
+
0,
|
|
324
|
+
0,
|
|
325
|
+
0,
|
|
326
|
+
1,
|
|
327
|
+
]);
|
|
328
|
+
}
|
|
329
|
+
/** Internal unit normal application for a validated inverse linear transform. */
|
|
330
|
+
export function applyInverseTranspose3(inverse, normal) {
|
|
331
|
+
const unit = normalize3(normal, 0);
|
|
332
|
+
return normalize3([
|
|
333
|
+
inverse[0] * unit[0] + inverse[4] * unit[1] + inverse[8] * unit[2],
|
|
334
|
+
inverse[1] * unit[0] + inverse[5] * unit[1] + inverse[9] * unit[2],
|
|
335
|
+
inverse[2] * unit[0] + inverse[6] * unit[1] + inverse[10] * unit[2],
|
|
336
|
+
], 0);
|
|
337
|
+
}
|
|
294
338
|
/**
|
|
295
339
|
* Converts a right-handed orthonormal frame into a local-to-world transform.
|
|
296
340
|
*
|
|
@@ -302,9 +346,9 @@ export function inverseTransform3(transform) {
|
|
|
302
346
|
export function frameTransform3(frame, tolerance = {}) {
|
|
303
347
|
finiteVector(frame.origin, "Frame origin");
|
|
304
348
|
const resolved = resolveGeometryTolerance(1, tolerance);
|
|
305
|
-
const xLength =
|
|
306
|
-
const yLength =
|
|
307
|
-
const zLength =
|
|
349
|
+
const xLength = length3(frame.xAxis);
|
|
350
|
+
const yLength = length3(frame.yAxis);
|
|
351
|
+
const zLength = length3(frame.zAxis);
|
|
308
352
|
if (Math.abs(xLength - 1) > resolved.angular ||
|
|
309
353
|
Math.abs(yLength - 1) > resolved.angular ||
|
|
310
354
|
Math.abs(zLength - 1) > resolved.angular) {
|
|
@@ -313,10 +357,10 @@ export function frameTransform3(frame, tolerance = {}) {
|
|
|
313
357
|
const x = normalized(frame.xAxis, "Frame X axis", resolved.linear);
|
|
314
358
|
const y = normalized(frame.yAxis, "Frame Y axis", resolved.linear);
|
|
315
359
|
const z = normalized(frame.zAxis, "Frame Z axis", resolved.linear);
|
|
316
|
-
if (Math.abs(
|
|
317
|
-
Math.abs(
|
|
318
|
-
Math.abs(
|
|
319
|
-
|
|
360
|
+
if (Math.abs(dot3(x, y)) > resolved.angular ||
|
|
361
|
+
Math.abs(dot3(x, z)) > resolved.angular ||
|
|
362
|
+
Math.abs(dot3(y, z)) > resolved.angular ||
|
|
363
|
+
dot3(cross3(x, y), z) < 1 - resolved.angular) {
|
|
320
364
|
throw new GeometryError("INVALID_ARGUMENT", "Frame axes must be right-handed and mutually orthogonal.");
|
|
321
365
|
}
|
|
322
366
|
return frozenTransform([
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/** Immutable modeling recipes and math values; the host owns geometry evaluation. @packageDocumentation */
|
|
2
|
+
export { transform2, transform3, } from "./geometry/transform-chain.js";
|
|
3
|
+
export { vector2, vector3, } from "./geometry/math/vector-value.js";
|
|
1
4
|
export * from "./model/operations.js";
|
|
2
5
|
export * from "./model/generation.js";
|
|
3
6
|
export { immutableBuffer, immutableMesh } from "./model/immutable-buffer.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { GeometryError } from "../geometry/errors.js";
|
|
2
2
|
// One protocol key lets locally bundled operation wrappers resolve the host's execution
|
|
3
3
|
// without depending on package instances, class identity, or initializing a native runtime.
|
|
4
|
-
const executionKey = Symbol.for("@metamesh/modeling/execution/
|
|
4
|
+
const executionKey = Symbol.for("@metamesh/modeling/execution/6");
|
|
5
5
|
const bindings = globalThis;
|
|
6
6
|
/** Internal host binding. Executable callbacks are synchronous and may not nest executions. */
|
|
7
7
|
export function bindModelContext(context, build) {
|
|
@@ -10,7 +10,7 @@ export function bindModelContext(context, build) {
|
|
|
10
10
|
operation: "build",
|
|
11
11
|
});
|
|
12
12
|
}
|
|
13
|
-
bindings[executionKey] = { version:
|
|
13
|
+
bindings[executionKey] = { version: 6, context };
|
|
14
14
|
try {
|
|
15
15
|
return build();
|
|
16
16
|
}
|
|
@@ -20,11 +20,16 @@ export function bindModelContext(context, build) {
|
|
|
20
20
|
}
|
|
21
21
|
/** Resolves the private realm protocol; imported functions carry no native state themselves. */
|
|
22
22
|
export function currentModelContext(operation) {
|
|
23
|
-
const
|
|
24
|
-
if (
|
|
23
|
+
const context = activeModelContext();
|
|
24
|
+
if (context === undefined) {
|
|
25
25
|
throw new GeometryError("INVALID_ARGUMENT", "Modeling functions can only run inside generate().", {
|
|
26
26
|
operation,
|
|
27
27
|
});
|
|
28
28
|
}
|
|
29
|
-
return
|
|
29
|
+
return context;
|
|
30
|
+
}
|
|
31
|
+
/** Reads an optional binding without initializing an engine or creating ambient authoring state. */
|
|
32
|
+
export function activeModelContext() {
|
|
33
|
+
const binding = bindings[executionKey];
|
|
34
|
+
return binding?.version === 6 ? binding.context : undefined;
|
|
30
35
|
}
|
package/dist/model/generation.js
CHANGED
|
@@ -16,7 +16,7 @@ export class GenerationError extends Error {
|
|
|
16
16
|
* ```ts
|
|
17
17
|
* const model = generate<{ height: number }>(({ params, part, assert }) => {
|
|
18
18
|
* assert(params.height > 0, "Height must be positive.");
|
|
19
|
-
* return
|
|
19
|
+
* return part("body", box({ size: [10, 10, params.height] }));
|
|
20
20
|
* });
|
|
21
21
|
* ```
|
|
22
22
|
*/
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { createSectionHandle, createSolidHandle } from "./shape-handles.js";
|
|
2
|
+
// One realm protocol lets bundled authoring code declare recipes before a host is initialized.
|
|
3
|
+
// The payload contains no native handles and the engine remains responsible for realization.
|
|
4
|
+
const recipeKey = Symbol.for("@metamesh/modeling/recipe/6");
|
|
5
|
+
/** Reads private recipe metadata without requiring an execution context. */
|
|
6
|
+
export const geometryRecipe = (value) => Object.getOwnPropertyDescriptor(value, recipeKey)?.value;
|
|
7
|
+
/** Recognizes only opaque recipe handles issued by this engine. */
|
|
8
|
+
export const isGeometryRecipe = (value) => typeof value === "object" && value !== null && geometryRecipe(value) !== undefined;
|
|
9
|
+
/** Creates an immutable opaque handle for a recorded operation. */
|
|
10
|
+
export function recordGeometryRecipe(recipe, dispatch) {
|
|
11
|
+
const metadata = Object.freeze({ ...recipe, call: Object.freeze(recipe.call) });
|
|
12
|
+
return recipe.kind === "solid"
|
|
13
|
+
? createSolidHandle(dispatch, { [recipeKey]: { value: metadata } })
|
|
14
|
+
: createSectionHandle(dispatch, { [recipeKey]: { value: metadata } });
|
|
15
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { GeometryError } from "../geometry/errors.js";
|
|
2
|
-
import {
|
|
2
|
+
import { isImmutableMathValue } from "../geometry/math/immutable-value.js";
|
|
3
3
|
import { geometryRecipe, isGeometryRecipe } from "./geometry-recipes.js";
|
|
4
|
+
import { adoptImmutableBuffer, immutableBuffer, immutableBufferView, isImmutableBuffer, } from "./immutable-buffer.js";
|
|
4
5
|
const mutableBufferMessage = "Generation data cannot contain mutable typed arrays or raw ArrayBuffers. Use immutableBuffer(array) or immutableMesh(mesh) before caching them or declaring dependencies.";
|
|
5
6
|
/** Iterates plain fields; recipe capture may read each enumerable accessor once. */
|
|
6
7
|
export function* generationDataEntries(value, captureAccessors = false) {
|
|
@@ -44,6 +45,11 @@ export function generationValueBytes(values, ceiling) {
|
|
|
44
45
|
if (seen.has(value))
|
|
45
46
|
return;
|
|
46
47
|
seen.add(value);
|
|
48
|
+
if (isImmutableMathValue(value)) {
|
|
49
|
+
bytes += 32;
|
|
50
|
+
visit(mathValueData(value), depth + 1);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
47
53
|
const array = isImmutableBuffer(value)
|
|
48
54
|
? immutableBufferView(value)
|
|
49
55
|
: ArrayBuffer.isView(value)
|
|
@@ -91,11 +97,16 @@ export function compareGenerationValues(left, right) {
|
|
|
91
97
|
const matches = visited.get(a) ?? new Set();
|
|
92
98
|
matches.add(b);
|
|
93
99
|
visited.set(a, matches);
|
|
100
|
+
if (isImmutableMathValue(a) || isImmutableMathValue(b)) {
|
|
101
|
+
return isImmutableMathValue(a) && isImmutableMathValue(b)
|
|
102
|
+
? compare(mathValueData(a), mathValueData(b), depth + 1)
|
|
103
|
+
: "different";
|
|
104
|
+
}
|
|
94
105
|
const recipeA = geometryRecipe(a), recipeB = geometryRecipe(b);
|
|
95
106
|
if (recipeA !== undefined || recipeB !== undefined) {
|
|
96
107
|
if (recipeA === undefined ||
|
|
97
108
|
recipeB === undefined ||
|
|
98
|
-
recipeA.
|
|
109
|
+
recipeA.observedSession !== recipeB.observedSession ||
|
|
99
110
|
recipeA.kind !== recipeB.kind ||
|
|
100
111
|
recipeA.call.method !== recipeB.call.method ||
|
|
101
112
|
recipeA.index !== recipeB.index)
|
|
@@ -144,13 +155,24 @@ export function compareGenerationValues(left, right) {
|
|
|
144
155
|
};
|
|
145
156
|
return compare(left, right);
|
|
146
157
|
}
|
|
158
|
+
function mathValueData(value) {
|
|
159
|
+
for (const name of ["toArray", "toMatrix"]) {
|
|
160
|
+
const method = Reflect.get(value, name);
|
|
161
|
+
if (typeof method === "function")
|
|
162
|
+
return Reflect.apply(method, value, []);
|
|
163
|
+
}
|
|
164
|
+
throw new TypeError("Immutable math values must expose their canonical numeric data.");
|
|
165
|
+
}
|
|
147
166
|
function captureValue(value, mode, readerAllowed = () => false, validated) {
|
|
148
167
|
const recipeInputs = mode === "recipe";
|
|
149
168
|
const seen = new Map();
|
|
150
169
|
const copy = (input) => {
|
|
151
170
|
if (typeof input === "function" && !recipeInputs && !readerAllowed(input))
|
|
152
171
|
throw new GeometryError("INVALID_ARGUMENT", "Computed values and dependencies cannot contain arbitrary function closures.", { operation: "computed" });
|
|
153
|
-
if (typeof input !== "object" ||
|
|
172
|
+
if (typeof input !== "object" ||
|
|
173
|
+
input === null ||
|
|
174
|
+
isGeometryRecipe(input) ||
|
|
175
|
+
isImmutableMathValue(input))
|
|
154
176
|
return input;
|
|
155
177
|
if (isImmutableBuffer(input))
|
|
156
178
|
return adoptImmutableBuffer(input);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|