@metamesh/modeling 0.15.0 → 0.17.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 +59 -0
- package/README.md +54 -6
- package/dist/api/engine.d.ts +4 -3
- package/dist/api/geometry.d.ts +608 -266
- package/dist/api/index.d.ts +516 -110
- package/dist/api/text.d.ts +6 -6
- package/dist/docs/guides/concepts.md +298 -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 +68 -36
- package/dist/docs/guides/standalone-model.md +42 -0
- package/dist/docs/manifest.json +1034 -296
- 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/Bounds2Options.md +72 -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/Bounds3Options.md +72 -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/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/CircularSampling.md +41 -0
- package/dist/docs/reference/geometry/CircularSamplingOptions.md +14 -0
- 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 +20 -1
- package/dist/docs/reference/geometry/SvgRegionPreflight.md +21 -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 +7 -3
- 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 +39 -0
- package/dist/docs/reference/geometry/bounds3.md +39 -0
- package/dist/docs/reference/geometry/boundsCenter.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 +25 -9
- 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 +8 -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/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 +24 -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/resolveCircularSampling.md +40 -0
- 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/Bounds2Options.md +70 -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/Bounds3Options.md +70 -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/HoleCutterOptions.md +77 -0
- package/dist/docs/reference/model/HoleCutterOverrun.md +35 -0
- package/dist/docs/reference/model/HoleCutterRecess.md +87 -0
- 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 +38 -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 +14 -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 +37 -0
- package/dist/docs/reference/model/bounds3.md +37 -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 +38 -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 +14 -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/holeCutter.md +45 -0
- 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 +5 -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 +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 +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/extrusion-finishing.js +2 -29
- package/dist/engine/hole-cutter-operation.js +148 -0
- package/dist/engine/knuckle-hinge-operation.js +128 -0
- package/dist/engine/loft-operations.js +1 -1
- package/dist/engine/mechanical-operations.js +3 -1
- package/dist/engine/modeling-context.js +20 -1
- package/dist/engine/primitive-operations.js +19 -6
- package/dist/engine/recipe-realization.js +4 -2
- package/dist/engine/section-operations.js +2 -2
- package/dist/engine/transform-operations.js +3 -3
- package/dist/geometry/bounds-value.js +121 -0
- package/dist/geometry/bounds.js +10 -25
- package/dist/geometry/circular-sampling.js +45 -0
- package/dist/geometry/convex-offset.js +41 -0
- 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 +5 -2
- 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/profiles.js +3 -23
- package/dist/geometry/profiles/rectangle.js +10 -1
- package/dist/geometry/profiles/side-profile.js +2 -0
- package/dist/geometry/svg/matrix.js +21 -0
- package/dist/geometry/svg-import.js +140 -52
- 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/hole-cutter.js +1 -0
- package/dist/model/immutable-generation-data.js +4 -12
- package/dist/model/knuckle-hinge.js +1 -0
- package/dist/model/operations.js +78 -3
- package/dist/model/recipe-declaration.js +11 -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/BoundsFromSizeOptions.md +0 -23
- 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/geometry/boundsFromSize.md +0 -83
- package/dist/docs/reference/geometry/containsBounds.md +0 -72
- 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
package/dist/geometry/index.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/** Pure geometry foundations without host initialization. @packageDocumentation */
|
|
2
|
-
export {
|
|
2
|
+
export { bounds2, bounds3, } from "./bounds-value.js";
|
|
3
|
+
export { boundsSize, boundsCenter, fitBounds, layoutRow, } from "./bounds.js";
|
|
4
|
+
export { resolveCircularSampling, } from "./circular-sampling.js";
|
|
3
5
|
export { fitTextLayout } from "./text-fitting.js";
|
|
4
6
|
export { gridPatternTransforms, linearPatternTransforms, radialPatternTransforms, pathPatternTransforms, } from "./patterns.js";
|
|
5
7
|
export { validateSolidMesh } from "./mesh/mesh-solid.js";
|
|
@@ -12,7 +14,7 @@ export { defaultGeometrySamplingLimits, resolveGeometrySamplingLimits, } from ".
|
|
|
12
14
|
export { GeometryError, isGeometryError, } from "./errors.js";
|
|
13
15
|
export { resolveExtrusionDivisions, } from "./extrusion.js";
|
|
14
16
|
export { extrudeMesh, loftMesh, triangulateContour, } from "./loft/loft.js";
|
|
15
|
-
export { transform2, transform3, } from "./transform-
|
|
17
|
+
export { transform2, transform3, } from "./transform-value.js";
|
|
16
18
|
export { vector2, vector3, } from "./math/vector-value.js";
|
|
17
19
|
export { add2, subtract2, scale2, dot2, cross2, length2, distance2, normalize2, lerp2, rotate2, } from "./math/vector2.js";
|
|
18
20
|
export { add3, cross3, dot3, length3, distance3, lerp3, normalize3, projectOntoPlane3, scale3, subtract3, } from "./math/vector3.js";
|
|
@@ -49,3 +51,4 @@ export { IDENTITY_TRANSFORM3, applyTransformDirection3, applyTransformPoint3, co
|
|
|
49
51
|
export { sampleTextContours } from "./text-contours.js";
|
|
50
52
|
export { sampleCurve2, sampleCurve3 } from "./curves/sampling.js";
|
|
51
53
|
export { resamplePolyline2, resamplePolyline3, } from "./paths/resampling.js";
|
|
54
|
+
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/9");
|
|
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")
|
|
@@ -96,11 +96,30 @@ export const resolveCompensatedThreadSolidMesh = (options, role) => {
|
|
|
96
96
|
});
|
|
97
97
|
};
|
|
98
98
|
const preflightCompensatedThreadSolid = (options, role) => preflightHelicalThreadSolidMesh(resolveCompensatedThreadSolidMesh(options, role).meshOptions);
|
|
99
|
-
/**
|
|
99
|
+
/**
|
|
100
|
+
* Resolves compensated rod dimensions and checks conservative mesh estimates against output limits.
|
|
101
|
+
*
|
|
102
|
+
* This pure operation uses explicit resolution and limits or package defaults, without an active
|
|
103
|
+
* host execution. It creates planning data without mesh buffers or native objects; returned row
|
|
104
|
+
* and triangle counts are estimates. Mesh validity and native construction are checked later.
|
|
105
|
+
*
|
|
106
|
+
* @see {@link preflightHelicalThreadSolidMesh}
|
|
107
|
+
* @see {@link helicalThreadSolidMesh}
|
|
108
|
+
*/
|
|
100
109
|
export function preflightThreadedRodSolid(options) {
|
|
101
110
|
return preflightCompensatedThreadSolid(options, "male");
|
|
102
111
|
}
|
|
103
|
-
/**
|
|
112
|
+
/**
|
|
113
|
+
* Resolves compensated cutter dimensions and checks extended mesh estimates against output limits.
|
|
114
|
+
*
|
|
115
|
+
* This pure operation uses explicit resolution and limits or package defaults, without an active
|
|
116
|
+
* host execution. It includes the cutter's one-pitch extension beyond each requested face and
|
|
117
|
+
* creates planning data without mesh buffers or native objects. Row and triangle counts are
|
|
118
|
+
* estimates; mesh validity and native construction are checked later.
|
|
119
|
+
*
|
|
120
|
+
* @see {@link preflightHelicalThreadSolidMesh}
|
|
121
|
+
* @see {@link helicalThreadSolidMesh}
|
|
122
|
+
*/
|
|
104
123
|
export function preflightInternalThreadCutterSolid(options) {
|
|
105
124
|
return preflightCompensatedThreadSolid(options, "female");
|
|
106
125
|
}
|
|
@@ -222,8 +241,14 @@ export const resolveThreadedNutSolid = (options, operation) => {
|
|
|
222
241
|
});
|
|
223
242
|
};
|
|
224
243
|
/**
|
|
225
|
-
*
|
|
226
|
-
*
|
|
244
|
+
* Checks nut dimensions, chamfers, end-face wall, and the extended compensated cutter's allocation plan.
|
|
245
|
+
*
|
|
246
|
+
* This pure operation uses explicit resolution and limits or package defaults, without an active
|
|
247
|
+
* host execution. It resolves body/cutter dimensions without mesh buffers or native objects.
|
|
248
|
+
* `thread` contains conservative cutter estimates, excluding the body and Boolean result.
|
|
249
|
+
* Successful preflight leaves mesh validity, native construction, and manufacturing fit to later checks.
|
|
250
|
+
*
|
|
251
|
+
* @see {@link preflightHelicalThreadSolidMesh}
|
|
227
252
|
*/
|
|
228
253
|
export function preflightThreadedNutSolid(options) {
|
|
229
254
|
return resolveThreadedNutSolid(options, "preflightThreadedNutSolid").preflight;
|
|
@@ -2,6 +2,7 @@ import { GeometryError } from "../errors.js";
|
|
|
2
2
|
import { analyzeTriangleMesh } from "./mesh.js";
|
|
3
3
|
/**
|
|
4
4
|
* Computes the uniform-density volume centroid of an oriented closed solid, including cavity shells.
|
|
5
|
+
*
|
|
5
6
|
* Coordinates are millimetres. Indexed closure and positive aggregate volume are required; callers
|
|
6
7
|
* may use validateSolidMesh first when geometric intersections and shell orientation are untrusted.
|
|
7
8
|
* Fresh mutable input is inspected on every call, and buffers are never changed.
|
|
@@ -7,6 +7,7 @@ const MAXIMUM_TRIANGLES = 200_000;
|
|
|
7
7
|
const MAXIMUM_TESTS = 2_000_000;
|
|
8
8
|
/**
|
|
9
9
|
* Checks closed indexed topology, triangle intersections, and alternating nested shell orientation.
|
|
10
|
+
*
|
|
10
11
|
* Outward exterior shells and inward cavity shells are accepted. Separate shells must not touch,
|
|
11
12
|
* intersect, or overlap as material. Indexed neighbours may share their own vertex or edge.
|
|
12
13
|
*
|
|
@@ -50,6 +50,7 @@ const transportNormal = (normal, previousTangent, tangent) => {
|
|
|
50
50
|
};
|
|
51
51
|
/**
|
|
52
52
|
* Builds rotation-minimizing frames by parallel-transporting the previous normal.
|
|
53
|
+
*
|
|
53
54
|
* This avoids the sudden profile flips produced by picking a fresh up-vector per ring.
|
|
54
55
|
* Paths exceeding maxPathPoints (default 100000) reject before frame allocation or guide evaluation.
|
|
55
56
|
* Requires open path values; raw tuples are interpreted as an open path. Invalid paths throw GeometryError.
|
|
@@ -2,6 +2,7 @@ import { GeometryError } from "../errors.js";
|
|
|
2
2
|
import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling-limits.js";
|
|
3
3
|
/**
|
|
4
4
|
* Creates `segments + 1` points including exact helix endpoints from finite positive dimensions.
|
|
5
|
+
*
|
|
5
6
|
* Integrated weights must remain finite. The maxPathPoints ceiling defaults to 100000; excessive
|
|
6
7
|
* exact counts reject before evaluating axial weights or allocating sample arrays.
|
|
7
8
|
* Invalid inputs use GeometryError; exceptions thrown by axialWeight propagate unchanged.
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { bounds2, bounds3 } from "../bounds-value.js";
|
|
1
2
|
import { GeometryError } from "../errors.js";
|
|
2
3
|
import { immutableMathClass } from "../math/immutable-value.js";
|
|
3
4
|
import { vector2, vector2Data, vector3, vector3Data, } from "../math/vector-value.js";
|
|
4
5
|
import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling-limits.js";
|
|
5
6
|
import { transformPath2, transformPath3 } from "../transform-geometry.js";
|
|
6
7
|
import { closestPointOnValidatedPath } from "./closest-point.js";
|
|
7
|
-
import {
|
|
8
|
+
import { resamplePath2Points, resamplePath3Points } from "./resampling.js";
|
|
8
9
|
const fail = (message, code = "INVALID_ARGUMENT") => {
|
|
9
10
|
throw new GeometryError(code, message, { operation: "path" });
|
|
10
11
|
};
|
|
@@ -19,9 +20,13 @@ function freezePoints(points) {
|
|
|
19
20
|
Object.freeze(point);
|
|
20
21
|
return Object.freeze(points);
|
|
21
22
|
}
|
|
22
|
-
function
|
|
23
|
+
function frozenData(owner) {
|
|
23
24
|
const state = stateOf(owner);
|
|
24
|
-
return (state.
|
|
25
|
+
return (state.data ??= Object.freeze({
|
|
26
|
+
dimension: owner.dimension,
|
|
27
|
+
closed: owner.closed,
|
|
28
|
+
points: freezePoints(state.points.map((point) => [...point])),
|
|
29
|
+
}));
|
|
25
30
|
}
|
|
26
31
|
function closedOption(closed) {
|
|
27
32
|
if (closed !== undefined && typeof closed !== "boolean")
|
|
@@ -60,23 +65,25 @@ function validateClosure(points, closed) {
|
|
|
60
65
|
function pathSource(input, closed, dimension) {
|
|
61
66
|
if (Array.isArray(input))
|
|
62
67
|
return { points: input, closed: closedOption(closed) };
|
|
63
|
-
if (typeof input !== "object" ||
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
68
|
+
if (typeof input !== "object" || input === null)
|
|
69
|
+
return fail("Expected a path value, path data, or an array of vectors.");
|
|
70
|
+
const own = pathStates.get(input);
|
|
71
|
+
const method = Reflect.get(input, "toData");
|
|
72
|
+
const data = own !== undefined
|
|
73
|
+
? input
|
|
74
|
+
: typeof method === "function"
|
|
75
|
+
? Reflect.apply(method, input, [])
|
|
76
|
+
: input;
|
|
77
|
+
if (typeof data !== "object" || data === null)
|
|
78
|
+
return fail("Expected complete path data.");
|
|
79
|
+
const sourceDimension = Reflect.get(data, "dimension");
|
|
80
|
+
const sourceClosed = Reflect.get(data, "closed");
|
|
81
|
+
const points = own?.points ?? Reflect.get(data, "points");
|
|
82
|
+
if (sourceDimension !== dimension || typeof sourceClosed !== "boolean" || !Array.isArray(points))
|
|
83
|
+
return fail("Path data requires matching dimension, boolean closure, and an array of vectors.");
|
|
74
84
|
if (closed !== undefined && closedOption(closed) !== sourceClosed)
|
|
75
85
|
fail("The closed option conflicts with the path's closure.");
|
|
76
|
-
|
|
77
|
-
if (!Array.isArray(points))
|
|
78
|
-
fail("Path points must be an array of coordinate tuples or vectors.");
|
|
79
|
-
return { points, closed: sourceClosed };
|
|
86
|
+
return { points: points, closed: sourceClosed };
|
|
80
87
|
}
|
|
81
88
|
function measuredLength(owner) {
|
|
82
89
|
const state = stateOf(owner);
|
|
@@ -106,7 +113,9 @@ function measuredBounds(points) {
|
|
|
106
113
|
max[axis] = Math.max(max[axis], point[axis]);
|
|
107
114
|
}
|
|
108
115
|
}
|
|
109
|
-
return
|
|
116
|
+
return min.length === 2
|
|
117
|
+
? bounds2({ min: [min[0], min[1]], max: [max[0], max[1]] })
|
|
118
|
+
: bounds3({ min: [min[0], min[1], min[2]], max: [max[0], max[1], max[2]] });
|
|
110
119
|
}
|
|
111
120
|
function samplingOptions(options, closed) {
|
|
112
121
|
if (typeof options !== "object" || options === null || Array.isArray(options))
|
|
@@ -123,8 +132,8 @@ const PlanarPath = /* @__PURE__ */ immutableMathClass(class PlanarPath {
|
|
|
123
132
|
pathStates.set(this, { points });
|
|
124
133
|
Object.freeze(this);
|
|
125
134
|
}
|
|
126
|
-
|
|
127
|
-
return
|
|
135
|
+
toData() {
|
|
136
|
+
return frozenData(this);
|
|
128
137
|
}
|
|
129
138
|
length() {
|
|
130
139
|
return measuredLength(this);
|
|
@@ -144,7 +153,7 @@ const PlanarPath = /* @__PURE__ */ immutableMathClass(class PlanarPath {
|
|
|
144
153
|
}
|
|
145
154
|
resample(options = {}) {
|
|
146
155
|
const policy = samplingOptions(options, this.closed);
|
|
147
|
-
return new PlanarPath(
|
|
156
|
+
return new PlanarPath(resamplePath2Points(points2(this), policy), this.closed);
|
|
148
157
|
}
|
|
149
158
|
});
|
|
150
159
|
const SpatialPath = /* @__PURE__ */ immutableMathClass(class SpatialPath {
|
|
@@ -155,8 +164,8 @@ const SpatialPath = /* @__PURE__ */ immutableMathClass(class SpatialPath {
|
|
|
155
164
|
pathStates.set(this, { points });
|
|
156
165
|
Object.freeze(this);
|
|
157
166
|
}
|
|
158
|
-
|
|
159
|
-
return
|
|
167
|
+
toData() {
|
|
168
|
+
return frozenData(this);
|
|
160
169
|
}
|
|
161
170
|
length() {
|
|
162
171
|
return measuredLength(this);
|
|
@@ -176,16 +185,19 @@ const SpatialPath = /* @__PURE__ */ immutableMathClass(class SpatialPath {
|
|
|
176
185
|
}
|
|
177
186
|
resample(options = {}) {
|
|
178
187
|
const policy = samplingOptions(options, this.closed);
|
|
179
|
-
return new SpatialPath(
|
|
188
|
+
return new SpatialPath(resamplePath3Points(points3(this), policy), this.closed);
|
|
180
189
|
}
|
|
181
190
|
});
|
|
182
191
|
/**
|
|
183
192
|
* Snapshots finite XY coordinates as an immutable sampled path, independent of engine initialization.
|
|
193
|
+
*
|
|
184
194
|
* Open paths may be empty or have one point; closed paths need three vertices and omit a duplicated
|
|
185
195
|
* seam. Repeated adjacent vertices are retained. No winding normalization or filling is performed.
|
|
186
196
|
* Malformed dimensions or topology throw INVALID_ARGUMENT; nonfinite coordinates or measurement
|
|
187
197
|
* overflow throw NON_FINITE_VALUE; exhausted allocation ceilings throw COMPLEXITY_LIMIT GeometryError.
|
|
188
198
|
* A path input retains its closure. Limits bound construction only; resampling takes its own limits.
|
|
199
|
+
*
|
|
200
|
+
* Use `toData()` for a frozen record that restores coordinates, closure, and dimension together.
|
|
189
201
|
*/
|
|
190
202
|
export function path2(input, options = {}) {
|
|
191
203
|
validateOptions(options);
|
|
@@ -198,6 +210,10 @@ export function path2(input, options = {}) {
|
|
|
198
210
|
/**
|
|
199
211
|
* Snapshots finite XYZ coordinates as an immutable sampled path with the same closure, seam,
|
|
200
212
|
* allocation and error rules as path2. Analytic curves must be sampled explicitly first.
|
|
213
|
+
*
|
|
214
|
+
* Use `toData()` for a frozen record that restores coordinates, closure, and dimension together.
|
|
215
|
+
*
|
|
216
|
+
* @see {@link path2} for shared construction rules.
|
|
201
217
|
*/
|
|
202
218
|
export function path3(input, options = {}) {
|
|
203
219
|
validateOptions(options);
|
|
@@ -233,7 +249,7 @@ export function path2InputData(input, closed, limits) {
|
|
|
233
249
|
assertSamplingCount(source.points.length, "path", policy.maxPathPoints);
|
|
234
250
|
return {
|
|
235
251
|
points: input instanceof PlanarPath
|
|
236
|
-
? input.
|
|
252
|
+
? input.toData().points
|
|
237
253
|
: freezePoints(snapshot(source.points, 2, policy)),
|
|
238
254
|
closed: source.closed,
|
|
239
255
|
};
|
|
@@ -245,7 +261,7 @@ export function path3InputData(input, closed, limits) {
|
|
|
245
261
|
assertSamplingCount(source.points.length, "path", policy.maxPathPoints);
|
|
246
262
|
return {
|
|
247
263
|
points: input instanceof SpatialPath
|
|
248
|
-
? input.
|
|
264
|
+
? input.toData().points
|
|
249
265
|
: freezePoints(snapshot(source.points, 3, policy)),
|
|
250
266
|
closed: source.closed,
|
|
251
267
|
};
|
|
@@ -126,7 +126,7 @@ export function resamplePolyline2(path, options = {}) {
|
|
|
126
126
|
return resamplePolyline(path, 2, options, createPlanarSampleWriter);
|
|
127
127
|
}
|
|
128
128
|
/** Internal points-only writer; Path2 owns these mutable coordinates and freezes public interchange. */
|
|
129
|
-
export function
|
|
129
|
+
export function resamplePath2Points(path, options) {
|
|
130
130
|
const points = [];
|
|
131
131
|
return resamplePolyline(path, 2, options, () => ({
|
|
132
132
|
append: (point) => {
|
|
@@ -136,7 +136,7 @@ export function resamplePath2Data(path, options) {
|
|
|
136
136
|
}), false);
|
|
137
137
|
}
|
|
138
138
|
/** Internal points-only writer; avoids calculating and allocating tangents discarded by Path3. */
|
|
139
|
-
export function
|
|
139
|
+
export function resamplePath3Points(path, options) {
|
|
140
140
|
const points = [];
|
|
141
141
|
return resamplePolyline(path, 3, options, () => ({
|
|
142
142
|
append: (point) => {
|
|
@@ -28,9 +28,9 @@ const finite = (value, operation) => {
|
|
|
28
28
|
const coordinates = (input, operation) => {
|
|
29
29
|
const value = typeof input === "object" &&
|
|
30
30
|
input !== null &&
|
|
31
|
-
"
|
|
32
|
-
typeof input.
|
|
33
|
-
? input.
|
|
31
|
+
"toData" in input &&
|
|
32
|
+
typeof input.toData === "function"
|
|
33
|
+
? input.toData()
|
|
34
34
|
: input;
|
|
35
35
|
if (!Array.isArray(value) || (value.length !== 2 && value.length !== 3))
|
|
36
36
|
fail(operation, "Pattern vectors require exact XY or XYZ coordinates.");
|
|
@@ -16,7 +16,9 @@ export function gridPatternTransforms(options) {
|
|
|
16
16
|
return transforms(gridPatternPlan(options));
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
|
-
* Equal physical arc-length placements along a sampled XYZ path.
|
|
19
|
+
* Equal physical arc-length placements along a sampled XYZ path.
|
|
20
|
+
*
|
|
21
|
+
* Tangent orientation maps +Z
|
|
20
22
|
* onto the local path tangent; fixed orientation only translates. Closed paths omit a repeated seam.
|
|
21
23
|
* Explicit sampling ceilings bound both input points and output placements.
|
|
22
24
|
*/
|
|
@@ -9,6 +9,7 @@ function invalid(message) {
|
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
11
11
|
* Samples 2–32 connected line/cubic segments into a simple, nonzero-area, immutable CCW XY loop.
|
|
12
|
+
*
|
|
12
13
|
* Physical scaling precedes adaptive curve sampling; the final end must repeat start exactly.
|
|
13
14
|
* Shared anchors and the closing seam are emitted once. Winding normalization may change the
|
|
14
15
|
* starting vertex. The sampled loop is checked for self-intersection and degeneracy by
|
|
@@ -64,6 +64,7 @@ const contours = (component) => [
|
|
|
64
64
|
];
|
|
65
65
|
/**
|
|
66
66
|
* Explicitly matches identified component/contour/span topology across a family.
|
|
67
|
+
*
|
|
67
68
|
* Every paired span uses the maximum physical subdivision count requested by any member.
|
|
68
69
|
* Cubics share a checked uniform parameter grid, including grids selected by exact paired requests.
|
|
69
70
|
* Input order and winding are preserved. Collapsed spans retain repeated logical slots, which
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
+
import { resolveCircularSampling } from "../circular-sampling.js";
|
|
1
2
|
import { GeometryError } from "../errors.js";
|
|
2
|
-
import { resolveCircularPrimitiveSegments } from "../primitive-resolution.js";
|
|
3
|
-
import { assertPrimitiveOptions } from "../primitive-resolvers.js";
|
|
4
3
|
import { requireFiniteProfileValues, requireProfileVertexCount } from "./validation.js";
|
|
5
4
|
export { rectangleContour } from "./rectangle.js";
|
|
6
5
|
/**
|
|
@@ -13,30 +12,11 @@ export { rectangleContour } from "./rectangle.js";
|
|
|
13
12
|
*/
|
|
14
13
|
export const circleContour = (options) => {
|
|
15
14
|
const operation = "circleContour";
|
|
16
|
-
|
|
17
|
-
if ((options.radius === undefined) === (options.diameter === undefined)) {
|
|
18
|
-
throw new GeometryError("INVALID_ARGUMENT", "Specify exactly one radius or diameter.", {
|
|
19
|
-
operation,
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
const radius = options.radius ?? options.diameter / 2;
|
|
23
|
-
requireFiniteProfileValues([radius], operation);
|
|
24
|
-
if (!(radius > 0)) {
|
|
25
|
-
throw new GeometryError("INVALID_ARGUMENT", "Circle radius must be positive.", { operation });
|
|
26
|
-
}
|
|
27
|
-
const segments = resolveCircularPrimitiveSegments(radius, options, operation);
|
|
15
|
+
const { segments, vertexRadius } = resolveCircularSampling(options);
|
|
28
16
|
requireProfileVertexCount(segments, 3, operation, options.limits);
|
|
29
|
-
const sizing = options.sizing ?? "vertex";
|
|
30
|
-
if (sizing !== "vertex" && sizing !== "face") {
|
|
31
|
-
throw new GeometryError("INVALID_ARGUMENT", "Circle sizing must be vertex or face.", {
|
|
32
|
-
operation,
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
const sampledRadius = sizing === "face" ? radius / Math.cos(Math.PI / segments) : radius;
|
|
36
|
-
requireFiniteProfileValues([sampledRadius], operation);
|
|
37
17
|
return Object.freeze(Array.from({ length: segments }, (_, index) => {
|
|
38
18
|
const angle = (Math.PI * 2 * index) / segments;
|
|
39
|
-
return Object.freeze([
|
|
19
|
+
return Object.freeze([vertexRadius * Math.cos(angle), vertexRadius * Math.sin(angle)]);
|
|
40
20
|
}));
|
|
41
21
|
};
|
|
42
22
|
/**
|
|
@@ -79,7 +79,11 @@ export function rectangleCornerSegments(corner, limits) {
|
|
|
79
79
|
}) / 4);
|
|
80
80
|
}
|
|
81
81
|
/**
|
|
82
|
-
* Creates an immutable CCW rectangle
|
|
82
|
+
* Creates an immutable sampled CCW rectangle boundary. Round radius zero is square; tangent saturated endpoints occur once.
|
|
83
|
+
*
|
|
84
|
+
* Use [rectangle](/docs/reference/model/rectangle) for a filled Section.
|
|
85
|
+
*
|
|
86
|
+
* @see {@link rectangleProfile} for identified edge/corner spans used by matchProfiles.
|
|
83
87
|
*
|
|
84
88
|
* @example Rounded rectangle outline
|
|
85
89
|
* ```ts
|
|
@@ -148,6 +152,11 @@ export function rectangleContour(options) {
|
|
|
148
152
|
/**
|
|
149
153
|
* Creates an identified rectangle whose edge/corner spans survive zero and saturated round radii. Outer winding is CCW.
|
|
150
154
|
*
|
|
155
|
+
* Use [rectangle](/docs/reference/model/rectangle) for a filled Section.
|
|
156
|
+
*
|
|
157
|
+
* @see {@link matchProfiles} to sample a family with shared landmark correspondence.
|
|
158
|
+
* @see {@link rectangleContour} for sampled boundary coordinates.
|
|
159
|
+
*
|
|
151
160
|
* @example Retain rectangle landmarks
|
|
152
161
|
* ```ts
|
|
153
162
|
* rectangleProfile({ size: [30, 20], treatment: { kind: "round", radius: 3 } });
|
|
@@ -23,6 +23,7 @@ function distanceToChord(point, start, end) {
|
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
25
25
|
* Samples 1–31 line/cubic segments into a deeply immutable open [radius,height] polyline.
|
|
26
|
+
*
|
|
26
27
|
* Anchors must progress strictly upward; nonnegative-radius cubic controls must have ordered
|
|
27
28
|
* heights between their endpoints. Cubics use de Casteljau subdivision with a conservative
|
|
28
29
|
* control-hull chord-error bound. Lines also obey the optional physical edge-length ceiling.
|
|
@@ -138,6 +139,7 @@ export function sampleSideProfile(curve, options = {}) {
|
|
|
138
139
|
}
|
|
139
140
|
/**
|
|
140
141
|
* Closes an open, strictly upward [radius, height] side outline to the radius-zero axis.
|
|
142
|
+
*
|
|
141
143
|
* Adds horizontal bottom/top edges at the endpoint heights, retaining axis endpoints once.
|
|
142
144
|
* Returns a counterclockwise filled-boundary contour without a repeated seam vertex.
|
|
143
145
|
* Radii must be nonnegative; the result must enclose nonzero area without touching itself.
|