@metamesh/modeling 0.17.0 → 0.18.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 +153 -0
- package/README.md +137 -163
- package/dist/api/engine.d.ts +128 -65
- package/dist/api/geometry.d.ts +246 -457
- package/dist/api/index.d.ts +394 -419
- package/dist/api/mesh.d.ts +460 -0
- package/dist/api/text.d.ts +1 -1
- package/dist/docs/guides/concepts.md +126 -86
- package/dist/docs/guides/fonts.md +11 -10
- package/dist/docs/guides/fundamentals.md +30 -29
- package/dist/docs/guides/generation.md +44 -31
- package/dist/docs/guides/hosting.md +122 -46
- package/dist/docs/guides/recipes.md +65 -54
- package/dist/docs/guides/standalone-model.md +8 -7
- package/dist/docs/manifest.json +2740 -902
- package/dist/docs/reference/engine/Export3mfOptions.md +19 -2
- package/dist/docs/reference/engine/ExportMeshPart.md +5 -39
- package/dist/docs/reference/engine/GenerationOptions.md +4 -3
- package/dist/docs/reference/engine/GeometryResource.md +13 -13
- package/dist/docs/reference/engine/ModelDependencies.md +1 -1
- package/dist/docs/reference/engine/ModelEngine.md +26 -23
- package/dist/docs/reference/engine/ModelEngineOptions.md +6 -1
- package/dist/docs/reference/engine/ModelPart.md +108 -0
- package/dist/docs/reference/engine/ModelResult.md +175 -0
- package/dist/docs/reference/engine/ModelRunArguments.md +28 -0
- package/dist/docs/reference/engine/ModelRunOptions.md +104 -0
- package/dist/docs/reference/engine/ModelSession.md +16 -16
- package/dist/docs/reference/engine/ModelingLimits.md +121 -0
- package/dist/docs/reference/engine/SessionOptions.md +13 -8
- package/dist/docs/reference/engine/categories/host-lifecycle.md +25 -15
- package/dist/docs/reference/engine/checkModel.md +43 -0
- package/dist/docs/reference/engine/createModelEngine.md +4 -13
- package/dist/docs/reference/engine/defaultModelingLimits.md +8 -1
- package/dist/docs/reference/engine/export3mf.md +55 -0
- package/dist/docs/reference/engine/modelingWasmUrl.md +1 -1
- package/dist/docs/reference/engine.md +8 -15
- package/dist/docs/reference/geometry/AcmeThreadProfileSpec.md +1 -1
- package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +1 -1
- package/dist/docs/reference/geometry/Anchor3-type.md +1 -1
- package/dist/docs/reference/geometry/ArcCurve2.md +1 -1
- package/dist/docs/reference/geometry/ArcCurve3.md +1 -1
- package/dist/docs/reference/geometry/AttachOptions.md +1 -1
- package/dist/docs/reference/geometry/AxisAngleRotation3.md +1 -1
- package/dist/docs/reference/geometry/Bevel.md +18 -0
- package/dist/docs/reference/geometry/BevelSize.md +14 -0
- package/dist/docs/reference/geometry/Bounds2-type.md +1 -1
- package/dist/docs/reference/geometry/Bounds2Data.md +1 -1
- package/dist/docs/reference/geometry/Bounds2Input.md +1 -1
- package/dist/docs/reference/geometry/Bounds2Options.md +48 -8
- package/dist/docs/reference/geometry/Bounds3-type.md +1 -1
- package/dist/docs/reference/geometry/Bounds3Data.md +1 -1
- package/dist/docs/reference/geometry/Bounds3Input.md +1 -1
- package/dist/docs/reference/geometry/Bounds3Options.md +48 -8
- 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/BoxAnchorFace.md +1 -1
- package/dist/docs/reference/geometry/BoxAnchorOptions.md +4 -4
- 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 +3 -3
- 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 -3
- package/dist/docs/reference/geometry/CircularResolutionOptions.md +1 -1
- package/dist/docs/reference/geometry/CircularSampling.md +1 -1
- package/dist/docs/reference/geometry/CircularSamplingOptions.md +1 -1
- 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 +1 -1
- 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 +1 -1
- package/dist/docs/reference/geometry/CylindricalGearDimensions.md +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +3 -3
- package/dist/docs/reference/geometry/EndTreatments.md +1 -1
- package/dist/docs/reference/geometry/ExtrudeMeshOptions.md +130 -0
- package/dist/docs/reference/geometry/ExtrudeOptions.md +17 -9
- package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +3 -3
- 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 +1 -1
- 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 +1 -1
- package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +1 -1
- package/dist/docs/reference/geometry/HeightfieldOptions.md +3 -2
- package/dist/docs/reference/geometry/HeightfieldPreflight.md +1 -1
- package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +1 -1
- package/dist/docs/reference/geometry/ImmutableBuffer-type.md +108 -0
- package/dist/docs/reference/geometry/ImmutableTriangleMesh.md +43 -0
- package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +52 -83
- package/dist/docs/reference/geometry/KnuckleHingeBaseSpec.md +1 -1
- package/dist/docs/reference/geometry/KnuckleHingeDimensions.md +1 -1
- package/dist/docs/reference/geometry/KnuckleHingeInterval.md +1 -1
- package/dist/docs/reference/geometry/KnuckleHingeSamplingOptions.md +1 -1
- package/dist/docs/reference/geometry/KnuckleHingeSpec.md +1 -1
- 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 +1 -1
- package/dist/docs/reference/geometry/LoftCorrespondence.md +1 -1
- package/dist/docs/reference/geometry/LoftMeshStation.md +1 -1
- package/dist/docs/reference/geometry/LoftOptions.md +3 -3
- 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/NumericArray.md +14 -0
- package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +1 -1
- package/dist/docs/reference/geometry/Path2-type.md +1 -1
- package/dist/docs/reference/geometry/Path2Data.md +1 -1
- package/dist/docs/reference/geometry/Path2Input.md +1 -1
- package/dist/docs/reference/geometry/Path3-type.md +1 -1
- package/dist/docs/reference/geometry/Path3Data.md +1 -1
- package/dist/docs/reference/geometry/Path3Input.md +1 -1
- package/dist/docs/reference/geometry/PathFrame.md +1 -1
- package/dist/docs/reference/geometry/PathLocation.md +1 -1
- package/dist/docs/reference/geometry/PathNormalGuide.md +1 -1
- package/dist/docs/reference/geometry/PathOptions.md +1 -1
- package/dist/docs/reference/geometry/PathPatternOptions.md +1 -1
- package/dist/docs/reference/geometry/PathPlacement.md +1 -1
- package/dist/docs/reference/geometry/PathResamplingOptions.md +1 -1
- 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 +1 -1
- 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 +1 -1
- package/dist/docs/reference/geometry/PrimitiveAttachment.md +1 -3
- package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +1 -1
- 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 +1 -1
- 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 +1 -1
- package/dist/docs/reference/geometry/RadialPatternOptions.md +1 -1
- 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 +3 -3
- 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 +3 -3
- package/dist/docs/reference/geometry/RegionData.md +1 -1
- package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +1 -1
- package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +1 -1
- package/dist/docs/reference/geometry/RevolveOptions.md +2 -2
- 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 +1 -1
- package/dist/docs/reference/geometry/SampleHelixOptions.md +1 -1
- package/dist/docs/reference/geometry/SampleSideProfileOptions.md +1 -1
- 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 +1 -1
- 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 +1 -1
- package/dist/docs/reference/geometry/SphereOptions.md +1 -1
- package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +1 -1
- package/dist/docs/reference/geometry/StarContourOptions.md +74 -0
- package/dist/docs/reference/geometry/StrokeCap.md +1 -1
- package/dist/docs/reference/geometry/StrokeJoin.md +1 -1
- package/dist/docs/reference/geometry/StrokeOptions.md +1 -1
- 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 +1 -1
- package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +1 -1
- package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +1 -1
- package/dist/docs/reference/geometry/SweepOptions.md +1 -1
- package/dist/docs/reference/geometry/SweepOrientation.md +1 -1
- package/dist/docs/reference/geometry/ThreadBevelOptions.md +7 -30
- package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +1 -1
- 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 +1 -1
- package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +1 -1
- package/dist/docs/reference/geometry/ThreadLeadInShape.md +1 -1
- package/dist/docs/reference/geometry/ThreadProfile-type.md +2 -2
- package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +1 -1
- package/dist/docs/reference/geometry/ThreadProfileSpec.md +1 -1
- package/dist/docs/reference/geometry/{HelicalThreadRidgeMeshOptions.md → ThreadRidgeOptions.md} +4 -4
- package/dist/docs/reference/geometry/ThreadRole.md +1 -1
- package/dist/docs/reference/geometry/{HelicalThreadSolidMeshOptions.md → ThreadSolidOptions.md} +18 -65
- package/dist/docs/reference/geometry/{HelicalThreadSolidMeshPreflight.md → ThreadSolidPreflight.md} +2 -2
- package/dist/docs/reference/geometry/ThreadedNutOptions.md +75 -86
- package/dist/docs/reference/geometry/ThreadedNutPreflight.md +18 -6
- package/dist/docs/reference/geometry/ThreadedNutShape.md +1 -1
- package/dist/docs/reference/geometry/ThreadedRodOptions.md +52 -83
- package/dist/docs/reference/geometry/TorusOptions.md +1 -1
- package/dist/docs/reference/geometry/Transform2-type.md +1 -1
- package/dist/docs/reference/geometry/Transform2Data.md +1 -1
- package/dist/docs/reference/geometry/Transform2Input.md +1 -1
- package/dist/docs/reference/geometry/Transform3-type.md +1 -1
- package/dist/docs/reference/geometry/Transform3Data.md +1 -1
- package/dist/docs/reference/geometry/Transform3Input.md +1 -1
- package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +1 -1
- package/dist/docs/reference/geometry/TriangleMesh.md +3 -8
- package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +10 -4
- package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +2 -2
- package/dist/docs/reference/geometry/TriangleMeshInput.md +19 -0
- package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +1 -1
- package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +1 -1
- package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +1 -1
- package/dist/docs/reference/geometry/TriangleMeshSignature.md +3 -3
- package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +1 -1
- package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +1 -1
- package/dist/docs/reference/geometry/TriangleMeshTopologyAnalysis.md +131 -0
- 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 +10 -86
- package/dist/docs/reference/geometry/Vector2-type.md +1 -1
- package/dist/docs/reference/geometry/Vector2Data.md +1 -1
- package/dist/docs/reference/geometry/Vector2Input.md +1 -1
- package/dist/docs/reference/geometry/Vector3-type.md +1 -1
- package/dist/docs/reference/geometry/Vector3Data.md +1 -1
- package/dist/docs/reference/geometry/Vector3Input.md +1 -1
- package/dist/docs/reference/geometry/VectorTextArcBaseline.md +1 -1
- package/dist/docs/reference/geometry/VectorTextLayout.md +1 -1
- package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +3 -3
- 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/anchor3.md +1 -1
- package/dist/docs/reference/geometry/anchorFrame3.md +1 -1
- package/dist/docs/reference/geometry/applyTransformDirection3.md +1 -1
- package/dist/docs/reference/geometry/applyTransformPoint3.md +1 -1
- package/dist/docs/reference/geometry/attachmentTransform3.md +1 -1
- package/dist/docs/reference/geometry/bounds2.md +4 -4
- package/dist/docs/reference/geometry/bounds3.md +4 -4
- package/dist/docs/reference/geometry/boundsCenter.md +1 -1
- package/dist/docs/reference/geometry/boundsSize.md +1 -1
- package/dist/docs/reference/geometry/boxAnchor3.md +3 -3
- package/dist/docs/reference/geometry/categories/bounds-layout.md +3 -3
- package/dist/docs/reference/geometry/categories/curves-paths.md +2 -2
- package/dist/docs/reference/geometry/categories/mechanical.md +8 -10
- package/dist/docs/reference/geometry/categories/meshes.md +19 -32
- package/dist/docs/reference/geometry/categories/pattern-placement.md +2 -2
- package/dist/docs/reference/geometry/categories/primitive-options.md +3 -3
- package/dist/docs/reference/geometry/categories/profiles-regions.md +5 -4
- package/dist/docs/reference/geometry/categories/resolution-errors.md +3 -3
- package/dist/docs/reference/geometry/categories/transforms-math.md +3 -2
- package/dist/docs/reference/geometry/categories/vector-import.md +3 -3
- 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 +1 -1
- package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +1 -1
- package/dist/docs/reference/geometry/composeTransform3.md +1 -1
- package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +1 -1
- package/dist/docs/reference/geometry/computeParallelTransportFrames.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 +2 -2
- 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 +1 -1
- 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/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/getMetricClearanceHoleDiameter.md +1 -1
- package/dist/docs/reference/geometry/getMetricFastenerStandard.md +1 -1
- package/dist/docs/reference/geometry/gridPatternTransforms.md +1 -1
- package/dist/docs/reference/geometry/immutableBuffer.md +49 -0
- package/dist/docs/reference/geometry/inverseTransform3.md +1 -1
- package/dist/docs/reference/geometry/isGeometryError.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 +1 -1
- package/dist/docs/reference/geometry/matchProfiles.md +1 -1
- package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +1 -1
- package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +1 -1
- 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/path2.md +1 -1
- package/dist/docs/reference/geometry/path3.md +1 -1
- package/dist/docs/reference/geometry/pathPatternTransforms.md +1 -1
- package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +18 -25
- package/dist/docs/reference/geometry/preflightSvgRegion.md +1 -1
- package/dist/docs/reference/geometry/preflightThreadedNut.md +24 -26
- package/dist/docs/reference/geometry/preflightThreadedRod.md +18 -25
- package/dist/docs/reference/geometry/projectOntoPlane3.md +1 -1
- package/dist/docs/reference/geometry/radialPatternTransforms.md +1 -1
- package/dist/docs/reference/geometry/rectangleContour.md +10 -5
- package/dist/docs/reference/geometry/rectangleProfile.md +2 -2
- 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 +1 -1
- package/dist/docs/reference/geometry/resamplePolyline3.md +1 -1
- package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +1 -1
- package/dist/docs/reference/geometry/resolveArcSegments.md +1 -1
- package/dist/docs/reference/geometry/resolveCircularSampling.md +1 -1
- 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 +1 -1
- package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +1 -1
- package/dist/docs/reference/geometry/resolveGeometryTolerance.md +1 -1
- package/dist/docs/reference/geometry/resolveKnuckleHinge.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 +1 -1
- 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 +1 -1
- package/dist/docs/reference/geometry/sampleContour.md +1 -1
- package/dist/docs/reference/geometry/sampleCurve2.md +1 -1
- package/dist/docs/reference/geometry/sampleCurve3.md +1 -1
- package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +1 -1
- package/dist/docs/reference/geometry/sampleHelix.md +1 -1
- package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +1 -1
- package/dist/docs/reference/geometry/sampleRackToothPath.md +1 -1
- package/dist/docs/reference/geometry/sampleSideProfile.md +1 -1
- package/dist/docs/reference/geometry/sampleTextContours.md +1 -1
- package/dist/docs/reference/geometry/sampleThreadHelices.md +1 -1
- 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 +17 -15
- package/dist/docs/reference/geometry/strokeRegionData.md +1 -1
- package/dist/docs/reference/geometry/subtract2.md +1 -1
- package/dist/docs/reference/geometry/subtract3.md +1 -1
- package/dist/docs/reference/geometry/threadProfile.md +1 -1
- 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/translationTransform3.md +1 -1
- package/dist/docs/reference/geometry/triangulateContour.md +1 -1
- package/dist/docs/reference/geometry/validateRigidTransform3.md +35 -0
- package/dist/docs/reference/geometry/validateTransform3.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 +9 -9
- package/dist/docs/reference/mesh/AcmeThreadProfileSpec.md +79 -0
- package/dist/docs/reference/mesh/Bevel.md +18 -0
- package/dist/docs/reference/mesh/BevelSize.md +14 -0
- package/dist/docs/reference/mesh/Bounds2.md +125 -0
- package/dist/docs/reference/mesh/Bounds2Data.md +43 -0
- package/dist/docs/reference/mesh/Bounds2Input.md +19 -0
- package/dist/docs/reference/mesh/Bounds3.md +125 -0
- package/dist/docs/reference/mesh/Bounds3Data.md +43 -0
- package/dist/docs/reference/mesh/Bounds3Input.md +19 -0
- package/dist/docs/reference/mesh/ButtressPressureFlankSide.md +14 -0
- package/dist/docs/reference/mesh/ButtressThreadProfileSpec.md +97 -0
- package/dist/docs/reference/mesh/CircularPrimitiveOptions.md +60 -0
- package/dist/docs/reference/mesh/CurveSamplingOptions.md +69 -0
- package/dist/docs/reference/mesh/CustomThreadProfileSpec.md +77 -0
- package/dist/docs/reference/mesh/ExtrudeMeshOptions.md +129 -0
- package/dist/docs/reference/mesh/ExtrusionSamplingOptions.md +81 -0
- package/dist/docs/reference/mesh/Frame3.md +62 -0
- package/dist/docs/reference/mesh/GeometryResolution.md +74 -0
- package/dist/docs/reference/mesh/GeometrySamplingLimits.md +66 -0
- package/dist/docs/reference/mesh/GeometryToleranceOptions.md +46 -0
- package/dist/docs/reference/mesh/HeightfieldMeshLimits.md +18 -0
- package/dist/docs/reference/mesh/HeightfieldOptions.md +72 -0
- package/dist/docs/reference/mesh/HeightfieldPreflight.md +58 -0
- package/dist/docs/reference/mesh/ImmutableBuffer.md +108 -0
- package/dist/docs/reference/mesh/ImmutableTriangleMesh.md +43 -0
- package/dist/docs/reference/mesh/LoftCorrespondence.md +24 -0
- package/dist/docs/reference/mesh/LoftMeshStation.md +31 -0
- package/dist/docs/reference/mesh/LoftOptions.md +88 -0
- package/dist/docs/reference/mesh/LoftPlacement.md +70 -0
- package/dist/docs/reference/mesh/ModelingLimits.md +130 -0
- package/dist/docs/reference/mesh/NumericArray.md +14 -0
- package/dist/docs/reference/mesh/Path2.md +197 -0
- package/dist/docs/reference/mesh/Path2Data.md +50 -0
- package/dist/docs/reference/mesh/Path2Input.md +20 -0
- package/dist/docs/reference/mesh/Path3.md +197 -0
- package/dist/docs/reference/mesh/Path3Data.md +50 -0
- package/dist/docs/reference/mesh/Path3Input.md +20 -0
- package/dist/docs/reference/mesh/PathLocation.md +69 -0
- package/dist/docs/reference/mesh/PathNormalGuide.md +43 -0
- package/dist/docs/reference/mesh/PathResamplingOptions.md +84 -0
- package/dist/docs/reference/mesh/Pivot2Options.md +26 -0
- package/dist/docs/reference/mesh/Pivot3Options.md +26 -0
- package/dist/docs/reference/mesh/PlanarMeshOptimizationFallbackReason.md +14 -0
- package/dist/docs/reference/mesh/PlanarMeshOptimizationOptions.md +160 -0
- package/dist/docs/reference/mesh/PlanarMeshOptimizationResult.md +124 -0
- package/dist/docs/reference/mesh/PlanarPatchQuality.md +194 -0
- package/dist/docs/reference/mesh/RevolveOptions.md +91 -0
- package/dist/docs/reference/mesh/SolidMeshValidationOptions.md +38 -0
- package/dist/docs/reference/mesh/SquareThreadProfileSpec.md +79 -0
- package/dist/docs/reference/mesh/SweepOptions.md +113 -0
- package/dist/docs/reference/mesh/SweepOrientation.md +113 -0
- package/dist/docs/reference/mesh/ThreadEndStyle.md +14 -0
- package/dist/docs/reference/mesh/ThreadEndTreatmentOptions.md +117 -0
- package/dist/docs/reference/mesh/ThreadHandedness.md +14 -0
- package/dist/docs/reference/mesh/ThreadLeadInEnvelope.md +14 -0
- package/dist/docs/reference/mesh/ThreadLeadInShape.md +14 -0
- package/dist/docs/reference/mesh/ThreadProfile.md +86 -0
- package/dist/docs/reference/mesh/ThreadProfileBaseSpec.md +53 -0
- package/dist/docs/reference/mesh/ThreadProfileSpec.md +23 -0
- package/dist/docs/reference/{model/HelicalThreadRidgeMeshOptions.md → mesh/ThreadRidgeOptions.md} +14 -10
- package/dist/docs/reference/mesh/ThreadSolidOptions.md +222 -0
- package/dist/docs/reference/mesh/ThreadSolidPreflight.md +58 -0
- package/dist/docs/reference/mesh/Transform2.md +256 -0
- package/dist/docs/reference/mesh/Transform2Data.md +14 -0
- package/dist/docs/reference/mesh/Transform2Input.md +19 -0
- package/dist/docs/reference/mesh/Transform3.md +296 -0
- package/dist/docs/reference/mesh/Transform3Data.md +17 -0
- package/dist/docs/reference/mesh/Transform3Input.md +19 -0
- package/dist/docs/reference/mesh/TrapezoidalThreadProfileSpec.md +96 -0
- package/dist/docs/reference/mesh/TriangleMesh.md +34 -0
- package/dist/docs/reference/mesh/TriangleMeshAnalysis.md +129 -0
- package/dist/docs/reference/mesh/TriangleMeshAnalysisOptions.md +79 -0
- package/dist/docs/reference/mesh/TriangleMeshInput.md +19 -0
- package/dist/docs/reference/mesh/TriangleMeshMeasurements.md +79 -0
- package/dist/docs/reference/mesh/TriangleMeshQualityOptions.md +43 -0
- package/dist/docs/reference/mesh/TriangleMeshQualityReport.md +194 -0
- package/dist/docs/reference/mesh/TriangleMeshSignature.md +111 -0
- package/dist/docs/reference/mesh/TriangleMeshSignatureOptions.md +46 -0
- package/dist/docs/reference/mesh/TriangleMeshSignatureTolerances.md +34 -0
- package/dist/docs/reference/mesh/TriangleMeshTopologyAnalysis.md +131 -0
- package/dist/docs/reference/mesh/TriangleMeshValidationOptions.md +55 -0
- package/dist/docs/reference/mesh/TriangularThreadProfileSpec.md +95 -0
- package/dist/docs/reference/mesh/Vector2.md +270 -0
- package/dist/docs/reference/mesh/Vector2Data.md +14 -0
- package/dist/docs/reference/mesh/Vector2Input.md +19 -0
- package/dist/docs/reference/mesh/Vector3.md +282 -0
- package/dist/docs/reference/mesh/Vector3Data.md +14 -0
- package/dist/docs/reference/mesh/Vector3Input.md +19 -0
- package/dist/docs/reference/mesh/analyze.md +96 -0
- package/dist/docs/reference/{geometry/analyzeTriangleMeshQuality.md → mesh/analyzeQuality.md} +9 -9
- package/dist/docs/reference/mesh/bounds.md +39 -0
- package/dist/docs/reference/mesh/categories/operations.md +147 -0
- package/dist/docs/reference/{geometry/computeTriangleMeshCentroid.md → mesh/centroid.md} +7 -7
- package/dist/docs/reference/mesh/extrude.md +73 -0
- package/dist/docs/reference/{geometry/heightfieldMesh.md → mesh/heightfield.md} +7 -8
- package/dist/docs/reference/mesh/immutable.md +47 -0
- package/dist/docs/reference/{geometry/joinTriangleMeshes.md → mesh/join.md} +7 -6
- package/dist/docs/reference/{geometry/loftMesh.md → mesh/loft.md} +15 -15
- package/dist/docs/reference/mesh/optimizePlanarPatches.md +96 -0
- package/dist/docs/reference/{geometry → mesh}/preflightHeightfield.md +5 -6
- package/dist/docs/reference/mesh/preflightThreadSolid.md +90 -0
- package/dist/docs/reference/{geometry/reverseTriangleMesh.md → mesh/reverse.md} +6 -5
- package/dist/docs/reference/{geometry/revolveMesh.md → mesh/revolve.md} +13 -13
- package/dist/docs/reference/{geometry/computeTriangleMeshSignature.md → mesh/signature.md} +11 -11
- package/dist/docs/reference/mesh/sweep.md +86 -0
- package/dist/docs/reference/mesh/threadRidge.md +72 -0
- package/dist/docs/reference/mesh/threadSolid.md +90 -0
- package/dist/docs/reference/{geometry/transformTriangleMesh.md → mesh/transform.md} +7 -6
- package/dist/docs/reference/{geometry/validateTriangleMesh.md → mesh/validate.md} +17 -11
- package/dist/docs/reference/{geometry/validateSolidMesh.md → mesh/validateSolid.md} +15 -9
- package/dist/docs/reference/mesh.md +21 -0
- package/dist/docs/reference/model/AcmeThreadProfileSpec.md +80 -0
- package/dist/docs/reference/model/Anchor3.md +1 -1
- package/dist/docs/reference/model/AttachOptions.md +1 -1
- package/dist/docs/reference/model/Bevel.md +19 -0
- package/dist/docs/reference/model/{ThreadedNutBevel.md → BevelSize.md} +4 -4
- package/dist/docs/reference/model/Bounds2-type.md +1 -1
- package/dist/docs/reference/model/Bounds2Data.md +1 -1
- package/dist/docs/reference/model/Bounds2Input.md +1 -1
- package/dist/docs/reference/model/Bounds2Options.md +48 -8
- package/dist/docs/reference/model/Bounds3-type.md +1 -1
- package/dist/docs/reference/model/Bounds3Data.md +1 -1
- package/dist/docs/reference/model/Bounds3Input.md +1 -1
- package/dist/docs/reference/model/Bounds3Options.md +48 -8
- 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 +3 -3
- package/dist/docs/reference/model/ButtressPressureFlankSide.md +15 -0
- package/dist/docs/reference/model/ButtressThreadProfileSpec.md +98 -0
- 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 +1 -1
- package/dist/docs/reference/model/CircularPrimitiveOptions.md +1 -3
- package/dist/docs/reference/model/Computed.md +7 -3
- 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/CurveSamplingOptions.md +68 -0
- package/dist/docs/reference/model/CustomThreadProfileSpec.md +78 -0
- package/dist/docs/reference/model/CylinderOptions.md +1 -1
- package/dist/docs/reference/model/DiagnosticOptions.md +15 -1
- package/dist/docs/reference/model/EdgeTreatment.md +1 -1
- package/dist/docs/reference/model/EllipseContourOptions.md +3 -3
- package/dist/docs/reference/model/EllipseOptions.md +1 -1
- package/dist/docs/reference/model/EndTreatments.md +1 -1
- package/dist/docs/reference/model/ExtrudeMeshOptions.md +133 -0
- package/dist/docs/reference/model/ExtrudeOptions.md +17 -8
- package/dist/docs/reference/model/ExtrusionSamplingOptions.md +84 -0
- package/dist/docs/reference/model/Frame3.md +1 -1
- package/dist/docs/reference/model/GenerateCallback.md +5 -5
- package/dist/docs/reference/model/GenerateContext.md +15 -63
- package/dist/docs/reference/model/GenerationDiagnostic.md +13 -1
- package/dist/docs/reference/model/GenerationError.md +1 -1
- package/dist/docs/reference/model/GeometryError.md +102 -0
- package/dist/docs/reference/model/GeometryErrorCode.md +15 -0
- package/dist/docs/reference/model/GeometryErrorContext.md +35 -0
- package/dist/docs/reference/model/GeometryResolution.md +1 -1
- 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 +1 -1
- package/dist/docs/reference/model/HeightfieldOptions.md +3 -2
- package/dist/docs/reference/model/HoleCutterOptions.md +1 -1
- package/dist/docs/reference/model/HoleCutterOverrun.md +1 -1
- package/dist/docs/reference/model/HoleCutterRecess.md +1 -1
- package/dist/docs/reference/model/HullOptions.md +1 -1
- package/dist/docs/reference/model/ImmutableBuffer-type.md +27 -3
- package/dist/docs/reference/model/ImmutableTriangleMesh.md +8 -3
- package/dist/docs/reference/model/ImmutableValue.md +20 -0
- package/dist/docs/reference/model/ImplicitOptions.md +1 -1
- package/dist/docs/reference/model/InternalThreadCutterOptions.md +54 -84
- package/dist/docs/reference/model/KnuckleHinge-type.md +1 -1
- package/dist/docs/reference/model/KnuckleHingeBaseSpec.md +1 -1
- package/dist/docs/reference/model/KnuckleHingeHalfOptions.md +1 -1
- package/dist/docs/reference/model/KnuckleHingeOptions.md +1 -1
- package/dist/docs/reference/model/KnuckleHingeSamplingOptions.md +1 -1
- package/dist/docs/reference/model/KnuckleHingeSpec.md +1 -1
- package/dist/docs/reference/model/KnuckleHingeWeb.md +1 -1
- package/dist/docs/reference/model/LinearPatternOptions.md +1 -1
- package/dist/docs/reference/model/LoftCorrespondence.md +1 -1
- package/dist/docs/reference/model/LoftOptions.md +3 -3
- package/dist/docs/reference/model/LoftPlacement.md +1 -1
- package/dist/docs/reference/model/LoftStation.md +1 -1
- package/dist/docs/reference/model/MatchProfilesOptions.md +1 -1
- package/dist/docs/reference/model/ModelProgram.md +2 -2
- package/dist/docs/reference/model/ModelingLimits.md +1 -1
- package/dist/docs/reference/model/NumericArray.md +1 -1
- package/dist/docs/reference/model/{GeneratedPart.md → PartDeclaration.md} +8 -23
- package/dist/docs/reference/model/PartGeometry.md +2 -2
- package/dist/docs/reference/model/PartOptions.md +8 -19
- package/dist/docs/reference/model/Path2-type.md +1 -1
- package/dist/docs/reference/model/Path2Data.md +1 -1
- package/dist/docs/reference/model/Path2Input.md +1 -1
- package/dist/docs/reference/model/Path3-type.md +1 -1
- package/dist/docs/reference/model/Path3Data.md +1 -1
- package/dist/docs/reference/model/Path3Input.md +1 -1
- package/dist/docs/reference/model/PathLocation.md +1 -1
- package/dist/docs/reference/model/PathNormalGuide.md +1 -1
- package/dist/docs/reference/model/PathOptions.md +1 -1
- package/dist/docs/reference/model/PathPatternOptions.md +1 -1
- package/dist/docs/reference/model/PathResamplingOptions.md +7 -6
- 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 +1 -1
- package/dist/docs/reference/model/PolygonData.md +1 -1
- package/dist/docs/reference/model/PolygonOptions.md +1 -1
- package/dist/docs/reference/model/PrimitiveAttachment.md +1 -3
- package/dist/docs/reference/model/PrimitiveAttachmentOptions.md +1 -1
- 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 +1 -1
- package/dist/docs/reference/model/ProfiledEdgeTreatment.md +1 -1
- package/dist/docs/reference/model/RadialPatternOptions.md +1 -1
- 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 +3 -3
- 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 +3 -3
- package/dist/docs/reference/model/RegionData.md +1 -1
- package/dist/docs/reference/model/RegularPolygonOptions.md +1 -1
- package/dist/docs/reference/model/RevolveOptions.md +2 -2
- package/dist/docs/reference/model/RoundedEdgeTreatment.md +1 -1
- package/dist/docs/reference/model/Section.md +131 -6
- package/dist/docs/reference/model/SectionHullOptions.md +1 -1
- package/dist/docs/reference/model/SectionInspection.md +5 -17
- 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 +245 -8
- package/dist/docs/reference/model/SolidInspection.md +5 -17
- package/dist/docs/reference/model/SolidSegmentHit.md +5 -1
- package/dist/docs/reference/model/SphereOptions.md +1 -1
- package/dist/docs/reference/model/SquareThreadProfileSpec.md +80 -0
- package/dist/docs/reference/model/StarContourOptions.md +81 -0
- package/dist/docs/reference/model/StarOptions.md +38 -16
- package/dist/docs/reference/model/StrokeCap.md +1 -1
- package/dist/docs/reference/model/StrokeJoin.md +1 -1
- package/dist/docs/reference/model/StrokeOptions.md +1 -1
- 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 +1 -1
- package/dist/docs/reference/model/SweepOrientation.md +1 -1
- package/dist/docs/reference/model/TextSectionOptions.md +1 -1
- package/dist/docs/reference/model/ThreadBevelOptions.md +35 -0
- 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 +2 -2
- package/dist/docs/reference/model/ThreadProfileBaseSpec.md +54 -0
- package/dist/docs/reference/model/ThreadProfileSpec.md +24 -0
- package/dist/docs/reference/model/ThreadRidgeOptions.md +126 -4
- package/dist/docs/reference/model/{HelicalThreadSolidMeshPreflight.md → ThreadSolidPreflight.md} +2 -2
- package/dist/docs/reference/model/ThreadedNutOptions.md +75 -86
- package/dist/docs/reference/model/ThreadedNutPreflight.md +18 -6
- package/dist/docs/reference/model/ThreadedNutShape.md +1 -1
- package/dist/docs/reference/model/ThreadedRodOptions.md +54 -84
- package/dist/docs/reference/model/TorusOptions.md +1 -1
- package/dist/docs/reference/model/Transform2-type.md +1 -1
- package/dist/docs/reference/model/Transform2Data.md +1 -1
- package/dist/docs/reference/model/Transform2Input.md +1 -1
- package/dist/docs/reference/model/Transform3-type.md +1 -1
- package/dist/docs/reference/model/Transform3Data.md +1 -1
- package/dist/docs/reference/model/Transform3Input.md +1 -1
- package/dist/docs/reference/model/TrapezoidalThreadProfileSpec.md +97 -0
- package/dist/docs/reference/model/TriangleMesh.md +3 -11
- package/dist/docs/reference/model/TriangleMeshAnalysis.md +10 -4
- package/dist/docs/reference/model/TriangleMeshMeasurements.md +1 -1
- package/dist/docs/reference/model/TriangleMeshTopologyAnalysis.md +131 -0
- package/dist/docs/reference/model/TriangularThreadProfileSpec.md +96 -0
- package/dist/docs/reference/model/TubeOptions.md +10 -86
- package/dist/docs/reference/model/Vector2-type.md +1 -1
- package/dist/docs/reference/model/Vector2Data.md +1 -1
- package/dist/docs/reference/model/Vector2Input.md +1 -1
- package/dist/docs/reference/model/Vector3-type.md +1 -1
- package/dist/docs/reference/model/Vector3Data.md +1 -1
- package/dist/docs/reference/model/Vector3Input.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/bounds2.md +4 -4
- package/dist/docs/reference/model/bounds3.md +4 -4
- package/dist/docs/reference/model/box.md +2 -2
- package/dist/docs/reference/model/categories/boolean-operations.md +6 -10
- package/dist/docs/reference/model/categories/bounded-surfaces.md +1 -1
- package/dist/docs/reference/model/categories/bounds.md +2 -2
- package/dist/docs/reference/model/categories/contracts.md +3 -5
- package/dist/docs/reference/model/categories/core-values-errors.md +17 -3
- package/dist/docs/reference/model/categories/explicit-profiles.md +1 -1
- package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +10 -8
- package/dist/docs/reference/model/categories/generation.md +8 -8
- package/dist/docs/reference/model/categories/hinges.md +1 -1
- package/dist/docs/reference/model/categories/mesh-inspection.md +15 -6
- package/dist/docs/reference/model/categories/paths.md +4 -3
- package/dist/docs/reference/model/categories/primitives.md +5 -5
- package/dist/docs/reference/model/categories/resolution.md +1 -1
- package/dist/docs/reference/model/categories/sections.md +4 -3
- package/dist/docs/reference/model/categories/threads.md +16 -6
- package/dist/docs/reference/model/categories/transforms-placement.md +2 -3
- package/dist/docs/reference/model/circle.md +1 -1
- package/dist/docs/reference/model/cylinder.md +1 -1
- package/dist/docs/reference/model/ellipse.md +1 -1
- package/dist/docs/reference/model/extrude.md +5 -4
- package/dist/docs/reference/model/generate.md +4 -4
- package/dist/docs/reference/model/gridPattern.md +1 -1
- package/dist/docs/reference/model/heightfield.md +1 -1
- package/dist/docs/reference/model/holeCutter.md +12 -2
- package/dist/docs/reference/model/hull.md +1 -1
- package/dist/docs/reference/model/immutableBuffer.md +5 -4
- package/dist/docs/reference/model/implicit.md +1 -1
- package/dist/docs/reference/model/internalThreadCutter.md +12 -20
- package/dist/docs/reference/model/intersect.md +3 -3
- package/dist/docs/reference/model/isGeometryError.md +34 -0
- package/dist/docs/reference/model/knuckleHinge.md +2 -2
- package/dist/docs/reference/model/linearPattern.md +1 -1
- package/dist/docs/reference/model/loft.md +6 -5
- package/dist/docs/reference/model/matchProfiles.md +1 -1
- package/dist/docs/reference/model/minkowskiSum.md +1 -1
- package/dist/docs/reference/model/path2.md +1 -1
- package/dist/docs/reference/model/path3.md +1 -1
- package/dist/docs/reference/model/pathPattern.md +1 -1
- package/dist/docs/reference/model/polygon.md +1 -1
- package/dist/docs/reference/model/preflightInternalThreadCutter.md +15 -23
- package/dist/docs/reference/model/preflightThreadedNut.md +22 -25
- package/dist/docs/reference/model/preflightThreadedRod.md +15 -23
- package/dist/docs/reference/model/radialPattern.md +1 -1
- package/dist/docs/reference/model/rectangle.md +2 -2
- package/dist/docs/reference/model/regularPolygon.md +1 -1
- package/dist/docs/reference/model/revolve.md +6 -5
- package/dist/docs/reference/model/solidFromMesh.md +7 -6
- package/dist/docs/reference/model/sphere.md +1 -1
- package/dist/docs/reference/model/star.md +7 -7
- package/dist/docs/reference/model/stroke.md +1 -1
- 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 +5 -4
- package/dist/docs/reference/model/textSection.md +1 -1
- package/dist/docs/reference/model/threadRidge.md +14 -14
- package/dist/docs/reference/model/threadedNut.md +22 -25
- package/dist/docs/reference/model/threadedRod.md +12 -20
- package/dist/docs/reference/model/torus.md +1 -1
- 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 +1 -36
- package/dist/docs/reference/model/union.md +3 -3
- package/dist/docs/reference/model/vector2.md +1 -1
- package/dist/docs/reference/model/vector3.md +1 -1
- package/dist/docs/reference/model.md +15 -19
- package/dist/docs/reference/text/Bounds2Data.md +1 -1
- package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +2 -2
- package/dist/docs/reference/text/Vector2Data.md +1 -1
- package/dist/docs/reference/text/VectorFont.md +7 -7
- package/dist/docs/reference/text/VectorFontOptions.md +1 -1
- package/dist/docs/reference/text/VectorTextArcBaseline.md +1 -1
- package/dist/docs/reference/text/VectorTextLayout.md +1 -1
- package/dist/docs/reference/text/VectorTextLayoutOptions.md +3 -3
- 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 +1 -1
- package/dist/docs/reference/text.md +4 -4
- package/dist/engine/execution.js +10 -6
- package/dist/engine/export-3mf.js +22 -115
- package/dist/engine/finalization.js +10 -10
- package/dist/engine/index.js +25 -31
- package/dist/engine/model-parts.js +8 -0
- package/dist/engine/model-summary.js +5 -5
- package/dist/engine/native/index.js +1 -1
- package/dist/engine/native/material-components.js +3 -3
- package/dist/engine/native/operations.js +0 -7
- package/dist/engine/native/scoped-primitives.js +5 -4
- package/dist/engine/native/threads.js +14 -14
- package/dist/engine/{construction-operations.js → operations/construction.js} +25 -23
- package/dist/engine/{modeling-context.js → operations/context.js} +10 -10
- package/dist/engine/{operation-environment.js → operations/environment.js} +2 -2
- package/dist/engine/{extrusion-finishing.js → operations/extrusion-finishing.js} +7 -7
- package/dist/engine/{hole-cutter-operation.js → operations/hole-cutter.js} +3 -3
- package/dist/engine/{inspection-operations.js → operations/inspection.js} +6 -6
- package/dist/engine/{knuckle-hinge-operation.js → operations/knuckle-hinge.js} +4 -4
- package/dist/engine/{loft-operations.js → operations/loft.js} +13 -12
- package/dist/engine/{mechanical-operations.js → operations/mechanical.js} +2 -2
- package/dist/engine/{pattern-operations.js → operations/patterns.js} +4 -4
- package/dist/engine/{primitive-anchors.js → operations/primitives/anchors.js} +9 -4
- package/dist/engine/{primitive-operations.js → operations/primitives/construction.js} +18 -19
- package/dist/engine/{primitive-correspondence.js → operations/primitives/correspondence.js} +4 -4
- package/dist/engine/{profile-mesh.js → operations/primitives/profile-mesh.js} +12 -12
- package/dist/engine/{primitive-profiles.js → operations/primitives/profiles.js} +7 -7
- package/dist/engine/{section-operations.js → operations/sections.js} +8 -8
- package/dist/engine/{transform-operations.js → operations/transforms.js} +8 -8
- package/dist/engine/placement.js +3 -4
- package/dist/engine/recipe-realization.js +1 -1
- package/dist/engine/serialize-3mf.js +116 -0
- package/dist/engine/{deferred-context.js → session/deferred-context.js} +4 -4
- package/dist/engine/{model-dependencies.js → session/dependencies.js} +1 -1
- package/dist/engine/{session-graph.js → session/graph.js} +13 -11
- package/dist/engine/{session-native.js → session/native-cache.js} +1 -1
- package/dist/engine/{session.js → session/session.js} +16 -10
- package/dist/engine/{session-snapshot.js → session/snapshot-cache.js} +29 -59
- package/dist/geometry/anchors.js +4 -11
- package/dist/geometry/bounds-value.js +20 -10
- package/dist/geometry/heightfield.js +10 -12
- package/dist/{model → geometry}/immutable-buffer.js +28 -7
- package/dist/geometry/index.js +16 -22
- package/dist/geometry/loft/loft.js +11 -6
- package/dist/geometry/mechanical/index.js +5 -5
- package/dist/geometry/mechanical/threads/bevel.js +24 -0
- package/dist/geometry/mechanical/{threads.js → threads/fit.js} +4 -4
- package/dist/geometry/mechanical/{thread-helices.js → threads/helices.js} +3 -3
- package/dist/geometry/mechanical/{thread-mesh-plan.js → threads/mesh-plan.js} +38 -53
- package/dist/geometry/mechanical/{thread-mesh.js → threads/mesh.js} +9 -9
- package/dist/geometry/mechanical/{thread-profiles.js → threads/profiles.js} +3 -3
- package/dist/geometry/mechanical/{thread-solids.js → threads/solids.js} +58 -89
- package/dist/geometry/mechanical/{thread-surface.js → threads/surface.js} +7 -8
- package/dist/geometry/mesh/mesh-centroid.js +3 -2
- package/dist/geometry/mesh/mesh-planar.js +27 -8
- package/dist/geometry/mesh/mesh-quality.js +2 -1
- package/dist/geometry/mesh/mesh-signature.js +7 -6
- package/dist/geometry/mesh/mesh-solid.js +2 -3
- package/dist/geometry/mesh/mesh-types.js +1 -0
- package/dist/geometry/mesh/mesh.js +13 -22
- package/dist/geometry/mesh-api.js +14 -0
- package/dist/geometry/primitive-resolvers.js +42 -14
- package/dist/geometry/profiles/primitives/circle.js +19 -0
- package/dist/geometry/profiles/{shapes.js → primitives/ellipse.js} +6 -10
- package/dist/geometry/profiles/{rectangle.js → primitives/rectangle.js} +14 -12
- package/dist/geometry/profiles/primitives/regular-polygon.js +33 -0
- package/dist/geometry/profiles/primitives/star.js +28 -0
- package/dist/geometry/revolve/revolve-mesh.js +1 -1
- package/dist/geometry/{svg-import.js → svg/import.js} +10 -10
- package/dist/geometry/sweeps/sweep-mesh.js +1 -1
- package/dist/geometry/transform3.js +29 -0
- package/dist/index.js +2 -1
- package/dist/model/diagnostic-path.js +26 -0
- package/dist/model/execution-binding.js +3 -3
- package/dist/model/generation.js +8 -2
- package/dist/model/geometry-recipes.js +1 -1
- package/dist/model/immutable-generation-data.js +33 -2
- package/dist/model/operations.js +14 -144
- package/dist/model/recipe-declaration.js +6 -2
- package/dist/model/shape-handles.js +30 -7
- package/dist/text/index.js +1 -1
- package/package.json +21 -11
- package/dist/docs/reference/engine/ModelSnapshot.md +0 -184
- package/dist/docs/reference/engine/SnapshotPart.md +0 -133
- package/dist/docs/reference/engine/validateModel.md +0 -48
- package/dist/docs/reference/geometry/ThreadedNutBevel.md +0 -14
- package/dist/docs/reference/geometry/analyzeTriangleMesh.md +0 -61
- package/dist/docs/reference/geometry/extrudeMesh.md +0 -77
- package/dist/docs/reference/geometry/helicalThreadRidgeMesh.md +0 -72
- package/dist/docs/reference/geometry/helicalThreadSolidMesh.md +0 -106
- package/dist/docs/reference/geometry/meshBounds.md +0 -39
- package/dist/docs/reference/geometry/optimizePlanarPatches.md +0 -95
- package/dist/docs/reference/geometry/preflightHelicalThreadSolidMesh.md +0 -105
- package/dist/docs/reference/geometry/sweepMesh.md +0 -86
- package/dist/docs/reference/model/FinalizedModel.md +0 -131
- package/dist/docs/reference/model/FinalizedPart.md +0 -87
- package/dist/docs/reference/model/anchor.md +0 -47
- package/dist/docs/reference/model/castSegment.md +0 -40
- package/dist/docs/reference/model/categories/inspection.md +0 -29
- package/dist/docs/reference/model/components.md +0 -71
- package/dist/docs/reference/model/compose.md +0 -31
- package/dist/docs/reference/model/distance.md +0 -45
- package/dist/docs/reference/model/immutableMesh.md +0 -44
- package/dist/docs/reference/model/inspectSection.md +0 -38
- package/dist/docs/reference/model/inspectSolid.md +0 -38
- package/dist/docs/reference/model/isEmpty.md +0 -39
- package/dist/docs/reference/model/split.md +0 -54
- package/dist/docs/reference/model/splitByPlane.md +0 -66
- package/dist/geometry/profiles/profiles.js +0 -71
- /package/dist/engine/{primitive-profile-types.js → operations/primitives/profile-types.js} +0 -0
- /package/dist/geometry/profiles/{matched.js → match-profiles.js} +0 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { immutableMeshView } from "../immutable-buffer.js";
|
|
2
3
|
import { analyzeTriangleMesh, validateTriangleMesh } from "./mesh.js";
|
|
3
4
|
const DEFAULT_POSITION_TOLERANCE = 1e-5;
|
|
4
5
|
const DEFAULT_VOLUME_TOLERANCE = 1e-4;
|
|
@@ -68,10 +69,10 @@ const hashCanonicalKeys = (header, groups) => {
|
|
|
68
69
|
* @param mesh - Closed oriented mesh to measure without mutation.
|
|
69
70
|
* @param options - Absolute quantization and complexity limits.
|
|
70
71
|
* @returns Compact counts, bounds, volume, topology, tolerances, and canonical fingerprint.
|
|
71
|
-
* @throws
|
|
72
|
+
* @throws `GeometryError` When validation, topology, tolerance, or complexity checks fail.
|
|
72
73
|
*/
|
|
73
74
|
export function computeTriangleMeshSignature(mesh, options = {}) {
|
|
74
|
-
const source =
|
|
75
|
+
const source = immutableMeshView(mesh);
|
|
75
76
|
const maxTriangles = options.maxTriangles ?? DEFAULT_MAXIMUM_TRIANGLE_COUNT;
|
|
76
77
|
if (!Number.isSafeInteger(maxTriangles) || maxTriangles <= 0) {
|
|
77
78
|
throw new GeometryError("INVALID_ARGUMENT", "maxTriangles must be a positive safe integer.", {
|
|
@@ -92,14 +93,14 @@ export function computeTriangleMeshSignature(mesh, options = {}) {
|
|
|
92
93
|
const positionTolerance = validatePositiveTolerance(options.positionTolerance ?? DEFAULT_POSITION_TOLERANCE, "positionTolerance");
|
|
93
94
|
const volumeTolerance = validatePositiveTolerance(options.volumeTolerance ?? DEFAULT_VOLUME_TOLERANCE, "volumeTolerance");
|
|
94
95
|
const measured = analyzeTriangleMesh(source, { requireClosed: true, includeTopology: true });
|
|
95
|
-
const
|
|
96
|
+
const shellCount = measured.shellCount;
|
|
96
97
|
const edgeCount = measured.edgeCount;
|
|
97
98
|
const eulerCharacteristic = measured.vertexCount - edgeCount + measured.triangleCount;
|
|
98
|
-
const twiceGenus =
|
|
99
|
+
const twiceGenus = shellCount * 2 - eulerCharacteristic;
|
|
99
100
|
if (twiceGenus < 0 || twiceGenus % 2 !== 0) {
|
|
100
101
|
throw new GeometryError("INVALID_TOPOLOGY", "Closed mesh topology does not describe orientable vertex-manifold components.", {
|
|
101
102
|
operation: "computeTriangleMeshSignature",
|
|
102
|
-
details: {
|
|
103
|
+
details: { shellCount, edgeCount, eulerCharacteristic },
|
|
103
104
|
});
|
|
104
105
|
}
|
|
105
106
|
const coordinateKeys = Array.from({ length: measured.vertexCount }, (_, vertex) => coordinateKey(source.positions, vertex, positionTolerance));
|
|
@@ -127,7 +128,7 @@ export function computeTriangleMeshSignature(mesh, options = {}) {
|
|
|
127
128
|
});
|
|
128
129
|
return Object.freeze({
|
|
129
130
|
bounds: quantizeBounds(measured.bounds),
|
|
130
|
-
|
|
131
|
+
shellCount,
|
|
131
132
|
fingerprint: hashCanonicalKeys(`${measured.vertexCount}|${measured.triangleCount}|${positionTolerance}`, [vertexKeys, triangleKeys]),
|
|
132
133
|
genus: twiceGenus / 2,
|
|
133
134
|
signedVolume: quantizedScalar(measured.signedVolume, volumeTolerance, "Signed volume"),
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { immutableMeshView } from "../immutable-buffer.js";
|
|
2
3
|
import { resolveGeometryTolerance } from "../tolerance.js";
|
|
3
4
|
import { IndexedMeshEdgeTable } from "./mesh-edge-table.js";
|
|
4
5
|
import { prepareSolidTriangle, trianglesIntersectBeyondSharedBoundary, triangleSolidAngle, } from "./mesh-solid-intersections.js";
|
|
@@ -51,9 +52,7 @@ function validationWork(mesh, options) {
|
|
|
51
52
|
}
|
|
52
53
|
/** @internal Fresh measurements precede one adjacency traversal for closure, fans, and shells. */
|
|
53
54
|
export function analyzeSolidMesh(mesh, options = {}) {
|
|
54
|
-
const source = typeof mesh === "object" && mesh !== null
|
|
55
|
-
? { positions: mesh.positions, indices: mesh.indices }
|
|
56
|
-
: mesh;
|
|
55
|
+
const source = typeof mesh === "object" && mesh !== null ? immutableMeshView(mesh) : mesh;
|
|
57
56
|
const work = validationWork(source, options);
|
|
58
57
|
const measurements = analyzeTriangleMesh(source, {
|
|
59
58
|
...(options.tolerance === undefined ? {} : { tolerance: options.tolerance }),
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { immutableMeshView } from "../immutable-buffer.js";
|
|
2
3
|
import { writeMeshVertex } from "../numeric.js";
|
|
3
4
|
import { resolveGeometryTolerance } from "../tolerance.js";
|
|
4
5
|
import { readTransformMatrix } from "../transform-matrix.js";
|
|
5
6
|
import { transformDeterminant3, validateTransform3 } from "../transform3.js";
|
|
6
7
|
import { IndexedMeshEdgeTable } from "./mesh-edge-table.js";
|
|
7
8
|
function inspectTriangleMesh(mesh, options = {}, mode = "validate", topology = false) {
|
|
8
|
-
//
|
|
9
|
-
const source =
|
|
9
|
+
// Normalize immutable storage and read raw input accessors once before traversal.
|
|
10
|
+
const source = immutableMeshView(mesh);
|
|
10
11
|
const measurements = mode === "measure";
|
|
11
12
|
if (!(source.positions instanceof Float32Array) || !(source.indices instanceof Uint32Array)) {
|
|
12
13
|
throw new GeometryError("INVALID_MESH", "Triangle meshes require Float32Array positions and Uint32Array indices.");
|
|
@@ -43,7 +44,7 @@ function inspectTriangleMesh(mesh, options = {}, mode = "validate", topology = f
|
|
|
43
44
|
const parents = topology ? new Int32Array(triangleCount) : null;
|
|
44
45
|
const ranks = topology ? new Uint8Array(triangleCount) : null;
|
|
45
46
|
const referenced = topology ? new Uint8Array(vertexCount) : null;
|
|
46
|
-
let
|
|
47
|
+
let shellCount = 0;
|
|
47
48
|
const root = (triangle) => {
|
|
48
49
|
let current = triangle;
|
|
49
50
|
while (parents[current] !== current)
|
|
@@ -64,7 +65,7 @@ function inspectTriangleMesh(mesh, options = {}, mode = "validate", topology = f
|
|
|
64
65
|
parents[right] = left;
|
|
65
66
|
if (ranks[left] === ranks[right])
|
|
66
67
|
ranks[left] = ranks[left] + 1;
|
|
67
|
-
|
|
68
|
+
shellCount -= 1;
|
|
68
69
|
};
|
|
69
70
|
let edgeCount = 0;
|
|
70
71
|
const addEdge = (a, b, triangle) => {
|
|
@@ -113,7 +114,7 @@ function inspectTriangleMesh(mesh, options = {}, mode = "validate", topology = f
|
|
|
113
114
|
const triangle = offset / 3;
|
|
114
115
|
parents[triangle] = triangle;
|
|
115
116
|
referenced[a] = referenced[b] = referenced[c] = 1;
|
|
116
|
-
|
|
117
|
+
shellCount += 1;
|
|
117
118
|
}
|
|
118
119
|
if (edges !== null) {
|
|
119
120
|
addEdge(a, b, offset / 3);
|
|
@@ -143,19 +144,9 @@ function inspectTriangleMesh(mesh, options = {}, mode = "validate", topology = f
|
|
|
143
144
|
surfaceArea: surfaceArea + areaCorrection,
|
|
144
145
|
triangleCount,
|
|
145
146
|
vertexCount,
|
|
146
|
-
...(topology ? {
|
|
147
|
+
...(topology ? { shellCount, edgeCount } : {}),
|
|
147
148
|
});
|
|
148
149
|
}
|
|
149
|
-
/**
|
|
150
|
-
* Validates and measures a mesh in one position and one triangle traversal.
|
|
151
|
-
*
|
|
152
|
-
* Bounds, area in square model units and signed volume in cubic model units are computed without
|
|
153
|
-
* copying or changing the input buffers. Volume is meaningful for consistently wound closed
|
|
154
|
-
* geometry; `requireClosed` checks oriented edge closure. Optional indexed topology counts require
|
|
155
|
-
* every position vertex to be referenced and do not establish freedom from self-intersections.
|
|
156
|
-
* Results and nested bounds are immutable snapshots. Caller-owned mutable meshes are freshly
|
|
157
|
-
* inspected on every call, never cached.
|
|
158
|
-
*/
|
|
159
150
|
export function analyzeTriangleMesh(mesh, options = {}) {
|
|
160
151
|
return inspectTriangleMesh(mesh, options, "measure", options.includeTopology ?? false);
|
|
161
152
|
}
|
|
@@ -169,7 +160,7 @@ export function analyzeTriangleMesh(mesh, options = {}) {
|
|
|
169
160
|
* @param mesh - Mesh to inspect.
|
|
170
161
|
* @param options - Empty-mesh, topology, and tolerance policy.
|
|
171
162
|
* @returns The original mesh after successful validation.
|
|
172
|
-
* @throws
|
|
163
|
+
* @throws `GeometryError` When any requested invariant fails.
|
|
173
164
|
*/
|
|
174
165
|
export function validateTriangleMesh(mesh, options = {}) {
|
|
175
166
|
inspectTriangleMesh(mesh, options);
|
|
@@ -180,7 +171,7 @@ export function validateTriangleMesh(mesh, options = {}) {
|
|
|
180
171
|
*
|
|
181
172
|
* @param mesh - Mesh whose finite complete vertices will be measured.
|
|
182
173
|
* @returns Fresh immutable minimum and maximum XYZ tuples.
|
|
183
|
-
* @throws
|
|
174
|
+
* @throws `GeometryError` When the mesh is structurally invalid.
|
|
184
175
|
*/
|
|
185
176
|
export const meshBounds = (mesh) => {
|
|
186
177
|
return inspectTriangleMesh(mesh, {}, "bounds");
|
|
@@ -192,10 +183,10 @@ export const meshBounds = (mesh) => {
|
|
|
192
183
|
*
|
|
193
184
|
* @param meshes - One or more meshes to concatenate.
|
|
194
185
|
* @returns Fresh typed arrays with indices offset to their source vertex ranges.
|
|
195
|
-
* @throws
|
|
186
|
+
* @throws `GeometryError` When no mesh is supplied or an input is invalid.
|
|
196
187
|
*/
|
|
197
188
|
export function joinTriangleMeshes(meshes) {
|
|
198
|
-
const sources = meshes.map((
|
|
189
|
+
const sources = meshes.map((mesh) => immutableMeshView(mesh));
|
|
199
190
|
if (sources.length === 0) {
|
|
200
191
|
throw new GeometryError("INVALID_ARGUMENT", "Joining meshes requires at least one mesh.");
|
|
201
192
|
}
|
|
@@ -228,7 +219,7 @@ export function joinTriangleMeshes(meshes) {
|
|
|
228
219
|
* @returns Fresh position and index buffers; the input remains unchanged.
|
|
229
220
|
*/
|
|
230
221
|
export function reverseTriangleMesh(mesh) {
|
|
231
|
-
const source =
|
|
222
|
+
const source = immutableMeshView(mesh);
|
|
232
223
|
validateTriangleMesh(source);
|
|
233
224
|
const indices = new Uint32Array(source.indices);
|
|
234
225
|
for (let offset = 0; offset < indices.length; offset += 3) {
|
|
@@ -249,7 +240,7 @@ export function reverseTriangleMesh(mesh) {
|
|
|
249
240
|
* @returns A mesh with fresh transformed positions and copied or reversed indices.
|
|
250
241
|
*/
|
|
251
242
|
export function transformTriangleMesh(mesh, placement) {
|
|
252
|
-
const source =
|
|
243
|
+
const source = immutableMeshView(mesh);
|
|
253
244
|
validateTriangleMesh(source);
|
|
254
245
|
const transform = readTransformMatrix(placement, 3);
|
|
255
246
|
validateTransform3(transform);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Pure triangle mesh construction, processing, and inspection without a host engine. */
|
|
2
|
+
export { extrudeMesh as extrude, loftMesh as loft } from "./loft/loft.js";
|
|
3
|
+
export { revolveMesh as revolve } from "./revolve/revolve-mesh.js";
|
|
4
|
+
export { sweepMesh as sweep } from "./sweeps/sweep-mesh.js";
|
|
5
|
+
export { heightfieldMesh as heightfield, preflightHeightfield } from "./heightfield.js";
|
|
6
|
+
export { threadRidgeMesh as threadRidge, threadSolidMesh as threadSolid, } from "./mechanical/threads/mesh.js";
|
|
7
|
+
export { preflightThreadSolidMesh as preflightThreadSolid } from "./mechanical/threads/mesh-plan.js";
|
|
8
|
+
export { transformTriangleMesh as transform, joinTriangleMeshes as join, reverseTriangleMesh as reverse, meshBounds as bounds, analyzeTriangleMesh as analyze, validateTriangleMesh as validate, } from "./mesh/mesh.js";
|
|
9
|
+
export { computeTriangleMeshCentroid as centroid } from "./mesh/mesh-centroid.js";
|
|
10
|
+
export { analyzeTriangleMeshQuality as analyzeQuality } from "./mesh/mesh-quality.js";
|
|
11
|
+
export { computeTriangleMeshSignature as signature } from "./mesh/mesh-signature.js";
|
|
12
|
+
export { validateSolidMesh as validateSolid } from "./mesh/mesh-solid.js";
|
|
13
|
+
export { optimizePlanarPatches } from "./mesh/mesh-planar.js";
|
|
14
|
+
export { immutableMesh as immutable } from "./immutable-buffer.js";
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { edgeTreatmentPointCount, edgeTreatmentSetbacks, sampleEdgeTreatment, } from "./edge-finishing.js";
|
|
2
2
|
import { GeometryError } from "./errors.js";
|
|
3
|
+
import { vector3Data } from "./math/vector-value.js";
|
|
3
4
|
import { assertMeshAllocationWithinLimits, resolveModelingLimits } from "./model-limits.js";
|
|
4
5
|
import { resolveCircularPrimitiveSegments } from "./primitive-resolution.js";
|
|
5
6
|
/** @internal Face pairs define the twelve nominal box edges in deterministic order. */
|
|
@@ -87,13 +88,9 @@ export function resolveBoxPrimitive(options) {
|
|
|
87
88
|
operation,
|
|
88
89
|
});
|
|
89
90
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
operation,
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
const dimensions = typeof options.size === "number" ? [options.size, options.size, options.size] : options.size;
|
|
91
|
+
const dimensions = typeof options.size === "number"
|
|
92
|
+
? [options.size, options.size, options.size]
|
|
93
|
+
: vector3Data(options.size);
|
|
97
94
|
for (let axis = 0; axis < 3; axis += 1) {
|
|
98
95
|
assertPositivePrimitive(dimensions[axis], `size[${axis}]`, operation);
|
|
99
96
|
}
|
|
@@ -193,17 +190,48 @@ export function resolveBoxPrimitive(options) {
|
|
|
193
190
|
},
|
|
194
191
|
};
|
|
195
192
|
}
|
|
196
|
-
/** @internal
|
|
197
|
-
export function
|
|
193
|
+
/** @internal Resolves one complete radius or diameter pair before applying faceting compensation. */
|
|
194
|
+
export function resolveTubeRadii(options) {
|
|
198
195
|
assertPrimitiveOptions(options, "tube");
|
|
199
|
-
|
|
200
|
-
|
|
196
|
+
const radii = options.innerRadius !== undefined || options.outerRadius !== undefined;
|
|
197
|
+
const diameters = options.innerDiameter !== undefined || options.outerDiameter !== undefined;
|
|
198
|
+
if (radii === diameters)
|
|
199
|
+
throw new GeometryError("INVALID_ARGUMENT", "Supply one complete radius or diameter pair.", {
|
|
200
|
+
operation: "tube",
|
|
201
|
+
});
|
|
202
|
+
const innerRadius = radii ? options.innerRadius : options.innerDiameter / 2;
|
|
203
|
+
const outerRadius = radii ? options.outerRadius : options.outerDiameter / 2;
|
|
204
|
+
assertPositivePrimitive(innerRadius, "innerRadius", "tube");
|
|
205
|
+
assertPositivePrimitive(outerRadius, "outerRadius", "tube");
|
|
206
|
+
if (!(outerRadius > innerRadius))
|
|
207
|
+
throw new GeometryError("INVALID_ARGUMENT", "Outer size must be larger than inner size.", {
|
|
208
|
+
operation: "tube",
|
|
209
|
+
});
|
|
210
|
+
return { innerRadius, outerRadius };
|
|
211
|
+
}
|
|
212
|
+
/** @internal Resolves shared faceting so compensated inner and outer rings retain a positive wall. */
|
|
213
|
+
export function resolveTubePrimitive(options) {
|
|
214
|
+
const { innerRadius, outerRadius } = resolveTubeRadii(options);
|
|
201
215
|
assertPositivePrimitive(options.height, "height", "tube");
|
|
202
|
-
if (
|
|
203
|
-
throw new GeometryError("INVALID_ARGUMENT", "
|
|
216
|
+
if (options.center !== undefined && typeof options.center !== "boolean")
|
|
217
|
+
throw new GeometryError("INVALID_ARGUMENT", "center must be boolean when supplied.", {
|
|
204
218
|
operation: "tube",
|
|
205
219
|
});
|
|
206
|
-
|
|
220
|
+
const sizing = (value) => {
|
|
221
|
+
if (value !== undefined && value !== "vertex" && value !== "face")
|
|
222
|
+
throw new GeometryError("INVALID_ARGUMENT", "Tube sizing must be vertex or face.", {
|
|
223
|
+
operation: "tube",
|
|
224
|
+
});
|
|
225
|
+
return value ?? "vertex";
|
|
226
|
+
};
|
|
227
|
+
const innerSizing = sizing(options.innerSizing), outerSizing = sizing(options.outerSizing);
|
|
228
|
+
const segments = Math.max(resolveCircularPrimitiveSegments(innerRadius, { ...options, sizing: innerSizing }, "tube"), resolveCircularPrimitiveSegments(outerRadius, { ...options, sizing: outerSizing }, "tube"));
|
|
229
|
+
const cosine = Math.cos(Math.PI / segments);
|
|
230
|
+
const innerVertexRadius = innerSizing === "face" ? innerRadius / cosine : innerRadius;
|
|
231
|
+
const outerVertexRadius = outerSizing === "face" ? outerRadius / cosine : outerRadius;
|
|
232
|
+
if (!Number.isFinite(outerVertexRadius) || !(outerVertexRadius > innerVertexRadius))
|
|
233
|
+
throw new GeometryError("INVALID_ARGUMENT", "Tube sizing and sampling must leave a finite positive wall.", { operation: "tube" });
|
|
234
|
+
return { innerVertexRadius, outerVertexRadius, segments };
|
|
207
235
|
}
|
|
208
236
|
/** @internal Resolves sphere sampling shared by compiled and authored adapters. */
|
|
209
237
|
export function resolveSpherePrimitive(options) {
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { resolveCircularSampling } from "../../circular-sampling.js";
|
|
2
|
+
import { requireProfileVertexCount } from "../validation.js";
|
|
3
|
+
/**
|
|
4
|
+
* Creates an immutable centered CCW circle with +X seam and vertex or face radial sizing.
|
|
5
|
+
*
|
|
6
|
+
* @example Explicit circular point data
|
|
7
|
+
* ```ts
|
|
8
|
+
* circleContour({ diameter: 20, segments: 32 });
|
|
9
|
+
* ```
|
|
10
|
+
*/
|
|
11
|
+
export const circleContour = (options) => {
|
|
12
|
+
const operation = "circleContour";
|
|
13
|
+
const { segments, vertexRadius } = resolveCircularSampling(options);
|
|
14
|
+
requireProfileVertexCount(segments, 3, operation, options.limits);
|
|
15
|
+
return Object.freeze(Array.from({ length: segments }, (_, index) => {
|
|
16
|
+
const angle = (Math.PI * 2 * index) / segments;
|
|
17
|
+
return Object.freeze([vertexRadius * Math.cos(angle), vertexRadius * Math.sin(angle)]);
|
|
18
|
+
}));
|
|
19
|
+
};
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { GeometryError } from "
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { GeometryError } from "../../errors.js";
|
|
2
|
+
import { vector2Data } from "../../math/vector-value.js";
|
|
3
|
+
import { resolveCircularPrimitiveSegments } from "../../primitive-resolution.js";
|
|
4
|
+
import { assertPrimitiveOptions } from "../../primitive-resolvers.js";
|
|
5
|
+
import { requireFiniteProfileValues, requireProfileVertexCount } from "../validation.js";
|
|
5
6
|
/**
|
|
6
7
|
* Creates an immutable centered CCW ellipse with +X seam within the selected sampling ceiling.
|
|
7
8
|
*
|
|
@@ -17,12 +18,7 @@ export function ellipseContour(options) {
|
|
|
17
18
|
operation: "ellipseContour",
|
|
18
19
|
});
|
|
19
20
|
}
|
|
20
|
-
const dimensions = options.radius ?? options.size;
|
|
21
|
-
if (!Array.isArray(dimensions) || dimensions.length !== 2) {
|
|
22
|
-
throw new GeometryError("INVALID_ARGUMENT", "Ellipse dimensions must be an exact XY tuple.", {
|
|
23
|
-
operation: "ellipseContour",
|
|
24
|
-
});
|
|
25
|
-
}
|
|
21
|
+
const dimensions = vector2Data(options.radius ?? options.size);
|
|
26
22
|
const factor = options.radius === undefined ? 0.5 : 1;
|
|
27
23
|
const radiusX = dimensions[0] * factor;
|
|
28
24
|
const radiusY = dimensions[1] * factor;
|
|
@@ -1,22 +1,20 @@
|
|
|
1
|
-
import { edgeTreatmentPointCount, edgeTreatmentSetbacks, sampleEdgeTreatment, } from "
|
|
2
|
-
import { GeometryError } from "
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
1
|
+
import { edgeTreatmentPointCount, edgeTreatmentSetbacks, sampleEdgeTreatment, } from "../../edge-finishing.js";
|
|
2
|
+
import { GeometryError } from "../../errors.js";
|
|
3
|
+
import { vector2Data } from "../../math/vector-value.js";
|
|
4
|
+
import { resolveModelingLimits } from "../../model-limits.js";
|
|
5
|
+
import { assertPrimitiveOptions } from "../../primitive-resolvers.js";
|
|
6
|
+
import { resolveAlignedCircularSegments } from "../../resolution.js";
|
|
7
|
+
import { assertSamplingCount } from "../../sampling-limits.js";
|
|
8
|
+
import { requireFiniteProfileValues, requireProfileVertexCount } from "../validation.js";
|
|
8
9
|
const fail = (operation, message) => {
|
|
9
10
|
throw new GeometryError("INVALID_ARGUMENT", message, { operation });
|
|
10
11
|
};
|
|
11
12
|
/** @internal Validates the shared rectangle family before native or pure allocation. */
|
|
12
13
|
export function resolveRectangle(options, operation) {
|
|
13
14
|
assertPrimitiveOptions(options, operation);
|
|
14
|
-
if (typeof options.size !== "number" &&
|
|
15
|
-
(!Array.isArray(options.size) || options.size.length !== 2))
|
|
16
|
-
fail(operation, "size must be a number or an exact XY tuple.");
|
|
17
15
|
if (options.center !== undefined && typeof options.center !== "boolean")
|
|
18
16
|
fail(operation, "center must be boolean.");
|
|
19
|
-
const [width, height] = typeof options.size === "number" ? [options.size, options.size] : options.size;
|
|
17
|
+
const [width, height] = typeof options.size === "number" ? [options.size, options.size] : vector2Data(options.size);
|
|
20
18
|
requireFiniteProfileValues([width, height], operation);
|
|
21
19
|
if (!(width > 0) || !(height > 0))
|
|
22
20
|
fail(operation, "Rectangle dimensions must be positive.");
|
|
@@ -79,7 +77,11 @@ export function rectangleCornerSegments(corner, limits) {
|
|
|
79
77
|
}) / 4);
|
|
80
78
|
}
|
|
81
79
|
/**
|
|
82
|
-
* Creates an immutable sampled CCW rectangle boundary.
|
|
80
|
+
* Creates an immutable sampled CCW rectangle boundary.
|
|
81
|
+
*
|
|
82
|
+
* @remarks
|
|
83
|
+
* A zero round radius leaves square corners. When rounded corners meet, their shared endpoints
|
|
84
|
+
* appear once.
|
|
83
85
|
*
|
|
84
86
|
* Use [rectangle](/docs/reference/model/rectangle) for a filled Section.
|
|
85
87
|
*
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { GeometryError } from "../../errors.js";
|
|
2
|
+
import { requireFiniteProfileValues, requireProfileVertexCount } from "../validation.js";
|
|
3
|
+
/**
|
|
4
|
+
* Creates an immutable centered CCW point loop with vertex or face radial sizing and an implicit seam.
|
|
5
|
+
*
|
|
6
|
+
* @example Hexagon sized to its faces
|
|
7
|
+
* ```ts
|
|
8
|
+
* regularPolygonContour({ radius: 10, sides: 6, sizing: "face" });
|
|
9
|
+
* ```
|
|
10
|
+
*/
|
|
11
|
+
export const regularPolygonContour = (options) => {
|
|
12
|
+
const operation = "regularPolygonContour";
|
|
13
|
+
const { radius, sides, rotation = 0, sizing = "vertex" } = options;
|
|
14
|
+
requireFiniteProfileValues([radius, rotation], operation);
|
|
15
|
+
if (!(radius > 0)) {
|
|
16
|
+
throw new GeometryError("INVALID_ARGUMENT", "Polygon radius must be positive.", { operation });
|
|
17
|
+
}
|
|
18
|
+
requireProfileVertexCount(sides, 3, operation, options.limits);
|
|
19
|
+
if (sizing !== "vertex" && sizing !== "face")
|
|
20
|
+
throw new GeometryError("INVALID_ARGUMENT", "Polygon sizing must be vertex or face.", {
|
|
21
|
+
operation,
|
|
22
|
+
});
|
|
23
|
+
const sampledRadius = sizing === "face" ? radius / Math.cos(Math.PI / sides) : radius;
|
|
24
|
+
requireFiniteProfileValues([sampledRadius], operation);
|
|
25
|
+
const rotationRadians = ((rotation % 360) * Math.PI) / 180;
|
|
26
|
+
return Object.freeze(Array.from({ length: sides }, (_, index) => {
|
|
27
|
+
const angle = rotationRadians + (Math.PI * 2 * index) / sides;
|
|
28
|
+
return Object.freeze([
|
|
29
|
+
sampledRadius * Math.cos(angle),
|
|
30
|
+
sampledRadius * Math.sin(angle),
|
|
31
|
+
]);
|
|
32
|
+
}));
|
|
33
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { GeometryError } from "../../errors.js";
|
|
2
|
+
import { assertPrimitiveOptions } from "../../primitive-resolvers.js";
|
|
3
|
+
import { requireFiniteProfileValues, requireProfileVertexCount } from "../validation.js";
|
|
4
|
+
/**
|
|
5
|
+
* Creates an immutable centered CCW alternating-radius star within the selected profile sampling ceiling.
|
|
6
|
+
*
|
|
7
|
+
* @example Five-point outline
|
|
8
|
+
* ```ts
|
|
9
|
+
* starContour({ outerRadius: 12, innerRadius: 6, points: 5 });
|
|
10
|
+
* ```
|
|
11
|
+
*/
|
|
12
|
+
export const starContour = (options) => {
|
|
13
|
+
const operation = "starContour";
|
|
14
|
+
assertPrimitiveOptions(options, operation);
|
|
15
|
+
const { outerRadius, innerRadius, points, rotation = 0, limits } = options;
|
|
16
|
+
requireFiniteProfileValues([outerRadius, innerRadius, rotation], operation);
|
|
17
|
+
if (!(outerRadius > 0) || !(innerRadius > 0) || innerRadius >= outerRadius) {
|
|
18
|
+
throw new GeometryError("INVALID_ARGUMENT", "Star radii must be positive, with the inner radius smaller than the outer.", { operation });
|
|
19
|
+
}
|
|
20
|
+
requireProfileVertexCount(points, 3, operation, limits);
|
|
21
|
+
requireProfileVertexCount(points * 2, 6, operation, limits);
|
|
22
|
+
const rotationRadians = ((rotation % 360) * Math.PI) / 180;
|
|
23
|
+
return Object.freeze(Array.from({ length: points * 2 }, (_, index) => {
|
|
24
|
+
const radius = index % 2 === 0 ? outerRadius : innerRadius;
|
|
25
|
+
const angle = (Math.PI * index) / points + rotationRadians;
|
|
26
|
+
return Object.freeze([radius * Math.cos(angle), radius * Math.sin(angle)]);
|
|
27
|
+
}));
|
|
28
|
+
};
|
|
@@ -26,7 +26,7 @@ const AXIS_EPSILON = 1e-10;
|
|
|
26
26
|
* @example Partial revolution with end caps
|
|
27
27
|
* ```ts
|
|
28
28
|
* // Each point is [radius, Z]; the profile seam is implicit.
|
|
29
|
-
*
|
|
29
|
+
* mesh.revolve([[0, 0], [12, 0], [8, 20], [0, 20]], { degrees: 270 });
|
|
30
30
|
* ```
|
|
31
31
|
*/
|
|
32
32
|
export const revolveMesh = (input, options = {}) => {
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { SaxesParser } from "saxes";
|
|
2
2
|
import { SVGPathData } from "svg-pathdata";
|
|
3
|
-
import { bounds2 } from "
|
|
4
|
-
import { fitBounds } from "
|
|
5
|
-
import { GeometryError } from "
|
|
6
|
-
import { regionArea, signedContourArea } from "
|
|
7
|
-
import { resolveCircularSegments, resolveGeometryResolution, } from "
|
|
8
|
-
import { resolveGeometrySamplingLimits } from "
|
|
9
|
-
import { strokePathMultiPolygon } from "
|
|
10
|
-
import { createBoundedSvgClipping } from "./
|
|
11
|
-
import { inverseMatrix, multiplyMatrices as multiply, transformPoint } from "./
|
|
12
|
-
import { flattenSvgSubpaths, SvgVertexBudget } from "./
|
|
3
|
+
import { bounds2 } from "../bounds-value.js";
|
|
4
|
+
import { fitBounds } from "../bounds.js";
|
|
5
|
+
import { GeometryError } from "../errors.js";
|
|
6
|
+
import { regionArea, signedContourArea } from "../regions.js";
|
|
7
|
+
import { resolveCircularSegments, resolveGeometryResolution, } from "../resolution.js";
|
|
8
|
+
import { resolveGeometrySamplingLimits } from "../sampling-limits.js";
|
|
9
|
+
import { strokePathMultiPolygon } from "../stroke-path.js";
|
|
10
|
+
import { createBoundedSvgClipping } from "./fill.js";
|
|
11
|
+
import { inverseMatrix, multiplyMatrices as multiply, transformPoint } from "./matrix.js";
|
|
12
|
+
import { flattenSvgSubpaths, SvgVertexBudget } from "./path.js";
|
|
13
13
|
const MAX_SVG_BYTES = 256 * 1024;
|
|
14
14
|
const MAX_SVG_ELEMENTS = 500;
|
|
15
15
|
const MAX_SVG_NESTING_DEPTH = 64;
|
|
@@ -10,7 +10,7 @@ import { buildOpenSweepMesh } from "./sweep-open.js";
|
|
|
10
10
|
* @example Sweep point data along a bent path
|
|
11
11
|
* ```ts
|
|
12
12
|
* const profile = rectangleContour({ size: [6, 3] });
|
|
13
|
-
*
|
|
13
|
+
* mesh.sweep(profile, [[0, 0, 0], [0, 0, 15], [10, 0, 25]], {
|
|
14
14
|
* orientation: { kind: "transport", initialNormal: [0, 1, 0] },
|
|
15
15
|
* });
|
|
16
16
|
* ```
|
|
@@ -59,6 +59,35 @@ export function validateTransform3(transform, tolerance = {}) {
|
|
|
59
59
|
}
|
|
60
60
|
return transform;
|
|
61
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Validates a proper rigid transform: finite translation and a right-handed orthonormal rotation.
|
|
64
|
+
* Scale, shear, reflection, and perspective are rejected within the default angular tolerance.
|
|
65
|
+
* Returns the original row-major 4x4 matrix without copying or normalizing it.
|
|
66
|
+
*
|
|
67
|
+
* @throws {@link GeometryError} For a malformed, non-finite, or non-rigid matrix.
|
|
68
|
+
*/
|
|
69
|
+
export function validateRigidTransform3(transform) {
|
|
70
|
+
if (!Array.isArray(transform) || transform.length !== 16)
|
|
71
|
+
throw new GeometryError("INVALID_ARGUMENT", "Rigid transforms require sixteen matrix entries.");
|
|
72
|
+
for (let index = 0; index < 16; index++) {
|
|
73
|
+
if (!Object.hasOwn(transform, index) || !Number.isFinite(transform[index]))
|
|
74
|
+
throw new GeometryError("NON_FINITE_VALUE", "Rigid transforms require sixteen finite values.");
|
|
75
|
+
}
|
|
76
|
+
validateTransform3(transform);
|
|
77
|
+
const tolerance = resolveGeometryTolerance().angular;
|
|
78
|
+
for (let row = 0; row < 3; row++) {
|
|
79
|
+
for (let other = row; other < 3; other++) {
|
|
80
|
+
let product = 0;
|
|
81
|
+
for (let column = 0; column < 3; column++)
|
|
82
|
+
product += transform[row * 4 + column] * transform[other * 4 + column];
|
|
83
|
+
if (Math.abs(product - (row === other ? 1 : 0)) > tolerance)
|
|
84
|
+
throw new GeometryError("INVALID_ARGUMENT", "Rigid placement permits only translation and rotation; scale and shear are not supported.");
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (Math.abs(transformDeterminant3(transform) - 1) > tolerance)
|
|
88
|
+
throw new GeometryError("INVALID_ARGUMENT", "Rigid placement does not support reflection.");
|
|
89
|
+
return transform;
|
|
90
|
+
}
|
|
62
91
|
/**
|
|
63
92
|
* Creates an immutable translation transform.
|
|
64
93
|
*
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/** Immutable modeling recipes and math values; the host owns geometry evaluation. @packageDocumentation */
|
|
2
|
+
export { GeometryError, isGeometryError, } from "./geometry/errors.js";
|
|
2
3
|
export { bounds2, bounds3, } from "./geometry/bounds-value.js";
|
|
3
4
|
export { transform2, transform3, } from "./geometry/transform-value.js";
|
|
4
5
|
export { vector2, vector3, } from "./geometry/math/vector-value.js";
|
|
5
6
|
export { path2, path3, } from "./geometry/paths/path-value.js";
|
|
6
7
|
export * from "./model/operations.js";
|
|
7
8
|
export * from "./model/generation.js";
|
|
8
|
-
export { immutableBuffer
|
|
9
|
+
export { immutableBuffer } from "./geometry/immutable-buffer.js";
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** Captures a bounded relative field location without reading array accessors. */
|
|
2
|
+
export function captureDiagnosticPath(path) {
|
|
3
|
+
if (path === undefined)
|
|
4
|
+
return undefined;
|
|
5
|
+
const invalid = () => {
|
|
6
|
+
throw new TypeError("Diagnostic path must contain at most 32 field names or nonnegative safe indices; field names need 1–120 characters.");
|
|
7
|
+
};
|
|
8
|
+
if (!Array.isArray(path) || path.length > 32 || Reflect.ownKeys(path).length !== path.length + 1)
|
|
9
|
+
invalid();
|
|
10
|
+
const captured = [];
|
|
11
|
+
for (let index = 0; index < path.length; index++) {
|
|
12
|
+
const field = Object.getOwnPropertyDescriptor(path, String(index));
|
|
13
|
+
if (field === undefined || !("value" in field))
|
|
14
|
+
return invalid();
|
|
15
|
+
const segment = field.value;
|
|
16
|
+
if (typeof segment === "string"
|
|
17
|
+
? segment.length === 0 || segment.length > 120
|
|
18
|
+
: typeof segment !== "number" ||
|
|
19
|
+
!Number.isSafeInteger(segment) ||
|
|
20
|
+
segment < 0 ||
|
|
21
|
+
Object.is(segment, -0))
|
|
22
|
+
invalid();
|
|
23
|
+
captured.push(segment);
|
|
24
|
+
}
|
|
25
|
+
return Object.freeze(captured);
|
|
26
|
+
}
|
|
@@ -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/11");
|
|
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: 11, context };
|
|
14
14
|
try {
|
|
15
15
|
return build();
|
|
16
16
|
}
|
|
@@ -31,5 +31,5 @@ export function currentModelContext(operation) {
|
|
|
31
31
|
/** Reads an optional binding without initializing an engine or creating ambient authoring state. */
|
|
32
32
|
export function activeModelContext() {
|
|
33
33
|
const binding = bindings[executionKey];
|
|
34
|
-
return binding?.version ===
|
|
34
|
+
return binding?.version === 11 ? binding.context : undefined;
|
|
35
35
|
}
|
package/dist/model/generation.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { captureDiagnosticPath } from "./diagnostic-path.js";
|
|
1
2
|
/** A user-correctable assertion failure. Successful computation caches never retain failures. */
|
|
2
3
|
export class GenerationError extends Error {
|
|
3
4
|
/** Issues reached in normal JavaScript order, ending with the first failed assertion. */
|
|
@@ -6,11 +7,16 @@ export class GenerationError extends Error {
|
|
|
6
7
|
constructor(diagnostics) {
|
|
7
8
|
super(diagnostics.at(-1)?.message ?? "Generation failed.");
|
|
8
9
|
this.name = "GenerationError";
|
|
9
|
-
this.diagnostics = Object.freeze(diagnostics.map((issue) => Object.freeze({
|
|
10
|
+
this.diagnostics = Object.freeze(diagnostics.map((issue) => Object.freeze({
|
|
11
|
+
...issue,
|
|
12
|
+
...(issue.path === undefined ? {} : { path: captureDiagnosticPath(issue.path) }),
|
|
13
|
+
})));
|
|
10
14
|
}
|
|
11
15
|
}
|
|
12
16
|
/**
|
|
13
|
-
* Defines a typed model without executing it.
|
|
17
|
+
* Defines a typed model without executing it. Parameters are an object map of capturable data;
|
|
18
|
+
* runtime capture rejects arrays at the root, ordinary class instances, mutable buffers, and functions.
|
|
19
|
+
* Supply live capabilities through services. Use `computed` only for work worth reusing.
|
|
14
20
|
*
|
|
15
21
|
* @example A simple model
|
|
16
22
|
* ```ts
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createSectionHandle, createSolidHandle } from "./shape-handles.js";
|
|
2
2
|
// One realm protocol lets bundled authoring code declare recipes before a host is initialized.
|
|
3
3
|
// The payload contains no native handles and the engine remains responsible for realization.
|
|
4
|
-
const recipeKey = Symbol.for("@metamesh/modeling/recipe/
|
|
4
|
+
const recipeKey = Symbol.for("@metamesh/modeling/recipe/10");
|
|
5
5
|
/** Reads private recipe metadata without requiring an execution context. */
|
|
6
6
|
export const geometryRecipe = (value) => Object.getOwnPropertyDescriptor(value, recipeKey)?.value;
|
|
7
7
|
/** Recognizes only opaque recipe handles issued by this engine. */
|