@metamesh/modeling 0.15.0 → 0.16.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 +19 -0
- package/README.md +33 -6
- package/dist/api/engine.d.ts +4 -3
- package/dist/api/geometry.d.ts +529 -242
- package/dist/api/index.d.ts +363 -104
- package/dist/api/text.d.ts +6 -6
- package/dist/docs/guides/concepts.md +295 -106
- package/dist/docs/guides/fonts.md +9 -8
- package/dist/docs/guides/fundamentals.md +17 -21
- package/dist/docs/guides/generation.md +24 -23
- package/dist/docs/guides/hosting.md +25 -20
- package/dist/docs/guides/recipes.md +35 -30
- package/dist/docs/guides/standalone-model.md +42 -0
- package/dist/docs/manifest.json +846 -243
- package/dist/docs/reference/engine/Export3mfOptions.md +1 -1
- package/dist/docs/reference/engine/ExportMeshPart.md +1 -1
- package/dist/docs/reference/engine/GenerationOptions.md +1 -1
- package/dist/docs/reference/engine/GeometryResource.md +1 -1
- package/dist/docs/reference/engine/ModelDependencies.md +1 -1
- package/dist/docs/reference/engine/ModelEngine.md +1 -1
- package/dist/docs/reference/engine/ModelEngineOptions.md +1 -1
- package/dist/docs/reference/engine/ModelSession.md +1 -1
- package/dist/docs/reference/engine/ModelSnapshot.md +2 -2
- package/dist/docs/reference/engine/SessionOptions.md +1 -1
- package/dist/docs/reference/engine/SnapshotPart.md +7 -4
- package/dist/docs/reference/engine/categories/host-lifecycle.md +8 -3
- package/dist/docs/reference/engine/createModelEngine.md +1 -1
- package/dist/docs/reference/engine/defaultModelingLimits.md +1 -1
- package/dist/docs/reference/engine/modelingWasmUrl.md +1 -1
- package/dist/docs/reference/engine/validateModel.md +1 -1
- package/dist/docs/reference/engine.md +6 -2
- package/dist/docs/reference/geometry/AcmeThreadProfileSpec.md +5 -1
- package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +1 -1
- package/dist/docs/reference/geometry/Anchor3-type.md +6 -5
- package/dist/docs/reference/geometry/ArcCurve2.md +7 -3
- package/dist/docs/reference/geometry/ArcCurve3.md +9 -5
- package/dist/docs/reference/geometry/AttachOptions.md +2 -1
- package/dist/docs/reference/geometry/AxisAngleRotation3.md +2 -1
- package/dist/docs/reference/geometry/Bounds2-type.md +127 -0
- package/dist/docs/reference/geometry/Bounds2Data.md +45 -0
- package/dist/docs/reference/geometry/Bounds2Input.md +21 -0
- package/dist/docs/reference/geometry/Bounds3-type.md +127 -0
- package/dist/docs/reference/geometry/Bounds3Data.md +45 -0
- package/dist/docs/reference/geometry/Bounds3Input.md +21 -0
- package/dist/docs/reference/geometry/BoundsFit2.md +6 -5
- package/dist/docs/reference/geometry/BoundsFit3.md +6 -5
- package/dist/docs/reference/geometry/BoundsFitOptions.md +2 -1
- package/dist/docs/reference/geometry/BoundsFromSizeOptions.md +2 -1
- package/dist/docs/reference/geometry/BoxAnchorFace.md +2 -1
- package/dist/docs/reference/geometry/BoxAnchorOptions.md +5 -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 +8 -1
- package/dist/docs/reference/geometry/ButtressThreadProfileSpec.md +5 -1
- package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +1 -1
- package/dist/docs/reference/geometry/CircleContourOptions.md +5 -1
- package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +1 -1
- package/dist/docs/reference/geometry/CircularResolutionOptions.md +1 -1
- package/dist/docs/reference/geometry/ClearanceHoleDimensions.md +6 -1
- package/dist/docs/reference/geometry/ClearanceHoleFit.md +8 -1
- package/dist/docs/reference/geometry/CompensatedThreadDiameters.md +6 -1
- package/dist/docs/reference/geometry/Contour.md +10 -4
- package/dist/docs/reference/geometry/ContourCurve.md +5 -1
- package/dist/docs/reference/geometry/ContourPoint.md +6 -1
- package/dist/docs/reference/geometry/ContourSegment.md +5 -1
- package/dist/docs/reference/geometry/CorrespondingComponent.md +5 -1
- package/dist/docs/reference/geometry/CorrespondingContour.md +5 -1
- package/dist/docs/reference/geometry/CorrespondingProfile.md +5 -1
- package/dist/docs/reference/geometry/CorrespondingProfileStation.md +5 -1
- package/dist/docs/reference/geometry/CubicBezierCurve2.md +10 -6
- package/dist/docs/reference/geometry/CubicBezierCurve3.md +10 -6
- package/dist/docs/reference/geometry/Curve2.md +5 -1
- package/dist/docs/reference/geometry/Curve3.md +5 -1
- package/dist/docs/reference/geometry/CurveSamplingOptions.md +5 -1
- package/dist/docs/reference/geometry/CustomThreadProfileSpec.md +7 -3
- package/dist/docs/reference/geometry/CylinderAnchorFace.md +2 -1
- package/dist/docs/reference/geometry/CylinderAnchorOptions.md +4 -3
- package/dist/docs/reference/geometry/CylinderOptions.md +1 -1
- package/dist/docs/reference/geometry/CylindricalGearDimensions.md +6 -1
- package/dist/docs/reference/geometry/CylindricalGearMeshKind.md +8 -1
- package/dist/docs/reference/geometry/CylindricalGearOutlineOptions.md +5 -1
- package/dist/docs/reference/geometry/CylindricalGearPairDimensions.md +5 -1
- package/dist/docs/reference/geometry/CylindricalGearPairMotionOptions.md +5 -1
- package/dist/docs/reference/geometry/CylindricalGearPairMotionReport.md +6 -1
- package/dist/docs/reference/geometry/CylindricalGearPairSpec.md +5 -1
- package/dist/docs/reference/geometry/CylindricalGearSpec.md +6 -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 +7 -3
- package/dist/docs/reference/geometry/EndTreatments.md +1 -1
- package/dist/docs/reference/geometry/ExtrudeOptions.md +5 -1
- package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +5 -1
- package/dist/docs/reference/geometry/FittedTextLayout.md +7 -3
- package/dist/docs/reference/geometry/Frame3.md +10 -6
- 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 +5 -1
- package/dist/docs/reference/geometry/GeometryToleranceOptions.md +1 -1
- package/dist/docs/reference/geometry/GridPatternOptions.md +4 -4
- package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +5 -1
- package/dist/docs/reference/geometry/HeightfieldOptions.md +9 -5
- package/dist/docs/reference/geometry/HeightfieldPreflight.md +9 -4
- package/dist/docs/reference/geometry/HelicalThreadRidgeMeshOptions.md +5 -1
- package/dist/docs/reference/geometry/HelicalThreadSolidMeshOptions.md +5 -1
- package/dist/docs/reference/geometry/HelicalThreadSolidMeshPreflight.md +7 -2
- package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +4 -3
- package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +5 -1
- package/dist/docs/reference/geometry/KnuckleHingeBaseSpec.md +82 -0
- package/dist/docs/reference/geometry/KnuckleHingeDimensions.md +148 -0
- package/dist/docs/reference/geometry/KnuckleHingeInterval.md +46 -0
- package/dist/docs/reference/geometry/KnuckleHingeSamplingOptions.md +51 -0
- package/dist/docs/reference/geometry/KnuckleHingeSpec.md +22 -0
- package/dist/docs/reference/geometry/LineCurve2.md +8 -4
- package/dist/docs/reference/geometry/LineCurve3.md +8 -4
- package/dist/docs/reference/geometry/LinearPatternOptions.md +1 -1
- package/dist/docs/reference/geometry/LoftCorrespondence.md +6 -1
- package/dist/docs/reference/geometry/LoftMeshStation.md +5 -1
- package/dist/docs/reference/geometry/LoftOptions.md +5 -1
- package/dist/docs/reference/geometry/LoftPlacement.md +5 -1
- package/dist/docs/reference/geometry/METRIC_FASTENER_STANDARDS.md +5 -1
- package/dist/docs/reference/geometry/MatchProfilesOptions.md +5 -1
- package/dist/docs/reference/geometry/MetricFastenerSize.md +9 -2
- package/dist/docs/reference/geometry/MetricFastenerStandard.md +5 -1
- package/dist/docs/reference/geometry/MetricHexNutDimensions.md +6 -1
- package/dist/docs/reference/geometry/MetricSocketCapHeadDimensions.md +6 -1
- package/dist/docs/reference/geometry/ModelingLimits.md +1 -1
- package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +5 -1
- package/dist/docs/reference/geometry/Path2-type.md +12 -8
- package/dist/docs/reference/geometry/Path2Data.md +40 -4
- package/dist/docs/reference/geometry/Path2Input.md +8 -3
- package/dist/docs/reference/geometry/Path3-type.md +12 -8
- package/dist/docs/reference/geometry/Path3Data.md +40 -4
- package/dist/docs/reference/geometry/Path3Input.md +8 -3
- package/dist/docs/reference/geometry/PathFrame.md +9 -5
- package/dist/docs/reference/geometry/PathLocation.md +5 -1
- package/dist/docs/reference/geometry/PathNormalGuide.md +8 -4
- package/dist/docs/reference/geometry/PathOptions.md +5 -1
- package/dist/docs/reference/geometry/PathPatternOptions.md +1 -1
- package/dist/docs/reference/geometry/PathPlacement.md +8 -4
- package/dist/docs/reference/geometry/PathResamplingOptions.md +5 -1
- package/dist/docs/reference/geometry/Pivot2Options.md +2 -1
- package/dist/docs/reference/geometry/Pivot3Options.md +2 -1
- package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +8 -1
- package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +5 -1
- package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +5 -1
- package/dist/docs/reference/geometry/PlanarPatchQuality.md +7 -3
- package/dist/docs/reference/geometry/PolygonData.md +7 -2
- package/dist/docs/reference/geometry/PolylineResamplingOptions.md +5 -1
- package/dist/docs/reference/geometry/PrimitiveAttachment.md +1 -1
- package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +1 -1
- package/dist/docs/reference/geometry/PrintableThreadFit.md +8 -1
- package/dist/docs/reference/geometry/PrintableThreadFitPolicy.md +6 -1
- package/dist/docs/reference/geometry/Profile.md +8 -2
- package/dist/docs/reference/geometry/ProfileComponent2.md +5 -1
- package/dist/docs/reference/geometry/ProfileContour2.md +8 -2
- package/dist/docs/reference/geometry/ProfileSpan2.md +7 -3
- package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +3 -3
- package/dist/docs/reference/geometry/RackPitchDimensions.md +6 -1
- package/dist/docs/reference/geometry/RackPitchSpec.md +6 -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 +7 -3
- package/dist/docs/reference/geometry/RectangleCornerTreatment.md +5 -1
- package/dist/docs/reference/geometry/RectangleCornerTreatments.md +5 -1
- package/dist/docs/reference/geometry/RectangleProfileOptions.md +7 -3
- package/dist/docs/reference/geometry/RegionData.md +6 -2
- package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +5 -1
- package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +1 -1
- package/dist/docs/reference/geometry/RevolveOptions.md +5 -1
- package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +1 -1
- package/dist/docs/reference/geometry/RowLayoutOptions.md +2 -1
- package/dist/docs/reference/geometry/SampleContourOptions.md +5 -1
- package/dist/docs/reference/geometry/SampleHelixOptions.md +5 -1
- package/dist/docs/reference/geometry/SampleSideProfileOptions.md +5 -1
- package/dist/docs/reference/geometry/SampledCurve2.md +8 -4
- package/dist/docs/reference/geometry/SampledCurve3.md +8 -4
- package/dist/docs/reference/geometry/SampledThreadHelices.md +7 -3
- package/dist/docs/reference/geometry/SideProfileCurve.md +5 -1
- package/dist/docs/reference/geometry/SideProfilePoint.md +6 -1
- package/dist/docs/reference/geometry/SideProfileSegment.md +5 -1
- package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +1 -1
- package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +5 -1
- package/dist/docs/reference/geometry/SphereOptions.md +1 -1
- package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +5 -1
- package/dist/docs/reference/geometry/StrokeCap.md +8 -1
- package/dist/docs/reference/geometry/StrokeJoin.md +8 -1
- package/dist/docs/reference/geometry/StrokeOptions.md +5 -1
- package/dist/docs/reference/geometry/SvgImportOptions.md +5 -1
- package/dist/docs/reference/geometry/SvgRegionPreflight.md +6 -2
- package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +7 -3
- package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +6 -1
- package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +6 -1
- package/dist/docs/reference/geometry/SweepOptions.md +5 -1
- package/dist/docs/reference/geometry/SweepOrientation.md +5 -1
- package/dist/docs/reference/geometry/ThreadBevelOptions.md +5 -1
- package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +5 -1
- package/dist/docs/reference/geometry/ThreadCompensationOptions.md +5 -1
- package/dist/docs/reference/geometry/ThreadEndStyle.md +8 -1
- package/dist/docs/reference/geometry/ThreadEndTreatmentOptions.md +5 -1
- package/dist/docs/reference/geometry/ThreadHandedness.md +8 -1
- package/dist/docs/reference/geometry/ThreadHelixOptions.md +5 -1
- package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +8 -1
- package/dist/docs/reference/geometry/ThreadLeadInShape.md +8 -1
- package/dist/docs/reference/geometry/ThreadProfile-type.md +7 -3
- package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +5 -1
- package/dist/docs/reference/geometry/ThreadProfileSpec.md +5 -1
- package/dist/docs/reference/geometry/ThreadRole.md +8 -1
- package/dist/docs/reference/geometry/ThreadedNutBevel.md +8 -1
- package/dist/docs/reference/geometry/ThreadedNutOptions.md +5 -1
- package/dist/docs/reference/geometry/ThreadedNutPreflight.md +7 -3
- package/dist/docs/reference/geometry/ThreadedNutShape.md +8 -1
- package/dist/docs/reference/geometry/ThreadedRodOptions.md +5 -1
- package/dist/docs/reference/geometry/TorusOptions.md +1 -1
- package/dist/docs/reference/geometry/Transform2-type.md +6 -5
- package/dist/docs/reference/geometry/Transform2Data.md +15 -0
- package/dist/docs/reference/geometry/Transform2Input.md +4 -3
- package/dist/docs/reference/geometry/Transform3-type.md +6 -5
- package/dist/docs/reference/geometry/Transform3Data.md +18 -0
- package/dist/docs/reference/geometry/Transform3Input.md +4 -3
- package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +5 -1
- package/dist/docs/reference/geometry/TriangleMesh.md +6 -1
- package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +7 -3
- package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +5 -1
- package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +7 -3
- package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +5 -1
- package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +5 -1
- package/dist/docs/reference/geometry/TriangleMeshSignature.md +7 -3
- package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +6 -1
- package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +6 -1
- package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +5 -1
- package/dist/docs/reference/geometry/TriangularThreadProfileSpec.md +5 -1
- package/dist/docs/reference/geometry/TubeOptions.md +1 -1
- package/dist/docs/reference/geometry/Vector2-type.md +6 -5
- package/dist/docs/reference/geometry/Vector2Data.md +15 -0
- package/dist/docs/reference/geometry/Vector2Input.md +4 -3
- package/dist/docs/reference/geometry/Vector3-type.md +6 -5
- package/dist/docs/reference/geometry/Vector3Data.md +15 -0
- package/dist/docs/reference/geometry/Vector3Input.md +4 -3
- package/dist/docs/reference/geometry/VectorTextArcBaseline.md +6 -1
- package/dist/docs/reference/geometry/VectorTextLayout.md +5 -1
- package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +5 -1
- package/dist/docs/reference/geometry/VectorTextMetrics.md +7 -3
- package/dist/docs/reference/geometry/VectorTextOptions.md +5 -1
- package/dist/docs/reference/geometry/add2.md +7 -6
- package/dist/docs/reference/geometry/add3.md +7 -6
- package/dist/docs/reference/geometry/analyzeTriangleMesh.md +5 -1
- package/dist/docs/reference/geometry/analyzeTriangleMeshQuality.md +5 -1
- package/dist/docs/reference/geometry/anchor3.md +2 -1
- package/dist/docs/reference/geometry/anchorFrame3.md +5 -1
- package/dist/docs/reference/geometry/applyTransformDirection3.md +8 -7
- package/dist/docs/reference/geometry/applyTransformPoint3.md +8 -7
- package/dist/docs/reference/geometry/attachmentTransform3.md +5 -4
- package/dist/docs/reference/geometry/bounds2.md +38 -0
- package/dist/docs/reference/geometry/bounds3.md +38 -0
- package/dist/docs/reference/geometry/boundsCenter.md +12 -11
- package/dist/docs/reference/geometry/boundsFromSize.md +12 -11
- package/dist/docs/reference/geometry/boundsSize.md +12 -11
- package/dist/docs/reference/geometry/boxAnchor3.md +4 -3
- package/dist/docs/reference/geometry/categories/bounds-layout.md +23 -6
- package/dist/docs/reference/geometry/categories/curves-paths.md +21 -9
- package/dist/docs/reference/geometry/categories/mechanical.md +22 -10
- package/dist/docs/reference/geometry/categories/meshes.md +16 -7
- package/dist/docs/reference/geometry/categories/pattern-placement.md +6 -4
- package/dist/docs/reference/geometry/categories/primitive-options.md +8 -2
- package/dist/docs/reference/geometry/categories/profiles-regions.md +21 -12
- package/dist/docs/reference/geometry/categories/resolution-errors.md +5 -3
- package/dist/docs/reference/geometry/categories/transforms-math.md +21 -12
- package/dist/docs/reference/geometry/categories/vector-import.md +11 -5
- package/dist/docs/reference/geometry/circleContour.md +5 -1
- package/dist/docs/reference/geometry/closeToAxis.md +14 -5
- package/dist/docs/reference/geometry/compensateThreadDiameters.md +5 -1
- package/dist/docs/reference/geometry/compensateThreadProfileAxially.md +5 -1
- package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +5 -1
- package/dist/docs/reference/geometry/composeTransform3.md +7 -6
- package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +5 -1
- package/dist/docs/reference/geometry/computeParallelTransportFrames.md +11 -2
- package/dist/docs/reference/geometry/computeTriangleMeshCentroid.md +13 -5
- package/dist/docs/reference/geometry/computeTriangleMeshSignature.md +5 -1
- package/dist/docs/reference/geometry/containsBounds.md +10 -9
- package/dist/docs/reference/geometry/contourContainsPoint.md +8 -4
- package/dist/docs/reference/geometry/cross2.md +6 -5
- package/dist/docs/reference/geometry/cross3.md +7 -6
- package/dist/docs/reference/geometry/cylinderAnchor3.md +3 -2
- package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +5 -1
- package/dist/docs/reference/geometry/distance2.md +6 -5
- package/dist/docs/reference/geometry/distance3.md +6 -5
- package/dist/docs/reference/geometry/distributeAlongPath.md +5 -1
- package/dist/docs/reference/geometry/dot2.md +6 -5
- package/dist/docs/reference/geometry/dot3.md +6 -5
- package/dist/docs/reference/geometry/ellipseContour.md +5 -1
- package/dist/docs/reference/geometry/eulerTransform3.md +7 -6
- package/dist/docs/reference/geometry/extrudeMesh.md +5 -1
- package/dist/docs/reference/geometry/fitBounds.md +10 -9
- package/dist/docs/reference/geometry/fitTextLayout.md +13 -5
- package/dist/docs/reference/geometry/frameTransform3.md +5 -4
- package/dist/docs/reference/geometry/getMetricClearanceHoleDiameter.md +5 -1
- package/dist/docs/reference/geometry/getMetricFastenerStandard.md +5 -1
- package/dist/docs/reference/geometry/gridPatternTransforms.md +4 -4
- package/dist/docs/reference/geometry/heightfieldMesh.md +11 -2
- package/dist/docs/reference/geometry/helicalThreadRidgeMesh.md +5 -1
- package/dist/docs/reference/geometry/helicalThreadSolidMesh.md +5 -1
- package/dist/docs/reference/geometry/inverseTransform3.md +6 -5
- package/dist/docs/reference/geometry/isGeometryError.md +5 -2
- package/dist/docs/reference/geometry/joinTriangleMeshes.md +5 -1
- package/dist/docs/reference/geometry/layoutRow.md +11 -7
- package/dist/docs/reference/geometry/length2.md +5 -4
- package/dist/docs/reference/geometry/length3.md +5 -4
- package/dist/docs/reference/geometry/lerp2.md +7 -6
- package/dist/docs/reference/geometry/lerp3.md +7 -6
- package/dist/docs/reference/geometry/linearPatternTransforms.md +4 -4
- package/dist/docs/reference/geometry/loftMesh.md +5 -1
- package/dist/docs/reference/geometry/matchProfiles.md +11 -2
- package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +5 -1
- package/dist/docs/reference/geometry/meshBounds.md +8 -4
- package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +5 -1
- package/dist/docs/reference/geometry/normalize2.md +10 -6
- package/dist/docs/reference/geometry/normalize3.md +10 -6
- package/dist/docs/reference/geometry/normalizeContour.md +8 -4
- package/dist/docs/reference/geometry/normalizePolygon.md +5 -1
- package/dist/docs/reference/geometry/normalizeRegion.md +5 -1
- package/dist/docs/reference/geometry/optimizePlanarPatches.md +5 -1
- package/dist/docs/reference/geometry/path2.md +14 -2
- package/dist/docs/reference/geometry/path3.md +8 -1
- package/dist/docs/reference/geometry/pathPatternTransforms.md +9 -5
- package/dist/docs/reference/geometry/preflightHeightfield.md +11 -2
- package/dist/docs/reference/geometry/preflightHelicalThreadSolidMesh.md +11 -2
- package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +13 -2
- package/dist/docs/reference/geometry/preflightSvgRegion.md +15 -2
- package/dist/docs/reference/geometry/preflightThreadedNut.md +12 -2
- package/dist/docs/reference/geometry/preflightThreadedRod.md +12 -2
- package/dist/docs/reference/geometry/projectOntoPlane3.md +7 -6
- package/dist/docs/reference/geometry/radialPatternTransforms.md +4 -4
- package/dist/docs/reference/geometry/rectangleContour.md +10 -3
- package/dist/docs/reference/geometry/rectangleProfile.md +10 -2
- package/dist/docs/reference/geometry/regionArea.md +5 -1
- package/dist/docs/reference/geometry/regionBounds.md +8 -4
- package/dist/docs/reference/geometry/regularPolygonContour.md +8 -4
- package/dist/docs/reference/geometry/resamplePolyline2.md +8 -4
- package/dist/docs/reference/geometry/resamplePolyline3.md +8 -4
- package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +1 -1
- package/dist/docs/reference/geometry/resolveArcSegments.md +1 -1
- package/dist/docs/reference/geometry/resolveCircularSegments.md +1 -1
- package/dist/docs/reference/geometry/resolveCylindricalGear.md +5 -1
- package/dist/docs/reference/geometry/resolveCylindricalGearPair.md +5 -1
- package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +5 -1
- package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +5 -1
- package/dist/docs/reference/geometry/resolveGeometryTolerance.md +1 -1
- package/dist/docs/reference/geometry/resolveKnuckleHinge.md +59 -0
- package/dist/docs/reference/geometry/resolvePrintableThreadFitPolicy.md +5 -1
- package/dist/docs/reference/geometry/resolveRackPitch.md +5 -1
- package/dist/docs/reference/geometry/resolveThreadCircularSegments.md +5 -1
- package/dist/docs/reference/geometry/reverseTriangleMesh.md +5 -1
- package/dist/docs/reference/geometry/revolveMesh.md +5 -1
- package/dist/docs/reference/geometry/rotate2.md +6 -5
- package/dist/docs/reference/geometry/rotationTransform3.md +7 -6
- package/dist/docs/reference/geometry/roundClosedPolylinePath.md +8 -4
- package/dist/docs/reference/geometry/sampleContour.md +12 -2
- package/dist/docs/reference/geometry/sampleCurve2.md +6 -3
- package/dist/docs/reference/geometry/sampleCurve3.md +5 -1
- package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +5 -1
- package/dist/docs/reference/geometry/sampleHelix.md +13 -5
- package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +5 -1
- package/dist/docs/reference/geometry/sampleRackToothPath.md +8 -4
- package/dist/docs/reference/geometry/sampleSideProfile.md +15 -5
- package/dist/docs/reference/geometry/sampleTextContours.md +5 -1
- package/dist/docs/reference/geometry/sampleThreadHelices.md +5 -1
- package/dist/docs/reference/geometry/scale2.md +6 -5
- package/dist/docs/reference/geometry/scale3.md +6 -5
- package/dist/docs/reference/geometry/scaleTransform3.md +7 -6
- package/dist/docs/reference/geometry/signedContourArea.md +5 -1
- package/dist/docs/reference/geometry/starContour.md +8 -4
- package/dist/docs/reference/geometry/strokeRegionData.md +5 -1
- package/dist/docs/reference/geometry/subtract2.md +7 -6
- package/dist/docs/reference/geometry/subtract3.md +7 -6
- package/dist/docs/reference/geometry/sweepMesh.md +5 -1
- package/dist/docs/reference/geometry/threadProfile.md +5 -1
- package/dist/docs/reference/geometry/transform2.md +14 -7
- package/dist/docs/reference/geometry/transform3.md +16 -7
- package/dist/docs/reference/geometry/transformDeterminant3.md +5 -4
- package/dist/docs/reference/geometry/transformRegionData.md +5 -1
- package/dist/docs/reference/geometry/transformTriangleMesh.md +5 -1
- package/dist/docs/reference/geometry/translationTransform3.md +7 -6
- package/dist/docs/reference/geometry/triangulateContour.md +5 -1
- package/dist/docs/reference/geometry/validateSolidMesh.md +9 -2
- package/dist/docs/reference/geometry/validateTransform3.md +6 -5
- package/dist/docs/reference/geometry/validateTriangleMesh.md +5 -1
- package/dist/docs/reference/geometry/vector2.md +10 -2
- package/dist/docs/reference/geometry/vector3.md +10 -2
- package/dist/docs/reference/geometry.md +7 -5
- package/dist/docs/reference/model/Anchor3.md +6 -5
- package/dist/docs/reference/model/AttachOptions.md +2 -1
- package/dist/docs/reference/model/Bounds2-type.md +125 -0
- package/dist/docs/reference/model/Bounds2Data.md +44 -0
- package/dist/docs/reference/model/Bounds2Input.md +19 -0
- package/dist/docs/reference/model/Bounds3-type.md +125 -0
- package/dist/docs/reference/model/Bounds3Data.md +44 -0
- package/dist/docs/reference/model/Bounds3Input.md +19 -0
- 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/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 -1
- package/dist/docs/reference/model/Computed.md +6 -1
- package/dist/docs/reference/model/ComputedValue.md +5 -1
- package/dist/docs/reference/model/Contour.md +6 -4
- package/dist/docs/reference/model/CorrespondingComponent.md +1 -1
- package/dist/docs/reference/model/CorrespondingContour.md +1 -1
- package/dist/docs/reference/model/CorrespondingProfile.md +1 -1
- package/dist/docs/reference/model/CorrespondingProfileStation.md +1 -1
- package/dist/docs/reference/model/CylinderOptions.md +1 -1
- package/dist/docs/reference/model/DiagnosticOptions.md +6 -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/ExtrudeOptions.md +1 -1
- package/dist/docs/reference/model/FinalizedModel.md +3 -3
- package/dist/docs/reference/model/FinalizedPart.md +1 -1
- package/dist/docs/reference/model/Frame3.md +6 -6
- package/dist/docs/reference/model/GenerateCallback.md +5 -1
- package/dist/docs/reference/model/GenerateContext.md +5 -1
- package/dist/docs/reference/model/GeneratedPart.md +5 -1
- package/dist/docs/reference/model/GenerationDiagnostic.md +6 -1
- package/dist/docs/reference/model/GenerationError.md +5 -1
- 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 +5 -4
- package/dist/docs/reference/model/HeightfieldOptions.md +5 -5
- package/dist/docs/reference/model/HelicalThreadRidgeMeshOptions.md +2 -1
- package/dist/docs/reference/model/HelicalThreadSolidMeshPreflight.md +3 -2
- package/dist/docs/reference/model/HullOptions.md +1 -1
- package/dist/docs/reference/model/ImmutableBuffer-type.md +5 -1
- package/dist/docs/reference/model/ImmutableTriangleMesh.md +5 -1
- package/dist/docs/reference/model/ImplicitOptions.md +6 -6
- package/dist/docs/reference/model/InternalThreadCutterOptions.md +2 -1
- package/dist/docs/reference/model/KnuckleHinge-type.md +47 -0
- package/dist/docs/reference/model/KnuckleHingeBaseSpec.md +77 -0
- package/dist/docs/reference/model/KnuckleHingeHalfOptions.md +34 -0
- package/dist/docs/reference/model/KnuckleHingeOptions.md +38 -0
- package/dist/docs/reference/model/KnuckleHingeSamplingOptions.md +47 -0
- package/dist/docs/reference/model/KnuckleHingeSpec.md +18 -0
- package/dist/docs/reference/model/KnuckleHingeWeb.md +53 -0
- package/dist/docs/reference/model/LinearPatternOptions.md +2 -1
- package/dist/docs/reference/model/LoftCorrespondence.md +1 -1
- package/dist/docs/reference/model/LoftOptions.md +1 -1
- package/dist/docs/reference/model/LoftPlacement.md +1 -1
- package/dist/docs/reference/model/LoftStation.md +1 -1
- package/dist/docs/reference/model/MatchProfilesOptions.md +1 -1
- package/dist/docs/reference/model/ModelProgram.md +5 -1
- package/dist/docs/reference/model/ModelingLimits.md +1 -1
- package/dist/docs/reference/model/NumericArray.md +8 -1
- package/dist/docs/reference/model/PartGeometry.md +5 -1
- package/dist/docs/reference/model/PartOptions.md +5 -1
- package/dist/docs/reference/model/Path2-type.md +12 -8
- package/dist/docs/reference/model/Path2Data.md +40 -4
- package/dist/docs/reference/model/Path2Input.md +8 -3
- package/dist/docs/reference/model/Path3-type.md +12 -8
- package/dist/docs/reference/model/Path3Data.md +40 -4
- package/dist/docs/reference/model/Path3Input.md +8 -3
- package/dist/docs/reference/model/PathLocation.md +5 -1
- package/dist/docs/reference/model/PathNormalGuide.md +4 -4
- package/dist/docs/reference/model/PathOptions.md +5 -1
- package/dist/docs/reference/model/PathPatternOptions.md +2 -1
- package/dist/docs/reference/model/PathResamplingOptions.md +5 -1
- package/dist/docs/reference/model/PatternSource.md +2 -1
- package/dist/docs/reference/model/Pivot2Options.md +2 -1
- package/dist/docs/reference/model/Pivot3Options.md +2 -1
- package/dist/docs/reference/model/PlaneOptions.md +1 -1
- package/dist/docs/reference/model/PolygonData.md +3 -2
- package/dist/docs/reference/model/PolygonOptions.md +1 -1
- package/dist/docs/reference/model/PrimitiveAttachment.md +2 -1
- package/dist/docs/reference/model/PrimitiveAttachmentOptions.md +2 -1
- package/dist/docs/reference/model/PrintableThreadFit.md +2 -1
- package/dist/docs/reference/model/PrintableThreadFitPolicy.md +2 -1
- package/dist/docs/reference/model/Profile.md +4 -2
- package/dist/docs/reference/model/ProfileComponent2.md +1 -1
- package/dist/docs/reference/model/ProfileContour2.md +4 -2
- package/dist/docs/reference/model/ProfileSpan2.md +3 -3
- package/dist/docs/reference/model/ProfiledEdgeTreatment.md +3 -3
- package/dist/docs/reference/model/RadialPatternOptions.md +2 -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 +2 -2
- package/dist/docs/reference/model/RegularPolygonOptions.md +1 -1
- package/dist/docs/reference/model/RevolveOptions.md +1 -1
- package/dist/docs/reference/model/RoundedEdgeTreatment.md +1 -1
- package/dist/docs/reference/model/Section.md +9 -2
- package/dist/docs/reference/model/SectionHullOptions.md +1 -1
- package/dist/docs/reference/model/SectionInspection.md +4 -4
- 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 +9 -2
- package/dist/docs/reference/model/SolidInspection.md +4 -4
- package/dist/docs/reference/model/SolidSegmentHit.md +4 -4
- package/dist/docs/reference/model/SphereOptions.md +1 -1
- package/dist/docs/reference/model/StarOptions.md +1 -1
- 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/ThreadEndStyle.md +2 -1
- package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +2 -1
- package/dist/docs/reference/model/ThreadHandedness.md +2 -1
- package/dist/docs/reference/model/ThreadLeadInEnvelope.md +2 -1
- package/dist/docs/reference/model/ThreadLeadInShape.md +2 -1
- package/dist/docs/reference/model/ThreadProfile.md +4 -3
- package/dist/docs/reference/model/ThreadRidgeOptions.md +2 -1
- package/dist/docs/reference/model/ThreadedNutBevel.md +2 -1
- package/dist/docs/reference/model/ThreadedNutOptions.md +2 -1
- package/dist/docs/reference/model/ThreadedNutPreflight.md +4 -3
- package/dist/docs/reference/model/ThreadedNutShape.md +2 -1
- package/dist/docs/reference/model/ThreadedRodOptions.md +2 -1
- package/dist/docs/reference/model/TorusOptions.md +1 -1
- package/dist/docs/reference/model/Transform2-type.md +6 -5
- package/dist/docs/reference/model/Transform2Data.md +16 -0
- package/dist/docs/reference/model/Transform2Input.md +4 -3
- package/dist/docs/reference/model/Transform3-type.md +6 -5
- package/dist/docs/reference/model/Transform3Data.md +19 -0
- package/dist/docs/reference/model/Transform3Input.md +4 -3
- package/dist/docs/reference/model/TriangleMesh.md +1 -1
- package/dist/docs/reference/model/TriangleMeshAnalysis.md +3 -3
- package/dist/docs/reference/model/TriangleMeshMeasurements.md +3 -3
- package/dist/docs/reference/model/TubeOptions.md +1 -1
- package/dist/docs/reference/model/Vector2-type.md +6 -5
- package/dist/docs/reference/model/{Vector2Tuple.md → Vector2Data.md} +3 -3
- package/dist/docs/reference/model/Vector2Input.md +4 -3
- package/dist/docs/reference/model/Vector3-type.md +6 -5
- package/dist/docs/reference/model/{Vector3Tuple.md → Vector3Data.md} +3 -3
- package/dist/docs/reference/model/Vector3Input.md +4 -3
- package/dist/docs/reference/model/VectorTextLayout.md +1 -1
- package/dist/docs/reference/model/VectorTextMetrics.md +3 -3
- package/dist/docs/reference/model/anchor.md +2 -1
- package/dist/docs/reference/model/bounds2.md +36 -0
- package/dist/docs/reference/model/bounds3.md +36 -0
- package/dist/docs/reference/model/box.md +2 -2
- package/dist/docs/reference/model/castSegment.md +1 -1
- package/dist/docs/reference/model/categories/boolean-operations.md +10 -3
- package/dist/docs/reference/model/categories/bounded-surfaces.md +5 -3
- package/dist/docs/reference/model/categories/bounds.md +36 -0
- package/dist/docs/reference/model/categories/contracts.md +4 -2
- package/dist/docs/reference/model/categories/core-values-errors.md +11 -11
- package/dist/docs/reference/model/categories/explicit-profiles.md +6 -4
- package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +12 -3
- package/dist/docs/reference/model/categories/generation.md +11 -2
- package/dist/docs/reference/model/categories/hinges.md +38 -0
- package/dist/docs/reference/model/categories/inspection.md +9 -2
- package/dist/docs/reference/model/categories/mesh-inspection.md +5 -3
- package/dist/docs/reference/model/categories/paths.md +15 -7
- package/dist/docs/reference/model/categories/primitives.md +10 -4
- package/dist/docs/reference/model/categories/resolution.md +4 -2
- package/dist/docs/reference/model/categories/sections.md +10 -5
- package/dist/docs/reference/model/categories/threads.md +10 -7
- package/dist/docs/reference/model/categories/transforms-placement.md +17 -9
- package/dist/docs/reference/model/circle.md +1 -1
- package/dist/docs/reference/model/components.md +1 -1
- package/dist/docs/reference/model/compose.md +1 -1
- package/dist/docs/reference/model/cylinder.md +1 -1
- package/dist/docs/reference/model/distance.md +1 -1
- package/dist/docs/reference/model/ellipse.md +1 -1
- package/dist/docs/reference/model/extrude.md +1 -1
- package/dist/docs/reference/model/generate.md +5 -1
- package/dist/docs/reference/model/gridPattern.md +2 -1
- package/dist/docs/reference/model/heightfield.md +5 -2
- package/dist/docs/reference/model/hull.md +1 -1
- package/dist/docs/reference/model/immutableBuffer.md +5 -1
- package/dist/docs/reference/model/immutableMesh.md +5 -1
- package/dist/docs/reference/model/implicit.md +3 -3
- package/dist/docs/reference/model/inspectSection.md +1 -1
- package/dist/docs/reference/model/inspectSolid.md +1 -1
- package/dist/docs/reference/model/internalThreadCutter.md +2 -1
- package/dist/docs/reference/model/intersect.md +1 -1
- package/dist/docs/reference/model/isEmpty.md +1 -1
- package/dist/docs/reference/model/knuckleHinge.md +47 -0
- package/dist/docs/reference/model/linearPattern.md +2 -1
- package/dist/docs/reference/model/loft.md +1 -1
- 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 +14 -2
- package/dist/docs/reference/model/path3.md +8 -1
- package/dist/docs/reference/model/pathPattern.md +2 -1
- package/dist/docs/reference/model/polygon.md +5 -2
- package/dist/docs/reference/model/preflightInternalThreadCutter.md +8 -2
- package/dist/docs/reference/model/preflightThreadedNut.md +8 -2
- package/dist/docs/reference/model/preflightThreadedRod.md +8 -2
- package/dist/docs/reference/model/radialPattern.md +2 -1
- package/dist/docs/reference/model/rectangle.md +5 -2
- package/dist/docs/reference/model/regularPolygon.md +1 -1
- package/dist/docs/reference/model/revolve.md +1 -1
- package/dist/docs/reference/model/solidFromMesh.md +1 -1
- package/dist/docs/reference/model/sphere.md +1 -1
- package/dist/docs/reference/model/split.md +1 -1
- package/dist/docs/reference/model/splitByPlane.md +1 -1
- package/dist/docs/reference/model/star.md +1 -1
- 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 +1 -1
- package/dist/docs/reference/model/textSection.md +1 -1
- package/dist/docs/reference/model/threadRidge.md +2 -1
- package/dist/docs/reference/model/threadedNut.md +2 -1
- package/dist/docs/reference/model/threadedRod.md +2 -1
- package/dist/docs/reference/model/torus.md +1 -1
- package/dist/docs/reference/model/transform2.md +14 -7
- package/dist/docs/reference/model/transform3.md +16 -7
- package/dist/docs/reference/model/tube.md +1 -1
- package/dist/docs/reference/model/union.md +1 -1
- package/dist/docs/reference/model/vector2.md +10 -2
- package/dist/docs/reference/model/vector3.md +10 -2
- package/dist/docs/reference/model.md +15 -8
- package/dist/docs/reference/text/Bounds2Data.md +34 -0
- package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +1 -1
- package/dist/docs/reference/text/Vector2Data.md +7 -0
- package/dist/docs/reference/text/VectorFont.md +1 -1
- 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 +1 -1
- package/dist/docs/reference/text/VectorTextMetrics.md +3 -3
- package/dist/docs/reference/text/VectorTextOptions.md +1 -1
- package/dist/docs/reference/text/categories/font-preparation.md +6 -4
- package/dist/docs/reference/text/prepareVectorFont.md +1 -1
- package/dist/docs/reference/text.md +4 -2
- package/dist/engine/construction-operations.js +1 -1
- package/dist/engine/knuckle-hinge-operation.js +85 -0
- package/dist/engine/loft-operations.js +1 -1
- package/dist/engine/mechanical-operations.js +3 -1
- package/dist/engine/modeling-context.js +8 -1
- package/dist/engine/recipe-realization.js +4 -2
- package/dist/engine/section-operations.js +1 -1
- package/dist/engine/transform-operations.js +3 -3
- package/dist/geometry/bounds-value.js +93 -0
- package/dist/geometry/bounds.js +10 -8
- package/dist/geometry/curves/sampling.js +1 -2
- package/dist/geometry/errors.js +1 -0
- package/dist/geometry/heightfield.js +12 -1
- package/dist/geometry/index.js +3 -1
- package/dist/geometry/math/immutable-value.js +1 -1
- package/dist/geometry/math/vector-value.js +11 -3
- package/dist/geometry/math/vector2.js +1 -0
- package/dist/geometry/math/vector3.js +1 -0
- package/dist/geometry/mechanical/index.js +1 -0
- package/dist/geometry/mechanical/knuckle-hinge.js +110 -0
- package/dist/geometry/mechanical/thread-mesh-plan.js +7 -2
- package/dist/geometry/mechanical/thread-solids.js +29 -4
- package/dist/geometry/mesh/mesh-centroid.js +1 -0
- package/dist/geometry/mesh/mesh-solid.js +1 -0
- package/dist/geometry/paths/frames.js +1 -0
- package/dist/geometry/paths/helix.js +1 -0
- package/dist/geometry/paths/path-value.js +43 -27
- package/dist/geometry/paths/resampling.js +2 -2
- package/dist/geometry/patterns/placements.js +3 -3
- package/dist/geometry/patterns.js +3 -1
- package/dist/geometry/profiles/contour.js +1 -0
- package/dist/geometry/profiles/matched.js +1 -0
- package/dist/geometry/profiles/rectangle.js +10 -1
- package/dist/geometry/profiles/side-profile.js +2 -0
- package/dist/geometry/svg-import.js +8 -2
- package/dist/geometry/sweeps/options.js +1 -1
- package/dist/geometry/text-fitting.js +1 -0
- package/dist/geometry/transform-matrix.js +1 -1
- package/dist/geometry/{transform-chain.js → transform-value.js} +24 -15
- package/dist/index.js +2 -1
- package/dist/model/execution-binding.js +1 -1
- package/dist/model/geometry-recipes.js +1 -1
- package/dist/model/immutable-generation-data.js +4 -12
- package/dist/model/knuckle-hinge.js +1 -0
- package/dist/model/operations.js +57 -3
- package/dist/model/recipe-declaration.js +10 -2
- package/package.json +1 -1
- package/dist/docs/reference/geometry/Bounds2.md +0 -39
- package/dist/docs/reference/geometry/Bounds3.md +0 -39
- package/dist/docs/reference/geometry/Transform2Matrix.md +0 -14
- package/dist/docs/reference/geometry/Transform3Matrix.md +0 -17
- package/dist/docs/reference/geometry/Vector2Tuple.md +0 -14
- package/dist/docs/reference/geometry/Vector3Tuple.md +0 -14
- package/dist/docs/reference/model/Bounds2.md +0 -39
- package/dist/docs/reference/model/Bounds3.md +0 -39
- package/dist/docs/reference/model/Transform2Matrix.md +0 -15
- package/dist/docs/reference/model/Transform3Matrix.md +0 -18
- package/dist/docs/reference/text/Bounds2.md +0 -34
- package/dist/docs/reference/text/Vector2Tuple.md +0 -7
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { GeometryError } from "../geometry/errors.js";
|
|
2
|
+
import { resolveKnuckleHinge } from "../geometry/mechanical/knuckle-hinge.js";
|
|
3
|
+
import { assertPrimitiveOptions } from "../geometry/primitive-resolvers.js";
|
|
4
|
+
import { assertSamplingCount } from "../geometry/sampling-limits.js";
|
|
5
|
+
/** Composes existing scoped operations after resolving both halves against one host policy. */
|
|
6
|
+
export function createKnuckleHingeOperation(environment, operations) {
|
|
7
|
+
return (options) => {
|
|
8
|
+
environment.assertActive();
|
|
9
|
+
assertPrimitiveOptions(options, "knuckleHinge");
|
|
10
|
+
const resolved = environment.withResolutionDefaults(options);
|
|
11
|
+
const d = resolveKnuckleHinge(options, resolved);
|
|
12
|
+
assertSamplingCount(d.segments * d.spec.knuckleCount * 2, "knuckleHinge", resolved.limits.maxVertices);
|
|
13
|
+
const invalid = (message) => {
|
|
14
|
+
throw new GeometryError("INVALID_ARGUMENT", message, { operation: "knuckleHinge" });
|
|
15
|
+
};
|
|
16
|
+
const validateHalf = (half = {}) => {
|
|
17
|
+
assertPrimitiveOptions(half, "knuckleHinge");
|
|
18
|
+
const chamfer = half.barrelChamfer ?? 0;
|
|
19
|
+
if (!Number.isFinite(chamfer) ||
|
|
20
|
+
chamfer < 0 ||
|
|
21
|
+
2 * chamfer >= d.knuckleLength ||
|
|
22
|
+
chamfer >= d.minimumBarrelWall)
|
|
23
|
+
invalid("barrelChamfer must be nonnegative and leave a positive axial band and faceted barrel wall.");
|
|
24
|
+
const web = half.web;
|
|
25
|
+
if (web !== undefined) {
|
|
26
|
+
assertPrimitiveOptions(web, "knuckleHinge");
|
|
27
|
+
if (web.direction !== "positive-y" && web.direction !== "negative-y")
|
|
28
|
+
invalid("Unknown web direction.");
|
|
29
|
+
if (!Number.isFinite(web.reach) ||
|
|
30
|
+
web.reach <= 0 ||
|
|
31
|
+
!Number.isFinite(web.thickness) ||
|
|
32
|
+
web.thickness <= 0 ||
|
|
33
|
+
!Number.isFinite(web.zMin) ||
|
|
34
|
+
!Number.isFinite(web.zMin + web.thickness))
|
|
35
|
+
invalid("Web dimensions must be finite, with positive reach and thickness.");
|
|
36
|
+
const innerRadius = d.barrelRadius * Math.cos(Math.PI / d.segments);
|
|
37
|
+
if (web.zMin >= innerRadius || web.zMin + web.thickness <= -innerRadius)
|
|
38
|
+
invalid("A web must overlap the interior of its barrel.");
|
|
39
|
+
}
|
|
40
|
+
return { chamfer, web };
|
|
41
|
+
};
|
|
42
|
+
// Validate both attachments before allocating either half.
|
|
43
|
+
const a = validateHalf(options.halfA);
|
|
44
|
+
const b = validateHalf(options.halfB);
|
|
45
|
+
const axial = (radius, start, length, bore = false, chamfer = 0) => operations.translate(operations.rotate(operations.cylinder({
|
|
46
|
+
radius,
|
|
47
|
+
height: length,
|
|
48
|
+
center: false,
|
|
49
|
+
segments: d.segments,
|
|
50
|
+
sizing: bore ? "face" : "vertex",
|
|
51
|
+
...(chamfer === 0
|
|
52
|
+
? {}
|
|
53
|
+
: {
|
|
54
|
+
ends: {
|
|
55
|
+
bottom: { kind: "chamfer", distance: chamfer },
|
|
56
|
+
top: { kind: "chamfer", distance: chamfer },
|
|
57
|
+
},
|
|
58
|
+
}),
|
|
59
|
+
}), [0, 90, 0]), [start, 0, 0]);
|
|
60
|
+
const buildHalf = (side, { chamfer, web }) => {
|
|
61
|
+
const features = [];
|
|
62
|
+
for (const interval of d.knuckles) {
|
|
63
|
+
if (interval.side !== side)
|
|
64
|
+
continue;
|
|
65
|
+
features.push(axial(d.barrelRadius, interval.start, interval.length, false, chamfer));
|
|
66
|
+
if (web !== undefined)
|
|
67
|
+
features.push(operations.translate(operations.box({
|
|
68
|
+
size: [interval.length, web.reach, web.thickness],
|
|
69
|
+
center: false,
|
|
70
|
+
}), [interval.start, web.direction === "positive-y" ? 0 : -web.reach, web.zMin]));
|
|
71
|
+
}
|
|
72
|
+
if (side === "a" && d.pin !== null)
|
|
73
|
+
features.push(axial(d.pinRadius, d.pin.start, d.pin.length));
|
|
74
|
+
const solid = operations.union(features);
|
|
75
|
+
// Overtravel is numerical cutter extent, independent of the physical radial/axial allowances.
|
|
76
|
+
const overtravel = Math.min(d.knuckleLength, d.barrelRadius) * 0.01;
|
|
77
|
+
return side === "a" && d.pin !== null
|
|
78
|
+
? solid
|
|
79
|
+
: operations.subtract(solid, [
|
|
80
|
+
axial(d.boreRadius, -d.spec.length / 2 - overtravel, d.spec.length + 2 * overtravel, true),
|
|
81
|
+
]);
|
|
82
|
+
};
|
|
83
|
+
return Object.freeze({ halfA: buildHalf("a", a), halfB: buildHalf("b", b), axis: d.axis });
|
|
84
|
+
};
|
|
85
|
+
}
|
|
@@ -8,7 +8,7 @@ import { assertSamplingCount } from "../geometry/sampling-limits.js";
|
|
|
8
8
|
import { correspondingPrimitiveProfiles, rectangularPrimitiveFamily, } from "./primitive-profiles.js";
|
|
9
9
|
import { buildProfileLoftMesh } from "./profile-mesh.js";
|
|
10
10
|
const explicitProfile = (value) => typeof value === "object" && value !== null && "components" in value;
|
|
11
|
-
const pointProfile = (value) => Array.isArray(value) || (typeof value === "object" && value !== null && "
|
|
11
|
+
const pointProfile = (value) => Array.isArray(value) || (typeof value === "object" && value !== null && "toData" in value);
|
|
12
12
|
const fail = (message) => {
|
|
13
13
|
throw new GeometryError("INVALID_ARGUMENT", message, { operation: "loft" });
|
|
14
14
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { createKnuckleHingeOperation } from "./knuckle-hinge-operation.js";
|
|
1
2
|
import * as kernel from "./native/index.js";
|
|
2
3
|
/** Internal host-bound mechanical operations. */
|
|
3
|
-
export function createMechanicalOperations(environment) {
|
|
4
|
+
export function createMechanicalOperations(environment, construction) {
|
|
4
5
|
const { resolution } = environment;
|
|
5
6
|
const { scope, assertActive, wrapSolid, withResolutionDefaults } = environment;
|
|
6
7
|
const nutOptions = (value) => ({
|
|
@@ -9,6 +10,7 @@ export function createMechanicalOperations(environment) {
|
|
|
9
10
|
});
|
|
10
11
|
// Explicit preflight preserves the stable error operation names exposed by these constructors.
|
|
11
12
|
const operations = {
|
|
13
|
+
knuckleHinge: createKnuckleHingeOperation(environment, construction),
|
|
12
14
|
threadRidge: (value) => {
|
|
13
15
|
assertActive();
|
|
14
16
|
return wrapSolid(kernel.threadRidge(scope, withResolutionDefaults(value)));
|
|
@@ -15,7 +15,14 @@ export function createModelingContext(owner, initialResolution) {
|
|
|
15
15
|
const sections = createSectionOperations(environment, transforms);
|
|
16
16
|
const primitives = createPrimitiveOperations(environment, transforms, sections);
|
|
17
17
|
const construction = createConstructionOperations(environment, sections);
|
|
18
|
-
const mechanical = createMechanicalOperations(environment
|
|
18
|
+
const mechanical = createMechanicalOperations(environment, {
|
|
19
|
+
cylinder: primitives.cylinder,
|
|
20
|
+
box: primitives.box,
|
|
21
|
+
union: construction.union,
|
|
22
|
+
rotate: transforms.operations.rotate,
|
|
23
|
+
translate: transforms.operations.translate,
|
|
24
|
+
subtract: construction.subtract,
|
|
25
|
+
});
|
|
19
26
|
const patterns = createPatternOperations(environment, transforms);
|
|
20
27
|
const inspection = createInspectionOperations(environment);
|
|
21
28
|
return Object.freeze({
|
|
@@ -36,7 +36,7 @@ export class RecipeRealization {
|
|
|
36
36
|
const args = this.resolveValue(call.args, true);
|
|
37
37
|
return this.duringNative(() => Reflect.apply(operation, undefined, args));
|
|
38
38
|
}
|
|
39
|
-
/**
|
|
39
|
+
/** Joint/split/component handles share one operation result, even when selected separately. */
|
|
40
40
|
evaluate(call) {
|
|
41
41
|
if (!this.resolvedCalls.has(call))
|
|
42
42
|
this.resolvedCalls.set(call, this.invoke(call));
|
|
@@ -76,7 +76,9 @@ export class RecipeRealization {
|
|
|
76
76
|
return retained;
|
|
77
77
|
}
|
|
78
78
|
const result = this.evaluate(recipe.call);
|
|
79
|
-
const selected = recipe.index === undefined
|
|
79
|
+
const selected = recipe.index === undefined
|
|
80
|
+
? result
|
|
81
|
+
: result[recipe.index];
|
|
80
82
|
this.realized.set(shape, selected);
|
|
81
83
|
return selected;
|
|
82
84
|
}
|
|
@@ -43,7 +43,7 @@ export function createSectionOperations(environment, transforms) {
|
|
|
43
43
|
polygon: (input) => {
|
|
44
44
|
assertActive();
|
|
45
45
|
if (Array.isArray(input) ||
|
|
46
|
-
(typeof input === "object" && input !== null && "
|
|
46
|
+
(typeof input === "object" && input !== null && ("toData" in input || "dimension" in input)))
|
|
47
47
|
return fromContours([input]);
|
|
48
48
|
if (typeof input !== "object" || input === null)
|
|
49
49
|
throwGeometryError("INVALID_ARGUMENT", "polygon", "Use an outline or polygon options.");
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { attachmentTransform3 } from "../geometry/anchors.js";
|
|
2
2
|
import { vector2Data, vector3Data, } from "../geometry/math/vector-value.js";
|
|
3
3
|
import { assertPrimitiveOptions } from "../geometry/primitive-resolvers.js";
|
|
4
|
-
import { transform2, transform3, } from "../geometry/transform-chain.js";
|
|
5
4
|
import { readTransformMatrix } from "../geometry/transform-matrix.js";
|
|
5
|
+
import { transform2, transform3, } from "../geometry/transform-value.js";
|
|
6
6
|
import { eulerTransform3, scaleTransform3, translationTransform3, validateTransform3, } from "../geometry/transform3.js";
|
|
7
7
|
import * as kernel from "./native/index.js";
|
|
8
8
|
import { transformPrimitiveSectionProfile } from "./primitive-profiles.js";
|
|
@@ -160,8 +160,8 @@ export function createTransformOperations(environment) {
|
|
|
160
160
|
const transform = ((value, placement) => {
|
|
161
161
|
const native = resolveHandle(value);
|
|
162
162
|
const matrix = native.kind === "solid"
|
|
163
|
-
? transform3(readTransformMatrix(placement, 3)).
|
|
164
|
-
: transform2(readTransformMatrix(placement, 2)).
|
|
163
|
+
? transform3(readTransformMatrix(placement, 3)).toData()
|
|
164
|
+
: transform2(readTransformMatrix(placement, 2)).toData();
|
|
165
165
|
if (native.kind === "solid") {
|
|
166
166
|
validateCoordinates(matrix, 16, "transform");
|
|
167
167
|
return environment.preserveAnchors(value, wrapSolid(kernel.transform(scope, native.value, matrix)), matrix);
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { boundsCenter, boundsSize, containsBounds, validateBounds } from "./bounds.js";
|
|
2
|
+
import { GeometryError } from "./errors.js";
|
|
3
|
+
import { immutableMathClass } from "./math/immutable-value.js";
|
|
4
|
+
import { vector2, vector3 } from "./math/vector-value.js";
|
|
5
|
+
function fail(dimension, message) {
|
|
6
|
+
throw new GeometryError("INVALID_ARGUMENT", message, { operation: `bounds${dimension}` });
|
|
7
|
+
}
|
|
8
|
+
function snapshot(input, dimension) {
|
|
9
|
+
if (typeof input !== "object" || input === null)
|
|
10
|
+
fail(dimension, "Bounds require minimum and maximum coordinate tuples.");
|
|
11
|
+
const { min, max } = input;
|
|
12
|
+
if (!Array.isArray(min) ||
|
|
13
|
+
!Array.isArray(max) ||
|
|
14
|
+
min.length !== dimension ||
|
|
15
|
+
max.length !== dimension)
|
|
16
|
+
fail(dimension, `Bounds require matching ${dimension}D minimum and maximum tuples.`);
|
|
17
|
+
const minimum = min, maximum = max;
|
|
18
|
+
const copy = (source) => Object.freeze(Array.from({ length: dimension }, (_, axis) => {
|
|
19
|
+
const value = source[axis];
|
|
20
|
+
return value === 0 ? 0 : value;
|
|
21
|
+
}));
|
|
22
|
+
const data = Object.freeze({ min: copy(minimum), max: copy(maximum) });
|
|
23
|
+
validateBounds(data, `bounds${dimension}`);
|
|
24
|
+
return data;
|
|
25
|
+
}
|
|
26
|
+
const PlanarBounds = /* @__PURE__ */ immutableMathClass(class PlanarBounds {
|
|
27
|
+
#data;
|
|
28
|
+
min;
|
|
29
|
+
max;
|
|
30
|
+
constructor(data) {
|
|
31
|
+
this.#data = data;
|
|
32
|
+
this.min = data.min;
|
|
33
|
+
this.max = data.max;
|
|
34
|
+
Object.freeze(this);
|
|
35
|
+
}
|
|
36
|
+
size() {
|
|
37
|
+
return vector2(boundsSize(this));
|
|
38
|
+
}
|
|
39
|
+
center() {
|
|
40
|
+
return vector2(boundsCenter(this));
|
|
41
|
+
}
|
|
42
|
+
containsBounds(other) {
|
|
43
|
+
return containsBounds(this, other);
|
|
44
|
+
}
|
|
45
|
+
toData() {
|
|
46
|
+
return this.#data;
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
const SpatialBounds = /* @__PURE__ */ immutableMathClass(class SpatialBounds {
|
|
50
|
+
#data;
|
|
51
|
+
min;
|
|
52
|
+
max;
|
|
53
|
+
constructor(data) {
|
|
54
|
+
this.#data = data;
|
|
55
|
+
this.min = data.min;
|
|
56
|
+
this.max = data.max;
|
|
57
|
+
Object.freeze(this);
|
|
58
|
+
}
|
|
59
|
+
size() {
|
|
60
|
+
return vector3(boundsSize(this));
|
|
61
|
+
}
|
|
62
|
+
center() {
|
|
63
|
+
return vector3(boundsCenter(this));
|
|
64
|
+
}
|
|
65
|
+
containsBounds(other) {
|
|
66
|
+
return containsBounds(this, other);
|
|
67
|
+
}
|
|
68
|
+
toData() {
|
|
69
|
+
return this.#data;
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
/**
|
|
73
|
+
* Snapshots finite ordered XY bounds in millimetres as an immutable fluent value.
|
|
74
|
+
*
|
|
75
|
+
* Zero extents are valid. Invalid dimensions, nonfinite coordinates, reversed bounds and
|
|
76
|
+
* overflowing extents throw `INVALID_ARGUMENT` GeometryError. Use `toData()` for plain records.
|
|
77
|
+
* Compiled Generator packages passing these values to host recipes or computed data require
|
|
78
|
+
* runtime 8.0.0 or newer in major 8.
|
|
79
|
+
*/
|
|
80
|
+
export function bounds2(input) {
|
|
81
|
+
return new PlanarBounds(snapshot(input, 2));
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Snapshots finite ordered XYZ bounds in millimetres as an immutable fluent value.
|
|
85
|
+
*
|
|
86
|
+
* Zero extents are valid. Invalid dimensions, nonfinite coordinates, reversed bounds and
|
|
87
|
+
* overflowing extents throw `INVALID_ARGUMENT` GeometryError. Use `toData()` for plain records.
|
|
88
|
+
* Compiled Generator packages passing these values to host recipes or computed data require
|
|
89
|
+
* runtime 8.0.0 or newer in major 8.
|
|
90
|
+
*/
|
|
91
|
+
export function bounds3(input) {
|
|
92
|
+
return new SpatialBounds(snapshot(input, 3));
|
|
93
|
+
}
|
package/dist/geometry/bounds.js
CHANGED
|
@@ -13,7 +13,8 @@ function vector(values, operation) {
|
|
|
13
13
|
? Object.freeze([normalized[0], normalized[1]])
|
|
14
14
|
: Object.freeze([normalized[0], normalized[1], normalized[2]]);
|
|
15
15
|
}
|
|
16
|
-
|
|
16
|
+
/** Internal shared validation for tuple algorithms and immutable bounds snapshots. */
|
|
17
|
+
export function validateBounds(bounds, operation) {
|
|
17
18
|
if (typeof bounds !== "object" ||
|
|
18
19
|
bounds === null ||
|
|
19
20
|
!isArray(bounds.min) ||
|
|
@@ -54,23 +55,23 @@ export function boundsFromSize(dimensions, options = {}) {
|
|
|
54
55
|
});
|
|
55
56
|
}
|
|
56
57
|
export function boundsSize(bounds) {
|
|
57
|
-
|
|
58
|
+
validateBounds(bounds, "boundsSize");
|
|
58
59
|
return vector(size(bounds), "boundsSize");
|
|
59
60
|
}
|
|
60
61
|
export function boundsCenter(bounds) {
|
|
61
|
-
|
|
62
|
+
validateBounds(bounds, "boundsCenter");
|
|
62
63
|
return vector(center(bounds), "boundsCenter");
|
|
63
64
|
}
|
|
64
65
|
export function containsBounds(outer, inner) {
|
|
65
|
-
const dimension =
|
|
66
|
-
if (
|
|
66
|
+
const dimension = validateBounds(outer, "containsBounds");
|
|
67
|
+
if (validateBounds(inner, "containsBounds") !== dimension)
|
|
67
68
|
fail("containsBounds", "Contained bounds must have the same dimension.");
|
|
68
69
|
return outer.min.every((value, axis) => inner.min[axis] >= value && inner.max[axis] <= outer.max[axis]);
|
|
69
70
|
}
|
|
70
71
|
export function fitBounds(source, target, options = {}) {
|
|
71
72
|
const operation = "fitBounds";
|
|
72
|
-
const dimension =
|
|
73
|
-
if (
|
|
73
|
+
const dimension = validateBounds(source, operation);
|
|
74
|
+
if (validateBounds(target, operation) !== dimension)
|
|
74
75
|
fail(operation, "Source and target bounds must have the same dimension.");
|
|
75
76
|
if (typeof options !== "object" || options === null || isArray(options))
|
|
76
77
|
fail(operation, "Fitting options must be an object.");
|
|
@@ -94,6 +95,7 @@ export function fitBounds(source, target, options = {}) {
|
|
|
94
95
|
}
|
|
95
96
|
/**
|
|
96
97
|
* Returns immutable translations for a +X row of finite XYZ bounds with a nonnegative gap.
|
|
98
|
+
*
|
|
97
99
|
* Each minimum Y/Z becomes zero, and the first minimum X becomes zero. Supply bounds after
|
|
98
100
|
* any intended part rotation; translations apply to those bounds. An empty input returns [].
|
|
99
101
|
*/
|
|
@@ -106,7 +108,7 @@ export function layoutRow(bounds, options = {}) {
|
|
|
106
108
|
fail(operation, "Row gap must be finite and nonnegative.");
|
|
107
109
|
let nextX = 0;
|
|
108
110
|
return Object.freeze(Array.from(bounds, (item) => {
|
|
109
|
-
if (
|
|
111
|
+
if (validateBounds(item, operation) !== 3)
|
|
110
112
|
fail(operation, "Row layout requires XYZ bounds.");
|
|
111
113
|
const position = vector([nextX - item.min[0], -item.min[1], -item.min[2]], operation);
|
|
112
114
|
nextX += item.max[0] - item.min[0] + gap;
|
|
@@ -237,8 +237,7 @@ export function sampleCurve3(curve, options = {}) {
|
|
|
237
237
|
return sampleCurve(curve, options, createSpatialSampleWriter);
|
|
238
238
|
}
|
|
239
239
|
/** Samples a planar curve with the same guarantees and policy as spatial sampling.
|
|
240
|
-
* @remarks
|
|
241
|
-
* frozen. At stationary tangents, outgoing secants are preferred and endpoints use a backward fallback.
|
|
240
|
+
* @remarks Returned planar points and tangents are copied and frozen. At stationary tangents, outgoing secants are preferred and endpoints use a backward fallback.
|
|
242
241
|
* @example
|
|
243
242
|
* ```ts
|
|
244
243
|
* const turn = sampleCurve2({kind: "arc", center: [0,0], radius: 10, sweepAngle: 90});
|
package/dist/geometry/errors.js
CHANGED
|
@@ -50,6 +50,7 @@ export class GeometryError extends Error {
|
|
|
50
50
|
}
|
|
51
51
|
/**
|
|
52
52
|
* Recognizes structured geometry errors from separately bundled Modeling copies in the same realm.
|
|
53
|
+
*
|
|
53
54
|
* Ordinary errors and unmarked code-shaped objects are rejected. The marker is execution-local and
|
|
54
55
|
* does not survive structured cloning; worker protocols carry their own serialized error envelope.
|
|
55
56
|
*/
|
|
@@ -77,16 +77,27 @@ function planHeightfield(options, limits) {
|
|
|
77
77
|
facts: Object.freeze({ sampleCount, vertexCount, triangleCount, byteCount }),
|
|
78
78
|
};
|
|
79
79
|
}
|
|
80
|
-
/**
|
|
80
|
+
/**
|
|
81
|
+
* Checks grid options, Float32 axis precision, and output limits; returns exact mesh buffer counts.
|
|
82
|
+
*
|
|
83
|
+
* This pure operation needs no engine and neither evaluates `height` nor allocates mesh buffers.
|
|
84
|
+
* Successful preflight leaves height values, Float32 base storage, and generated mesh validity to
|
|
85
|
+
* construction. `byteCount` covers position and index buffers, not total working memory.
|
|
86
|
+
*
|
|
87
|
+
* @see {@link heightfieldMesh}
|
|
88
|
+
*/
|
|
81
89
|
export function preflightHeightfield(options, limits = {}) {
|
|
82
90
|
return planHeightfield(options, limits).facts;
|
|
83
91
|
}
|
|
84
92
|
/**
|
|
85
93
|
* Builds a closed indexed mesh from a rectilinear top, matched boundary walls, and flat base.
|
|
94
|
+
*
|
|
86
95
|
* Heights run once per grid point after preflight; center-error adds one evaluation per cell.
|
|
87
96
|
* Top winding is +Z, the base is -Z, and sides face outward. Coordinates and heights must fit
|
|
88
97
|
* Float32 storage. Explicit axes are captured before sampling; shared wall vertices prevent cracks.
|
|
89
98
|
*
|
|
99
|
+
* @see {@link preflightHeightfield}
|
|
100
|
+
*
|
|
90
101
|
* @example Sample a closed wavy mesh
|
|
91
102
|
* ```ts
|
|
92
103
|
* heightfieldMesh({
|
package/dist/geometry/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/** Pure geometry foundations without host initialization. @packageDocumentation */
|
|
2
|
+
export { bounds2, bounds3, } from "./bounds-value.js";
|
|
2
3
|
export { boundsFromSize, boundsSize, boundsCenter, containsBounds, fitBounds, layoutRow, } from "./bounds.js";
|
|
3
4
|
export { fitTextLayout } from "./text-fitting.js";
|
|
4
5
|
export { gridPatternTransforms, linearPatternTransforms, radialPatternTransforms, pathPatternTransforms, } from "./patterns.js";
|
|
@@ -12,7 +13,7 @@ export { defaultGeometrySamplingLimits, resolveGeometrySamplingLimits, } from ".
|
|
|
12
13
|
export { GeometryError, isGeometryError, } from "./errors.js";
|
|
13
14
|
export { resolveExtrusionDivisions, } from "./extrusion.js";
|
|
14
15
|
export { extrudeMesh, loftMesh, triangulateContour, } from "./loft/loft.js";
|
|
15
|
-
export { transform2, transform3, } from "./transform-
|
|
16
|
+
export { transform2, transform3, } from "./transform-value.js";
|
|
16
17
|
export { vector2, vector3, } from "./math/vector-value.js";
|
|
17
18
|
export { add2, subtract2, scale2, dot2, cross2, length2, distance2, normalize2, lerp2, rotate2, } from "./math/vector2.js";
|
|
18
19
|
export { add3, cross3, dot3, length3, distance3, lerp3, normalize3, projectOntoPlane3, scale3, subtract3, } from "./math/vector3.js";
|
|
@@ -49,3 +50,4 @@ export { IDENTITY_TRANSFORM3, applyTransformDirection3, applyTransformPoint3, co
|
|
|
49
50
|
export { sampleTextContours } from "./text-contours.js";
|
|
50
51
|
export { sampleCurve2, sampleCurve3 } from "./curves/sampling.js";
|
|
51
52
|
export { resamplePolyline2, resamplePolyline3, } from "./paths/resampling.js";
|
|
53
|
+
export { resolveKnuckleHinge, } from "./mechanical/knuckle-hinge.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// A versioned realm protocol lets separately bundled authoring values cross the host boundary.
|
|
2
|
-
const immutableMath = Symbol.for("@metamesh/modeling/immutable-math/
|
|
2
|
+
const immutableMath = Symbol.for("@metamesh/modeling/immutable-math/8");
|
|
3
3
|
/**
|
|
4
4
|
* Brands and freezes only this constructor's prototype. Pure-annotated callers let bundlers
|
|
5
5
|
* discard unused classes without dropping initialization for classes that remain reachable.
|
|
@@ -34,7 +34,7 @@ const tupleData = (input, dimensions) => {
|
|
|
34
34
|
return invalidVector(dimensions);
|
|
35
35
|
let values = input;
|
|
36
36
|
if (!Array.isArray(input)) {
|
|
37
|
-
const method = Reflect.get(input, "
|
|
37
|
+
const method = Reflect.get(input, "toData");
|
|
38
38
|
if (typeof method !== "function")
|
|
39
39
|
return invalidVector(dimensions);
|
|
40
40
|
values = Reflect.apply(method, input, []);
|
|
@@ -88,7 +88,7 @@ const PlanarVector = /* @__PURE__ */ immutableMathClass(class PlanarVector {
|
|
|
88
88
|
distance(other) {
|
|
89
89
|
return finite(distance2(this.values, operand2(other, "vector2.distance")), "vector2.distance");
|
|
90
90
|
}
|
|
91
|
-
|
|
91
|
+
toData() {
|
|
92
92
|
return this.values;
|
|
93
93
|
}
|
|
94
94
|
});
|
|
@@ -136,15 +136,19 @@ const SpatialVector = /* @__PURE__ */ immutableMathClass(class SpatialVector {
|
|
|
136
136
|
distance(other) {
|
|
137
137
|
return finite(distance3(this.values, operand3(other, "vector3.distance")), "vector3.distance");
|
|
138
138
|
}
|
|
139
|
-
|
|
139
|
+
toData() {
|
|
140
140
|
return this.values;
|
|
141
141
|
}
|
|
142
142
|
});
|
|
143
143
|
/**
|
|
144
144
|
* Creates immutable XY arithmetic from a finite tuple or vector, snapshotting the coordinates.
|
|
145
|
+
*
|
|
145
146
|
* Values and results are finite. Invalid dimensions throw `INVALID_ARGUMENT`; nonfinite coordinates
|
|
146
147
|
* and overflow throw `NON_FINITE_VALUE` GeometryError.
|
|
147
148
|
* Use transform2().applyDirection(value) for rotations and nonuniform scaling.
|
|
149
|
+
*
|
|
150
|
+
* Use `toData()` for frozen tuple interchange, or
|
|
151
|
+
* [normalize2](/docs/reference/geometry/normalize2) for tuple-based normalization in numerical loops.
|
|
148
152
|
*/
|
|
149
153
|
export function vector2(input) {
|
|
150
154
|
const values = operand2(input, "vector2");
|
|
@@ -152,10 +156,14 @@ export function vector2(input) {
|
|
|
152
156
|
}
|
|
153
157
|
/**
|
|
154
158
|
* Creates immutable XYZ arithmetic from a finite tuple or vector, snapshotting the coordinates.
|
|
159
|
+
*
|
|
155
160
|
* Values and results are finite. Invalid dimensions throw `INVALID_ARGUMENT`; nonfinite coordinates
|
|
156
161
|
* and overflow throw `NON_FINITE_VALUE` GeometryError.
|
|
157
162
|
* Use transform3().applyDirection(value) for rotations and nonuniform scaling.
|
|
158
163
|
*
|
|
164
|
+
* Use `toData()` for frozen tuple interchange, or
|
|
165
|
+
* [normalize3](/docs/reference/geometry/normalize3) for tuple-based normalization in numerical loops.
|
|
166
|
+
*
|
|
159
167
|
* @example
|
|
160
168
|
* ```ts
|
|
161
169
|
* const direction = vector3([1, 2, 3]).add([4, 0, 0]).normalize().scale(10);
|
|
@@ -21,6 +21,7 @@ export const length2 = (vector) => Math.hypot(vector[0], vector[1]);
|
|
|
21
21
|
export const distance2 = (a, b) => Math.hypot(a[0] - b[0], a[1] - b[1]);
|
|
22
22
|
/**
|
|
23
23
|
* Returns a unit vector; `epsilon` is a finite, non-negative length threshold (default `1e-12`).
|
|
24
|
+
*
|
|
24
25
|
* Rejects invalid thresholds, nonfinite lengths, and lengths at or below the threshold with
|
|
25
26
|
* `INVALID_TOLERANCE`, `NON_FINITE_VALUE`, and `DEGENERATE_GEOMETRY` respectively.
|
|
26
27
|
*/
|
|
@@ -61,6 +61,7 @@ export const length3 = (vector) => Math.hypot(vector[0], vector[1], vector[2]);
|
|
|
61
61
|
export const distance3 = (a, b) => Math.hypot(a[0] - b[0], a[1] - b[1], a[2] - b[2]);
|
|
62
62
|
/**
|
|
63
63
|
* Returns a unit vector; `epsilon` is a finite, non-negative length threshold (default `1e-12`).
|
|
64
|
+
*
|
|
64
65
|
* Rejects invalid thresholds, nonfinite lengths, and lengths at or below the threshold with
|
|
65
66
|
* `INVALID_TOLERANCE`, `NON_FINITE_VALUE`, and `DEGENERATE_GEOMETRY` respectively.
|
|
66
67
|
*/
|
|
@@ -11,3 +11,4 @@ export { preflightHelicalThreadSolidMesh } from "./thread-mesh-plan.js";
|
|
|
11
11
|
export { sampleConventionalThreadHelices as sampleThreadHelices } from "./thread-helices.js";
|
|
12
12
|
export { compensateThreadDiameters, PRINTABLE_THREAD_FIT_POLICIES, resolvePrintableThreadFitPolicy, resolveThreadCircularSegments, } from "./threads.js";
|
|
13
13
|
export { getMetricClearanceHoleDiameter, getMetricFastenerStandard, METRIC_FASTENER_STANDARDS, } from "./standards.js";
|
|
14
|
+
export { resolveKnuckleHinge, } from "./knuckle-hinge.js";
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { assertPositivePrimitive, assertPrimitiveOptions } from "../primitive-resolvers.js";
|
|
3
|
+
import { resolveAlignedCircularSegments } from "../resolution.js";
|
|
4
|
+
import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling-limits.js";
|
|
5
|
+
/** @internal Shared fixed frame; ordinary transforms place the joint in a model. */
|
|
6
|
+
export const knuckleHingeAxis = Object.freeze({
|
|
7
|
+
position: Object.freeze([0, 0, 0]),
|
|
8
|
+
direction: Object.freeze([1, 0, 0]),
|
|
9
|
+
up: Object.freeze([0, 0, 1]),
|
|
10
|
+
});
|
|
11
|
+
const invalid = (message) => {
|
|
12
|
+
throw new GeometryError("INVALID_ARGUMENT", message, { operation: "resolveKnuckleHinge" });
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Resolves equal alternating knuckles along +X, centered at the origin, in millimetres.
|
|
16
|
+
*
|
|
17
|
+
* Both faces of each running pair use a common polygon count; face-sized bores contain the
|
|
18
|
+
* shaft's complete rotational envelope. Adaptive sampling satisfies both face and vertex error
|
|
19
|
+
* bounds; an insufficient ceiling rejects instead of reducing quality. Exact counts are intentional
|
|
20
|
+
* facets. Zero allowances describe ideal contact, not a printable running fit.
|
|
21
|
+
*
|
|
22
|
+
* Rejects nonfinite or nonpositive dimensions, invalid mode/count combinations, exhausted axial
|
|
23
|
+
* length, missing/excessive lift-off engagement, and nonpositive conservative faceted barrel walls.
|
|
24
|
+
* Manufacturing minima, strength, mounting, retention, handedness, and motion remain caller policy.
|
|
25
|
+
*/
|
|
26
|
+
export function resolveKnuckleHinge(spec, options = {}) {
|
|
27
|
+
assertPrimitiveOptions(spec, "resolveKnuckleHinge");
|
|
28
|
+
assertPrimitiveOptions(options, "resolveKnuckleHinge");
|
|
29
|
+
for (const key of ["length", "barrelDiameter", "pinDiameter"])
|
|
30
|
+
assertPositivePrimitive(spec[key], key, "resolveKnuckleHinge");
|
|
31
|
+
for (const key of ["radialClearance", "axialGap"])
|
|
32
|
+
if (!Number.isFinite(spec[key]) || spec[key] < 0)
|
|
33
|
+
invalid(`${key} must be finite and nonnegative.`);
|
|
34
|
+
if (!Number.isSafeInteger(spec.knuckleCount) || spec.knuckleCount < 2)
|
|
35
|
+
invalid("knuckleCount must be a safe integer of at least two.");
|
|
36
|
+
if (!["print-in-place", "inserted-pin", "lift-off"].includes(spec.mode))
|
|
37
|
+
invalid("Unknown hinge mode.");
|
|
38
|
+
if (spec.mode === "print-in-place" && spec.knuckleCount % 2 !== 1)
|
|
39
|
+
invalid("Print-in-place needs an odd count.");
|
|
40
|
+
if (spec.mode === "lift-off" && spec.knuckleCount !== 2)
|
|
41
|
+
invalid("Lift-off needs two knuckles.");
|
|
42
|
+
if (spec.mode !== "lift-off" && spec.pinEngagement !== undefined)
|
|
43
|
+
invalid("pinEngagement requires lift-off mode.");
|
|
44
|
+
const limits = resolveGeometrySamplingLimits(options.limits);
|
|
45
|
+
assertSamplingCount(spec.knuckleCount, "resolveKnuckleHinge", limits.maxPathPoints);
|
|
46
|
+
const knuckleLength = (spec.length - (spec.knuckleCount - 1) * spec.axialGap) / spec.knuckleCount;
|
|
47
|
+
if (!Number.isFinite(knuckleLength) || knuckleLength <= 0)
|
|
48
|
+
invalid("Axial gaps consume the knuckles.");
|
|
49
|
+
if (spec.mode === "lift-off" &&
|
|
50
|
+
(!Number.isFinite(spec.pinEngagement) ||
|
|
51
|
+
spec.pinEngagement <= 0 ||
|
|
52
|
+
spec.pinEngagement > knuckleLength))
|
|
53
|
+
invalid("pinEngagement must be positive and fit the socket.");
|
|
54
|
+
const barrelRadius = spec.barrelDiameter / 2;
|
|
55
|
+
const pinRadius = spec.pinDiameter / 2;
|
|
56
|
+
const boreRadius = pinRadius + spec.radialClearance;
|
|
57
|
+
if (!(pinRadius > 0) || !(boreRadius < barrelRadius))
|
|
58
|
+
invalid("Pin and bore must fit inside the barrel.");
|
|
59
|
+
const segments = resolveAlignedCircularSegments(barrelRadius, {
|
|
60
|
+
...options,
|
|
61
|
+
sizing: "face",
|
|
62
|
+
alignTo: [4],
|
|
63
|
+
minSegments: 4,
|
|
64
|
+
});
|
|
65
|
+
const cosine = Math.cos(Math.PI / segments);
|
|
66
|
+
const boreOuterRadius = boreRadius / cosine;
|
|
67
|
+
const minimumBarrelWall = barrelRadius * cosine - boreOuterRadius;
|
|
68
|
+
if (minimumBarrelWall <= 0)
|
|
69
|
+
invalid("Facets consume the wall; increase segments or barrel diameter.");
|
|
70
|
+
const common = {
|
|
71
|
+
length: spec.length,
|
|
72
|
+
knuckleCount: spec.knuckleCount,
|
|
73
|
+
barrelDiameter: spec.barrelDiameter,
|
|
74
|
+
pinDiameter: spec.pinDiameter,
|
|
75
|
+
radialClearance: spec.radialClearance,
|
|
76
|
+
axialGap: spec.axialGap,
|
|
77
|
+
};
|
|
78
|
+
const copied = Object.freeze(spec.mode === "lift-off"
|
|
79
|
+
? {
|
|
80
|
+
...common,
|
|
81
|
+
mode: spec.mode,
|
|
82
|
+
knuckleCount: spec.knuckleCount,
|
|
83
|
+
pinEngagement: spec.pinEngagement,
|
|
84
|
+
}
|
|
85
|
+
: { ...common, mode: spec.mode });
|
|
86
|
+
return Object.freeze({
|
|
87
|
+
spec: copied,
|
|
88
|
+
barrelRadius,
|
|
89
|
+
pinRadius,
|
|
90
|
+
boreRadius,
|
|
91
|
+
boreOuterRadius,
|
|
92
|
+
minimumBarrelWall,
|
|
93
|
+
knuckleLength,
|
|
94
|
+
segments,
|
|
95
|
+
knuckles: Object.freeze(Array.from({ length: spec.knuckleCount }, (_, index) => Object.freeze({
|
|
96
|
+
side: index % 2 === 0 ? "a" : "b",
|
|
97
|
+
start: -spec.length / 2 + index * (knuckleLength + spec.axialGap),
|
|
98
|
+
length: knuckleLength,
|
|
99
|
+
}))),
|
|
100
|
+
pin: spec.mode === "inserted-pin"
|
|
101
|
+
? null
|
|
102
|
+
: Object.freeze({
|
|
103
|
+
start: -spec.length / 2,
|
|
104
|
+
length: spec.mode === "lift-off"
|
|
105
|
+
? knuckleLength + spec.axialGap + spec.pinEngagement
|
|
106
|
+
: spec.length,
|
|
107
|
+
}),
|
|
108
|
+
axis: knuckleHingeAxis,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
@@ -348,8 +348,13 @@ export const resolveHelicalThreadSolidMeshPreflight = (options, operation) => {
|
|
|
348
348
|
});
|
|
349
349
|
};
|
|
350
350
|
/**
|
|
351
|
-
*
|
|
352
|
-
*
|
|
351
|
+
* Checks thread dimensions, profile, end treatments, sampling, and conservative estimates against output limits.
|
|
352
|
+
*
|
|
353
|
+
* This pure operation needs no engine and constructs planning data without vertex or index buffers.
|
|
354
|
+
* `circularSegments` is the selected count; row and triangle counts are conservative estimates.
|
|
355
|
+
* Successful preflight leaves generated coordinate and topology checks to mesh construction.
|
|
356
|
+
*
|
|
357
|
+
* @see {@link helicalThreadSolidMesh}
|
|
353
358
|
*/
|
|
354
359
|
export function preflightHelicalThreadSolidMesh(options) {
|
|
355
360
|
return resolveHelicalThreadSolidMeshPreflight(options, "preflightHelicalThreadSolidMesh")
|