@metamesh/modeling 0.16.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 +40 -0
- package/README.md +26 -5
- package/dist/api/geometry.d.ts +99 -44
- package/dist/api/index.d.ts +167 -20
- package/dist/docs/guides/concepts.md +4 -1
- package/dist/docs/guides/recipes.md +33 -6
- package/dist/docs/manifest.json +191 -56
- 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 +1 -1
- package/dist/docs/reference/engine/SessionOptions.md +1 -1
- package/dist/docs/reference/engine/SnapshotPart.md +1 -1
- package/dist/docs/reference/engine/categories/host-lifecycle.md +1 -1
- 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 +1 -1
- package/dist/docs/reference/geometry/AcmeThreadProfileSpec.md +1 -1
- package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +1 -1
- package/dist/docs/reference/geometry/Anchor3-type.md +1 -1
- package/dist/docs/reference/geometry/ArcCurve2.md +1 -1
- package/dist/docs/reference/geometry/ArcCurve3.md +1 -1
- package/dist/docs/reference/geometry/AttachOptions.md +1 -1
- package/dist/docs/reference/geometry/AxisAngleRotation3.md +1 -1
- package/dist/docs/reference/geometry/Bounds2-type.md +1 -1
- package/dist/docs/reference/geometry/Bounds2Data.md +1 -1
- package/dist/docs/reference/geometry/Bounds2Input.md +1 -1
- package/dist/docs/reference/geometry/Bounds2Options.md +72 -0
- package/dist/docs/reference/geometry/Bounds3-type.md +1 -1
- package/dist/docs/reference/geometry/Bounds3Data.md +1 -1
- package/dist/docs/reference/geometry/Bounds3Input.md +1 -1
- package/dist/docs/reference/geometry/Bounds3Options.md +72 -0
- package/dist/docs/reference/geometry/BoundsFit2.md +1 -1
- package/dist/docs/reference/geometry/BoundsFit3.md +1 -1
- package/dist/docs/reference/geometry/BoundsFitOptions.md +1 -1
- package/dist/docs/reference/geometry/BoxAnchorFace.md +1 -1
- package/dist/docs/reference/geometry/BoxAnchorOptions.md +1 -1
- package/dist/docs/reference/geometry/BoxEdge.md +1 -1
- package/dist/docs/reference/geometry/BoxEdgeSelection.md +1 -1
- package/dist/docs/reference/geometry/BoxEdgeTreatments.md +1 -1
- package/dist/docs/reference/geometry/BoxOptions.md +1 -1
- package/dist/docs/reference/geometry/ButtressPressureFlankSide.md +1 -1
- package/dist/docs/reference/geometry/ButtressThreadProfileSpec.md +1 -1
- package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +1 -1
- package/dist/docs/reference/geometry/CircleContourOptions.md +1 -1
- package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +1 -1
- package/dist/docs/reference/geometry/CircularResolutionOptions.md +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 +1 -1
- package/dist/docs/reference/geometry/ClearanceHoleFit.md +1 -1
- package/dist/docs/reference/geometry/CompensatedThreadDiameters.md +1 -1
- package/dist/docs/reference/geometry/Contour.md +1 -1
- package/dist/docs/reference/geometry/ContourCurve.md +1 -1
- package/dist/docs/reference/geometry/ContourPoint.md +1 -1
- package/dist/docs/reference/geometry/ContourSegment.md +1 -1
- package/dist/docs/reference/geometry/CorrespondingComponent.md +1 -1
- package/dist/docs/reference/geometry/CorrespondingContour.md +1 -1
- package/dist/docs/reference/geometry/CorrespondingProfile.md +1 -1
- package/dist/docs/reference/geometry/CorrespondingProfileStation.md +1 -1
- package/dist/docs/reference/geometry/CubicBezierCurve2.md +1 -1
- package/dist/docs/reference/geometry/CubicBezierCurve3.md +1 -1
- package/dist/docs/reference/geometry/Curve2.md +1 -1
- package/dist/docs/reference/geometry/Curve3.md +1 -1
- package/dist/docs/reference/geometry/CurveSamplingOptions.md +1 -1
- package/dist/docs/reference/geometry/CustomThreadProfileSpec.md +1 -1
- package/dist/docs/reference/geometry/CylinderAnchorFace.md +1 -1
- package/dist/docs/reference/geometry/CylinderAnchorOptions.md +1 -1
- package/dist/docs/reference/geometry/CylinderOptions.md +1 -1
- package/dist/docs/reference/geometry/CylindricalGearDimensions.md +1 -1
- package/dist/docs/reference/geometry/CylindricalGearMeshKind.md +1 -1
- package/dist/docs/reference/geometry/CylindricalGearOutlineOptions.md +1 -1
- package/dist/docs/reference/geometry/CylindricalGearPairDimensions.md +1 -1
- package/dist/docs/reference/geometry/CylindricalGearPairMotionOptions.md +1 -1
- package/dist/docs/reference/geometry/CylindricalGearPairMotionReport.md +1 -1
- package/dist/docs/reference/geometry/CylindricalGearPairSpec.md +1 -1
- package/dist/docs/reference/geometry/CylindricalGearSpec.md +1 -1
- package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +1 -1
- package/dist/docs/reference/geometry/EdgeTreatment.md +1 -1
- package/dist/docs/reference/geometry/EllipseContourOptions.md +1 -1
- package/dist/docs/reference/geometry/EndTreatments.md +1 -1
- package/dist/docs/reference/geometry/ExtrudeOptions.md +1 -1
- package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +1 -1
- package/dist/docs/reference/geometry/FittedTextLayout.md +1 -1
- package/dist/docs/reference/geometry/Frame3.md +1 -1
- package/dist/docs/reference/geometry/GeometryError.md +1 -1
- package/dist/docs/reference/geometry/GeometryErrorCode.md +1 -1
- package/dist/docs/reference/geometry/GeometryErrorContext.md +1 -1
- package/dist/docs/reference/geometry/GeometryResolution.md +1 -1
- package/dist/docs/reference/geometry/GeometrySamplingLimits.md +1 -1
- package/dist/docs/reference/geometry/GeometryToleranceOptions.md +1 -1
- package/dist/docs/reference/geometry/GridPatternOptions.md +1 -1
- package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +1 -1
- package/dist/docs/reference/geometry/HeightfieldOptions.md +1 -1
- package/dist/docs/reference/geometry/HeightfieldPreflight.md +1 -1
- package/dist/docs/reference/geometry/HelicalThreadRidgeMeshOptions.md +1 -1
- package/dist/docs/reference/geometry/HelicalThreadSolidMeshOptions.md +1 -1
- package/dist/docs/reference/geometry/HelicalThreadSolidMeshPreflight.md +1 -1
- package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +1 -1
- package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +1 -1
- package/dist/docs/reference/geometry/KnuckleHingeBaseSpec.md +1 -1
- package/dist/docs/reference/geometry/KnuckleHingeDimensions.md +1 -1
- package/dist/docs/reference/geometry/KnuckleHingeInterval.md +1 -1
- package/dist/docs/reference/geometry/KnuckleHingeSamplingOptions.md +1 -1
- package/dist/docs/reference/geometry/KnuckleHingeSpec.md +1 -1
- package/dist/docs/reference/geometry/LineCurve2.md +1 -1
- package/dist/docs/reference/geometry/LineCurve3.md +1 -1
- package/dist/docs/reference/geometry/LinearPatternOptions.md +1 -1
- package/dist/docs/reference/geometry/LoftCorrespondence.md +1 -1
- package/dist/docs/reference/geometry/LoftMeshStation.md +1 -1
- package/dist/docs/reference/geometry/LoftOptions.md +1 -1
- package/dist/docs/reference/geometry/LoftPlacement.md +1 -1
- package/dist/docs/reference/geometry/METRIC_FASTENER_STANDARDS.md +1 -1
- package/dist/docs/reference/geometry/MatchProfilesOptions.md +1 -1
- package/dist/docs/reference/geometry/MetricFastenerSize.md +1 -1
- package/dist/docs/reference/geometry/MetricFastenerStandard.md +1 -1
- package/dist/docs/reference/geometry/MetricHexNutDimensions.md +1 -1
- package/dist/docs/reference/geometry/MetricSocketCapHeadDimensions.md +1 -1
- package/dist/docs/reference/geometry/ModelingLimits.md +1 -1
- package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +1 -1
- package/dist/docs/reference/geometry/Path2-type.md +1 -1
- package/dist/docs/reference/geometry/Path2Data.md +1 -1
- package/dist/docs/reference/geometry/Path2Input.md +1 -1
- package/dist/docs/reference/geometry/Path3-type.md +1 -1
- package/dist/docs/reference/geometry/Path3Data.md +1 -1
- package/dist/docs/reference/geometry/Path3Input.md +1 -1
- package/dist/docs/reference/geometry/PathFrame.md +1 -1
- package/dist/docs/reference/geometry/PathLocation.md +1 -1
- package/dist/docs/reference/geometry/PathNormalGuide.md +1 -1
- package/dist/docs/reference/geometry/PathOptions.md +1 -1
- package/dist/docs/reference/geometry/PathPatternOptions.md +1 -1
- package/dist/docs/reference/geometry/PathPlacement.md +1 -1
- package/dist/docs/reference/geometry/PathResamplingOptions.md +1 -1
- package/dist/docs/reference/geometry/Pivot2Options.md +1 -1
- package/dist/docs/reference/geometry/Pivot3Options.md +1 -1
- package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +1 -1
- package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +1 -1
- package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +1 -1
- package/dist/docs/reference/geometry/PlanarPatchQuality.md +1 -1
- package/dist/docs/reference/geometry/PolygonData.md +1 -1
- package/dist/docs/reference/geometry/PolylineResamplingOptions.md +1 -1
- package/dist/docs/reference/geometry/PrimitiveAttachment.md +1 -1
- package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +1 -1
- package/dist/docs/reference/geometry/PrintableThreadFit.md +1 -1
- package/dist/docs/reference/geometry/PrintableThreadFitPolicy.md +1 -1
- package/dist/docs/reference/geometry/Profile.md +1 -1
- package/dist/docs/reference/geometry/ProfileComponent2.md +1 -1
- package/dist/docs/reference/geometry/ProfileContour2.md +1 -1
- package/dist/docs/reference/geometry/ProfileSpan2.md +1 -1
- package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +1 -1
- package/dist/docs/reference/geometry/RackPitchDimensions.md +1 -1
- package/dist/docs/reference/geometry/RackPitchSpec.md +1 -1
- package/dist/docs/reference/geometry/RadialPatternOptions.md +1 -1
- package/dist/docs/reference/geometry/RadialSizing.md +1 -1
- package/dist/docs/reference/geometry/RadialSizingOptions.md +1 -1
- package/dist/docs/reference/geometry/RectangleContourOptions.md +1 -1
- package/dist/docs/reference/geometry/RectangleCornerTreatment.md +1 -1
- package/dist/docs/reference/geometry/RectangleCornerTreatments.md +1 -1
- package/dist/docs/reference/geometry/RectangleProfileOptions.md +1 -1
- package/dist/docs/reference/geometry/RegionData.md +1 -1
- package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +1 -1
- package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +1 -1
- package/dist/docs/reference/geometry/RevolveOptions.md +1 -1
- package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +1 -1
- package/dist/docs/reference/geometry/RowLayoutOptions.md +1 -1
- package/dist/docs/reference/geometry/SampleContourOptions.md +1 -1
- package/dist/docs/reference/geometry/SampleHelixOptions.md +1 -1
- package/dist/docs/reference/geometry/SampleSideProfileOptions.md +1 -1
- package/dist/docs/reference/geometry/SampledCurve2.md +1 -1
- package/dist/docs/reference/geometry/SampledCurve3.md +1 -1
- package/dist/docs/reference/geometry/SampledThreadHelices.md +1 -1
- package/dist/docs/reference/geometry/SideProfileCurve.md +1 -1
- package/dist/docs/reference/geometry/SideProfilePoint.md +1 -1
- package/dist/docs/reference/geometry/SideProfileSegment.md +1 -1
- package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +1 -1
- package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +1 -1
- package/dist/docs/reference/geometry/SphereOptions.md +1 -1
- package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +1 -1
- package/dist/docs/reference/geometry/StrokeCap.md +1 -1
- package/dist/docs/reference/geometry/StrokeJoin.md +1 -1
- package/dist/docs/reference/geometry/StrokeOptions.md +1 -1
- package/dist/docs/reference/geometry/SvgImportOptions.md +16 -1
- package/dist/docs/reference/geometry/SvgRegionPreflight.md +16 -1
- package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +1 -1
- package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +1 -1
- package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +1 -1
- package/dist/docs/reference/geometry/SweepOptions.md +1 -1
- package/dist/docs/reference/geometry/SweepOrientation.md +1 -1
- package/dist/docs/reference/geometry/ThreadBevelOptions.md +1 -1
- package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +1 -1
- package/dist/docs/reference/geometry/ThreadCompensationOptions.md +1 -1
- package/dist/docs/reference/geometry/ThreadEndStyle.md +1 -1
- package/dist/docs/reference/geometry/ThreadEndTreatmentOptions.md +1 -1
- package/dist/docs/reference/geometry/ThreadHandedness.md +1 -1
- package/dist/docs/reference/geometry/ThreadHelixOptions.md +1 -1
- package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +1 -1
- package/dist/docs/reference/geometry/ThreadLeadInShape.md +1 -1
- package/dist/docs/reference/geometry/ThreadProfile-type.md +1 -1
- package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +1 -1
- package/dist/docs/reference/geometry/ThreadProfileSpec.md +1 -1
- package/dist/docs/reference/geometry/ThreadRole.md +1 -1
- package/dist/docs/reference/geometry/ThreadedNutBevel.md +1 -1
- package/dist/docs/reference/geometry/ThreadedNutOptions.md +1 -1
- package/dist/docs/reference/geometry/ThreadedNutPreflight.md +1 -1
- package/dist/docs/reference/geometry/ThreadedNutShape.md +1 -1
- package/dist/docs/reference/geometry/ThreadedRodOptions.md +1 -1
- package/dist/docs/reference/geometry/TorusOptions.md +1 -1
- package/dist/docs/reference/geometry/Transform2-type.md +1 -1
- package/dist/docs/reference/geometry/Transform2Data.md +1 -1
- package/dist/docs/reference/geometry/Transform2Input.md +1 -1
- package/dist/docs/reference/geometry/Transform3-type.md +1 -1
- package/dist/docs/reference/geometry/Transform3Data.md +1 -1
- package/dist/docs/reference/geometry/Transform3Input.md +1 -1
- package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +1 -1
- package/dist/docs/reference/geometry/TriangleMesh.md +1 -1
- package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +1 -1
- package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +1 -1
- package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +1 -1
- package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +1 -1
- package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +1 -1
- package/dist/docs/reference/geometry/TriangleMeshSignature.md +1 -1
- package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +1 -1
- package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +1 -1
- package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +1 -1
- package/dist/docs/reference/geometry/TriangularThreadProfileSpec.md +1 -1
- package/dist/docs/reference/geometry/TubeOptions.md +1 -1
- package/dist/docs/reference/geometry/Vector2-type.md +1 -1
- package/dist/docs/reference/geometry/Vector2Data.md +1 -1
- package/dist/docs/reference/geometry/Vector2Input.md +1 -1
- package/dist/docs/reference/geometry/Vector3-type.md +1 -1
- package/dist/docs/reference/geometry/Vector3Data.md +1 -1
- package/dist/docs/reference/geometry/Vector3Input.md +1 -1
- package/dist/docs/reference/geometry/VectorTextArcBaseline.md +1 -1
- package/dist/docs/reference/geometry/VectorTextLayout.md +1 -1
- package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +3 -3
- package/dist/docs/reference/geometry/VectorTextMetrics.md +1 -1
- package/dist/docs/reference/geometry/VectorTextOptions.md +1 -1
- package/dist/docs/reference/geometry/add2.md +1 -1
- package/dist/docs/reference/geometry/add3.md +1 -1
- package/dist/docs/reference/geometry/analyzeTriangleMesh.md +1 -1
- package/dist/docs/reference/geometry/analyzeTriangleMeshQuality.md +1 -1
- package/dist/docs/reference/geometry/anchor3.md +1 -1
- package/dist/docs/reference/geometry/anchorFrame3.md +1 -1
- package/dist/docs/reference/geometry/applyTransformDirection3.md +1 -1
- package/dist/docs/reference/geometry/applyTransformPoint3.md +1 -1
- package/dist/docs/reference/geometry/attachmentTransform3.md +1 -1
- package/dist/docs/reference/geometry/bounds2.md +7 -6
- package/dist/docs/reference/geometry/bounds3.md +7 -6
- package/dist/docs/reference/geometry/boundsCenter.md +1 -1
- package/dist/docs/reference/geometry/boundsSize.md +1 -1
- package/dist/docs/reference/geometry/boxAnchor3.md +1 -1
- package/dist/docs/reference/geometry/categories/bounds-layout.md +7 -8
- package/dist/docs/reference/geometry/categories/curves-paths.md +1 -1
- package/dist/docs/reference/geometry/categories/mechanical.md +1 -1
- package/dist/docs/reference/geometry/categories/meshes.md +1 -1
- package/dist/docs/reference/geometry/categories/pattern-placement.md +1 -1
- package/dist/docs/reference/geometry/categories/primitive-options.md +1 -1
- package/dist/docs/reference/geometry/categories/profiles-regions.md +1 -1
- package/dist/docs/reference/geometry/categories/resolution-errors.md +5 -2
- package/dist/docs/reference/geometry/categories/transforms-math.md +1 -1
- package/dist/docs/reference/geometry/categories/vector-import.md +1 -1
- package/dist/docs/reference/geometry/circleContour.md +1 -1
- package/dist/docs/reference/geometry/closeToAxis.md +1 -1
- package/dist/docs/reference/geometry/compensateThreadDiameters.md +1 -1
- package/dist/docs/reference/geometry/compensateThreadProfileAxially.md +1 -1
- package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +1 -1
- package/dist/docs/reference/geometry/composeTransform3.md +1 -1
- package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +1 -1
- package/dist/docs/reference/geometry/computeParallelTransportFrames.md +1 -1
- package/dist/docs/reference/geometry/computeTriangleMeshCentroid.md +1 -1
- package/dist/docs/reference/geometry/computeTriangleMeshSignature.md +1 -1
- package/dist/docs/reference/geometry/contourContainsPoint.md +1 -1
- package/dist/docs/reference/geometry/cross2.md +1 -1
- package/dist/docs/reference/geometry/cross3.md +1 -1
- package/dist/docs/reference/geometry/cylinderAnchor3.md +1 -1
- package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +1 -1
- package/dist/docs/reference/geometry/distance2.md +1 -1
- package/dist/docs/reference/geometry/distance3.md +1 -1
- package/dist/docs/reference/geometry/distributeAlongPath.md +1 -1
- package/dist/docs/reference/geometry/dot2.md +1 -1
- package/dist/docs/reference/geometry/dot3.md +1 -1
- package/dist/docs/reference/geometry/ellipseContour.md +1 -1
- package/dist/docs/reference/geometry/eulerTransform3.md +1 -1
- package/dist/docs/reference/geometry/extrudeMesh.md +1 -1
- package/dist/docs/reference/geometry/fitBounds.md +1 -1
- package/dist/docs/reference/geometry/fitTextLayout.md +1 -1
- package/dist/docs/reference/geometry/frameTransform3.md +1 -1
- package/dist/docs/reference/geometry/getMetricClearanceHoleDiameter.md +1 -1
- package/dist/docs/reference/geometry/getMetricFastenerStandard.md +1 -1
- package/dist/docs/reference/geometry/gridPatternTransforms.md +1 -1
- package/dist/docs/reference/geometry/heightfieldMesh.md +1 -1
- package/dist/docs/reference/geometry/helicalThreadRidgeMesh.md +1 -1
- package/dist/docs/reference/geometry/helicalThreadSolidMesh.md +1 -1
- package/dist/docs/reference/geometry/inverseTransform3.md +1 -1
- package/dist/docs/reference/geometry/isGeometryError.md +1 -1
- package/dist/docs/reference/geometry/joinTriangleMeshes.md +1 -1
- package/dist/docs/reference/geometry/layoutRow.md +1 -1
- package/dist/docs/reference/geometry/length2.md +1 -1
- package/dist/docs/reference/geometry/length3.md +1 -1
- package/dist/docs/reference/geometry/lerp2.md +1 -1
- package/dist/docs/reference/geometry/lerp3.md +1 -1
- package/dist/docs/reference/geometry/linearPatternTransforms.md +1 -1
- package/dist/docs/reference/geometry/loftMesh.md +1 -1
- package/dist/docs/reference/geometry/matchProfiles.md +1 -1
- package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +1 -1
- package/dist/docs/reference/geometry/meshBounds.md +1 -1
- package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +1 -1
- package/dist/docs/reference/geometry/normalize2.md +1 -1
- package/dist/docs/reference/geometry/normalize3.md +1 -1
- package/dist/docs/reference/geometry/normalizeContour.md +1 -1
- package/dist/docs/reference/geometry/normalizePolygon.md +1 -1
- package/dist/docs/reference/geometry/normalizeRegion.md +1 -1
- package/dist/docs/reference/geometry/optimizePlanarPatches.md +1 -1
- package/dist/docs/reference/geometry/path2.md +1 -1
- package/dist/docs/reference/geometry/path3.md +1 -1
- package/dist/docs/reference/geometry/pathPatternTransforms.md +1 -1
- package/dist/docs/reference/geometry/preflightHeightfield.md +1 -1
- package/dist/docs/reference/geometry/preflightHelicalThreadSolidMesh.md +1 -1
- package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +1 -1
- package/dist/docs/reference/geometry/preflightSvgRegion.md +12 -3
- package/dist/docs/reference/geometry/preflightThreadedNut.md +1 -1
- package/dist/docs/reference/geometry/preflightThreadedRod.md +1 -1
- package/dist/docs/reference/geometry/projectOntoPlane3.md +1 -1
- package/dist/docs/reference/geometry/radialPatternTransforms.md +1 -1
- package/dist/docs/reference/geometry/rectangleContour.md +1 -1
- package/dist/docs/reference/geometry/rectangleProfile.md +1 -1
- package/dist/docs/reference/geometry/regionArea.md +1 -1
- package/dist/docs/reference/geometry/regionBounds.md +1 -1
- package/dist/docs/reference/geometry/regularPolygonContour.md +1 -1
- package/dist/docs/reference/geometry/resamplePolyline2.md +1 -1
- package/dist/docs/reference/geometry/resamplePolyline3.md +1 -1
- package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +1 -1
- package/dist/docs/reference/geometry/resolveArcSegments.md +1 -1
- package/dist/docs/reference/geometry/resolveCircularSampling.md +40 -0
- package/dist/docs/reference/geometry/resolveCircularSegments.md +1 -1
- package/dist/docs/reference/geometry/resolveCylindricalGear.md +1 -1
- package/dist/docs/reference/geometry/resolveCylindricalGearPair.md +1 -1
- package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +1 -1
- package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +1 -1
- package/dist/docs/reference/geometry/resolveGeometryTolerance.md +1 -1
- package/dist/docs/reference/geometry/resolveKnuckleHinge.md +1 -1
- package/dist/docs/reference/geometry/resolvePrintableThreadFitPolicy.md +1 -1
- package/dist/docs/reference/geometry/resolveRackPitch.md +1 -1
- package/dist/docs/reference/geometry/resolveThreadCircularSegments.md +1 -1
- package/dist/docs/reference/geometry/reverseTriangleMesh.md +1 -1
- package/dist/docs/reference/geometry/revolveMesh.md +1 -1
- package/dist/docs/reference/geometry/rotate2.md +1 -1
- package/dist/docs/reference/geometry/rotationTransform3.md +1 -1
- package/dist/docs/reference/geometry/roundClosedPolylinePath.md +1 -1
- package/dist/docs/reference/geometry/sampleContour.md +1 -1
- package/dist/docs/reference/geometry/sampleCurve2.md +1 -1
- package/dist/docs/reference/geometry/sampleCurve3.md +1 -1
- package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +1 -1
- package/dist/docs/reference/geometry/sampleHelix.md +1 -1
- package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +1 -1
- package/dist/docs/reference/geometry/sampleRackToothPath.md +1 -1
- package/dist/docs/reference/geometry/sampleSideProfile.md +1 -1
- package/dist/docs/reference/geometry/sampleTextContours.md +1 -1
- package/dist/docs/reference/geometry/sampleThreadHelices.md +1 -1
- package/dist/docs/reference/geometry/scale2.md +1 -1
- package/dist/docs/reference/geometry/scale3.md +1 -1
- package/dist/docs/reference/geometry/scaleTransform3.md +1 -1
- package/dist/docs/reference/geometry/signedContourArea.md +1 -1
- package/dist/docs/reference/geometry/starContour.md +1 -1
- package/dist/docs/reference/geometry/strokeRegionData.md +1 -1
- package/dist/docs/reference/geometry/subtract2.md +1 -1
- package/dist/docs/reference/geometry/subtract3.md +1 -1
- package/dist/docs/reference/geometry/sweepMesh.md +1 -1
- package/dist/docs/reference/geometry/threadProfile.md +1 -1
- package/dist/docs/reference/geometry/transform2.md +1 -1
- package/dist/docs/reference/geometry/transform3.md +1 -1
- package/dist/docs/reference/geometry/transformDeterminant3.md +1 -1
- package/dist/docs/reference/geometry/transformRegionData.md +1 -1
- package/dist/docs/reference/geometry/transformTriangleMesh.md +1 -1
- package/dist/docs/reference/geometry/translationTransform3.md +1 -1
- package/dist/docs/reference/geometry/triangulateContour.md +1 -1
- package/dist/docs/reference/geometry/validateSolidMesh.md +1 -1
- package/dist/docs/reference/geometry/validateTransform3.md +1 -1
- package/dist/docs/reference/geometry/validateTriangleMesh.md +1 -1
- package/dist/docs/reference/geometry/vector2.md +1 -1
- package/dist/docs/reference/geometry/vector3.md +1 -1
- package/dist/docs/reference/geometry.md +1 -1
- package/dist/docs/reference/model/Anchor3.md +1 -1
- package/dist/docs/reference/model/AttachOptions.md +1 -1
- package/dist/docs/reference/model/Bounds2-type.md +1 -1
- package/dist/docs/reference/model/Bounds2Data.md +1 -1
- package/dist/docs/reference/model/Bounds2Input.md +1 -1
- package/dist/docs/reference/model/Bounds2Options.md +70 -0
- package/dist/docs/reference/model/Bounds3-type.md +1 -1
- package/dist/docs/reference/model/Bounds3Data.md +1 -1
- package/dist/docs/reference/model/Bounds3Input.md +1 -1
- package/dist/docs/reference/model/Bounds3Options.md +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 +1 -1
- 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 +1 -1
- package/dist/docs/reference/model/ComputedValue.md +1 -1
- package/dist/docs/reference/model/Contour.md +1 -1
- package/dist/docs/reference/model/CorrespondingComponent.md +1 -1
- package/dist/docs/reference/model/CorrespondingContour.md +1 -1
- package/dist/docs/reference/model/CorrespondingProfile.md +1 -1
- package/dist/docs/reference/model/CorrespondingProfileStation.md +1 -1
- package/dist/docs/reference/model/CylinderOptions.md +1 -1
- package/dist/docs/reference/model/DiagnosticOptions.md +1 -1
- package/dist/docs/reference/model/EdgeTreatment.md +1 -1
- package/dist/docs/reference/model/EllipseContourOptions.md +1 -1
- package/dist/docs/reference/model/EllipseOptions.md +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 +1 -1
- package/dist/docs/reference/model/FinalizedPart.md +1 -1
- package/dist/docs/reference/model/Frame3.md +1 -1
- package/dist/docs/reference/model/GenerateCallback.md +1 -1
- package/dist/docs/reference/model/GenerateContext.md +1 -1
- package/dist/docs/reference/model/GeneratedPart.md +1 -1
- package/dist/docs/reference/model/GenerationDiagnostic.md +1 -1
- package/dist/docs/reference/model/GenerationError.md +1 -1
- package/dist/docs/reference/model/GeometryResolution.md +1 -1
- package/dist/docs/reference/model/GeometrySamplingLimits.md +1 -1
- package/dist/docs/reference/model/GeometryToleranceOptions.md +1 -1
- package/dist/docs/reference/model/GridPatternOptions.md +1 -1
- package/dist/docs/reference/model/HeightfieldOptions.md +1 -1
- package/dist/docs/reference/model/HelicalThreadRidgeMeshOptions.md +1 -1
- package/dist/docs/reference/model/HelicalThreadSolidMeshPreflight.md +1 -1
- 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 +1 -1
- package/dist/docs/reference/model/ImmutableTriangleMesh.md +1 -1
- package/dist/docs/reference/model/ImplicitOptions.md +1 -1
- package/dist/docs/reference/model/InternalThreadCutterOptions.md +1 -1
- package/dist/docs/reference/model/KnuckleHinge-type.md +1 -1
- package/dist/docs/reference/model/KnuckleHingeBaseSpec.md +1 -1
- package/dist/docs/reference/model/KnuckleHingeHalfOptions.md +9 -5
- package/dist/docs/reference/model/KnuckleHingeOptions.md +3 -3
- package/dist/docs/reference/model/KnuckleHingeSamplingOptions.md +1 -1
- package/dist/docs/reference/model/KnuckleHingeSpec.md +1 -1
- package/dist/docs/reference/model/KnuckleHingeWeb.md +2 -2
- package/dist/docs/reference/model/LinearPatternOptions.md +1 -1
- package/dist/docs/reference/model/LoftCorrespondence.md +1 -1
- package/dist/docs/reference/model/LoftOptions.md +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 +1 -1
- package/dist/docs/reference/model/ModelingLimits.md +1 -1
- package/dist/docs/reference/model/NumericArray.md +1 -1
- package/dist/docs/reference/model/PartGeometry.md +1 -1
- package/dist/docs/reference/model/PartOptions.md +1 -1
- package/dist/docs/reference/model/Path2-type.md +1 -1
- package/dist/docs/reference/model/Path2Data.md +1 -1
- package/dist/docs/reference/model/Path2Input.md +1 -1
- package/dist/docs/reference/model/Path3-type.md +1 -1
- package/dist/docs/reference/model/Path3Data.md +1 -1
- package/dist/docs/reference/model/Path3Input.md +1 -1
- package/dist/docs/reference/model/PathLocation.md +1 -1
- package/dist/docs/reference/model/PathNormalGuide.md +1 -1
- package/dist/docs/reference/model/PathOptions.md +1 -1
- package/dist/docs/reference/model/PathPatternOptions.md +1 -1
- package/dist/docs/reference/model/PathResamplingOptions.md +1 -1
- package/dist/docs/reference/model/PatternSource.md +1 -1
- package/dist/docs/reference/model/Pivot2Options.md +1 -1
- package/dist/docs/reference/model/Pivot3Options.md +1 -1
- package/dist/docs/reference/model/PlaneOptions.md +1 -1
- package/dist/docs/reference/model/PolygonData.md +1 -1
- package/dist/docs/reference/model/PolygonOptions.md +1 -1
- package/dist/docs/reference/model/PrimitiveAttachment.md +1 -1
- package/dist/docs/reference/model/PrimitiveAttachmentOptions.md +1 -1
- package/dist/docs/reference/model/PrintableThreadFit.md +1 -1
- package/dist/docs/reference/model/PrintableThreadFitPolicy.md +1 -1
- package/dist/docs/reference/model/Profile.md +1 -1
- package/dist/docs/reference/model/ProfileComponent2.md +1 -1
- package/dist/docs/reference/model/ProfileContour2.md +1 -1
- package/dist/docs/reference/model/ProfileSpan2.md +1 -1
- package/dist/docs/reference/model/ProfiledEdgeTreatment.md +1 -1
- package/dist/docs/reference/model/RadialPatternOptions.md +1 -1
- package/dist/docs/reference/model/RadialSizing.md +1 -1
- package/dist/docs/reference/model/RadialSizingOptions.md +1 -1
- package/dist/docs/reference/model/RectangleContourOptions.md +1 -1
- package/dist/docs/reference/model/RectangleCornerTreatment.md +1 -1
- package/dist/docs/reference/model/RectangleCornerTreatments.md +1 -1
- package/dist/docs/reference/model/RectangleOptions.md +1 -1
- package/dist/docs/reference/model/RegionData.md +1 -1
- package/dist/docs/reference/model/RegularPolygonOptions.md +1 -1
- package/dist/docs/reference/model/RevolveOptions.md +1 -1
- package/dist/docs/reference/model/RoundedEdgeTreatment.md +1 -1
- package/dist/docs/reference/model/Section.md +1 -1
- package/dist/docs/reference/model/SectionHullOptions.md +1 -1
- package/dist/docs/reference/model/SectionInspection.md +1 -1
- 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 +1 -1
- package/dist/docs/reference/model/SolidInspection.md +1 -1
- package/dist/docs/reference/model/SolidSegmentHit.md +1 -1
- 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 +1 -1
- package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +1 -1
- package/dist/docs/reference/model/ThreadHandedness.md +1 -1
- package/dist/docs/reference/model/ThreadLeadInEnvelope.md +1 -1
- package/dist/docs/reference/model/ThreadLeadInShape.md +1 -1
- package/dist/docs/reference/model/ThreadProfile.md +1 -1
- package/dist/docs/reference/model/ThreadRidgeOptions.md +1 -1
- package/dist/docs/reference/model/ThreadedNutBevel.md +1 -1
- package/dist/docs/reference/model/ThreadedNutOptions.md +1 -1
- package/dist/docs/reference/model/ThreadedNutPreflight.md +1 -1
- package/dist/docs/reference/model/ThreadedNutShape.md +1 -1
- package/dist/docs/reference/model/ThreadedRodOptions.md +1 -1
- package/dist/docs/reference/model/TorusOptions.md +1 -1
- package/dist/docs/reference/model/Transform2-type.md +1 -1
- package/dist/docs/reference/model/Transform2Data.md +1 -1
- package/dist/docs/reference/model/Transform2Input.md +1 -1
- package/dist/docs/reference/model/Transform3-type.md +1 -1
- package/dist/docs/reference/model/Transform3Data.md +1 -1
- package/dist/docs/reference/model/Transform3Input.md +1 -1
- package/dist/docs/reference/model/TriangleMesh.md +1 -1
- package/dist/docs/reference/model/TriangleMeshAnalysis.md +1 -1
- package/dist/docs/reference/model/TriangleMeshMeasurements.md +1 -1
- package/dist/docs/reference/model/TubeOptions.md +1 -1
- package/dist/docs/reference/model/Vector2-type.md +1 -1
- package/dist/docs/reference/model/Vector2Data.md +1 -1
- package/dist/docs/reference/model/Vector2Input.md +1 -1
- package/dist/docs/reference/model/Vector3-type.md +1 -1
- package/dist/docs/reference/model/Vector3Data.md +1 -1
- package/dist/docs/reference/model/Vector3Input.md +1 -1
- package/dist/docs/reference/model/VectorTextLayout.md +1 -1
- package/dist/docs/reference/model/VectorTextMetrics.md +1 -1
- package/dist/docs/reference/model/anchor.md +1 -1
- package/dist/docs/reference/model/bounds2.md +7 -6
- package/dist/docs/reference/model/bounds3.md +7 -6
- package/dist/docs/reference/model/box.md +1 -1
- package/dist/docs/reference/model/castSegment.md +1 -1
- package/dist/docs/reference/model/categories/boolean-operations.md +1 -1
- package/dist/docs/reference/model/categories/bounded-surfaces.md +1 -1
- package/dist/docs/reference/model/categories/bounds.md +5 -3
- package/dist/docs/reference/model/categories/contracts.md +1 -1
- package/dist/docs/reference/model/categories/core-values-errors.md +1 -1
- package/dist/docs/reference/model/categories/explicit-profiles.md +1 -1
- package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +1 -1
- package/dist/docs/reference/model/categories/generation.md +1 -1
- package/dist/docs/reference/model/categories/hinges.md +2 -2
- package/dist/docs/reference/model/categories/inspection.md +1 -1
- package/dist/docs/reference/model/categories/mesh-inspection.md +1 -1
- package/dist/docs/reference/model/categories/paths.md +1 -1
- package/dist/docs/reference/model/categories/primitives.md +5 -1
- package/dist/docs/reference/model/categories/resolution.md +1 -1
- package/dist/docs/reference/model/categories/sections.md +1 -1
- package/dist/docs/reference/model/categories/threads.md +1 -1
- package/dist/docs/reference/model/categories/transforms-placement.md +1 -1
- 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 +1 -1
- package/dist/docs/reference/model/gridPattern.md +1 -1
- package/dist/docs/reference/model/heightfield.md +1 -1
- package/dist/docs/reference/model/holeCutter.md +45 -0
- package/dist/docs/reference/model/hull.md +1 -1
- package/dist/docs/reference/model/immutableBuffer.md +1 -1
- package/dist/docs/reference/model/immutableMesh.md +1 -1
- package/dist/docs/reference/model/implicit.md +1 -1
- package/dist/docs/reference/model/inspectSection.md +1 -1
- package/dist/docs/reference/model/inspectSolid.md +1 -1
- package/dist/docs/reference/model/internalThreadCutter.md +1 -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 +3 -3
- package/dist/docs/reference/model/linearPattern.md +1 -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 +1 -1
- package/dist/docs/reference/model/path3.md +1 -1
- package/dist/docs/reference/model/pathPattern.md +1 -1
- package/dist/docs/reference/model/polygon.md +1 -1
- package/dist/docs/reference/model/preflightInternalThreadCutter.md +1 -1
- package/dist/docs/reference/model/preflightThreadedNut.md +1 -1
- package/dist/docs/reference/model/preflightThreadedRod.md +1 -1
- package/dist/docs/reference/model/radialPattern.md +1 -1
- package/dist/docs/reference/model/rectangle.md +1 -1
- 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 +1 -1
- package/dist/docs/reference/model/threadedNut.md +1 -1
- package/dist/docs/reference/model/threadedRod.md +1 -1
- package/dist/docs/reference/model/torus.md +1 -1
- package/dist/docs/reference/model/transform2.md +1 -1
- package/dist/docs/reference/model/transform3.md +1 -1
- package/dist/docs/reference/model/tube.md +1 -1
- package/dist/docs/reference/model/union.md +1 -1
- package/dist/docs/reference/model/vector2.md +1 -1
- package/dist/docs/reference/model/vector3.md +1 -1
- package/dist/docs/reference/model.md +1 -1
- package/dist/docs/reference/text/Bounds2Data.md +1 -1
- package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +1 -1
- package/dist/docs/reference/text/Vector2Data.md +1 -1
- package/dist/docs/reference/text/VectorFont.md +7 -7
- package/dist/docs/reference/text/VectorFontOptions.md +1 -1
- package/dist/docs/reference/text/VectorTextArcBaseline.md +1 -1
- package/dist/docs/reference/text/VectorTextLayout.md +1 -1
- package/dist/docs/reference/text/VectorTextLayoutOptions.md +3 -3
- package/dist/docs/reference/text/VectorTextMetrics.md +1 -1
- package/dist/docs/reference/text/VectorTextOptions.md +1 -1
- package/dist/docs/reference/text/categories/font-preparation.md +1 -1
- package/dist/docs/reference/text/prepareVectorFont.md +1 -1
- package/dist/docs/reference/text.md +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 +55 -12
- package/dist/engine/modeling-context.js +12 -0
- package/dist/engine/primitive-operations.js +19 -6
- package/dist/engine/section-operations.js +1 -1
- package/dist/geometry/bounds-value.js +37 -9
- package/dist/geometry/bounds.js +0 -17
- package/dist/geometry/circular-sampling.js +45 -0
- package/dist/geometry/convex-offset.js +41 -0
- package/dist/geometry/index.js +2 -1
- package/dist/geometry/math/immutable-value.js +1 -1
- package/dist/geometry/profiles/profiles.js +3 -23
- package/dist/geometry/svg/matrix.js +21 -0
- package/dist/geometry/svg-import.js +134 -52
- 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/operations.js +23 -2
- package/dist/model/recipe-declaration.js +1 -0
- package/package.json +1 -1
- package/dist/docs/reference/geometry/BoundsFromSizeOptions.md +0 -24
- package/dist/docs/reference/geometry/boundsFromSize.md +0 -84
- package/dist/docs/reference/geometry/containsBounds.md +0 -73
|
@@ -30,7 +30,7 @@ Shape horizontal lines or one circular line; bounded to 512 UTF-16 units and sup
|
|
|
30
30
|
|
|
31
31
|
Em size in millimetres, greater than zero and at most 10000; not the visible glyph height.
|
|
32
32
|
|
|
33
|
-
- [`align`](VectorTextLayoutOptions.md#align) · `"
|
|
33
|
+
- [`align`](VectorTextLayoutOptions.md#align) · `"center"` \| `"left"` \| `"right"` · Optional
|
|
34
34
|
|
|
35
35
|
Place the advance's start, midpoint or end at the datum; defaults to center on arcs, otherwise left.
|
|
36
36
|
|
|
@@ -42,7 +42,7 @@ Shape horizontal lines or one circular line; bounded to 512 UTF-16 units and sup
|
|
|
42
42
|
|
|
43
43
|
Baseline spacing in ems, 0.5–5; omitted uses the selected face's natural vertical metrics.
|
|
44
44
|
|
|
45
|
-
- [`verticalAlign`](VectorTextLayoutOptions.md#verticalalign) · `"
|
|
45
|
+
- [`verticalAlign`](VectorTextLayoutOptions.md#verticalalign) · `"center"` \| `"top"` \| `"bottom"` \| `"baseline"` · Optional
|
|
46
46
|
|
|
47
47
|
Place the first baseline or complete ink bounds at Y=0; arcs only accept baseline.
|
|
48
48
|
|
|
@@ -88,7 +88,7 @@ Measure the same cached vector layout; all returned lengths are in millimetres.
|
|
|
88
88
|
|
|
89
89
|
Em size in millimetres, greater than zero and at most 10000; not the visible glyph height.
|
|
90
90
|
|
|
91
|
-
- [`align`](VectorTextLayoutOptions.md#align) · `"
|
|
91
|
+
- [`align`](VectorTextLayoutOptions.md#align) · `"center"` \| `"left"` \| `"right"` · Optional
|
|
92
92
|
|
|
93
93
|
Place the advance's start, midpoint or end at the datum; defaults to center on arcs, otherwise left.
|
|
94
94
|
|
|
@@ -100,7 +100,7 @@ Measure the same cached vector layout; all returned lengths are in millimetres.
|
|
|
100
100
|
|
|
101
101
|
Baseline spacing in ems, 0.5–5; omitted uses the selected face's natural vertical metrics.
|
|
102
102
|
|
|
103
|
-
- [`verticalAlign`](VectorTextLayoutOptions.md#verticalalign) · `"
|
|
103
|
+
- [`verticalAlign`](VectorTextLayoutOptions.md#verticalalign) · `"center"` \| `"top"` \| `"bottom"` \| `"baseline"` · Optional
|
|
104
104
|
|
|
105
105
|
Place the first baseline or complete ink bounds at Y=0; arcs only accept baseline.
|
|
106
106
|
|
|
@@ -146,7 +146,7 @@ Serialize visible horizontal or circular outlines as bounded path-only SVG in ph
|
|
|
146
146
|
|
|
147
147
|
Em size in millimetres, greater than zero and at most 10000; not the visible glyph height.
|
|
148
148
|
|
|
149
|
-
- [`align`](VectorTextLayoutOptions.md#align) · `"
|
|
149
|
+
- [`align`](VectorTextLayoutOptions.md#align) · `"center"` \| `"left"` \| `"right"` · Optional
|
|
150
150
|
|
|
151
151
|
Place the advance's start, midpoint or end at the datum; defaults to center on arcs, otherwise left.
|
|
152
152
|
|
|
@@ -158,7 +158,7 @@ Serialize visible horizontal or circular outlines as bounded path-only SVG in ph
|
|
|
158
158
|
|
|
159
159
|
Baseline spacing in ems, 0.5–5; omitted uses the selected face's natural vertical metrics.
|
|
160
160
|
|
|
161
|
-
- [`verticalAlign`](VectorTextLayoutOptions.md#verticalalign) · `"
|
|
161
|
+
- [`verticalAlign`](VectorTextLayoutOptions.md#verticalalign) · `"center"` \| `"top"` \| `"bottom"` \| `"baseline"` · Optional
|
|
162
162
|
|
|
163
163
|
Place the first baseline or complete ink bounds at Y=0; arcs only accept baseline.
|
|
164
164
|
|
|
@@ -183,4 +183,4 @@ Serialize visible horizontal or circular outlines as bounded path-only SVG in ph
|
|
|
183
183
|
- [VectorTextLayoutOptions](VectorTextLayoutOptions.md)
|
|
184
184
|
- [VectorTextMetrics](VectorTextMetrics.md)
|
|
185
185
|
|
|
186
|
-
Package: `@metamesh/modeling@0.
|
|
186
|
+
Package: `@metamesh/modeling@0.17.0`.
|
|
@@ -12,7 +12,7 @@ Text bounded to 512 UTF-16 units: horizontal lines or one circular line without
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
`readonly` `optional` **align?**: `"
|
|
15
|
+
`readonly` `optional` **align?**: `"center"` \| `"left"` \| `"right"`
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
|
|
@@ -48,7 +48,7 @@ Baseline spacing in ems, 0.5–5; omitted uses the selected face's natural verti
|
|
|
48
48
|
|
|
49
49
|
|
|
50
50
|
|
|
51
|
-
`readonly` `optional` **verticalAlign?**: `"
|
|
51
|
+
`readonly` `optional` **verticalAlign?**: `"center"` \| `"top"` \| `"bottom"` \| `"baseline"`
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
|
|
@@ -108,4 +108,4 @@ Tracking between glyph clusters in millimetres, -100–100; defaults to zero.
|
|
|
108
108
|
- [VectorTextArcBaseline](VectorTextArcBaseline.md)
|
|
109
109
|
- [VectorTextOptions](VectorTextOptions.md)
|
|
110
110
|
|
|
111
|
-
Package: `@metamesh/modeling@0.
|
|
111
|
+
Package: `@metamesh/modeling@0.17.0`.
|
|
@@ -37,4 +37,4 @@ Layout returns immutable paths and metrics in Y-up millimetres. Pass the prepare
|
|
|
37
37
|
| --- | --- |
|
|
38
38
|
| [MAX_VECTOR_FONT_BYTES](../MAX_VECTOR_FONT_BYTES.md) | Limits apply before parsing or shaping untrusted font data. |
|
|
39
39
|
|
|
40
|
-
Package: `@metamesh/modeling@0.
|
|
40
|
+
Package: `@metamesh/modeling@0.17.0`.
|
|
@@ -20,4 +20,4 @@ Paths and metrics use Y-up millimetres and a baseline origin. Empty layouts can
|
|
|
20
20
|
|
|
21
21
|
- [Font preparation](text/categories/font-preparation.md) — Prepare bounded exact font bytes and reusable vector layouts.
|
|
22
22
|
|
|
23
|
-
Package: `@metamesh/modeling@0.
|
|
23
|
+
Package: `@metamesh/modeling@0.17.0`.
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { convexContourOffsets } from "../geometry/convex-offset.js";
|
|
1
2
|
import { edgeTreatmentPointCount, edgeTreatmentSetbacks, sampleEdgeTreatment, } from "../geometry/edge-finishing.js";
|
|
2
3
|
import { GeometryError } from "../geometry/errors.js";
|
|
3
4
|
import { resolveExtrusionControls } from "../geometry/extrusion.js";
|
|
@@ -19,22 +20,7 @@ export function buildFinishedExtrusion(module, profile, options) {
|
|
|
19
20
|
if (profile.components.length !== 1 || profile.components[0].holes.length !== 0)
|
|
20
21
|
fail("End treatments require one convex contour without holes; use explicit loft profiles for other topology.");
|
|
21
22
|
const contour = profile.components[0].outer, points = contour.points;
|
|
22
|
-
const
|
|
23
|
-
const next = points[(index + 1) % points.length], dx = next[0] - point[0], dy = next[1] - point[1];
|
|
24
|
-
const length = Math.hypot(dx, dy);
|
|
25
|
-
if (!(length > 0) || !Number.isFinite(length))
|
|
26
|
-
fail("End treatment contours must have distinct finite vertices.");
|
|
27
|
-
return [dx / length, dy / length];
|
|
28
|
-
});
|
|
29
|
-
const miters = edges.map((edge, index) => {
|
|
30
|
-
const previous = edges[(index + edges.length - 1) % edges.length];
|
|
31
|
-
const turn = previous[0] * edge[1] - previous[1] * edge[0];
|
|
32
|
-
if (!(turn > 1e-12))
|
|
33
|
-
fail("End treatments require a strictly convex counterclockwise contour without collinear vertices.");
|
|
34
|
-
const denominator = 1 + previous[0] * edge[0] + previous[1] * edge[1];
|
|
35
|
-
return [(-previous[1] - edge[1]) / denominator, (previous[0] + edge[0]) / denominator];
|
|
36
|
-
});
|
|
37
|
-
const magnification = miters.reduce((maximum, [x, y]) => Math.max(maximum, Math.hypot(x, y)), 1);
|
|
23
|
+
const { magnification, offset } = convexContourOffsets(points, "extrude");
|
|
38
24
|
const sampling = {
|
|
39
25
|
resolution: options.resolution,
|
|
40
26
|
limits: options.limits,
|
|
@@ -58,19 +44,6 @@ export function buildFinishedExtrusion(module, profile, options) {
|
|
|
58
44
|
...bottomPoints.map(([inset, depth]) => ({ inset, z: depth })),
|
|
59
45
|
...[...topPoints].reverse().map(([inset, depth]) => ({ inset, z: options.height - depth })),
|
|
60
46
|
];
|
|
61
|
-
const offset = (inset) => {
|
|
62
|
-
const result = points.map(([x, y], index) => [
|
|
63
|
-
x + miters[index][0] * inset,
|
|
64
|
-
y + miters[index][1] * inset,
|
|
65
|
-
]);
|
|
66
|
-
for (let index = 0; index < result.length; index++) {
|
|
67
|
-
const point = result[index], next = result[(index + 1) % result.length], edge = edges[index];
|
|
68
|
-
if (!point.every(Number.isFinite) ||
|
|
69
|
-
!((next[0] - point[0]) * edge[0] + (next[1] - point[1]) * edge[1] > 0))
|
|
70
|
-
fail("End treatment inset collapses or reverses a contour edge.");
|
|
71
|
-
}
|
|
72
|
-
return result;
|
|
73
|
-
};
|
|
74
47
|
offset(Math.max(bottomSize[0], topSize[0])); // fit fails before allocating the full station family
|
|
75
48
|
const stations = rows.map(({ inset, z }) => ({
|
|
76
49
|
z: controls.center ? z - options.height / 2 : z,
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { convexContourOffsets } from "../geometry/convex-offset.js";
|
|
2
|
+
import { GeometryError } from "../geometry/errors.js";
|
|
3
|
+
import { assertPrimitiveOptions } from "../geometry/primitive-resolvers.js";
|
|
4
|
+
/** Composes cutters inside the evaluating host, retaining deferred Section and sampling ownership. */
|
|
5
|
+
export function createHoleCutterOperation(environment, operations) {
|
|
6
|
+
return (options) => {
|
|
7
|
+
environment.assertActive();
|
|
8
|
+
assertPrimitiveOptions(options, "holeCutter");
|
|
9
|
+
const fail = (message) => {
|
|
10
|
+
throw new GeometryError("INVALID_ARGUMENT", message, { operation: "holeCutter" });
|
|
11
|
+
};
|
|
12
|
+
const positive = (value, name) => {
|
|
13
|
+
if (!Number.isFinite(value) || value <= 0)
|
|
14
|
+
fail(`${name} must be finite and positive.`);
|
|
15
|
+
return value;
|
|
16
|
+
};
|
|
17
|
+
const nonnegative = (value, name) => {
|
|
18
|
+
if (!Number.isFinite(value) || value < 0)
|
|
19
|
+
fail(`${name} must be finite and nonnegative.`);
|
|
20
|
+
return value;
|
|
21
|
+
};
|
|
22
|
+
const height = positive(options.height, "height");
|
|
23
|
+
const circular = options.diameter !== undefined;
|
|
24
|
+
if (circular === (options.profile !== undefined))
|
|
25
|
+
fail("Specify exactly one diameter or Section profile.");
|
|
26
|
+
if (!circular &&
|
|
27
|
+
(options.recess !== undefined ||
|
|
28
|
+
options.segments !== undefined ||
|
|
29
|
+
options.sizing !== undefined))
|
|
30
|
+
fail("Circular recess, segments and sizing options require a diameter.");
|
|
31
|
+
if (options.recess !== undefined && options.entryChamfer !== undefined)
|
|
32
|
+
fail("A recess and entryChamfer are mutually exclusive.");
|
|
33
|
+
const face = options.face ?? "top";
|
|
34
|
+
if (face !== "top" && face !== "bottom")
|
|
35
|
+
fail("face must be top or bottom.");
|
|
36
|
+
if (options.overrun !== undefined)
|
|
37
|
+
assertPrimitiveOptions(options.overrun, "holeCutter");
|
|
38
|
+
const bottom = nonnegative(options.overrun?.bottom ?? 0, "overrun.bottom");
|
|
39
|
+
const top = nonnegative(options.overrun?.top ?? 0, "overrun.top");
|
|
40
|
+
const length = positive(height + bottom + top, "extended height");
|
|
41
|
+
const chamfer = nonnegative(options.entryChamfer ?? 0, "entryChamfer");
|
|
42
|
+
if (chamfer >= height)
|
|
43
|
+
fail("entryChamfer must be smaller than height.");
|
|
44
|
+
const selected = environment.withResolutionDefaults(options);
|
|
45
|
+
const sampling = { resolution: selected.resolution, limits: selected.limits };
|
|
46
|
+
if (circular)
|
|
47
|
+
positive(options.diameter, "diameter");
|
|
48
|
+
if (options.recess !== undefined) {
|
|
49
|
+
const recess = options.recess;
|
|
50
|
+
assertPrimitiveOptions(recess, "holeCutter");
|
|
51
|
+
positive(recess.diameter, "recess.diameter");
|
|
52
|
+
if (recess.diameter <= options.diameter)
|
|
53
|
+
fail("The recess diameter must exceed the bore diameter.");
|
|
54
|
+
let depth;
|
|
55
|
+
if (recess.kind === "counterbore")
|
|
56
|
+
depth = positive(recess.depth, "recess.depth");
|
|
57
|
+
else if (recess.kind === "countersink") {
|
|
58
|
+
if (!Number.isFinite(recess.includedAngle) ||
|
|
59
|
+
recess.includedAngle <= 0 ||
|
|
60
|
+
recess.includedAngle >= 180)
|
|
61
|
+
fail("Countersink includedAngle must be between zero and 180 degrees.");
|
|
62
|
+
depth = positive((recess.diameter - options.diameter) /
|
|
63
|
+
(2 * Math.tan((recess.includedAngle * Math.PI) / 360)), "recess depth");
|
|
64
|
+
}
|
|
65
|
+
else
|
|
66
|
+
return fail("Unsupported recess kind.");
|
|
67
|
+
if (depth > height)
|
|
68
|
+
fail("The recess must fit within height.");
|
|
69
|
+
const segments = environment.resolveCircularSegments(recess.diameter / 2, options);
|
|
70
|
+
const common = { ...sampling, segments, sizing: options.sizing ?? "vertex", center: false };
|
|
71
|
+
const bore = operations.translate(operations.cylinder({ ...common, diameter: options.diameter, height: length }), [0, 0, -bottom]);
|
|
72
|
+
const seat = operations.translate(operations.cylinder({
|
|
73
|
+
...common,
|
|
74
|
+
diameter: recess.kind === "counterbore"
|
|
75
|
+
? recess.diameter
|
|
76
|
+
: face === "top"
|
|
77
|
+
? [options.diameter, recess.diameter]
|
|
78
|
+
: [recess.diameter, options.diameter],
|
|
79
|
+
height: depth,
|
|
80
|
+
}), [0, 0, face === "top" ? height - depth : 0]);
|
|
81
|
+
const excess = face === "top" ? top : bottom;
|
|
82
|
+
return operations.union([
|
|
83
|
+
bore,
|
|
84
|
+
seat,
|
|
85
|
+
...(excess === 0
|
|
86
|
+
? []
|
|
87
|
+
: [
|
|
88
|
+
operations.translate(operations.cylinder({
|
|
89
|
+
...common,
|
|
90
|
+
diameter: recess.diameter,
|
|
91
|
+
height: excess,
|
|
92
|
+
}), [0, 0, face === "top" ? height : -bottom]),
|
|
93
|
+
]),
|
|
94
|
+
]);
|
|
95
|
+
}
|
|
96
|
+
if (circular) {
|
|
97
|
+
const openingOverrun = face === "top" ? top : bottom;
|
|
98
|
+
const segments = environment.resolveCircularSegments(options.diameter / 2 + chamfer + (chamfer === 0 ? 0 : openingOverrun), options);
|
|
99
|
+
const common = { ...sampling, segments, sizing: options.sizing ?? "vertex", center: false };
|
|
100
|
+
const bore = operations.translate(operations.cylinder({
|
|
101
|
+
...common,
|
|
102
|
+
diameter: options.diameter,
|
|
103
|
+
height: length,
|
|
104
|
+
}), [0, 0, -bottom]);
|
|
105
|
+
if (chamfer === 0)
|
|
106
|
+
return bore;
|
|
107
|
+
// Circular entries retain nominal radial dimensions. Section entries below instead
|
|
108
|
+
// offset their supplied polygon edges; their faceted envelope remains authoritative.
|
|
109
|
+
const mouth = options.diameter + 2 * (chamfer + openingOverrun);
|
|
110
|
+
const entry = operations.translate(operations.cylinder({
|
|
111
|
+
...common,
|
|
112
|
+
diameter: face === "top" ? [options.diameter, mouth] : [mouth, options.diameter],
|
|
113
|
+
height: chamfer + openingOverrun,
|
|
114
|
+
}), [0, 0, face === "top" ? height - chamfer : -bottom]);
|
|
115
|
+
return operations.union([bore, entry]);
|
|
116
|
+
}
|
|
117
|
+
const profile = options.profile;
|
|
118
|
+
if (chamfer === 0)
|
|
119
|
+
return operations.translate(operations.extrude(profile, { ...sampling, height: length }), [
|
|
120
|
+
0,
|
|
121
|
+
0,
|
|
122
|
+
-bottom,
|
|
123
|
+
]);
|
|
124
|
+
const source = environment.sectionProfileFor(profile);
|
|
125
|
+
if (source.components.length !== 1 || source.components[0].holes.length !== 0)
|
|
126
|
+
fail("Entry chamfers require one strictly convex contour without holes.");
|
|
127
|
+
const component = source.components[0];
|
|
128
|
+
const offset = convexContourOffsets(component.outer.points, "holeCutter").offset;
|
|
129
|
+
const rows = face === "top"
|
|
130
|
+
? [
|
|
131
|
+
{ z: -bottom, inset: 0 },
|
|
132
|
+
{ z: height - chamfer, inset: 0 },
|
|
133
|
+
{ z: height + top, inset: -chamfer - top },
|
|
134
|
+
]
|
|
135
|
+
: [
|
|
136
|
+
{ z: -bottom, inset: -chamfer - bottom },
|
|
137
|
+
{ z: chamfer, inset: 0 },
|
|
138
|
+
{ z: height + top, inset: 0 },
|
|
139
|
+
];
|
|
140
|
+
const stations = rows.map(({ z, inset }) => ({
|
|
141
|
+
z,
|
|
142
|
+
profile: {
|
|
143
|
+
components: [{ ...component, outer: { ...component.outer, points: offset(inset) } }],
|
|
144
|
+
},
|
|
145
|
+
}));
|
|
146
|
+
return operations.loft(stations, sampling);
|
|
147
|
+
};
|
|
148
|
+
}
|
|
@@ -15,12 +15,12 @@ export function createKnuckleHingeOperation(environment, operations) {
|
|
|
15
15
|
};
|
|
16
16
|
const validateHalf = (half = {}) => {
|
|
17
17
|
assertPrimitiveOptions(half, "knuckleHinge");
|
|
18
|
-
const chamfer = half.
|
|
18
|
+
const chamfer = half.chamfer ?? 0;
|
|
19
19
|
if (!Number.isFinite(chamfer) ||
|
|
20
20
|
chamfer < 0 ||
|
|
21
21
|
2 * chamfer >= d.knuckleLength ||
|
|
22
22
|
chamfer >= d.minimumBarrelWall)
|
|
23
|
-
invalid("
|
|
23
|
+
invalid("chamfer must be nonnegative and leave a positive axial band and faceted barrel wall.");
|
|
24
24
|
const web = half.web;
|
|
25
25
|
if (web !== undefined) {
|
|
26
26
|
assertPrimitiveOptions(web, "knuckleHinge");
|
|
@@ -33,6 +33,9 @@ export function createKnuckleHingeOperation(environment, operations) {
|
|
|
33
33
|
!Number.isFinite(web.zMin) ||
|
|
34
34
|
!Number.isFinite(web.zMin + web.thickness))
|
|
35
35
|
invalid("Web dimensions must be finite, with positive reach and thickness.");
|
|
36
|
+
if (2 * chamfer >= web.thickness ||
|
|
37
|
+
2 * Math.SQRT2 * chamfer >= Math.min(d.knuckleLength, web.reach))
|
|
38
|
+
invalid("chamfer must leave a positive web band and noncollapsed end contours.");
|
|
36
39
|
const innerRadius = d.barrelRadius * Math.cos(Math.PI / d.segments);
|
|
37
40
|
if (web.zMin >= innerRadius || web.zMin + web.thickness <= -innerRadius)
|
|
38
41
|
invalid("A web must overlap the interior of its barrel.");
|
|
@@ -59,26 +62,66 @@ export function createKnuckleHingeOperation(environment, operations) {
|
|
|
59
62
|
}), [0, 90, 0]), [start, 0, 0]);
|
|
60
63
|
const buildHalf = (side, { chamfer, web }) => {
|
|
61
64
|
const features = [];
|
|
65
|
+
// Use the web bottom as the shared Float32 datum for barrel, web, and mounting bevels.
|
|
66
|
+
const baseZ = chamfer > 0 && web !== undefined ? web.zMin : 0;
|
|
67
|
+
const atBase = (solid) => operations.translate(solid, [0, 0, -baseZ]);
|
|
68
|
+
const webProfile = (web, inset) => {
|
|
69
|
+
// Parallel offsets finish the exposed tip; the two root corners stay square.
|
|
70
|
+
const corner = { kind: "chamfer", distance: chamfer + (Math.SQRT2 - 2) * inset };
|
|
71
|
+
const profile = operations.rectangle({
|
|
72
|
+
size: [d.knuckleLength - 2 * inset, web.reach - inset],
|
|
73
|
+
center: false,
|
|
74
|
+
treatment: [corner, corner, { kind: "square" }, { kind: "square" }],
|
|
75
|
+
});
|
|
76
|
+
return operations.scale(operations.translate(profile, [inset, 0]), [
|
|
77
|
+
1,
|
|
78
|
+
web.direction === "positive-y" ? 1 : -1,
|
|
79
|
+
]);
|
|
80
|
+
};
|
|
62
81
|
for (const interval of d.knuckles) {
|
|
63
82
|
if (interval.side !== side)
|
|
64
83
|
continue;
|
|
65
|
-
features.push(axial(d.barrelRadius, interval.start, interval.length, false, chamfer));
|
|
66
|
-
if (web !== undefined)
|
|
67
|
-
features.push(
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
84
|
+
features.push(atBase(axial(d.barrelRadius, interval.start, interval.length, false, chamfer)));
|
|
85
|
+
if (web !== undefined) {
|
|
86
|
+
features.push(chamfer === 0
|
|
87
|
+
? operations.translate(operations.box({
|
|
88
|
+
size: [interval.length, web.reach, web.thickness],
|
|
89
|
+
center: false,
|
|
90
|
+
}), [
|
|
91
|
+
interval.start,
|
|
92
|
+
web.direction === "positive-y" ? 0 : -web.reach,
|
|
93
|
+
web.zMin - baseZ,
|
|
94
|
+
])
|
|
95
|
+
: operations.loft([
|
|
96
|
+
[chamfer, 0],
|
|
97
|
+
[0, chamfer],
|
|
98
|
+
[0, web.thickness - chamfer],
|
|
99
|
+
[chamfer, web.thickness],
|
|
100
|
+
].map(([inset, z]) => ({
|
|
101
|
+
profile: webProfile(web, inset),
|
|
102
|
+
frame: {
|
|
103
|
+
origin: [interval.start, 0, z],
|
|
104
|
+
xAxis: [1, 0, 0],
|
|
105
|
+
yAxis: [0, 1, 0],
|
|
106
|
+
zAxis: [0, 0, 1],
|
|
107
|
+
},
|
|
108
|
+
}))));
|
|
109
|
+
}
|
|
71
110
|
}
|
|
72
111
|
if (side === "a" && d.pin !== null)
|
|
73
|
-
features.push(axial(d.pinRadius, d.pin.start, d.pin.length));
|
|
74
|
-
|
|
112
|
+
features.push(atBase(axial(d.pinRadius, d.pin.start, d.pin.length)));
|
|
113
|
+
// Match the kernel cylinders to the same mesh precision as the explicit web stations.
|
|
114
|
+
const solid = operations.union(features.map((feature) => chamfer === 0 || web === undefined
|
|
115
|
+
? feature
|
|
116
|
+
: operations.solidFromMesh(environment.analyzedMeshFor(feature).mesh)));
|
|
75
117
|
// Overtravel is numerical cutter extent, independent of the physical radial/axial allowances.
|
|
76
118
|
const overtravel = Math.min(d.knuckleLength, d.barrelRadius) * 0.01;
|
|
77
|
-
|
|
119
|
+
const result = side === "a" && d.pin !== null
|
|
78
120
|
? solid
|
|
79
121
|
: operations.subtract(solid, [
|
|
80
|
-
axial(d.boreRadius, -d.spec.length / 2 - overtravel, d.spec.length + 2 * overtravel, true),
|
|
122
|
+
atBase(axial(d.boreRadius, -d.spec.length / 2 - overtravel, d.spec.length + 2 * overtravel, true)),
|
|
81
123
|
]);
|
|
124
|
+
return operations.translate(result, [0, 0, baseZ]);
|
|
82
125
|
};
|
|
83
126
|
return Object.freeze({ halfA: buildHalf("a", a), halfB: buildHalf("b", b), axis: d.axis });
|
|
84
127
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { resolveGeometryResolution } from "../geometry/resolution.js";
|
|
2
2
|
import { createConstructionOperations } from "./construction-operations.js";
|
|
3
|
+
import { createHoleCutterOperation } from "./hole-cutter-operation.js";
|
|
3
4
|
import { createInspectionOperations } from "./inspection-operations.js";
|
|
4
5
|
import { createMechanicalOperations } from "./mechanical-operations.js";
|
|
5
6
|
import { createOperationEnvironment } from "./operation-environment.js";
|
|
@@ -18,6 +19,10 @@ export function createModelingContext(owner, initialResolution) {
|
|
|
18
19
|
const mechanical = createMechanicalOperations(environment, {
|
|
19
20
|
cylinder: primitives.cylinder,
|
|
20
21
|
box: primitives.box,
|
|
22
|
+
rectangle: primitives.rectangle,
|
|
23
|
+
scale: transforms.operations.scale,
|
|
24
|
+
solidFromMesh: construction.solidFromMesh,
|
|
25
|
+
loft: construction.loft,
|
|
21
26
|
union: construction.union,
|
|
22
27
|
rotate: transforms.operations.rotate,
|
|
23
28
|
translate: transforms.operations.translate,
|
|
@@ -34,6 +39,13 @@ export function createModelingContext(owner, initialResolution) {
|
|
|
34
39
|
...sections,
|
|
35
40
|
...primitives,
|
|
36
41
|
...construction,
|
|
42
|
+
holeCutter: createHoleCutterOperation(environment, {
|
|
43
|
+
cylinder: primitives.cylinder,
|
|
44
|
+
extrude: construction.extrude,
|
|
45
|
+
loft: construction.loft,
|
|
46
|
+
translate: transforms.operations.translate,
|
|
47
|
+
union: construction.union,
|
|
48
|
+
}),
|
|
37
49
|
...mechanical,
|
|
38
50
|
...patterns,
|
|
39
51
|
...inspection,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { resolveCircularSampling } from "../geometry/circular-sampling.js";
|
|
1
2
|
import { resolveCylinderRadii } from "../geometry/cylinder.js";
|
|
2
3
|
import { resolveModelingLimits } from "../geometry/model-limits.js";
|
|
3
4
|
import { assertPrimitiveOptions } from "../geometry/primitive-resolvers.js";
|
|
@@ -48,7 +49,15 @@ export function createPrimitiveOperations(environment, transforms, sections) {
|
|
|
48
49
|
if (value.sizing !== "face")
|
|
49
50
|
return placedSolid(value, () => kernel.cylinder(scope, resolved), () => cylinderAnchors(value));
|
|
50
51
|
const radii = resolveCylinderRadii(value);
|
|
51
|
-
const
|
|
52
|
+
const maximumRadius = Math.max(...radii);
|
|
53
|
+
const sampling = resolveCircularSampling({
|
|
54
|
+
radius: maximumRadius,
|
|
55
|
+
sizing: "face",
|
|
56
|
+
...(resolved.segments === undefined ? {} : { segments: resolved.segments }),
|
|
57
|
+
resolution: resolved.resolution,
|
|
58
|
+
limits: resolved.limits,
|
|
59
|
+
});
|
|
60
|
+
const count = sampling.segments, correction = sampling.vertexRadius / maximumRadius;
|
|
52
61
|
return placedSolid(value, () => kernel.cylinder(scope, {
|
|
53
62
|
height: resolved.height,
|
|
54
63
|
radius: [radii[0] * correction, radii[1] * correction],
|
|
@@ -106,12 +115,16 @@ export function createPrimitiveOperations(environment, transforms, sections) {
|
|
|
106
115
|
throwGeometryError("INVALID_ARGUMENT", "circle", "Specify exactly one radius or diameter.");
|
|
107
116
|
const radius = value.radius ?? value.diameter / 2;
|
|
108
117
|
requirePositiveNumber(radius, "circle");
|
|
109
|
-
const count = resolveCircularSegments(radius, value);
|
|
110
|
-
requireProfileVertexCount(count, 3, "circle", withResolutionDefaults(value).limits);
|
|
111
|
-
if (value.sizing !== undefined && value.sizing !== "vertex" && value.sizing !== "face")
|
|
112
|
-
throwGeometryError("INVALID_ARGUMENT", "circle", "sizing must be vertex or face.");
|
|
113
|
-
const section = ownSection(module.CrossSection.circle(value.sizing === "face" ? radius / Math.cos(Math.PI / count) : radius, count));
|
|
114
118
|
const resolved = withResolutionDefaults(value);
|
|
119
|
+
const { segments: count, vertexRadius } = resolveCircularSampling({
|
|
120
|
+
radius,
|
|
121
|
+
sizing: value.sizing ?? "vertex",
|
|
122
|
+
...(resolved.segments === undefined ? {} : { segments: resolved.segments }),
|
|
123
|
+
resolution: resolved.resolution,
|
|
124
|
+
limits: resolved.limits,
|
|
125
|
+
});
|
|
126
|
+
requireProfileVertexCount(count, 3, "circle", resolved.limits);
|
|
127
|
+
const section = ownSection(module.CrossSection.circle(vertexRadius, count));
|
|
115
128
|
environment.rememberAnchors(section, planarAnchors([2 * radius, 2 * radius]));
|
|
116
129
|
return environment.rememberPrimitiveProfile(section, ellipticalSectionProfile([radius, radius], value, resolved.resolution, resolved.limits, value.sizing === "face"));
|
|
117
130
|
}),
|
|
@@ -118,7 +118,7 @@ export function createSectionOperations(environment, transforms) {
|
|
|
118
118
|
},
|
|
119
119
|
svgSection: (svg, value = {}) => {
|
|
120
120
|
let result = wrapSection(kernel.regionToCrossSection(scope, preflightSvgRegion(svg, { ...withResolutionDefaults(value), origin: "document" }).region, limits));
|
|
121
|
-
if ((value.origin ?? "center") === "center") {
|
|
121
|
+
if (value.fit === undefined && (value.origin ?? "center") === "center") {
|
|
122
122
|
const bounds = nativeSection(result).bounds();
|
|
123
123
|
result = translate(result, [
|
|
124
124
|
-(bounds.min[0] + bounds.max[0]) / 2,
|
|
@@ -6,20 +6,46 @@ function fail(dimension, message) {
|
|
|
6
6
|
throw new GeometryError("INVALID_ARGUMENT", message, { operation: `bounds${dimension}` });
|
|
7
7
|
}
|
|
8
8
|
function snapshot(input, dimension) {
|
|
9
|
-
if (typeof input !== "object" || input === null)
|
|
10
|
-
fail(dimension, "Bounds require
|
|
11
|
-
const {
|
|
9
|
+
if (typeof input !== "object" || input === null || Array.isArray(input))
|
|
10
|
+
fail(dimension, "Bounds require extrema or size.");
|
|
11
|
+
const { size, center } = input;
|
|
12
|
+
let min, max;
|
|
13
|
+
// Existing immutable bounds expose size()/center(); only a size value selects construction.
|
|
14
|
+
if ("size" in input && typeof size !== "function") {
|
|
15
|
+
if ("min" in input || "max" in input)
|
|
16
|
+
fail(dimension, "Supply size or min/max, never both.");
|
|
17
|
+
if (!Array.isArray(size) || size.length !== dimension)
|
|
18
|
+
fail(dimension, `Size requires ${dimension}D coordinates.`);
|
|
19
|
+
if (center !== undefined && typeof center !== "boolean")
|
|
20
|
+
fail(dimension, "center must be boolean.");
|
|
21
|
+
const coordinates = size;
|
|
22
|
+
const dimensions = Array.from({ length: dimension }, (_, axis) => {
|
|
23
|
+
const value = coordinates[axis];
|
|
24
|
+
if (typeof value !== "number" || !Number.isFinite(value) || value < 0)
|
|
25
|
+
fail(dimension, "Size must be finite and nonnegative.");
|
|
26
|
+
return value;
|
|
27
|
+
});
|
|
28
|
+
const centered = center ?? true;
|
|
29
|
+
min = dimensions.map((value) => (centered ? -value / 2 : 0));
|
|
30
|
+
max = dimensions.map((value) => (centered ? value / 2 : value));
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
if (center !== undefined && typeof center !== "function")
|
|
34
|
+
fail(dimension, "center requires size construction.");
|
|
35
|
+
const extrema = input;
|
|
36
|
+
min = extrema.min;
|
|
37
|
+
max = extrema.max;
|
|
38
|
+
}
|
|
12
39
|
if (!Array.isArray(min) ||
|
|
13
40
|
!Array.isArray(max) ||
|
|
14
41
|
min.length !== dimension ||
|
|
15
42
|
max.length !== dimension)
|
|
16
43
|
fail(dimension, `Bounds require matching ${dimension}D minimum and maximum tuples.`);
|
|
17
|
-
const minimum = min, maximum = max;
|
|
18
44
|
const copy = (source) => Object.freeze(Array.from({ length: dimension }, (_, axis) => {
|
|
19
45
|
const value = source[axis];
|
|
20
46
|
return value === 0 ? 0 : value;
|
|
21
47
|
}));
|
|
22
|
-
const data = Object.freeze({ min: copy(
|
|
48
|
+
const data = Object.freeze({ min: copy(min), max: copy(max) });
|
|
23
49
|
validateBounds(data, `bounds${dimension}`);
|
|
24
50
|
return data;
|
|
25
51
|
}
|
|
@@ -70,23 +96,25 @@ const SpatialBounds = /* @__PURE__ */ immutableMathClass(class SpatialBounds {
|
|
|
70
96
|
}
|
|
71
97
|
});
|
|
72
98
|
/**
|
|
73
|
-
*
|
|
99
|
+
* Constructs immutable finite XY bounds from ordered extrema or nonnegative size in millimetres.
|
|
74
100
|
*
|
|
75
101
|
* Zero extents are valid. Invalid dimensions, nonfinite coordinates, reversed bounds and
|
|
76
102
|
* overflowing extents throw `INVALID_ARGUMENT` GeometryError. Use `toData()` for plain records.
|
|
103
|
+
* Size construction centers on the origin unless `center` is false. Size and extrema are exclusive.
|
|
77
104
|
* Compiled Generator packages passing these values to host recipes or computed data require
|
|
78
|
-
* runtime
|
|
105
|
+
* runtime 9.0.0 or newer in major 9.
|
|
79
106
|
*/
|
|
80
107
|
export function bounds2(input) {
|
|
81
108
|
return new PlanarBounds(snapshot(input, 2));
|
|
82
109
|
}
|
|
83
110
|
/**
|
|
84
|
-
*
|
|
111
|
+
* Constructs immutable finite XYZ bounds from ordered extrema or nonnegative size in millimetres.
|
|
85
112
|
*
|
|
86
113
|
* Zero extents are valid. Invalid dimensions, nonfinite coordinates, reversed bounds and
|
|
87
114
|
* overflowing extents throw `INVALID_ARGUMENT` GeometryError. Use `toData()` for plain records.
|
|
115
|
+
* Size construction centers on the origin unless `center` is false. Size and extrema are exclusive.
|
|
88
116
|
* Compiled Generator packages passing these values to host recipes or computed data require
|
|
89
|
-
* runtime
|
|
117
|
+
* runtime 9.0.0 or newer in major 9.
|
|
90
118
|
*/
|
|
91
119
|
export function bounds3(input) {
|
|
92
120
|
return new SpatialBounds(snapshot(input, 3));
|
package/dist/geometry/bounds.js
CHANGED
|
@@ -37,23 +37,6 @@ function size(bounds) {
|
|
|
37
37
|
function center(bounds) {
|
|
38
38
|
return bounds.min.map((value, axis) => value / 2 + bounds.max[axis] / 2);
|
|
39
39
|
}
|
|
40
|
-
export function boundsFromSize(dimensions, options = {}) {
|
|
41
|
-
const operation = "boundsFromSize";
|
|
42
|
-
if (!isArray(dimensions) ||
|
|
43
|
-
(dimensions.length !== 2 && dimensions.length !== 3) ||
|
|
44
|
-
Array.from(dimensions).some((value) => !Number.isFinite(value) || value < 0))
|
|
45
|
-
fail(operation, "Bounds dimensions require two or three finite nonnegative values.");
|
|
46
|
-
if (typeof options !== "object" ||
|
|
47
|
-
options === null ||
|
|
48
|
-
isArray(options) ||
|
|
49
|
-
(options.center !== undefined && typeof options.center !== "boolean"))
|
|
50
|
-
fail(operation, "Bounds placement requires an optional boolean center value.");
|
|
51
|
-
const centered = options.center ?? true;
|
|
52
|
-
return Object.freeze({
|
|
53
|
-
min: vector(dimensions.map((value) => (centered ? -value / 2 : 0)), operation),
|
|
54
|
-
max: vector(dimensions.map((value) => (centered ? value / 2 : value)), operation),
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
40
|
export function boundsSize(bounds) {
|
|
58
41
|
validateBounds(bounds, "boundsSize");
|
|
59
42
|
return vector(size(bounds), "boundsSize");
|