@metamesh/modeling 0.19.0 → 0.20.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 +49 -0
- package/README.md +34 -18
- package/dist/api/engine.d.ts +217 -121
- package/dist/api/export.d.ts +123 -79
- package/dist/api/geometry.d.ts +406 -2102
- package/dist/api/index.d.ts +472 -1798
- package/dist/api/math.d.ts +315 -0
- package/dist/api/mechanical.d.ts +1041 -0
- package/dist/api/mesh.d.ts +360 -88
- package/dist/api/text.d.ts +24 -44
- package/dist/docs/guides/concepts.md +67 -33
- package/dist/docs/guides/exporting.md +88 -0
- package/dist/docs/guides/fonts.md +5 -3
- package/dist/docs/guides/fundamentals.md +12 -24
- package/dist/docs/guides/generation.md +24 -16
- package/dist/docs/guides/geometry-values.md +192 -134
- package/dist/docs/guides/hosting.md +51 -96
- package/dist/docs/guides/profiles-and-extrusion.md +159 -11
- package/dist/docs/guides/recipes.md +121 -28
- package/dist/docs/guides/resolution-and-inspection.md +43 -23
- package/dist/docs/guides/solid-joins.md +12 -2
- package/dist/docs/guides/standalone-model.md +4 -2
- package/dist/docs/guides/svg-and-text.md +76 -39
- package/dist/docs/guides/sweeps-and-lofts.md +88 -44
- package/dist/docs/guides/transforms-and-placement.md +113 -103
- package/dist/docs/guides/workers.md +166 -0
- package/dist/docs/manifest.json +4133 -4153
- package/dist/docs/reference/engine/GenerationOptions.md +2 -3
- package/dist/docs/reference/engine/GeometryResource.md +6 -6
- package/dist/docs/reference/engine/ModelDependencies.md +2 -2
- package/dist/docs/reference/engine/ModelEngine.md +2 -3
- package/dist/docs/reference/engine/ModelEngineOptions.md +2 -7
- package/dist/docs/reference/engine/ModelPart.md +6 -6
- package/dist/docs/reference/engine/ModelResult.md +2 -2
- package/dist/docs/reference/engine/ModelRunArguments.md +2 -2
- package/dist/docs/reference/engine/ModelRunOptions.md +2 -3
- package/dist/docs/reference/engine/ModelSession.md +2 -2
- package/dist/docs/reference/engine/SessionOptions.md +2 -3
- package/dist/docs/reference/engine/categories/host-lifecycle.md +9 -3
- package/dist/docs/reference/engine/checkModel.md +6 -2
- package/dist/docs/reference/engine/createModelEngine.md +5 -3
- package/dist/docs/reference/engine/defaultModelingLimits.md +4 -11
- package/dist/docs/reference/engine/modelingWasmUrl.md +2 -2
- package/dist/docs/reference/engine.md +7 -1
- package/dist/docs/reference/export/Export3mfOptions.md +2 -6
- package/dist/docs/reference/export/ExportDiagnostic.md +2 -14
- package/dist/docs/reference/export/ExportFormat.md +2 -14
- package/dist/docs/reference/export/ExportGeometry.md +3 -15
- package/dist/docs/reference/export/ExportGlbOptions.md +14 -18
- package/dist/docs/reference/export/ExportLimits.md +2 -14
- package/dist/docs/reference/export/ExportMaterial.md +2 -14
- package/dist/docs/reference/export/ExportOptions.md +2 -14
- package/dist/docs/reference/export/ExportPart.md +2 -14
- package/dist/docs/reference/export/ExportReport.md +2 -14
- package/dist/docs/reference/export/ExportSink.md +5 -15
- package/dist/docs/reference/export/ExportStlOptions.md +2 -6
- package/dist/docs/reference/export/ExportedFile.md +14 -26
- package/dist/docs/reference/export/categories/mesh-serialization.md +9 -3
- package/dist/docs/reference/export/defaultExportLimits.md +2 -2
- package/dist/docs/reference/export/export3mf.md +4 -6
- package/dist/docs/reference/export/exportGlb.md +8 -10
- package/dist/docs/reference/export/exportStl.md +4 -6
- package/dist/docs/reference/export/write3mf.md +6 -6
- package/dist/docs/reference/export/writeGlb.md +10 -10
- package/dist/docs/reference/export/writeStl.md +6 -6
- package/dist/docs/reference/export.md +9 -3
- package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +4 -4
- package/dist/docs/reference/geometry/Anchor3-type.md +3 -7
- package/dist/docs/reference/geometry/Anchor3Options.md +70 -0
- package/dist/docs/reference/geometry/ArcCurve2.md +3 -3
- package/dist/docs/reference/geometry/ArcCurve3.md +3 -3
- package/dist/docs/reference/geometry/AttachOptions.md +4 -9
- package/dist/docs/reference/geometry/Bounds2-type.md +9 -30
- package/dist/docs/reference/geometry/Bounds2Data.md +2 -19
- package/dist/docs/reference/geometry/Bounds2Input.md +2 -10
- package/dist/docs/reference/geometry/Bounds2Options.md +2 -6
- package/dist/docs/reference/geometry/Bounds3-type.md +9 -30
- package/dist/docs/reference/geometry/Bounds3Data.md +2 -15
- package/dist/docs/reference/geometry/Bounds3Input.md +2 -10
- package/dist/docs/reference/geometry/Bounds3Options.md +2 -6
- package/dist/docs/reference/geometry/BoundsFit2.md +2 -2
- package/dist/docs/reference/geometry/BoundsFit3.md +2 -2
- package/dist/docs/reference/geometry/BoundsFitOptions.md +2 -2
- package/dist/docs/reference/geometry/BoxAnchorFace.md +3 -3
- package/dist/docs/reference/geometry/BoxAnchorOptions.md +3 -3
- package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +3 -7
- package/dist/docs/reference/geometry/CircleContourOptions.md +3 -7
- package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +3 -12
- package/dist/docs/reference/geometry/CircularResolutionOptions.md +2 -2
- package/dist/docs/reference/geometry/CircularSampling.md +2 -2
- package/dist/docs/reference/geometry/CircularSamplingOptions.md +2 -2
- package/dist/docs/reference/geometry/Contour.md +4 -9
- package/dist/docs/reference/geometry/ContourCurve.md +3 -3
- package/dist/docs/reference/geometry/ContourPoint.md +3 -3
- package/dist/docs/reference/geometry/ContourSegment.md +3 -3
- package/dist/docs/reference/geometry/CorrespondingComponent.md +3 -7
- package/dist/docs/reference/geometry/CorrespondingContour.md +3 -7
- package/dist/docs/reference/geometry/CorrespondingProfile.md +3 -7
- package/dist/docs/reference/geometry/CorrespondingProfileStation.md +4 -8
- package/dist/docs/reference/geometry/CubicBezierCurve2.md +3 -3
- package/dist/docs/reference/geometry/CubicBezierCurve3.md +3 -3
- package/dist/docs/reference/geometry/Curve2.md +3 -3
- package/dist/docs/reference/geometry/Curve3.md +3 -3
- package/dist/docs/reference/geometry/CurveSamplingOptions.md +3 -11
- package/dist/docs/reference/geometry/CylinderAnchorFace.md +3 -3
- package/dist/docs/reference/geometry/CylinderAnchorOptions.md +4 -4
- package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +2 -2
- package/dist/docs/reference/geometry/EdgeTreatment.md +2 -6
- package/dist/docs/reference/geometry/EllipseContourOptions.md +3 -7
- package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +9 -18
- package/dist/docs/reference/geometry/FittedTextLayout.md +2 -2
- package/dist/docs/reference/geometry/{Frame3.md → Frame3-type.md} +4 -11
- package/dist/docs/reference/geometry/Frame3Options.md +69 -0
- package/dist/docs/reference/geometry/GeometryError.md +2 -6
- package/dist/docs/reference/geometry/GeometryErrorCode.md +2 -6
- package/dist/docs/reference/geometry/GeometryErrorContext.md +2 -6
- package/dist/docs/reference/geometry/GeometryResolution.md +2 -10
- package/dist/docs/reference/geometry/GeometrySamplingLimits.md +3 -11
- package/dist/docs/reference/geometry/GeometryToleranceOptions.md +3 -11
- package/dist/docs/reference/geometry/GridPatternOptions.md +7 -9
- package/dist/docs/reference/geometry/ImmutableBuffer-type.md +2 -10
- package/dist/docs/reference/geometry/LineCurve2.md +3 -3
- package/dist/docs/reference/geometry/LineCurve3.md +3 -3
- package/dist/docs/reference/geometry/LinearPatternOptions.md +2 -6
- package/dist/docs/reference/geometry/LoftPlacement.md +13 -21
- package/dist/docs/reference/geometry/MatchProfilesOptions.md +3 -7
- package/dist/docs/reference/geometry/ModelingLimits.md +2 -14
- package/dist/docs/reference/geometry/NumericArray.md +2 -10
- package/dist/docs/reference/geometry/Path2-type.md +153 -12
- package/dist/docs/reference/geometry/Path2Data.md +3 -11
- package/dist/docs/reference/geometry/Path2Input.md +3 -11
- package/dist/docs/reference/geometry/Path3-type.md +153 -12
- package/dist/docs/reference/geometry/Path3Data.md +3 -11
- package/dist/docs/reference/geometry/Path3Input.md +3 -11
- package/dist/docs/reference/geometry/PathFrame.md +3 -3
- package/dist/docs/reference/geometry/PathLocation.md +3 -11
- package/dist/docs/reference/geometry/PathNormalGuide.md +4 -12
- package/dist/docs/reference/geometry/PathOptions.md +3 -7
- package/dist/docs/reference/geometry/PathPatternOptions.md +3 -7
- package/dist/docs/reference/geometry/PathPlacement.md +5 -5
- package/dist/docs/reference/geometry/PathResamplingOptions.md +3 -11
- package/dist/docs/reference/geometry/PathStation.md +87 -0
- package/dist/docs/reference/geometry/PathSubdivisionOptions.md +44 -0
- package/dist/docs/reference/geometry/Pivot2Options.md +3 -11
- package/dist/docs/reference/geometry/Pivot3Options.md +3 -11
- package/dist/docs/reference/geometry/PolygonData.md +4 -8
- package/dist/docs/reference/geometry/PolylineResamplingOptions.md +3 -3
- package/dist/docs/reference/geometry/Profile.md +3 -4
- package/dist/docs/reference/geometry/ProfileComponent2.md +3 -7
- package/dist/docs/reference/geometry/ProfileContour2.md +3 -7
- package/dist/docs/reference/geometry/ProfileSpan2.md +3 -7
- package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +5 -8
- package/dist/docs/reference/geometry/RadialPatternOptions.md +2 -6
- package/dist/docs/reference/geometry/RadialSizing.md +2 -6
- package/dist/docs/reference/geometry/RadialSizingOptions.md +2 -6
- package/dist/docs/reference/geometry/RectangleContourOptions.md +4 -7
- package/dist/docs/reference/geometry/RectangleCornerTreatment.md +3 -7
- package/dist/docs/reference/geometry/RectangleCornerTreatments.md +3 -7
- package/dist/docs/reference/geometry/RectangleProfileOptions.md +3 -3
- package/dist/docs/reference/geometry/RegionData.md +3 -7
- package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +3 -3
- package/dist/docs/reference/geometry/ResolvedGeometryResolution.md +71 -0
- package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +2 -2
- package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +2 -6
- package/dist/docs/reference/geometry/RowLayoutOptions.md +2 -2
- package/dist/docs/reference/geometry/SampleContourOptions.md +3 -3
- package/dist/docs/reference/geometry/SampleHelixOptions.md +3 -3
- package/dist/docs/reference/geometry/SampleSideProfileOptions.md +3 -3
- package/dist/docs/reference/geometry/SampledCurve2.md +3 -3
- package/dist/docs/reference/geometry/SampledCurve3.md +3 -3
- package/dist/docs/reference/geometry/SideProfileCurve.md +3 -3
- package/dist/docs/reference/geometry/SideProfilePoint.md +3 -3
- package/dist/docs/reference/geometry/SideProfileSegment.md +3 -3
- package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +2 -6
- package/dist/docs/reference/geometry/SplineOptions.md +69 -0
- package/dist/docs/reference/geometry/StarContourOptions.md +7 -7
- package/dist/docs/reference/geometry/StrokeCap.md +2 -6
- package/dist/docs/reference/geometry/StrokeJoin.md +2 -6
- package/dist/docs/reference/geometry/StrokeOptions.md +3 -7
- package/dist/docs/reference/geometry/SvgImportOptions.md +4 -4
- package/dist/docs/reference/geometry/SvgRegionPreflight.md +2 -2
- package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +2 -2
- package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +2 -2
- package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +2 -2
- package/dist/docs/reference/geometry/Transform2-type.md +3 -11
- package/dist/docs/reference/geometry/Transform2Data.md +3 -11
- package/dist/docs/reference/geometry/Transform2Input.md +3 -11
- package/dist/docs/reference/geometry/Transform3-type.md +4 -12
- package/dist/docs/reference/geometry/Transform3Data.md +3 -11
- package/dist/docs/reference/geometry/Transform3Input.md +6 -13
- package/dist/docs/reference/geometry/Vector2-type.md +3 -11
- package/dist/docs/reference/geometry/Vector2Data.md +3 -15
- package/dist/docs/reference/geometry/Vector2Input.md +3 -11
- package/dist/docs/reference/geometry/Vector3-type.md +27 -11
- package/dist/docs/reference/geometry/Vector3Data.md +3 -11
- package/dist/docs/reference/geometry/Vector3Input.md +3 -11
- package/dist/docs/reference/geometry/VectorTextLayout.md +2 -10
- package/dist/docs/reference/geometry/VectorTextMetrics.md +3 -11
- package/dist/docs/reference/geometry/anchor3.md +17 -26
- package/dist/docs/reference/geometry/anchorFrame3.md +6 -6
- package/dist/docs/reference/geometry/attachmentTransform3.md +8 -8
- package/dist/docs/reference/geometry/bounds2.md +6 -8
- package/dist/docs/reference/geometry/bounds3.md +4 -6
- package/dist/docs/reference/geometry/boundsCenter.md +2 -2
- package/dist/docs/reference/geometry/boundsSize.md +2 -2
- package/dist/docs/reference/geometry/boxAnchor3.md +3 -3
- package/dist/docs/reference/geometry/categories/bounds-layout.md +9 -3
- package/dist/docs/reference/geometry/categories/curves-paths.md +24 -13
- package/dist/docs/reference/geometry/categories/immutable-data.md +40 -0
- package/dist/docs/reference/geometry/categories/pattern-placement.md +10 -4
- package/dist/docs/reference/geometry/categories/primitive-options.md +8 -13
- package/dist/docs/reference/geometry/categories/profiles-regions.md +11 -5
- package/dist/docs/reference/geometry/categories/resolution-errors.md +8 -1
- package/dist/docs/reference/geometry/categories/transforms-math.md +20 -51
- package/dist/docs/reference/geometry/categories/vector-import.md +7 -4
- package/dist/docs/reference/geometry/circleContour.md +3 -3
- package/dist/docs/reference/geometry/closeToAxis.md +7 -3
- package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +9 -6
- package/dist/docs/reference/geometry/computeParallelTransportFrames.md +13 -6
- package/dist/docs/reference/geometry/contourContainsPoint.md +7 -3
- package/dist/docs/reference/geometry/cylinderAnchor3.md +5 -5
- package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +3 -3
- package/dist/docs/reference/geometry/distributeAlongPath.md +16 -11
- package/dist/docs/reference/geometry/ellipseContour.md +3 -3
- package/dist/docs/reference/geometry/fitBounds.md +10 -2
- package/dist/docs/reference/geometry/fitTextLayout.md +5 -5
- package/dist/docs/reference/geometry/frame3.md +66 -0
- package/dist/docs/reference/geometry/gridPatternTransforms.md +6 -6
- package/dist/docs/reference/geometry/immutableBuffer.md +5 -7
- package/dist/docs/reference/geometry/isGeometryError.md +2 -6
- package/dist/docs/reference/geometry/layoutRow.md +4 -2
- package/dist/docs/reference/geometry/linearPatternTransforms.md +6 -6
- package/dist/docs/reference/geometry/matchProfiles.md +5 -3
- package/dist/docs/reference/geometry/normalizeContour.md +8 -4
- package/dist/docs/reference/geometry/normalizePolygon.md +5 -3
- package/dist/docs/reference/geometry/normalizeRegion.md +5 -3
- package/dist/docs/reference/geometry/path2.md +7 -7
- package/dist/docs/reference/geometry/path3.md +7 -7
- package/dist/docs/reference/geometry/pathPatternTransforms.md +12 -8
- package/dist/docs/reference/geometry/preflightSvgRegion.md +5 -5
- package/dist/docs/reference/geometry/radialPatternTransforms.md +5 -5
- package/dist/docs/reference/geometry/rectangleContour.md +3 -3
- package/dist/docs/reference/geometry/rectangleProfile.md +3 -4
- package/dist/docs/reference/geometry/regionArea.md +3 -3
- package/dist/docs/reference/geometry/regionBounds.md +6 -4
- package/dist/docs/reference/geometry/regularPolygonContour.md +3 -3
- package/dist/docs/reference/geometry/resamplePolyline2.md +7 -3
- package/dist/docs/reference/geometry/resamplePolyline3.md +7 -3
- package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +5 -5
- package/dist/docs/reference/geometry/resolveArcSegments.md +8 -6
- package/dist/docs/reference/geometry/resolveCircularSampling.md +2 -2
- package/dist/docs/reference/geometry/resolveCircularSegments.md +5 -3
- package/dist/docs/reference/geometry/{resolveExtrusionDivisions.md → resolveExtrusionSlices.md} +16 -15
- package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +5 -3
- package/dist/docs/reference/geometry/resolveGeometryTolerance.md +3 -3
- package/dist/docs/reference/geometry/roundClosedPolylinePath.md +12 -5
- package/dist/docs/reference/geometry/sampleContour.md +5 -5
- package/dist/docs/reference/geometry/sampleCurve2.md +7 -3
- package/dist/docs/reference/geometry/sampleCurve3.md +7 -3
- package/dist/docs/reference/geometry/sampleHelix.md +3 -3
- package/dist/docs/reference/geometry/sampleSideProfile.md +5 -5
- package/dist/docs/reference/geometry/sampleTextContours.md +3 -3
- package/dist/docs/reference/geometry/signedContourArea.md +5 -3
- package/dist/docs/reference/geometry/spline2.md +68 -0
- package/dist/docs/reference/geometry/spline3.md +62 -0
- package/dist/docs/reference/geometry/starContour.md +3 -3
- package/dist/docs/reference/geometry/strokeRegionData.md +8 -5
- package/dist/docs/reference/geometry/transform2.md +5 -7
- package/dist/docs/reference/geometry/transform3.md +23 -10
- package/dist/docs/reference/geometry/transformRegionData.md +7 -3
- package/dist/docs/reference/geometry/triangulateContour.md +6 -4
- package/dist/docs/reference/geometry/vector2.md +6 -8
- package/dist/docs/reference/geometry/vector3.md +8 -8
- package/dist/docs/reference/geometry.md +13 -18
- package/dist/docs/reference/{geometry → math}/AxisAngleRotation3.md +4 -5
- package/dist/docs/reference/math/IDENTITY_TRANSFORM3.md +20 -0
- package/dist/docs/reference/math/add2.md +38 -0
- package/dist/docs/reference/math/add3.md +46 -0
- package/dist/docs/reference/math/applyTransformDirection3.md +46 -0
- package/dist/docs/reference/math/applyTransformPoint3.md +44 -0
- package/dist/docs/reference/math/categories/tuple-matrix.md +67 -0
- package/dist/docs/reference/math/cross2.md +38 -0
- package/dist/docs/reference/math/cross3.md +44 -0
- package/dist/docs/reference/math/distance2.md +38 -0
- package/dist/docs/reference/math/distance3.md +38 -0
- package/dist/docs/reference/math/dot2.md +38 -0
- package/dist/docs/reference/math/dot3.md +44 -0
- package/dist/docs/reference/math/eulerTransform3.md +43 -0
- package/dist/docs/reference/math/inverseTransform3.md +36 -0
- package/dist/docs/reference/math/length2.md +32 -0
- package/dist/docs/reference/math/length3.md +32 -0
- package/dist/docs/reference/math/lerp2.md +46 -0
- package/dist/docs/reference/math/lerp3.md +46 -0
- package/dist/docs/reference/math/multiplyTransform3.md +46 -0
- package/dist/docs/reference/math/normalize2.md +45 -0
- package/dist/docs/reference/math/normalize3.md +45 -0
- package/dist/docs/reference/math/projectOntoPlane3.md +40 -0
- package/dist/docs/reference/math/rotate2.md +40 -0
- package/dist/docs/reference/math/rotationTransform3.md +56 -0
- package/dist/docs/reference/math/scale2.md +38 -0
- package/dist/docs/reference/math/scale3.md +44 -0
- package/dist/docs/reference/math/scaleTransform3.md +39 -0
- package/dist/docs/reference/math/subtract2.md +38 -0
- package/dist/docs/reference/math/subtract3.md +44 -0
- package/dist/docs/reference/math/transformDeterminant3.md +38 -0
- package/dist/docs/reference/math/translationTransform3.md +36 -0
- package/dist/docs/reference/math/validateRigidTransform3.md +38 -0
- package/dist/docs/reference/math/validateTransform3.md +48 -0
- package/dist/docs/reference/math.md +22 -0
- package/dist/docs/reference/{geometry → mechanical}/AcmeThreadProfileSpec.md +4 -13
- package/dist/docs/reference/{geometry → mechanical}/Bevel.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/BevelSize.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ButtressPressureFlankSide.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ButtressThreadProfileSpec.md +4 -13
- package/dist/docs/reference/{geometry → mechanical}/ClearanceHoleDimensions.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/ClearanceHoleFit.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CompensatedThreadDiameters.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CustomThreadProfileSpec.md +5 -15
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearDimensions.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearMeshKind.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearOutlineOptions.md +5 -10
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairDimensions.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairMotionOptions.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairMotionReport.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearPairSpec.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/CylindricalGearSpec.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/InternalThreadCutterOptions.md +6 -13
- package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeBaseSpec.md +3 -7
- package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeDimensions.md +4 -5
- package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeInterval.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeSamplingOptions.md +5 -14
- package/dist/docs/reference/{geometry → mechanical}/KnuckleHingeSpec.md +3 -7
- package/dist/docs/reference/{geometry → mechanical}/METRIC_FASTENER_STANDARDS.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/MetricFastenerSize.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/MetricFastenerStandard.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/MetricHexNutDimensions.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/MetricSocketCapHeadDimensions.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/PRINTABLE_THREAD_FIT_POLICIES.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/PrintableThreadFit.md +3 -7
- package/dist/docs/reference/{geometry → mechanical}/PrintableThreadFitPolicy.md +3 -7
- package/dist/docs/reference/{geometry → mechanical}/RackPitchDimensions.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/RackPitchSpec.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/SampledThreadHelices.md +4 -8
- package/dist/docs/reference/{geometry → mechanical}/SquareThreadProfileSpec.md +4 -13
- package/dist/docs/reference/{geometry → mechanical}/ThreadBevelOptions.md +3 -7
- package/dist/docs/reference/{geometry → mechanical}/ThreadCircularSegmentsOptions.md +5 -7
- package/dist/docs/reference/{geometry → mechanical}/ThreadCompensationOptions.md +4 -5
- package/dist/docs/reference/{geometry → mechanical}/ThreadEndStyle.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ThreadEndTreatmentOptions.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ThreadHandedness.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ThreadHelixOptions.md +5 -7
- package/dist/docs/reference/{geometry → mechanical}/ThreadLeadInEnvelope.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ThreadLeadInShape.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ThreadProfile-type.md +5 -17
- package/dist/docs/reference/{geometry → mechanical}/ThreadProfileBaseSpec.md +4 -13
- package/dist/docs/reference/{geometry → mechanical}/ThreadProfileSpec.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ThreadRidgeOptions.md +7 -18
- package/dist/docs/reference/{geometry → mechanical}/ThreadRole.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/ThreadSolidOptions.md +8 -15
- package/dist/docs/reference/{geometry → mechanical}/ThreadSolidPreflight.md +3 -11
- package/dist/docs/reference/{geometry → mechanical}/ThreadedNutOptions.md +7 -14
- package/dist/docs/reference/{geometry → mechanical}/ThreadedNutPreflight.md +3 -7
- package/dist/docs/reference/{geometry → mechanical}/ThreadedNutShape.md +3 -7
- package/dist/docs/reference/{geometry → mechanical}/ThreadedRodOptions.md +6 -13
- package/dist/docs/reference/{geometry → mechanical}/TrapezoidalThreadProfileSpec.md +4 -13
- package/dist/docs/reference/{geometry → mechanical}/TriangularThreadProfileSpec.md +4 -13
- package/dist/docs/reference/{geometry → mechanical}/categories/mechanical.md +8 -2
- package/dist/docs/reference/{geometry → mechanical}/compensateThreadDiameters.md +4 -4
- package/dist/docs/reference/{geometry → mechanical}/compensateThreadProfileAxially.md +12 -6
- package/dist/docs/reference/{geometry → mechanical}/compensateThreadProfileForFaceting.md +13 -3
- package/dist/docs/reference/{geometry → mechanical}/getMetricClearanceHoleDiameter.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/getMetricFastenerStandard.md +3 -3
- package/dist/docs/reference/{geometry → mechanical}/measureInternalCylindricalGearPairMotion.md +9 -7
- package/dist/docs/reference/{geometry → mechanical}/minimumCylindricalGearToothCountWithoutUndercut.md +5 -3
- package/dist/docs/reference/{geometry → mechanical}/preflightInternalThreadCutter.md +8 -6
- package/dist/docs/reference/{geometry → mechanical}/preflightThreadedNut.md +9 -7
- package/dist/docs/reference/{geometry → mechanical}/preflightThreadedRod.md +8 -6
- package/dist/docs/reference/{geometry → mechanical}/resolveCylindricalGear.md +5 -3
- package/dist/docs/reference/{geometry → mechanical}/resolveCylindricalGearPair.md +5 -3
- package/dist/docs/reference/{geometry → mechanical}/resolveKnuckleHinge.md +9 -7
- package/dist/docs/reference/{geometry → mechanical}/resolvePrintableThreadFitPolicy.md +5 -3
- package/dist/docs/reference/{geometry → mechanical}/resolveRackPitch.md +5 -3
- package/dist/docs/reference/{geometry → mechanical}/resolveThreadCircularSegments.md +7 -5
- package/dist/docs/reference/{geometry → mechanical}/sampleCylindricalGearOutline.md +9 -8
- package/dist/docs/reference/{geometry → mechanical}/sampleInternalCylindricalGearSpaceOutline.md +9 -8
- package/dist/docs/reference/{geometry → mechanical}/sampleRackToothPath.md +10 -8
- package/dist/docs/reference/{geometry → mechanical}/sampleThreadHelices.md +8 -6
- package/dist/docs/reference/{geometry → mechanical}/threadProfile.md +7 -3
- package/dist/docs/reference/mechanical.md +19 -0
- package/dist/docs/reference/mesh/ExtrudeMeshOptions.md +128 -0
- package/dist/docs/reference/{geometry → mesh}/HeightfieldMeshLimits.md +5 -13
- package/dist/docs/reference/{geometry → mesh}/HeightfieldPreflight.md +3 -7
- package/dist/docs/reference/{geometry → mesh}/ImmutableTriangleMesh.md +5 -17
- package/dist/docs/reference/mesh/LoftMeshStation.md +32 -0
- package/dist/docs/reference/mesh/MeshRenderOptions.md +3 -3
- package/dist/docs/reference/{geometry → mesh}/PlanarMeshOptimizationFallbackReason.md +4 -8
- package/dist/docs/reference/{geometry → mesh}/PlanarMeshOptimizationOptions.md +4 -9
- package/dist/docs/reference/{geometry → mesh}/PlanarMeshOptimizationResult.md +4 -8
- package/dist/docs/reference/{geometry → mesh}/PlanarPatchQuality.md +4 -12
- package/dist/docs/reference/mesh/RenderMesh.md +19 -19
- package/dist/docs/reference/{geometry → mesh}/SolidMeshValidationOptions.md +4 -12
- package/dist/docs/reference/{geometry → mesh}/TriangleMesh.md +8 -12
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshAnalysis.md +5 -14
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshAnalysisOptions.md +4 -9
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshInput.md +3 -7
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshMeasurements.md +5 -14
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshQualityOptions.md +4 -9
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshQualityReport.md +3 -7
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshSignature.md +4 -9
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshSignatureOptions.md +3 -7
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshSignatureTolerances.md +3 -7
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshTopologyAnalysis.md +5 -14
- package/dist/docs/reference/{geometry → mesh}/TriangleMeshValidationOptions.md +4 -9
- package/dist/docs/reference/mesh/analyze.md +26 -18
- package/dist/docs/reference/mesh/analyzeQuality.md +12 -12
- package/dist/docs/reference/mesh/bounds.md +5 -6
- package/dist/docs/reference/mesh/categories/operations.md +37 -4
- package/dist/docs/reference/mesh/centroid.md +5 -6
- package/dist/docs/reference/mesh/extrude.md +21 -20
- package/dist/docs/reference/mesh/heightfield.md +8 -8
- package/dist/docs/reference/mesh/immutable.md +7 -5
- package/dist/docs/reference/mesh/join.md +7 -7
- package/dist/docs/reference/mesh/loft.md +19 -18
- package/dist/docs/reference/mesh/optimizePlanarPatches.md +21 -21
- package/dist/docs/reference/mesh/preflightHeightfield.md +8 -8
- package/dist/docs/reference/mesh/preflightThreadSolid.md +22 -25
- package/dist/docs/reference/mesh/render.md +7 -5
- package/dist/docs/reference/mesh/reverse.md +7 -7
- package/dist/docs/reference/mesh/revolve.md +12 -14
- package/dist/docs/reference/mesh/signature.md +12 -12
- package/dist/docs/reference/mesh/sweep.md +96 -25
- package/dist/docs/reference/mesh/threadRidge.md +19 -18
- package/dist/docs/reference/mesh/threadSolid.md +23 -22
- package/dist/docs/reference/mesh/transform.md +8 -9
- package/dist/docs/reference/mesh/validate.md +11 -11
- package/dist/docs/reference/mesh/validateSolid.md +10 -10
- package/dist/docs/reference/mesh.md +8 -2
- package/dist/docs/reference/model/BoxEdge.md +23 -0
- package/dist/docs/reference/model/BoxEdgeSelection.md +27 -0
- package/dist/docs/reference/model/BoxEdgeTreatments.md +27 -0
- package/dist/docs/reference/{geometry → model}/BoxOptions.md +12 -12
- package/dist/docs/reference/model/CircleOptions.md +4 -5
- package/dist/docs/reference/model/CornerCutterOptions.md +93 -0
- package/dist/docs/reference/model/CornerCutterTreatment.md +53 -0
- package/dist/docs/reference/model/{HoleCutterOverrun.md → CutterOverrun.md} +8 -7
- package/dist/docs/reference/model/CylinderOptions.md +64 -0
- package/dist/docs/reference/model/DiagnosticOptions.md +2 -2
- package/dist/docs/reference/model/EdgeCutterOptions.md +129 -0
- package/dist/docs/reference/model/EllipseOptions.md +4 -5
- package/dist/docs/reference/model/EndTreatments.md +43 -0
- package/dist/docs/reference/model/ExtrudeOptions.md +153 -0
- package/dist/docs/reference/model/GenerateCallback.md +2 -2
- package/dist/docs/reference/model/GenerateContext.md +27 -3
- package/dist/docs/reference/model/GenerationDiagnostic.md +2 -2
- package/dist/docs/reference/model/GenerationError.md +2 -2
- package/dist/docs/reference/{geometry → model}/HeightfieldOptions.md +5 -23
- package/dist/docs/reference/model/HoleCutterOpening.md +27 -0
- package/dist/docs/reference/model/HoleCutterOptions.md +9 -22
- package/dist/docs/reference/model/HoleCutterRecess.md +5 -4
- package/dist/docs/reference/model/HullOptions.md +2 -3
- package/dist/docs/reference/model/ImmutableValue.md +2 -2
- package/dist/docs/reference/model/ImplicitOptions.md +3 -9
- package/dist/docs/reference/model/JoinOptions.md +2 -5
- package/dist/docs/reference/model/JoinTransition.md +2 -2
- package/dist/docs/reference/model/KnuckleHinge-type.md +2 -3
- package/dist/docs/reference/model/KnuckleHingeHalfOptions.md +2 -2
- package/dist/docs/reference/model/KnuckleHingeOptions.md +3 -5
- package/dist/docs/reference/model/KnuckleHingeWeb.md +2 -2
- package/dist/docs/reference/{geometry → model}/LoftCorrespondence.md +8 -11
- package/dist/docs/reference/{geometry → model}/LoftOptions.md +11 -16
- package/dist/docs/reference/model/LoftStation.md +4 -5
- package/dist/docs/reference/model/Memo.md +2 -2
- package/dist/docs/reference/model/ModelProgram.md +2 -2
- package/dist/docs/reference/model/PartDeclaration.md +4 -5
- package/dist/docs/reference/model/PartGeometry.md +3 -5
- package/dist/docs/reference/model/PartOptions.md +4 -5
- package/dist/docs/reference/model/PatternSource.md +4 -4
- package/dist/docs/reference/model/PlaneOptions.md +3 -7
- package/dist/docs/reference/model/PolygonOptions.md +2 -7
- package/dist/docs/reference/model/PrimitiveAttachment.md +50 -0
- package/dist/docs/reference/model/PrimitiveAttachmentOptions.md +111 -0
- package/dist/docs/reference/model/RectangleOptions.md +21 -26
- package/dist/docs/reference/model/RegularPolygonOptions.md +4 -37
- package/dist/docs/reference/{geometry → model}/RevolveOptions.md +15 -24
- package/dist/docs/reference/model/Section.md +115 -53
- package/dist/docs/reference/model/SectionHullOptions.md +2 -3
- package/dist/docs/reference/model/SectionInspection.md +2 -6
- package/dist/docs/reference/model/SectionOffsetJoin.md +2 -2
- package/dist/docs/reference/model/SectionOffsetOptions.md +2 -3
- package/dist/docs/reference/model/Solid.md +24 -12
- package/dist/docs/reference/model/SolidInspection.md +2 -6
- package/dist/docs/reference/model/SolidSegmentHit.md +2 -6
- package/dist/docs/reference/model/SphereOptions.md +27 -0
- package/dist/docs/reference/model/StarOptions.md +21 -23
- package/dist/docs/reference/model/SvgOrigin.md +2 -2
- package/dist/docs/reference/model/SvgPathSectionOptions.md +3 -5
- package/dist/docs/reference/model/SvgSectionOptions.md +3 -6
- package/dist/docs/reference/model/SweepOptions.md +109 -0
- package/dist/docs/reference/model/SweepOrientation.md +119 -0
- package/dist/docs/reference/model/SweepTransformOptions.md +105 -0
- package/dist/docs/reference/model/TextSectionOptions.md +2 -7
- package/dist/docs/reference/{geometry → model}/TorusOptions.md +11 -10
- package/dist/docs/reference/model/TubeOptions.md +84 -0
- package/dist/docs/reference/model/box.md +11 -10
- package/dist/docs/reference/model/categories/boolean-operations.md +9 -3
- package/dist/docs/reference/model/categories/bounded-surfaces.md +13 -1
- package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +26 -7
- package/dist/docs/reference/model/categories/generation.md +11 -3
- package/dist/docs/reference/model/categories/hinges.md +7 -1
- package/dist/docs/reference/model/categories/mesh-inspection.md +7 -1
- package/dist/docs/reference/model/categories/primitives.md +34 -6
- package/dist/docs/reference/model/categories/sections.md +8 -2
- package/dist/docs/reference/model/categories/threads.md +8 -5
- package/dist/docs/reference/model/categories/transforms-placement.md +15 -10
- package/dist/docs/reference/model/circle.md +7 -3
- package/dist/docs/reference/model/cornerCutter.md +88 -0
- package/dist/docs/reference/model/cylinder.md +6 -5
- package/dist/docs/reference/model/edgeCutter.md +91 -0
- package/dist/docs/reference/model/ellipse.md +7 -3
- package/dist/docs/reference/model/extrude.md +29 -23
- package/dist/docs/reference/model/generate.md +4 -2
- package/dist/docs/reference/model/gridPattern.md +11 -4
- package/dist/docs/reference/model/heightfield.md +5 -5
- package/dist/docs/reference/model/holeCutter.md +26 -12
- package/dist/docs/reference/model/hull.md +2 -2
- package/dist/docs/reference/model/implicit.md +3 -3
- package/dist/docs/reference/model/internalThreadCutter.md +32 -21
- package/dist/docs/reference/model/intersect.md +7 -3
- package/dist/docs/reference/model/join.md +6 -2
- package/dist/docs/reference/model/knuckleHinge.md +2 -3
- package/dist/docs/reference/model/linearPattern.md +11 -4
- package/dist/docs/reference/model/loft.md +28 -24
- package/dist/docs/reference/model/minkowskiSum.md +3 -3
- package/dist/docs/reference/model/pathPattern.md +17 -8
- package/dist/docs/reference/model/polygon.md +8 -3
- package/dist/docs/reference/model/radialPattern.md +11 -4
- package/dist/docs/reference/model/rectangle.md +11 -7
- package/dist/docs/reference/model/regularPolygon.md +7 -3
- package/dist/docs/reference/model/revolve.md +18 -12
- package/dist/docs/reference/model/solidFromMesh.md +10 -6
- package/dist/docs/reference/model/sphere.md +7 -6
- package/dist/docs/reference/model/star.md +11 -7
- package/dist/docs/reference/model/stroke.md +12 -8
- package/dist/docs/reference/model/svgPathSection.md +10 -4
- package/dist/docs/reference/model/svgSection.md +10 -4
- package/dist/docs/reference/model/sweep.md +102 -25
- package/dist/docs/reference/model/textSection.md +7 -3
- package/dist/docs/reference/model/threadRidge.md +16 -17
- package/dist/docs/reference/model/threadedNut.md +25 -22
- package/dist/docs/reference/model/threadedRod.md +21 -18
- package/dist/docs/reference/model/torus.md +13 -12
- package/dist/docs/reference/model/tube.md +6 -5
- package/dist/docs/reference/model/union.md +7 -3
- package/dist/docs/reference/model.md +10 -5
- package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +2 -2
- package/dist/docs/reference/text/VectorFont.md +38 -34
- package/dist/docs/reference/text/VectorFontOptions.md +2 -2
- package/dist/docs/reference/{geometry → text}/VectorTextArcBaseline.md +2 -11
- package/dist/docs/reference/{geometry → text}/VectorTextLayoutOptions.md +3 -11
- package/dist/docs/reference/{geometry → text}/VectorTextOptions.md +2 -10
- package/dist/docs/reference/text/categories/font-preparation.md +10 -1
- package/dist/docs/reference/text/prepareVectorFont.md +4 -2
- package/dist/docs/reference/text.md +7 -1
- package/dist/engine/execution.js +5 -3
- package/dist/engine/finalization.js +5 -5
- package/dist/engine/index.js +9 -4
- package/dist/engine/native/adapter.js +1 -1
- package/dist/engine/native/construction-mesh.js +15 -5
- package/dist/engine/native/context.js +10 -7
- package/dist/engine/native/index.js +1 -1
- package/dist/engine/native/material-components.js +2 -2
- package/dist/engine/native/mesh-observation.js +1 -1
- package/dist/engine/native/regions.js +44 -24
- package/dist/engine/native/scoped-primitives.js +3 -3
- package/dist/engine/native/scoped-threads.js +1 -13
- package/dist/engine/native/threads.js +2 -2
- package/dist/engine/native/transforms.js +2 -2
- package/dist/engine/operations/construction.js +77 -27
- package/dist/engine/operations/context.js +13 -6
- package/dist/engine/operations/cutters.js +112 -0
- package/dist/engine/operations/environment.js +2 -2
- package/dist/engine/operations/extrusion-finishing.js +42 -16
- package/dist/engine/operations/hole-cutter.js +125 -114
- package/dist/engine/operations/join-collar-profile.js +19 -19
- package/dist/engine/operations/join.js +86 -73
- package/dist/engine/operations/knuckle-hinge.js +25 -20
- package/dist/engine/operations/loft.js +9 -16
- package/dist/engine/operations/mechanical.js +4 -15
- package/dist/engine/operations/primitives/anchors.js +23 -19
- package/dist/engine/operations/primitives/construction.js +38 -12
- package/dist/engine/operations/primitives/correspondence.js +2 -2
- package/dist/engine/operations/primitives/profile-mesh.js +41 -80
- package/dist/engine/operations/primitives/profiles.js +5 -5
- package/dist/engine/operations/sections.js +8 -8
- package/dist/engine/operations/transforms.js +19 -39
- package/dist/engine/placement.js +3 -3
- package/dist/engine/recipe-realization.js +86 -30
- package/dist/engine/session/declarations.js +98 -0
- package/dist/engine/session/dependencies.js +81 -28
- package/dist/engine/session/graph.js +39 -137
- package/dist/engine/session/parameters.js +78 -0
- package/dist/engine/session/session.js +2 -2
- package/dist/engine/session/snapshot-cache.js +2 -2
- package/dist/engine/shape-anchors.js +13 -6
- package/dist/export/3mf.js +9 -2
- package/dist/export/capture.js +10 -6
- package/dist/export/glb.js +7 -2
- package/dist/export/stl.js +21 -6
- package/dist/geometry/{bounds.js → bounds/operations.js} +3 -1
- package/dist/geometry/{bounds-value.js → bounds/value.js} +20 -16
- package/dist/geometry/curves/evaluation.js +5 -6
- package/dist/geometry/curves/sampling.js +30 -6
- package/dist/geometry/{extrusion.js → extrusion/controls.js} +58 -35
- package/dist/geometry/extrusion/mesh.js +92 -0
- package/dist/geometry/extrusion/stations.js +35 -0
- package/dist/geometry/extrusion/twisted-chamfer.js +265 -0
- package/dist/geometry/immutable-buffer.js +7 -1
- package/dist/geometry/index.js +24 -32
- package/dist/geometry/{model-limits.js → limits.js} +1 -1
- package/dist/geometry/loft/{loft-correspondence.js → correspondence.js} +31 -20
- package/dist/geometry/loft/{loft-geometry.js → geometry.js} +15 -17
- package/dist/geometry/loft/mesh.js +53 -0
- package/dist/geometry/loft/{loft-options.js → options.js} +13 -11
- package/dist/geometry/loft/{loft-simple-mesh.js → simple-mesh.js} +26 -17
- package/dist/geometry/math/interpolation.js +9 -0
- package/dist/geometry/math/vector-value.js +12 -3
- package/dist/geometry/math/vector2.js +18 -5
- package/dist/geometry/math/vector3.js +28 -5
- package/dist/geometry/math-api.js +4 -0
- package/dist/geometry/mechanical/gear-motion.js +7 -5
- package/dist/geometry/mechanical/gears.js +21 -4
- package/dist/geometry/mechanical/knuckle-hinge.js +7 -5
- package/dist/geometry/mechanical/threads/fit.js +8 -2
- package/dist/geometry/mechanical/threads/helices.js +4 -2
- package/dist/geometry/mechanical/threads/mesh-plan.js +4 -2
- package/dist/geometry/mechanical/threads/mesh.js +12 -9
- package/dist/geometry/mechanical/threads/profiles.js +18 -4
- package/dist/geometry/mechanical/threads/solids.js +11 -2
- package/dist/geometry/mechanical-api.js +10 -0
- package/dist/geometry/mesh/{mesh-centroid.js → centroid.js} +2 -1
- package/dist/geometry/{heightfield.js → mesh/heightfield.js} +9 -5
- package/dist/geometry/{join-geometry.js → mesh/join-layers.js} +53 -59
- package/dist/geometry/mesh/{mesh.js → operations.js} +11 -18
- package/dist/geometry/mesh/{mesh-planar.js → planar.js} +8 -18
- package/dist/geometry/mesh/{mesh-quality.js → quality.js} +10 -42
- package/dist/geometry/mesh/{mesh-render.js → render-buffers.js} +22 -7
- package/dist/geometry/mesh/{mesh-signature.js → signature.js} +1 -1
- package/dist/geometry/mesh/{mesh-solid-intersections.js → solid-intersections.js} +2 -0
- package/dist/geometry/mesh/{mesh-solid.js → solid.js} +4 -4
- package/dist/geometry/mesh/triangle-quality.js +42 -0
- package/dist/geometry/mesh/winding.js +11 -0
- package/dist/geometry/{numeric.js → mesh/write-vertex.js} +1 -1
- package/dist/geometry/mesh-api.js +12 -11
- package/dist/geometry/paths/distribution.js +43 -0
- package/dist/geometry/paths/editing.js +76 -0
- package/dist/geometry/paths/frames.js +16 -11
- package/dist/geometry/paths/helix.js +1 -1
- package/dist/geometry/paths/resampling.js +46 -61
- package/dist/geometry/paths/{planar.js → rounding.js} +8 -67
- package/dist/geometry/paths/spline.js +116 -0
- package/dist/geometry/paths/traversal.js +107 -0
- package/dist/geometry/paths/{path-value.js → value.js} +97 -18
- package/dist/geometry/patterns/placements.js +20 -29
- package/dist/geometry/{patterns.js → patterns/transforms.js} +11 -7
- package/dist/geometry/primitives/cutters.js +70 -0
- package/dist/geometry/{cylinder.js → primitives/cylinder.js} +4 -4
- package/dist/geometry/{edge-finishing.js → primitives/edges.js} +5 -5
- package/dist/geometry/{primitive-resolvers.js → primitives/resolvers.js} +9 -9
- package/dist/geometry/primitives/sampling.js +41 -0
- package/dist/geometry/profiles/contour.js +19 -7
- package/dist/geometry/profiles/{match-profiles.js → matching.js} +9 -6
- package/dist/geometry/profiles/primitives/circle.js +1 -1
- package/dist/geometry/profiles/primitives/ellipse.js +2 -2
- package/dist/geometry/profiles/primitives/rectangle.js +8 -8
- package/dist/geometry/profiles/primitives/star.js +1 -1
- package/dist/geometry/profiles/side-profile.js +8 -5
- package/dist/geometry/profiles/validation.js +1 -1
- package/dist/geometry/{polygon-clipping.js → regions/clipping.js} +1 -1
- package/dist/geometry/{convex-offset.js → regions/convex-offset.js} +1 -1
- package/dist/geometry/{region-offset.js → regions/offset.js} +7 -5
- package/dist/geometry/{regions.js → regions/operations.js} +59 -22
- package/dist/geometry/{stroke-path.js → regions/stroke.js} +46 -20
- package/dist/geometry/{loft/loft-triangulation.js → regions/triangulation.js} +35 -2
- package/dist/geometry/revolve/{revolve-mesh.js → mesh.js} +9 -10
- package/dist/geometry/{circular-sampling.js → sampling/circular.js} +3 -3
- package/dist/geometry/{sampling-limits.js → sampling/limits.js} +6 -2
- package/dist/geometry/{resolution.js → sampling/resolution.js} +15 -14
- package/dist/geometry/svg/fill.js +4 -3
- package/dist/geometry/svg/import.js +47 -64
- package/dist/geometry/svg/path.js +3 -3
- package/dist/geometry/sweep/closed.js +55 -0
- package/dist/geometry/sweep/mesh.js +30 -0
- package/dist/geometry/{sweeps/sweep-open.js → sweep/open.js} +9 -24
- package/dist/geometry/{sweeps → sweep}/orientation.js +14 -11
- package/dist/geometry/sweep/seam.js +30 -0
- package/dist/geometry/{sweeps → sweep}/stations.js +75 -10
- package/dist/geometry/sweep/transforms.js +30 -0
- package/dist/geometry/{sweeps → sweep}/validation.js +4 -4
- package/dist/geometry/{text-contours.js → text/contours.js} +3 -3
- package/dist/geometry/{text-fitting.js → text/fitting.js} +4 -3
- package/dist/geometry/text/layout.js +1 -0
- package/dist/geometry/{transform3.js → transforms/affine3.js} +31 -46
- package/dist/geometry/{anchors.js → transforms/anchors.js} +43 -24
- package/dist/geometry/{transform-geometry.js → transforms/apply.js} +8 -5
- package/dist/geometry/{transform2.js → transforms/dimensions.js} +23 -19
- package/dist/geometry/transforms/frame.js +64 -0
- package/dist/geometry/{transform-matrix.js → transforms/matrix-input.js} +8 -1
- package/dist/geometry/{transform-value.js → transforms/value.js} +29 -11
- package/dist/index.js +3 -9
- package/dist/model/cutters.js +1 -0
- package/dist/model/execution-binding.js +3 -3
- package/dist/model/generation.js +2 -0
- package/dist/model/immutable-generation-data.js +2 -0
- package/dist/model/operations.js +130 -94
- package/dist/model/recipe-declaration.js +5 -7
- package/dist/text/index.js +3 -0
- package/dist/text/vector-text-layout.js +1 -0
- package/package.json +15 -17
- package/dist/api/export-3mf.d.ts +0 -2
- package/dist/api/export-glb.d.ts +0 -2
- package/dist/api/export-stl.d.ts +0 -2
- package/dist/docs/reference/geometry/BoxEdge.md +0 -17
- package/dist/docs/reference/geometry/BoxEdgeSelection.md +0 -24
- package/dist/docs/reference/geometry/BoxEdgeTreatments.md +0 -25
- package/dist/docs/reference/geometry/CylinderOptions.md +0 -63
- package/dist/docs/reference/geometry/EndTreatments.md +0 -44
- package/dist/docs/reference/geometry/ExtrudeMeshOptions.md +0 -144
- package/dist/docs/reference/geometry/ExtrudeOptions.md +0 -156
- package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +0 -25
- package/dist/docs/reference/geometry/LoftMeshStation.md +0 -41
- package/dist/docs/reference/geometry/PrimitiveAttachment.md +0 -39
- package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +0 -114
- package/dist/docs/reference/geometry/SphereOptions.md +0 -25
- package/dist/docs/reference/geometry/SweepOptions.md +0 -127
- package/dist/docs/reference/geometry/SweepOrientation.md +0 -127
- package/dist/docs/reference/geometry/TubeOptions.md +0 -72
- package/dist/docs/reference/geometry/add2.md +0 -43
- package/dist/docs/reference/geometry/add3.md +0 -49
- package/dist/docs/reference/geometry/applyTransformDirection3.md +0 -52
- package/dist/docs/reference/geometry/applyTransformPoint3.md +0 -50
- package/dist/docs/reference/geometry/categories/meshes.md +0 -68
- package/dist/docs/reference/geometry/composeTransform3.md +0 -51
- package/dist/docs/reference/geometry/cross2.md +0 -43
- package/dist/docs/reference/geometry/cross3.md +0 -49
- package/dist/docs/reference/geometry/distance2.md +0 -43
- package/dist/docs/reference/geometry/distance3.md +0 -43
- package/dist/docs/reference/geometry/dot2.md +0 -43
- package/dist/docs/reference/geometry/dot3.md +0 -49
- package/dist/docs/reference/geometry/eulerTransform3.md +0 -49
- package/dist/docs/reference/geometry/frameTransform3.md +0 -55
- package/dist/docs/reference/geometry/inverseTransform3.md +0 -41
- package/dist/docs/reference/geometry/length2.md +0 -37
- package/dist/docs/reference/geometry/length3.md +0 -37
- package/dist/docs/reference/geometry/lerp2.md +0 -49
- package/dist/docs/reference/geometry/lerp3.md +0 -49
- package/dist/docs/reference/geometry/normalize2.md +0 -46
- package/dist/docs/reference/geometry/normalize3.md +0 -46
- package/dist/docs/reference/geometry/projectOntoPlane3.md +0 -43
- package/dist/docs/reference/geometry/rotate2.md +0 -43
- package/dist/docs/reference/geometry/rotationTransform3.md +0 -60
- package/dist/docs/reference/geometry/scale2.md +0 -43
- package/dist/docs/reference/geometry/scale3.md +0 -49
- package/dist/docs/reference/geometry/scaleTransform3.md +0 -45
- package/dist/docs/reference/geometry/subtract2.md +0 -43
- package/dist/docs/reference/geometry/subtract3.md +0 -49
- package/dist/docs/reference/geometry/transformDeterminant3.md +0 -43
- package/dist/docs/reference/geometry/translationTransform3.md +0 -42
- package/dist/docs/reference/geometry/validateRigidTransform3.md +0 -41
- package/dist/docs/reference/geometry/validateTransform3.md +0 -54
- package/dist/docs/reference/model/Profile.md +0 -30
- package/dist/docs/reference/model/categories/explicit-profiles.md +0 -21
- package/dist/docs/reference/model/matchProfiles.md +0 -48
- package/dist/docs/reference/model/preflightInternalThreadCutter.md +0 -93
- package/dist/docs/reference/model/preflightThreadedNut.md +0 -109
- package/dist/docs/reference/model/preflightThreadedRod.md +0 -93
- package/dist/engine/operations/patterns.js +0 -47
- package/dist/geometry/loft/loft.js +0 -105
- package/dist/geometry/mechanical/index.js +0 -14
- package/dist/geometry/primitive-resolution.js +0 -20
- package/dist/geometry/svg/index.js +0 -1
- package/dist/geometry/sweeps/options.js +0 -29
- package/dist/geometry/sweeps/sweep-closed.js +0 -96
- package/dist/geometry/sweeps/sweep-mesh.js +0 -32
- /package/dist/geometry/mechanical/{standards.js → fastener-standards.js} +0 -0
- /package/dist/geometry/mesh/{mesh-edge-table.js → edge-table.js} +0 -0
- /package/dist/geometry/mesh/{mesh-types.js → types.js} +0 -0
- /package/dist/geometry/mesh/{mesh-view-cache.js → view-cache.js} +0 -0
- /package/dist/geometry/{primitive-options.js → primitives/options.js} +0 -0
- /package/dist/geometry/{text-layout.js → sweep/options.js} +0 -0
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { bounds2, bounds3 } from "../bounds
|
|
1
|
+
import { bounds2, bounds3 } from "../bounds/value.js";
|
|
2
2
|
import { GeometryError } from "../errors.js";
|
|
3
3
|
import { immutableMathClass } from "../math/immutable-value.js";
|
|
4
4
|
import { vector2, vector2Data, vector3, vector3Data, } from "../math/vector-value.js";
|
|
5
|
-
import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling
|
|
6
|
-
import { transformPath2, transformPath3 } from "../
|
|
5
|
+
import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling/limits.js";
|
|
6
|
+
import { transformPath2, transformPath3 } from "../transforms/apply.js";
|
|
7
7
|
import { closestPointOnValidatedPath } from "./closest-point.js";
|
|
8
|
+
import { splitPathPoints, subdividePathPoints, trimPathPoints } from "./editing.js";
|
|
8
9
|
import { resamplePath2Points, resamplePath3Points } from "./resampling.js";
|
|
10
|
+
import { createPathTraversal, locatePathDistance, measurePathLength, writePathPoint, writePathTangent, } from "./traversal.js";
|
|
9
11
|
const fail = (message, code = "INVALID_ARGUMENT") => {
|
|
10
12
|
throw new GeometryError(code, message, { operation: "path" });
|
|
11
13
|
};
|
|
@@ -90,17 +92,45 @@ function measuredLength(owner) {
|
|
|
90
92
|
const cached = state.length;
|
|
91
93
|
if (cached !== undefined)
|
|
92
94
|
return cached;
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
95
|
+
return (state.length = measurePathLength(state.points, owner.closed));
|
|
96
|
+
}
|
|
97
|
+
function traversalOf(owner) {
|
|
98
|
+
const state = stateOf(owner);
|
|
99
|
+
const traversal = (state.traversal ??= createPathTraversal(state.points, owner.closed));
|
|
100
|
+
state.length = traversal.length;
|
|
101
|
+
return traversal;
|
|
102
|
+
}
|
|
103
|
+
function editingTraversal(owner, limits = {}) {
|
|
104
|
+
const maximum = resolveGeometrySamplingLimits(limits).maxPathPoints;
|
|
105
|
+
assertSamplingCount(stateOf(owner).points.length, "path", maximum);
|
|
106
|
+
return { traversal: traversalOf(owner), maximum };
|
|
107
|
+
}
|
|
108
|
+
function fractionDistance(owner, fraction) {
|
|
109
|
+
if (!Number.isFinite(fraction))
|
|
110
|
+
fail("Path fraction must be finite.", "NON_FINITE_VALUE");
|
|
111
|
+
if (fraction < 0 || fraction > 1)
|
|
112
|
+
fail("Path fraction must lie between zero and one.");
|
|
113
|
+
return measuredLength(owner) * fraction;
|
|
114
|
+
}
|
|
115
|
+
function station(owner, distance) {
|
|
116
|
+
const traversal = traversalOf(owner);
|
|
117
|
+
const location = locatePathDistance(traversal, distance);
|
|
118
|
+
const point = [], tangent = [];
|
|
119
|
+
writePathPoint(traversal, location, point);
|
|
120
|
+
writePathTangent(traversal, location, tangent);
|
|
121
|
+
return owner.dimension === 2
|
|
122
|
+
? Object.freeze({
|
|
123
|
+
...location,
|
|
124
|
+
offset: distance,
|
|
125
|
+
point: vector2([point[0], point[1]]),
|
|
126
|
+
tangent: vector2([tangent[0], tangent[1]]),
|
|
127
|
+
})
|
|
128
|
+
: Object.freeze({
|
|
129
|
+
...location,
|
|
130
|
+
offset: distance,
|
|
131
|
+
point: vector3([point[0], point[1], point[2]]),
|
|
132
|
+
tangent: vector3([tangent[0], tangent[1], tangent[2]]),
|
|
133
|
+
});
|
|
104
134
|
}
|
|
105
135
|
function measuredBounds(points) {
|
|
106
136
|
if (points.length === 0)
|
|
@@ -129,6 +159,7 @@ const PlanarPath = /* @__PURE__ */ immutableMathClass(class PlanarPath {
|
|
|
129
159
|
dimension = 2;
|
|
130
160
|
constructor(points, closed) {
|
|
131
161
|
this.closed = closed;
|
|
162
|
+
validateClosure(points, closed);
|
|
132
163
|
pathStates.set(this, { points });
|
|
133
164
|
Object.freeze(this);
|
|
134
165
|
}
|
|
@@ -139,12 +170,32 @@ const PlanarPath = /* @__PURE__ */ immutableMathClass(class PlanarPath {
|
|
|
139
170
|
return measuredLength(this);
|
|
140
171
|
}
|
|
141
172
|
bounds() {
|
|
142
|
-
return measuredBounds(points2(this));
|
|
173
|
+
return (stateOf(this).bounds ??= measuredBounds(points2(this)));
|
|
143
174
|
}
|
|
144
175
|
closestPoint(point) {
|
|
145
176
|
const location = closestPointOnValidatedPath(points2(this), vector2Data(point), this.closed);
|
|
146
177
|
return Object.freeze({ ...location, point: vector2(location.point) });
|
|
147
178
|
}
|
|
179
|
+
atDistance(distance) {
|
|
180
|
+
return station(this, distance);
|
|
181
|
+
}
|
|
182
|
+
atFraction(fraction) {
|
|
183
|
+
return station(this, fractionDistance(this, fraction));
|
|
184
|
+
}
|
|
185
|
+
splitAt(distance, limits) {
|
|
186
|
+
const { traversal, maximum } = editingTraversal(this, limits);
|
|
187
|
+
const [first, second] = splitPathPoints(traversal, distance, maximum);
|
|
188
|
+
return Object.freeze([new PlanarPath(first, false), new PlanarPath(second, false)]);
|
|
189
|
+
}
|
|
190
|
+
trim(start, end, limits) {
|
|
191
|
+
const { traversal, maximum } = editingTraversal(this, limits);
|
|
192
|
+
return new PlanarPath(trimPathPoints(traversal, start, end, maximum), false);
|
|
193
|
+
}
|
|
194
|
+
subdivide(options) {
|
|
195
|
+
validateOptions(options);
|
|
196
|
+
const { traversal, maximum } = editingTraversal(this, options.limits);
|
|
197
|
+
return new PlanarPath(subdividePathPoints(traversal, options.maxSegmentLength, maximum), this.closed);
|
|
198
|
+
}
|
|
148
199
|
transform(placement) {
|
|
149
200
|
return new PlanarPath(transformPath2(points2(this), placement), this.closed);
|
|
150
201
|
}
|
|
@@ -161,6 +212,7 @@ const SpatialPath = /* @__PURE__ */ immutableMathClass(class SpatialPath {
|
|
|
161
212
|
dimension = 3;
|
|
162
213
|
constructor(points, closed) {
|
|
163
214
|
this.closed = closed;
|
|
215
|
+
validateClosure(points, closed);
|
|
164
216
|
pathStates.set(this, { points });
|
|
165
217
|
Object.freeze(this);
|
|
166
218
|
}
|
|
@@ -171,12 +223,35 @@ const SpatialPath = /* @__PURE__ */ immutableMathClass(class SpatialPath {
|
|
|
171
223
|
return measuredLength(this);
|
|
172
224
|
}
|
|
173
225
|
bounds() {
|
|
174
|
-
return measuredBounds(points3(this));
|
|
226
|
+
return (stateOf(this).bounds ??= measuredBounds(points3(this)));
|
|
175
227
|
}
|
|
176
228
|
closestPoint(point) {
|
|
177
229
|
const location = closestPointOnValidatedPath(points3(this), vector3Data(point), this.closed);
|
|
178
230
|
return Object.freeze({ ...location, point: vector3(location.point) });
|
|
179
231
|
}
|
|
232
|
+
atDistance(distance) {
|
|
233
|
+
return station(this, distance);
|
|
234
|
+
}
|
|
235
|
+
atFraction(fraction) {
|
|
236
|
+
return station(this, fractionDistance(this, fraction));
|
|
237
|
+
}
|
|
238
|
+
splitAt(distance, limits) {
|
|
239
|
+
const { traversal, maximum } = editingTraversal(this, limits);
|
|
240
|
+
const [first, second] = splitPathPoints(traversal, distance, maximum);
|
|
241
|
+
return Object.freeze([
|
|
242
|
+
new SpatialPath(first, false),
|
|
243
|
+
new SpatialPath(second, false),
|
|
244
|
+
]);
|
|
245
|
+
}
|
|
246
|
+
trim(start, end, limits) {
|
|
247
|
+
const { traversal, maximum } = editingTraversal(this, limits);
|
|
248
|
+
return new SpatialPath(trimPathPoints(traversal, start, end, maximum), false);
|
|
249
|
+
}
|
|
250
|
+
subdivide(options) {
|
|
251
|
+
validateOptions(options);
|
|
252
|
+
const { traversal, maximum } = editingTraversal(this, options.limits);
|
|
253
|
+
return new SpatialPath(subdividePathPoints(traversal, options.maxSegmentLength, maximum), this.closed);
|
|
254
|
+
}
|
|
180
255
|
transform(placement) {
|
|
181
256
|
return new SpatialPath(transformPath3(points3(this), placement), this.closed);
|
|
182
257
|
}
|
|
@@ -198,13 +273,15 @@ const SpatialPath = /* @__PURE__ */ immutableMathClass(class SpatialPath {
|
|
|
198
273
|
* A path input retains its closure. Limits bound construction only; resampling takes its own limits.
|
|
199
274
|
*
|
|
200
275
|
* Use `toData()` for a frozen record that restores coordinates, closure, and dimension together.
|
|
276
|
+
*
|
|
277
|
+
* @param input - XY path or finite millimetre coordinates to copy.
|
|
278
|
+
* @param options - Closure for raw points and construction limits.
|
|
201
279
|
*/
|
|
202
280
|
export function path2(input, options = {}) {
|
|
203
281
|
validateOptions(options);
|
|
204
282
|
const limits = resolveGeometrySamplingLimits(options.limits);
|
|
205
283
|
const source = pathSource(input, options.closed, 2);
|
|
206
284
|
const points = snapshot(source.points, 2, limits);
|
|
207
|
-
validateClosure(points, source.closed);
|
|
208
285
|
return new PlanarPath(points, source.closed);
|
|
209
286
|
}
|
|
210
287
|
/**
|
|
@@ -213,6 +290,9 @@ export function path2(input, options = {}) {
|
|
|
213
290
|
*
|
|
214
291
|
* Use `toData()` for a frozen record that restores coordinates, closure, and dimension together.
|
|
215
292
|
*
|
|
293
|
+
* @param input - XYZ path or finite millimetre coordinates to copy.
|
|
294
|
+
* @param options - Closure for raw points and construction limits.
|
|
295
|
+
*
|
|
216
296
|
* @see {@link path2} for shared construction rules.
|
|
217
297
|
*/
|
|
218
298
|
export function path3(input, options = {}) {
|
|
@@ -220,7 +300,6 @@ export function path3(input, options = {}) {
|
|
|
220
300
|
const limits = resolveGeometrySamplingLimits(options.limits);
|
|
221
301
|
const source = pathSource(input, options.closed, 3);
|
|
222
302
|
const points = snapshot(source.points, 3, limits);
|
|
223
|
-
validateClosure(points, source.closed);
|
|
224
303
|
return new SpatialPath(points, source.closed);
|
|
225
304
|
}
|
|
226
305
|
function validateOptions(options) {
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { GeometryError } from "../errors.js";
|
|
2
2
|
import { vector3Data } from "../math/vector-value.js";
|
|
3
3
|
import { cross3, dot3, scale3 } from "../math/vector3.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
4
|
+
import { distributeAlongPath } from "../paths/distribution.js";
|
|
5
|
+
import { path2InputData, path3InputData, } from "../paths/value.js";
|
|
6
|
+
import { frameTransform3, IDENTITY_TRANSFORM3, multiplyTransform3, rotationTransform3, translationTransform3, } from "../transforms/affine3.js";
|
|
7
|
+
import { restrictTransform3 } from "../transforms/dimensions.js";
|
|
8
8
|
const fail = (operation, message) => {
|
|
9
9
|
throw new GeometryError("INVALID_ARGUMENT", message, { operation });
|
|
10
10
|
};
|
|
11
|
-
|
|
11
|
+
function patternCount(count, operation) {
|
|
12
12
|
if (!Number.isSafeInteger(count) || count < 1)
|
|
13
13
|
fail(operation, "Pattern count must be a positive safe integer.");
|
|
14
14
|
if (count > 100_000)
|
|
@@ -139,29 +139,30 @@ export function radialPatternPlan(options) {
|
|
|
139
139
|
requireDimension(pivot.length, dimension, operation);
|
|
140
140
|
return index === 0
|
|
141
141
|
? IDENTITY_TRANSFORM3
|
|
142
|
-
:
|
|
142
|
+
: multiplyTransform3(after, multiplyTransform3(rotationTransform3(axis, { radians: angleRadians * index }), before));
|
|
143
143
|
},
|
|
144
144
|
};
|
|
145
145
|
}
|
|
146
146
|
export function gridPatternPlan(options) {
|
|
147
147
|
const operation = "gridPattern";
|
|
148
148
|
optionsObject(options, operation);
|
|
149
|
-
const
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
(
|
|
153
|
-
|
|
154
|
-
|
|
149
|
+
const suppliedCounts = options.count;
|
|
150
|
+
const dimensions = suppliedCounts?.length;
|
|
151
|
+
if (!Array.isArray(suppliedCounts) || (dimensions !== 2 && dimensions !== 3))
|
|
152
|
+
fail(operation, "Grid count requires an XY or XYZ integer tuple.");
|
|
153
|
+
const suppliedSpacing = coordinates(options.spacing, operation);
|
|
154
|
+
if (suppliedSpacing.length !== dimensions)
|
|
155
|
+
fail(operation, "Grid spacing must match the count dimension.");
|
|
155
156
|
if (options.center !== undefined && typeof options.center !== "boolean")
|
|
156
157
|
fail(operation, "Grid center must be a boolean.");
|
|
157
158
|
const centered = options.center === true;
|
|
158
|
-
const counts = [
|
|
159
|
+
const counts = [suppliedCounts[0], suppliedCounts[1], dimensions === 3 ? suppliedCounts[2] : 1];
|
|
159
160
|
counts.forEach((count) => patternCount(count, operation));
|
|
160
161
|
const count = patternCount(counts[0] * counts[1] * counts[2], operation);
|
|
161
162
|
const spacing = [
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
dimensions === 3 ?
|
|
163
|
+
suppliedSpacing[0],
|
|
164
|
+
suppliedSpacing[1],
|
|
165
|
+
dimensions === 3 ? suppliedSpacing[2] : 0,
|
|
165
166
|
];
|
|
166
167
|
const extent = spacing.map((distance, axis) => {
|
|
167
168
|
finite(distance, operation);
|
|
@@ -169,16 +170,6 @@ export function gridPatternPlan(options) {
|
|
|
169
170
|
fail(operation, "Repeated grid axes require nonzero spacing.");
|
|
170
171
|
return finite(distance * (counts[axis] - 1), operation);
|
|
171
172
|
});
|
|
172
|
-
if (options.frame !== undefined) {
|
|
173
|
-
optionsObject(options.frame, operation);
|
|
174
|
-
for (const coordinates of [
|
|
175
|
-
options.frame.origin,
|
|
176
|
-
options.frame.xAxis,
|
|
177
|
-
options.frame.yAxis,
|
|
178
|
-
options.frame.zAxis,
|
|
179
|
-
])
|
|
180
|
-
vector(coordinates, operation);
|
|
181
|
-
}
|
|
182
173
|
const frame = options.frame === undefined ? IDENTITY_TRANSFORM3 : frameTransform3(options.frame);
|
|
183
174
|
return {
|
|
184
175
|
count,
|
|
@@ -193,7 +184,7 @@ export function gridPatternPlan(options) {
|
|
|
193
184
|
Math.floor(index / (counts[0] * counts[1])),
|
|
194
185
|
];
|
|
195
186
|
const offset = coordinates.map((value, axis) => value * spacing[axis] - (centered ? extent[axis] / 2 : 0));
|
|
196
|
-
return
|
|
187
|
+
return multiplyTransform3(frame, translationTransform3(offset));
|
|
197
188
|
},
|
|
198
189
|
};
|
|
199
190
|
}
|
|
@@ -246,7 +237,7 @@ export function pathPatternPlan(input, options, limits) {
|
|
|
246
237
|
return translation;
|
|
247
238
|
const tangent = placement.tangent;
|
|
248
239
|
if (dimension === 2)
|
|
249
|
-
return
|
|
240
|
+
return multiplyTransform3(translation, rotationTransform3([0, 0, 1], {
|
|
250
241
|
radians: Math.atan2(tangent[1], tangent[0]),
|
|
251
242
|
}));
|
|
252
243
|
const cosine = Math.max(-1, Math.min(1, dot3([0, 0, 1], tangent)));
|
|
@@ -257,7 +248,7 @@ export function pathPatternPlan(input, options, limits) {
|
|
|
257
248
|
: cosine < 0
|
|
258
249
|
? rotationTransform3([1, 0, 0], { radians: Math.PI })
|
|
259
250
|
: IDENTITY_TRANSFORM3;
|
|
260
|
-
return
|
|
251
|
+
return multiplyTransform3(translation, rotation);
|
|
261
252
|
},
|
|
262
253
|
};
|
|
263
254
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { resolveGeometrySamplingLimits } from "../sampling/limits.js";
|
|
2
|
+
import { transform3 } from "../transforms/value.js";
|
|
3
|
+
import { gridPatternPlan, linearPatternPlan, pathPatternPlan, radialPatternPlan, } from "./placements.js";
|
|
3
4
|
function transforms(plan) {
|
|
4
|
-
return Object.freeze(Array.from({ length: plan.count }, (_, index) =>
|
|
5
|
+
return Object.freeze(Array.from({ length: plan.count }, (_, index) => transform3(plan.transformAt(index))));
|
|
5
6
|
}
|
|
6
|
-
/**
|
|
7
|
+
/** Immutable XYZ placements in millimetres, including the original at the origin. */
|
|
7
8
|
export function linearPatternTransforms(options) {
|
|
8
9
|
return transforms(linearPatternPlan(options));
|
|
9
10
|
}
|
|
@@ -11,16 +12,19 @@ export function linearPatternTransforms(options) {
|
|
|
11
12
|
export function radialPatternTransforms(options) {
|
|
12
13
|
return transforms(radialPatternPlan(options));
|
|
13
14
|
}
|
|
14
|
-
/**
|
|
15
|
+
/** Immutable XYZ placements for an XY or XYZ grid, in X-fastest order. */
|
|
15
16
|
export function gridPatternTransforms(options) {
|
|
16
17
|
return transforms(gridPatternPlan(options));
|
|
17
18
|
}
|
|
18
19
|
/**
|
|
19
20
|
* Equal physical arc-length placements along a sampled XYZ path.
|
|
20
21
|
*
|
|
21
|
-
* Tangent orientation maps +Z
|
|
22
|
-
*
|
|
22
|
+
* Tangent orientation maps +Z onto the local path tangent; fixed orientation only translates.
|
|
23
|
+
* Closed paths omit a repeated seam.
|
|
23
24
|
* Explicit sampling ceilings bound both input points and output placements.
|
|
25
|
+
*
|
|
26
|
+
* @param path - XYZ path or points in millimetres; path values supply closure.
|
|
27
|
+
* @param limits - Limits on input points and output placements.
|
|
24
28
|
*/
|
|
25
29
|
export function pathPatternTransforms(path, options, limits) {
|
|
26
30
|
return transforms(pathPatternPlan(path, options, resolveGeometrySamplingLimits(limits)));
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { assertSamplingCount } from "../sampling/limits.js";
|
|
3
|
+
import { edgeTreatmentPointCount, sampleEdgeTreatment } from "./edges.js";
|
|
4
|
+
/** @internal Validates numerical face extension without treating it as a fit allowance. */
|
|
5
|
+
export function cutterExcess(value, operation) {
|
|
6
|
+
if (!Number.isFinite(value) || value < 0)
|
|
7
|
+
throw new GeometryError("INVALID_ARGUMENT", "excess must be finite and nonnegative.", {
|
|
8
|
+
operation,
|
|
9
|
+
});
|
|
10
|
+
return value;
|
|
11
|
+
}
|
|
12
|
+
/** @internal Samples only the material-removal side of a convex edge; exterior overlap preserves the treatment. */
|
|
13
|
+
export function edgeCutterContour(treatment, angle, excess, resolution, limits) {
|
|
14
|
+
const operation = "edgeCutter";
|
|
15
|
+
if (!Number.isFinite(angle) || angle <= 0 || angle >= 180)
|
|
16
|
+
throw new GeometryError("INVALID_ARGUMENT", "angle must be strictly between 0 and 180 degrees.", {
|
|
17
|
+
operation,
|
|
18
|
+
});
|
|
19
|
+
cutterExcess(excess, operation);
|
|
20
|
+
const radians = (angle * Math.PI) / 180;
|
|
21
|
+
const sampling = { angle: radians, resolution, limits };
|
|
22
|
+
const count = edgeTreatmentPointCount(treatment, operation, sampling);
|
|
23
|
+
if (count === 1)
|
|
24
|
+
return [];
|
|
25
|
+
assertSamplingCount(count + (excess === 0 ? 1 : 3), operation, limits.maxProfilePoints);
|
|
26
|
+
const points = sampleEdgeTreatment(treatment, operation, sampling);
|
|
27
|
+
// A monotone profile passing through the sharp corner leaves both faces unchanged.
|
|
28
|
+
if (points.some(([first, second]) => first === 0 && second === 0))
|
|
29
|
+
return [];
|
|
30
|
+
const cosine = Math.cos(radians), sine = Math.sin(radians);
|
|
31
|
+
const contour = points.map(([first, second]) => [
|
|
32
|
+
first + second * cosine,
|
|
33
|
+
second * sine,
|
|
34
|
+
]);
|
|
35
|
+
if (excess === 0)
|
|
36
|
+
contour.unshift([0, 0]);
|
|
37
|
+
else {
|
|
38
|
+
const first = contour[0], last = contour.at(-1);
|
|
39
|
+
contour.unshift([-excess * ((1 + cosine) / sine), -excess], [first[0], -excess]);
|
|
40
|
+
contour.push([last[0] - excess * sine, last[1] + excess * cosine]);
|
|
41
|
+
}
|
|
42
|
+
if (contour.some((point) => point.some((coordinate) => !Number.isFinite(coordinate))))
|
|
43
|
+
throw new GeometryError("INVALID_ARGUMENT", "Cutter coordinates must remain finite.", {
|
|
44
|
+
operation,
|
|
45
|
+
});
|
|
46
|
+
return contour;
|
|
47
|
+
}
|
|
48
|
+
/** @internal Convex corner-removal polytope, capped at each matching edge's setback. */
|
|
49
|
+
export function chamferCornerCutterPoints(distance, excess) {
|
|
50
|
+
const operation = "cornerCutter";
|
|
51
|
+
if (!Number.isFinite(distance) || distance < 0)
|
|
52
|
+
throw new GeometryError("INVALID_ARGUMENT", "Chamfer distance must be finite and nonnegative.", {
|
|
53
|
+
operation,
|
|
54
|
+
});
|
|
55
|
+
cutterExcess(excess, operation);
|
|
56
|
+
if (distance === 0)
|
|
57
|
+
return [];
|
|
58
|
+
return [
|
|
59
|
+
[-excess, -excess, -excess],
|
|
60
|
+
[distance, -excess, -excess],
|
|
61
|
+
[distance, distance, -excess],
|
|
62
|
+
[-excess, distance, -excess],
|
|
63
|
+
[-excess, -excess, distance],
|
|
64
|
+
[distance, -excess, distance],
|
|
65
|
+
[-excess, distance, distance],
|
|
66
|
+
[distance, distance, 0],
|
|
67
|
+
[distance, 0, distance],
|
|
68
|
+
[0, distance, distance],
|
|
69
|
+
];
|
|
70
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { assertSamplingCount, resolveGeometrySamplingLimits } from "../sampling/limits.js";
|
|
3
|
+
import { edgeTreatmentPointCount, edgeTreatmentSetbacks, sampleEdgeTreatment } from "./edges.js";
|
|
4
|
+
import { resolveCircularPrimitiveSegments } from "./sampling.js";
|
|
5
5
|
const invalid = (message) => {
|
|
6
6
|
throw new GeometryError("INVALID_ARGUMENT", message, { operation: "cylinder" });
|
|
7
7
|
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { GeometryError } from "
|
|
2
|
-
import { resolveModelingLimits } from "
|
|
3
|
-
import {
|
|
4
|
-
import { resolveGeometryResolution } from "
|
|
5
|
-
import {
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { resolveModelingLimits } from "../limits.js";
|
|
3
|
+
import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../sampling/limits.js";
|
|
4
|
+
import { resolveGeometryResolution } from "../sampling/resolution.js";
|
|
5
|
+
import { resolveCircularPrimitiveSegments } from "./sampling.js";
|
|
6
6
|
const fail = (operation, message) => {
|
|
7
7
|
throw new GeometryError("INVALID_ARGUMENT", message, { operation });
|
|
8
8
|
};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { vector3Data } from "
|
|
4
|
-
import {
|
|
5
|
-
import { resolveCircularPrimitiveSegments } from "./
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { assertMeshAllocationWithinLimits, resolveModelingLimits } from "../limits.js";
|
|
3
|
+
import { vector3Data } from "../math/vector-value.js";
|
|
4
|
+
import { edgeTreatmentPointCount, edgeTreatmentSetbacks, sampleEdgeTreatment } from "./edges.js";
|
|
5
|
+
import { resolveCircularPrimitiveSegments, resolveSphericalPrimitiveSegments } from "./sampling.js";
|
|
6
6
|
/** @internal Face pairs define the twelve nominal box edges in deterministic order. */
|
|
7
|
-
|
|
7
|
+
const boxEdges = [
|
|
8
8
|
"top-front",
|
|
9
9
|
"top-back",
|
|
10
10
|
"top-left",
|
|
@@ -68,7 +68,7 @@ export function assertPositivePrimitive(value, name, operation) {
|
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
/** @internal Resolves one positive scalar radial dimension before sampling or allocation. */
|
|
71
|
-
|
|
71
|
+
function resolvePrimitiveRadius(options, operation) {
|
|
72
72
|
assertPrimitiveOptions(options, operation);
|
|
73
73
|
if ((options.radius === undefined) === (options.diameter === undefined)) {
|
|
74
74
|
throw new GeometryError("INVALID_ARGUMENT", "Specify exactly one radius or diameter.", {
|
|
@@ -186,7 +186,7 @@ export function resolveBoxPrimitive(options) {
|
|
|
186
186
|
kind: "round",
|
|
187
187
|
inner,
|
|
188
188
|
radius: distance,
|
|
189
|
-
segments:
|
|
189
|
+
segments: resolveSphericalPrimitiveSegments(distance, treatment, operation),
|
|
190
190
|
},
|
|
191
191
|
};
|
|
192
192
|
}
|
|
@@ -236,7 +236,7 @@ export function resolveTubePrimitive(options) {
|
|
|
236
236
|
/** @internal Resolves sphere sampling shared by compiled and authored adapters. */
|
|
237
237
|
export function resolveSpherePrimitive(options) {
|
|
238
238
|
const radius = resolvePrimitiveRadius(options, "sphere");
|
|
239
|
-
return { radius, segments:
|
|
239
|
+
return { radius, segments: resolveSphericalPrimitiveSegments(radius, options, "sphere") };
|
|
240
240
|
}
|
|
241
241
|
/** @internal Resolves torus profile and sweep sampling before allocating kernel geometry. */
|
|
242
242
|
export function resolveTorusPrimitive(options) {
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { GeometryError } from "../errors.js";
|
|
2
|
+
import { assertSamplingCount, resolveGeometrySamplingLimits } from "../sampling/limits.js";
|
|
3
|
+
import { resolveCircularSegments, resolveGeometryResolution } from "../sampling/resolution.js";
|
|
4
|
+
/**
|
|
5
|
+
* Resolves a circular primitive's exact or adaptive segment count.
|
|
6
|
+
*
|
|
7
|
+
* @internal Exact counts override physical sampling, while explicit allocation ceilings still apply.
|
|
8
|
+
*/
|
|
9
|
+
export function resolveCircularPrimitiveSegments(radius, options, operation) {
|
|
10
|
+
if (options.segments === undefined) {
|
|
11
|
+
return resolveCircularSegments(radius, {
|
|
12
|
+
...options.resolution,
|
|
13
|
+
sizing: options.sizing ?? "vertex",
|
|
14
|
+
}, options.limits);
|
|
15
|
+
}
|
|
16
|
+
if (!Number.isSafeInteger(options.segments) || options.segments < 3)
|
|
17
|
+
throw new GeometryError("INVALID_ARGUMENT", "segments must be a safe integer of at least three.", { operation, details: { value: options.segments } });
|
|
18
|
+
assertSamplingCount(options.segments, operation, resolveGeometrySamplingLimits(options.limits).maxCircularSegments);
|
|
19
|
+
return options.segments;
|
|
20
|
+
}
|
|
21
|
+
/** @internal Budgets native octahedral sphere triangles, preserving deliberate faceting overrides. */
|
|
22
|
+
export function resolveSphericalPrimitiveSegments(radius, options, operation) {
|
|
23
|
+
const segments = resolveCircularPrimitiveSegments(radius, options, operation);
|
|
24
|
+
const limits = resolveGeometrySamplingLimits(options.limits);
|
|
25
|
+
if (options.segments !== undefined || options.resolution?.circularSegments !== undefined) {
|
|
26
|
+
const refined = 4 * Math.ceil(segments / 4);
|
|
27
|
+
assertSamplingCount(refined, operation, limits.maxCircularSegments);
|
|
28
|
+
return refined;
|
|
29
|
+
}
|
|
30
|
+
const policy = resolveGeometryResolution(options.resolution, limits);
|
|
31
|
+
const error = policy.maxChordError / radius;
|
|
32
|
+
const diameter = Math.min(error >= 1 ? Infinity : Math.sqrt(3 * error * (2 - error)), policy.maxSegmentLength === undefined ? Infinity : policy.maxSegmentLength / radius);
|
|
33
|
+
// Manifold 3.5.4 maps each octahedral grid face through sin(pi*x/2), then normalizes.
|
|
34
|
+
// Its norm is at least sqrt(3)/2, so an edge arc is <= pi*sqrt(2/3)*r/frequency.
|
|
35
|
+
// A spherical triangle of diameter D stays within r-sqrt(r*r-D*D/3) of the sphere.
|
|
36
|
+
// https://github.com/elalish/manifold/blob/v3.5.4/src/constructors.cpp#L162-L175
|
|
37
|
+
const frequency = Math.max(Math.ceil(segments / 4), Math.ceil((Math.PI * Math.sqrt(2 / 3)) / diameter));
|
|
38
|
+
const refined = 4 * frequency;
|
|
39
|
+
assertSamplingCount(refined, operation, Math.min(policy.maxSegments, limits.maxCircularSegments));
|
|
40
|
+
return refined;
|
|
41
|
+
}
|
|
@@ -1,12 +1,24 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { planarCubicControl } from "../curves/evaluation.js";
|
|
2
|
+
import { sampleCubicControlPoints, sampleCurve2 } from "../curves/sampling.js";
|
|
2
3
|
import { GeometryError } from "../errors.js";
|
|
3
|
-
import { normalizeContour } from "../regions.js";
|
|
4
|
-
import { resolveGeometrySamplingLimits } from "../sampling
|
|
4
|
+
import { normalizeContour } from "../regions/operations.js";
|
|
5
|
+
import { resolveGeometrySamplingLimits } from "../sampling/limits.js";
|
|
5
6
|
import { requireProfileVertexCount } from "./validation.js";
|
|
6
7
|
const OPERATION = "sampleContour";
|
|
7
8
|
function invalid(message) {
|
|
8
9
|
throw new GeometryError("INVALID_ARGUMENT", message, { operation: OPERATION });
|
|
9
10
|
}
|
|
11
|
+
function sampleSpanPoints(span, options) {
|
|
12
|
+
if (span.kind !== "cubic")
|
|
13
|
+
return sampleCurve2(span, options).points;
|
|
14
|
+
const control = planarCubicControl(span);
|
|
15
|
+
// Constant curves still need the shared sampler's degenerate-tangent rejection.
|
|
16
|
+
if (control.every((point) => point.every((value, axis) => value === control[0][axis])))
|
|
17
|
+
return sampleCurve2(span, options).points;
|
|
18
|
+
const points = [span.start];
|
|
19
|
+
sampleCubicControlPoints(control, options, (point) => points.push([point[0], point[1]]));
|
|
20
|
+
return points;
|
|
21
|
+
}
|
|
10
22
|
/**
|
|
11
23
|
* Samples 2–32 connected line/cubic segments into a simple, nonzero-area, immutable CCW XY loop.
|
|
12
24
|
*
|
|
@@ -16,8 +28,8 @@ function invalid(message) {
|
|
|
16
28
|
* `normalizeContour`; this is a single contour without holes. No editor modes or normalized
|
|
17
29
|
* coordinate range are required. No native engine, SDK, or ambient resolution is used.
|
|
18
30
|
*
|
|
19
|
-
* @param curve - Closed contour in millimetres
|
|
20
|
-
* @param options -
|
|
31
|
+
* @param curve - Closed contour in millimetres, or coordinates converted by the selected scales.
|
|
32
|
+
* @param options - Coordinate scales, physical sampling, and vertex limits.
|
|
21
33
|
* @returns Frozen counterclockwise loop in millimetres, without a repeated seam endpoint.
|
|
22
34
|
* @throws {@link GeometryError} for invalid data, topology, scale, or exceeded sampling budgets.
|
|
23
35
|
*
|
|
@@ -89,11 +101,11 @@ export function sampleContour(curve, options = {}) {
|
|
|
89
101
|
else {
|
|
90
102
|
invalid("Cross-section segments must be lines or cubics.");
|
|
91
103
|
}
|
|
92
|
-
const sampled =
|
|
104
|
+
const sampled = sampleSpanPoints(span, {
|
|
93
105
|
...(options.resolution === undefined ? {} : { resolution: options.resolution }),
|
|
94
106
|
maxVertices: remainingVertices,
|
|
95
107
|
limits,
|
|
96
|
-
})
|
|
108
|
+
});
|
|
97
109
|
const endIndex = sampled.length - (closed ? 1 : 0);
|
|
98
110
|
for (let pointIndex = 1; pointIndex < endIndex; pointIndex++)
|
|
99
111
|
output.push(sampled[pointIndex]);
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { planarCubicControl } from "../curves/evaluation.js";
|
|
2
2
|
import { resolveLineSegmentCount, resolveUniformCubicSegments } from "../curves/sampling.js";
|
|
3
3
|
import { GeometryError } from "../errors.js";
|
|
4
|
-
import { normalizeRegion, signedContourArea } from "../regions.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { normalizeRegion, signedContourArea } from "../regions/operations.js";
|
|
5
|
+
import { assertSamplingCount, resolveGeometrySamplingLimits } from "../sampling/limits.js";
|
|
6
|
+
import { resolveArcSegments, resolveGeometryResolution } from "../sampling/resolution.js";
|
|
7
7
|
import { createProfileSpanSampler } from "./span-sampling.js";
|
|
8
8
|
const isArray = (value) => Array.isArray(value);
|
|
9
9
|
const fail = (message) => {
|
|
@@ -62,6 +62,7 @@ const contours = (component) => [
|
|
|
62
62
|
component.outer,
|
|
63
63
|
...component.holes,
|
|
64
64
|
];
|
|
65
|
+
const contourAt = (component, index) => index === 0 ? component.outer : component.holes[index - 1];
|
|
65
66
|
/**
|
|
66
67
|
* Explicitly matches identified component/contour/span topology across a family.
|
|
67
68
|
*
|
|
@@ -70,6 +71,8 @@ const contours = (component) => [
|
|
|
70
71
|
* Input order and winding are preserved. Collapsed spans retain repeated logical slots, which
|
|
71
72
|
* the engine maps to shared physical vertices while omitting degenerate faces.
|
|
72
73
|
*
|
|
74
|
+
* @param profiles - 1–1000 profiles with matching component, contour, and span IDs, in order.
|
|
75
|
+
*
|
|
73
76
|
* @example Match named rectangle landmarks
|
|
74
77
|
* ```ts
|
|
75
78
|
* matchProfiles([
|
|
@@ -115,7 +118,7 @@ export function matchProfiles(profiles, options = {}) {
|
|
|
115
118
|
if (component.id !== expected.id || component.holes.length !== expected.holes.length)
|
|
116
119
|
fail("Profile component identities and hole counts must retain the same order.");
|
|
117
120
|
contours(component).forEach((contour, contourIndex) => {
|
|
118
|
-
const paired =
|
|
121
|
+
const paired = contourAt(expected, contourIndex);
|
|
119
122
|
if (contour.id !== paired.id ||
|
|
120
123
|
contour.spans.length !== paired.spans.length ||
|
|
121
124
|
contour.spans.some((span, index) => span.id !== paired.spans[index].id))
|
|
@@ -126,7 +129,7 @@ export function matchProfiles(profiles, options = {}) {
|
|
|
126
129
|
let pointsPerProfile = 0;
|
|
127
130
|
const sampling = first.components.map((component, componentIndex) => contours(component).map((contour, contourIndex) => contour.spans.map((_, spanIndex) => {
|
|
128
131
|
let count = Math.max(...profiles.map((profile) => {
|
|
129
|
-
const span =
|
|
132
|
+
const span = contourAt(profile.components[componentIndex], contourIndex).spans[spanIndex];
|
|
130
133
|
if (span.segments !== undefined)
|
|
131
134
|
return span.segments;
|
|
132
135
|
const selectedResolution = resolveGeometryResolution({ ...resolution, ...span.resolution }, limits);
|
|
@@ -143,7 +146,7 @@ export function matchProfiles(profiles, options = {}) {
|
|
|
143
146
|
while (true) {
|
|
144
147
|
let checkedCount = count;
|
|
145
148
|
for (const profile of profiles) {
|
|
146
|
-
const span =
|
|
149
|
+
const span = contourAt(profile.components[componentIndex], contourIndex).spans[spanIndex];
|
|
147
150
|
if (span.kind === "cubic" && span.segments === undefined)
|
|
148
151
|
checkedCount = Math.max(checkedCount, resolveUniformCubicSegments(planarCubicControl(span), resolveGeometryResolution({ ...resolution, ...span.resolution }, limits), cubicBudget, count));
|
|
149
152
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { resolveCircularSampling } from "../../circular
|
|
1
|
+
import { resolveCircularSampling } from "../../sampling/circular.js";
|
|
2
2
|
import { requireProfileVertexCount } from "../validation.js";
|
|
3
3
|
/**
|
|
4
4
|
* Creates an immutable centered CCW circle with +X seam and vertex or face radial sizing.
|