@metamesh/modeling 0.14.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (775) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/README.md +55 -13
  3. package/dist/api/engine.d.ts +15 -7
  4. package/dist/api/geometry.d.ts +853 -562
  5. package/dist/api/index.d.ts +604 -227
  6. package/dist/api/text.d.ts +9 -7
  7. package/dist/docs/guides/concepts.md +295 -91
  8. package/dist/docs/guides/fonts.md +9 -8
  9. package/dist/docs/guides/fundamentals.md +22 -23
  10. package/dist/docs/guides/generation.md +24 -23
  11. package/dist/docs/guides/hosting.md +26 -11
  12. package/dist/docs/guides/recipes.md +74 -48
  13. package/dist/docs/guides/standalone-model.md +42 -0
  14. package/dist/docs/manifest.json +1555 -749
  15. package/dist/docs/reference/engine/Export3mfOptions.md +1 -1
  16. package/dist/docs/reference/engine/ExportMeshPart.md +1 -1
  17. package/dist/docs/reference/engine/GenerationOptions.md +1 -1
  18. package/dist/docs/reference/engine/GeometryResource.md +1 -1
  19. package/dist/docs/reference/engine/ModelDependencies.md +1 -1
  20. package/dist/docs/reference/engine/ModelEngine.md +1 -1
  21. package/dist/docs/reference/engine/ModelEngineOptions.md +4 -8
  22. package/dist/docs/reference/engine/ModelSession.md +1 -1
  23. package/dist/docs/reference/engine/ModelSnapshot.md +21 -10
  24. package/dist/docs/reference/engine/SessionOptions.md +1 -1
  25. package/dist/docs/reference/engine/SnapshotPart.md +6 -3
  26. package/dist/docs/reference/engine/categories/host-lifecycle.md +7 -2
  27. package/dist/docs/reference/engine/createModelEngine.md +3 -3
  28. package/dist/docs/reference/engine/defaultModelingLimits.md +1 -1
  29. package/dist/docs/reference/engine/modelingWasmUrl.md +1 -1
  30. package/dist/docs/reference/engine/validateModel.md +1 -1
  31. package/dist/docs/reference/engine.md +6 -2
  32. package/dist/docs/reference/geometry/AcmeThreadProfileSpec.md +5 -1
  33. package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +4 -4
  34. package/dist/docs/reference/geometry/{Anchor3.md → Anchor3-type.md} +6 -5
  35. package/dist/docs/reference/geometry/ArcCurve2.md +11 -7
  36. package/dist/docs/reference/geometry/ArcCurve3.md +13 -9
  37. package/dist/docs/reference/geometry/{AttachTransformOptions.md → AttachOptions.md} +11 -5
  38. package/dist/docs/reference/geometry/AxisAngleRotation3.md +2 -1
  39. package/dist/docs/reference/geometry/Bounds2-type.md +127 -0
  40. package/dist/docs/reference/geometry/Bounds2Data.md +45 -0
  41. package/dist/docs/reference/geometry/Bounds2Input.md +21 -0
  42. package/dist/docs/reference/geometry/Bounds3-type.md +127 -0
  43. package/dist/docs/reference/geometry/Bounds3Data.md +45 -0
  44. package/dist/docs/reference/geometry/Bounds3Input.md +21 -0
  45. package/dist/docs/reference/geometry/BoundsFit2.md +6 -5
  46. package/dist/docs/reference/geometry/BoundsFit3.md +6 -5
  47. package/dist/docs/reference/geometry/BoundsFitOptions.md +2 -1
  48. package/dist/docs/reference/geometry/BoundsFromSizeOptions.md +2 -1
  49. package/dist/docs/reference/geometry/BoxAnchorFace.md +2 -1
  50. package/dist/docs/reference/geometry/BoxAnchorOptions.md +5 -4
  51. package/dist/docs/reference/geometry/BoxEdge.md +1 -1
  52. package/dist/docs/reference/geometry/BoxEdgeSelection.md +1 -1
  53. package/dist/docs/reference/geometry/BoxEdgeTreatments.md +1 -1
  54. package/dist/docs/reference/geometry/BoxOptions.md +10 -10
  55. package/dist/docs/reference/geometry/ButtressPressureFlankSide.md +8 -1
  56. package/dist/docs/reference/geometry/ButtressThreadProfileSpec.md +5 -1
  57. package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +1 -1
  58. package/dist/docs/reference/geometry/CircleContourOptions.md +5 -1
  59. package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +1 -1
  60. package/dist/docs/reference/geometry/CircularResolutionOptions.md +7 -7
  61. package/dist/docs/reference/geometry/ClearanceHoleDimensions.md +6 -1
  62. package/dist/docs/reference/geometry/ClearanceHoleFit.md +8 -1
  63. package/dist/docs/reference/geometry/CompensatedThreadDiameters.md +6 -1
  64. package/dist/docs/reference/geometry/Contour.md +10 -4
  65. package/dist/docs/reference/geometry/ContourCurve.md +5 -1
  66. package/dist/docs/reference/geometry/ContourPoint.md +6 -1
  67. package/dist/docs/reference/geometry/ContourSegment.md +5 -1
  68. package/dist/docs/reference/geometry/CorrespondingComponent.md +5 -1
  69. package/dist/docs/reference/geometry/CorrespondingContour.md +5 -1
  70. package/dist/docs/reference/geometry/CorrespondingProfile.md +5 -1
  71. package/dist/docs/reference/geometry/CorrespondingProfileStation.md +5 -1
  72. package/dist/docs/reference/geometry/CubicBezierCurve2.md +10 -6
  73. package/dist/docs/reference/geometry/CubicBezierCurve3.md +10 -6
  74. package/dist/docs/reference/geometry/Curve2.md +5 -1
  75. package/dist/docs/reference/geometry/Curve3.md +5 -1
  76. package/dist/docs/reference/geometry/CurveSamplingOptions.md +9 -3
  77. package/dist/docs/reference/geometry/CustomThreadProfileSpec.md +7 -3
  78. package/dist/docs/reference/geometry/CylinderAnchorFace.md +2 -1
  79. package/dist/docs/reference/geometry/CylinderAnchorOptions.md +6 -5
  80. package/dist/docs/reference/geometry/CylinderOptions.md +3 -3
  81. package/dist/docs/reference/geometry/CylindricalGearDimensions.md +8 -3
  82. package/dist/docs/reference/geometry/CylindricalGearMeshKind.md +8 -1
  83. package/dist/docs/reference/geometry/CylindricalGearOutlineOptions.md +5 -1
  84. package/dist/docs/reference/geometry/CylindricalGearPairDimensions.md +7 -3
  85. package/dist/docs/reference/geometry/CylindricalGearPairMotionOptions.md +5 -1
  86. package/dist/docs/reference/geometry/CylindricalGearPairMotionReport.md +6 -1
  87. package/dist/docs/reference/geometry/CylindricalGearPairSpec.md +5 -1
  88. package/dist/docs/reference/geometry/CylindricalGearSpec.md +11 -6
  89. package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +1 -1
  90. package/dist/docs/reference/geometry/EdgeTreatment.md +1 -1
  91. package/dist/docs/reference/geometry/EllipseContourOptions.md +7 -3
  92. package/dist/docs/reference/geometry/EndTreatments.md +1 -1
  93. package/dist/docs/reference/geometry/ExtrudeOptions.md +10 -6
  94. package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +9 -5
  95. package/dist/docs/reference/geometry/FittedTextLayout.md +7 -3
  96. package/dist/docs/reference/geometry/Frame3.md +10 -6
  97. package/dist/docs/reference/geometry/GeometryError.md +1 -1
  98. package/dist/docs/reference/geometry/GeometryErrorCode.md +1 -1
  99. package/dist/docs/reference/geometry/GeometryErrorContext.md +1 -1
  100. package/dist/docs/reference/geometry/GeometryResolution.md +5 -5
  101. package/dist/docs/reference/geometry/GeometrySamplingLimits.md +5 -1
  102. package/dist/docs/reference/geometry/GeometryToleranceOptions.md +1 -1
  103. package/dist/docs/reference/geometry/GridPatternOptions.md +11 -5
  104. package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +5 -1
  105. package/dist/docs/reference/geometry/HeightfieldOptions.md +9 -5
  106. package/dist/docs/reference/geometry/HeightfieldPreflight.md +9 -4
  107. package/dist/docs/reference/geometry/HelicalThreadRidgeMeshOptions.md +9 -5
  108. package/dist/docs/reference/geometry/HelicalThreadSolidMeshOptions.md +10 -6
  109. package/dist/docs/reference/geometry/HelicalThreadSolidMeshPreflight.md +7 -2
  110. package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +4 -3
  111. package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +10 -6
  112. package/dist/docs/reference/geometry/KnuckleHingeBaseSpec.md +82 -0
  113. package/dist/docs/reference/geometry/KnuckleHingeDimensions.md +148 -0
  114. package/dist/docs/reference/geometry/KnuckleHingeInterval.md +46 -0
  115. package/dist/docs/reference/geometry/KnuckleHingeSamplingOptions.md +51 -0
  116. package/dist/docs/reference/geometry/KnuckleHingeSpec.md +22 -0
  117. package/dist/docs/reference/geometry/LineCurve2.md +8 -4
  118. package/dist/docs/reference/geometry/LineCurve3.md +8 -4
  119. package/dist/docs/reference/geometry/LinearPatternOptions.md +12 -5
  120. package/dist/docs/reference/geometry/LoftCorrespondence.md +6 -1
  121. package/dist/docs/reference/geometry/LoftMeshStation.md +8 -4
  122. package/dist/docs/reference/geometry/LoftOptions.md +5 -1
  123. package/dist/docs/reference/geometry/LoftPlacement.md +5 -1
  124. package/dist/docs/reference/geometry/METRIC_FASTENER_STANDARDS.md +5 -1
  125. package/dist/docs/reference/geometry/MatchProfilesOptions.md +5 -1
  126. package/dist/docs/reference/geometry/MetricFastenerSize.md +9 -2
  127. package/dist/docs/reference/geometry/MetricFastenerStandard.md +5 -1
  128. package/dist/docs/reference/geometry/MetricHexNutDimensions.md +6 -1
  129. package/dist/docs/reference/geometry/MetricSocketCapHeadDimensions.md +6 -1
  130. package/dist/docs/reference/geometry/ModelingLimits.md +1 -1
  131. package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +5 -1
  132. package/dist/docs/reference/geometry/Path2-type.md +196 -0
  133. package/dist/docs/reference/geometry/Path2Data.md +50 -0
  134. package/dist/docs/reference/geometry/Path2Input.md +20 -0
  135. package/dist/docs/reference/geometry/Path3-type.md +196 -0
  136. package/dist/docs/reference/geometry/Path3Data.md +50 -0
  137. package/dist/docs/reference/geometry/Path3Input.md +20 -0
  138. package/dist/docs/reference/geometry/PathFrame.md +9 -5
  139. package/dist/docs/reference/geometry/PathLocation.md +69 -0
  140. package/dist/docs/reference/geometry/PathNormalGuide.md +10 -5
  141. package/dist/docs/reference/geometry/PathOptions.md +38 -0
  142. package/dist/docs/reference/geometry/PathPatternOptions.md +3 -3
  143. package/dist/docs/reference/geometry/PathPlacement.md +8 -4
  144. package/dist/docs/reference/geometry/PathResamplingOptions.md +84 -0
  145. package/dist/docs/reference/geometry/Pivot2Options.md +2 -1
  146. package/dist/docs/reference/geometry/Pivot3Options.md +2 -1
  147. package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +8 -1
  148. package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +26 -22
  149. package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +5 -1
  150. package/dist/docs/reference/geometry/PlanarPatchQuality.md +7 -3
  151. package/dist/docs/reference/geometry/PolygonData.md +7 -2
  152. package/dist/docs/reference/geometry/PolylineResamplingOptions.md +8 -4
  153. package/dist/docs/reference/geometry/PrimitiveAttachment.md +31 -0
  154. package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +104 -0
  155. package/dist/docs/reference/geometry/PrintableThreadFit.md +8 -1
  156. package/dist/docs/reference/geometry/PrintableThreadFitPolicy.md +6 -1
  157. package/dist/docs/reference/geometry/Profile.md +8 -2
  158. package/dist/docs/reference/geometry/ProfileComponent2.md +5 -1
  159. package/dist/docs/reference/geometry/ProfileContour2.md +8 -2
  160. package/dist/docs/reference/geometry/ProfileSpan2.md +7 -3
  161. package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +3 -3
  162. package/dist/docs/reference/geometry/RackPitchDimensions.md +6 -1
  163. package/dist/docs/reference/geometry/RackPitchSpec.md +10 -5
  164. package/dist/docs/reference/geometry/RadialPatternOptions.md +17 -22
  165. package/dist/docs/reference/geometry/RadialSizing.md +1 -1
  166. package/dist/docs/reference/geometry/RadialSizingOptions.md +1 -1
  167. package/dist/docs/reference/geometry/RectangleContourOptions.md +7 -3
  168. package/dist/docs/reference/geometry/RectangleCornerTreatment.md +5 -1
  169. package/dist/docs/reference/geometry/RectangleCornerTreatments.md +5 -1
  170. package/dist/docs/reference/geometry/RectangleProfileOptions.md +7 -3
  171. package/dist/docs/reference/geometry/RegionData.md +6 -2
  172. package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +7 -3
  173. package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +1 -1
  174. package/dist/docs/reference/geometry/RevolveOptions.md +13 -4
  175. package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +1 -1
  176. package/dist/docs/reference/geometry/RowLayoutOptions.md +2 -1
  177. package/dist/docs/reference/geometry/SampleContourOptions.md +7 -3
  178. package/dist/docs/reference/geometry/SampleHelixOptions.md +5 -1
  179. package/dist/docs/reference/geometry/SampleSideProfileOptions.md +7 -3
  180. package/dist/docs/reference/geometry/SampledCurve2.md +8 -4
  181. package/dist/docs/reference/geometry/SampledCurve3.md +8 -4
  182. package/dist/docs/reference/geometry/SampledThreadHelices.md +7 -3
  183. package/dist/docs/reference/geometry/SideProfileCurve.md +5 -1
  184. package/dist/docs/reference/geometry/SideProfilePoint.md +6 -1
  185. package/dist/docs/reference/geometry/SideProfileSegment.md +5 -1
  186. package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +1 -1
  187. package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +7 -3
  188. package/dist/docs/reference/geometry/SphereOptions.md +3 -3
  189. package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +5 -1
  190. package/dist/docs/reference/geometry/StrokeCap.md +14 -0
  191. package/dist/docs/reference/geometry/StrokeJoin.md +14 -0
  192. package/dist/docs/reference/geometry/{StrokePathRegionOptions.md → StrokeOptions.md} +11 -7
  193. package/dist/docs/reference/geometry/SvgImportOptions.md +5 -1
  194. package/dist/docs/reference/geometry/SvgRegionPreflight.md +6 -2
  195. package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +19 -15
  196. package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +16 -11
  197. package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +14 -9
  198. package/dist/docs/reference/geometry/SweepOptions.md +10 -6
  199. package/dist/docs/reference/geometry/SweepOrientation.md +11 -7
  200. package/dist/docs/reference/geometry/ThreadBevelOptions.md +5 -1
  201. package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +9 -5
  202. package/dist/docs/reference/geometry/ThreadCompensationOptions.md +5 -1
  203. package/dist/docs/reference/geometry/ThreadEndStyle.md +8 -1
  204. package/dist/docs/reference/geometry/ThreadEndTreatmentOptions.md +5 -1
  205. package/dist/docs/reference/geometry/ThreadHandedness.md +8 -1
  206. package/dist/docs/reference/geometry/ThreadHelixOptions.md +7 -3
  207. package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +8 -1
  208. package/dist/docs/reference/geometry/ThreadLeadInShape.md +8 -1
  209. package/dist/docs/reference/geometry/{ThreadProfile.md → ThreadProfile-type.md} +7 -3
  210. package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +5 -1
  211. package/dist/docs/reference/geometry/ThreadProfileSpec.md +5 -1
  212. package/dist/docs/reference/geometry/ThreadRole.md +8 -1
  213. package/dist/docs/reference/geometry/ThreadedNutBevel.md +8 -1
  214. package/dist/docs/reference/geometry/ThreadedNutOptions.md +10 -6
  215. package/dist/docs/reference/geometry/ThreadedNutPreflight.md +7 -3
  216. package/dist/docs/reference/geometry/ThreadedNutShape.md +8 -1
  217. package/dist/docs/reference/geometry/ThreadedRodOptions.md +10 -6
  218. package/dist/docs/reference/geometry/TorusOptions.md +8 -8
  219. package/dist/docs/reference/geometry/Transform2-type.md +6 -5
  220. package/dist/docs/reference/geometry/Transform2Data.md +15 -0
  221. package/dist/docs/reference/geometry/Transform2Input.md +4 -3
  222. package/dist/docs/reference/geometry/Transform3-type.md +6 -5
  223. package/dist/docs/reference/geometry/Transform3Data.md +18 -0
  224. package/dist/docs/reference/geometry/Transform3Input.md +4 -3
  225. package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +9 -4
  226. package/dist/docs/reference/geometry/TriangleMesh.md +6 -1
  227. package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +8 -4
  228. package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +5 -1
  229. package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +7 -3
  230. package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +7 -3
  231. package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +5 -1
  232. package/dist/docs/reference/geometry/TriangleMeshSignature.md +8 -4
  233. package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +8 -3
  234. package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +6 -1
  235. package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +5 -1
  236. package/dist/docs/reference/geometry/TriangularThreadProfileSpec.md +5 -1
  237. package/dist/docs/reference/geometry/TubeOptions.md +8 -8
  238. package/dist/docs/reference/geometry/Vector2-type.md +6 -5
  239. package/dist/docs/reference/geometry/Vector2Data.md +15 -0
  240. package/dist/docs/reference/geometry/Vector2Input.md +4 -3
  241. package/dist/docs/reference/geometry/Vector3-type.md +6 -5
  242. package/dist/docs/reference/geometry/Vector3Data.md +15 -0
  243. package/dist/docs/reference/geometry/Vector3Input.md +4 -3
  244. package/dist/docs/reference/geometry/VectorTextArcBaseline.md +8 -3
  245. package/dist/docs/reference/geometry/VectorTextLayout.md +5 -1
  246. package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +5 -1
  247. package/dist/docs/reference/geometry/VectorTextMetrics.md +7 -3
  248. package/dist/docs/reference/geometry/VectorTextOptions.md +5 -1
  249. package/dist/docs/reference/geometry/add2.md +7 -6
  250. package/dist/docs/reference/geometry/add3.md +7 -6
  251. package/dist/docs/reference/geometry/analyzeTriangleMesh.md +5 -1
  252. package/dist/docs/reference/geometry/analyzeTriangleMeshQuality.md +6 -2
  253. package/dist/docs/reference/geometry/{createAnchor3.md → anchor3.md} +10 -9
  254. package/dist/docs/reference/geometry/anchorFrame3.md +9 -5
  255. package/dist/docs/reference/geometry/applyTransformDirection3.md +8 -7
  256. package/dist/docs/reference/geometry/applyTransformPoint3.md +8 -7
  257. package/dist/docs/reference/geometry/{attachTransform.md → attachmentTransform3.md} +16 -15
  258. package/dist/docs/reference/geometry/bounds2.md +38 -0
  259. package/dist/docs/reference/geometry/bounds3.md +38 -0
  260. package/dist/docs/reference/geometry/boundsCenter.md +12 -11
  261. package/dist/docs/reference/geometry/boundsFromSize.md +12 -11
  262. package/dist/docs/reference/geometry/boundsSize.md +12 -11
  263. package/dist/docs/reference/geometry/boxAnchor3.md +7 -6
  264. package/dist/docs/reference/geometry/categories/bounds-layout.md +23 -6
  265. package/dist/docs/reference/geometry/categories/curves-paths.md +27 -13
  266. package/dist/docs/reference/geometry/categories/mechanical.md +27 -15
  267. package/dist/docs/reference/geometry/categories/meshes.md +18 -10
  268. package/dist/docs/reference/geometry/categories/pattern-placement.md +11 -9
  269. package/dist/docs/reference/geometry/categories/primitive-options.md +10 -4
  270. package/dist/docs/reference/geometry/categories/profiles-regions.md +21 -13
  271. package/dist/docs/reference/geometry/categories/resolution-errors.md +5 -3
  272. package/dist/docs/reference/geometry/categories/transforms-math.md +25 -16
  273. package/dist/docs/reference/geometry/categories/vector-import.md +15 -9
  274. package/dist/docs/reference/geometry/circleContour.md +5 -1
  275. package/dist/docs/reference/geometry/closeToAxis.md +14 -5
  276. package/dist/docs/reference/geometry/compensateThreadDiameters.md +5 -1
  277. package/dist/docs/reference/geometry/compensateThreadProfileAxially.md +9 -5
  278. package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +9 -5
  279. package/dist/docs/reference/geometry/composeTransform3.md +7 -6
  280. package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +14 -6
  281. package/dist/docs/reference/geometry/computeParallelTransportFrames.md +17 -7
  282. package/dist/docs/reference/geometry/computeTriangleMeshCentroid.md +13 -5
  283. package/dist/docs/reference/geometry/{createTriangleMeshSignature.md → computeTriangleMeshSignature.md} +8 -4
  284. package/dist/docs/reference/geometry/containsBounds.md +10 -9
  285. package/dist/docs/reference/geometry/contourContainsPoint.md +8 -4
  286. package/dist/docs/reference/geometry/cross2.md +6 -5
  287. package/dist/docs/reference/geometry/cross3.md +7 -6
  288. package/dist/docs/reference/geometry/cylinderAnchor3.md +7 -6
  289. package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +5 -1
  290. package/dist/docs/reference/geometry/distance2.md +6 -5
  291. package/dist/docs/reference/geometry/distance3.md +6 -5
  292. package/dist/docs/reference/geometry/distributeAlongPath.md +12 -6
  293. package/dist/docs/reference/geometry/dot2.md +6 -5
  294. package/dist/docs/reference/geometry/dot3.md +6 -5
  295. package/dist/docs/reference/geometry/ellipseContour.md +5 -1
  296. package/dist/docs/reference/geometry/eulerTransform3.md +7 -6
  297. package/dist/docs/reference/geometry/extrudeMesh.md +12 -8
  298. package/dist/docs/reference/geometry/fitBounds.md +10 -9
  299. package/dist/docs/reference/geometry/fitTextLayout.md +13 -5
  300. package/dist/docs/reference/geometry/frameTransform3.md +5 -4
  301. package/dist/docs/reference/geometry/{getMetricClearanceHole.md → getMetricClearanceHoleDiameter.md} +7 -3
  302. package/dist/docs/reference/geometry/getMetricFastenerStandard.md +5 -1
  303. package/dist/docs/reference/geometry/gridPatternTransforms.md +5 -5
  304. package/dist/docs/reference/geometry/heightfieldMesh.md +11 -2
  305. package/dist/docs/reference/geometry/{buildHelicalThreadRidgeMesh.md → helicalThreadRidgeMesh.md} +9 -5
  306. package/dist/docs/reference/geometry/{buildHelicalThreadSolidMesh.md → helicalThreadSolidMesh.md} +9 -5
  307. package/dist/docs/reference/geometry/inverseTransform3.md +6 -5
  308. package/dist/docs/reference/geometry/isGeometryError.md +5 -2
  309. package/dist/docs/reference/geometry/joinTriangleMeshes.md +5 -1
  310. package/dist/docs/reference/geometry/layoutRow.md +11 -7
  311. package/dist/docs/reference/geometry/length2.md +5 -4
  312. package/dist/docs/reference/geometry/length3.md +5 -4
  313. package/dist/docs/reference/geometry/lerp2.md +7 -6
  314. package/dist/docs/reference/geometry/lerp3.md +7 -6
  315. package/dist/docs/reference/geometry/linearPatternTransforms.md +5 -5
  316. package/dist/docs/reference/geometry/loftMesh.md +6 -1
  317. package/dist/docs/reference/geometry/matchProfiles.md +11 -2
  318. package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +5 -1
  319. package/dist/docs/reference/geometry/meshBounds.md +8 -4
  320. package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +7 -3
  321. package/dist/docs/reference/geometry/normalize2.md +10 -6
  322. package/dist/docs/reference/geometry/normalize3.md +10 -6
  323. package/dist/docs/reference/geometry/normalizeContour.md +8 -4
  324. package/dist/docs/reference/geometry/normalizePolygon.md +5 -1
  325. package/dist/docs/reference/geometry/normalizeRegion.md +5 -1
  326. package/dist/docs/reference/geometry/optimizePlanarPatches.md +15 -11
  327. package/dist/docs/reference/geometry/path2.md +54 -0
  328. package/dist/docs/reference/geometry/path3.md +49 -0
  329. package/dist/docs/reference/geometry/pathPatternTransforms.md +13 -9
  330. package/dist/docs/reference/geometry/preflightHeightfield.md +11 -2
  331. package/dist/docs/reference/geometry/preflightHelicalThreadSolidMesh.md +13 -4
  332. package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +15 -4
  333. package/dist/docs/reference/geometry/preflightSvgRegion.md +15 -2
  334. package/dist/docs/reference/geometry/preflightThreadedNut.md +14 -4
  335. package/dist/docs/reference/geometry/preflightThreadedRod.md +14 -4
  336. package/dist/docs/reference/geometry/projectOntoPlane3.md +7 -6
  337. package/dist/docs/reference/geometry/radialPatternTransforms.md +4 -20
  338. package/dist/docs/reference/geometry/rectangleContour.md +10 -3
  339. package/dist/docs/reference/geometry/rectangleProfile.md +10 -2
  340. package/dist/docs/reference/geometry/regionArea.md +5 -1
  341. package/dist/docs/reference/geometry/regionBounds.md +8 -4
  342. package/dist/docs/reference/geometry/regularPolygonContour.md +9 -5
  343. package/dist/docs/reference/geometry/resamplePolyline2.md +9 -5
  344. package/dist/docs/reference/geometry/resamplePolyline3.md +9 -5
  345. package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +4 -4
  346. package/dist/docs/reference/geometry/resolveArcSegments.md +4 -4
  347. package/dist/docs/reference/geometry/resolveCircularSegments.md +1 -1
  348. package/dist/docs/reference/geometry/resolveCylindricalGear.md +5 -1
  349. package/dist/docs/reference/geometry/resolveCylindricalGearPair.md +5 -1
  350. package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +7 -3
  351. package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +5 -1
  352. package/dist/docs/reference/geometry/resolveGeometryTolerance.md +1 -1
  353. package/dist/docs/reference/geometry/resolveKnuckleHinge.md +59 -0
  354. package/dist/docs/reference/geometry/resolvePrintableThreadFitPolicy.md +5 -1
  355. package/dist/docs/reference/geometry/resolveRackPitch.md +5 -1
  356. package/dist/docs/reference/geometry/resolveThreadCircularSegments.md +8 -4
  357. package/dist/docs/reference/geometry/reverseTriangleMesh.md +5 -1
  358. package/dist/docs/reference/geometry/revolveMesh.md +14 -10
  359. package/dist/docs/reference/geometry/rotate2.md +6 -5
  360. package/dist/docs/reference/geometry/rotationTransform3.md +7 -6
  361. package/dist/docs/reference/geometry/roundClosedPolylinePath.md +12 -6
  362. package/dist/docs/reference/geometry/sampleContour.md +14 -4
  363. package/dist/docs/reference/geometry/sampleCurve2.md +8 -5
  364. package/dist/docs/reference/geometry/sampleCurve3.md +6 -2
  365. package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +5 -1
  366. package/dist/docs/reference/geometry/sampleHelix.md +13 -5
  367. package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +5 -1
  368. package/dist/docs/reference/geometry/sampleRackToothPath.md +8 -4
  369. package/dist/docs/reference/geometry/sampleSideProfile.md +17 -7
  370. package/dist/docs/reference/geometry/sampleTextContours.md +5 -1
  371. package/dist/docs/reference/geometry/sampleThreadHelices.md +6 -2
  372. package/dist/docs/reference/geometry/scale2.md +6 -5
  373. package/dist/docs/reference/geometry/scale3.md +6 -5
  374. package/dist/docs/reference/geometry/scaleTransform3.md +7 -6
  375. package/dist/docs/reference/geometry/signedContourArea.md +5 -1
  376. package/dist/docs/reference/geometry/starContour.md +8 -4
  377. package/dist/docs/reference/geometry/strokeRegionData.md +67 -0
  378. package/dist/docs/reference/geometry/subtract2.md +7 -6
  379. package/dist/docs/reference/geometry/subtract3.md +7 -6
  380. package/dist/docs/reference/geometry/sweepMesh.md +13 -9
  381. package/dist/docs/reference/geometry/{createThreadProfile.md → threadProfile.md} +10 -6
  382. package/dist/docs/reference/geometry/transform2.md +14 -7
  383. package/dist/docs/reference/geometry/transform3.md +16 -7
  384. package/dist/docs/reference/geometry/transformDeterminant3.md +5 -4
  385. package/dist/docs/reference/geometry/transformRegionData.md +5 -1
  386. package/dist/docs/reference/geometry/transformTriangleMesh.md +10 -6
  387. package/dist/docs/reference/geometry/translationTransform3.md +7 -6
  388. package/dist/docs/reference/geometry/triangulateContour.md +5 -1
  389. package/dist/docs/reference/geometry/validateSolidMesh.md +10 -3
  390. package/dist/docs/reference/geometry/validateTransform3.md +6 -5
  391. package/dist/docs/reference/geometry/validateTriangleMesh.md +5 -1
  392. package/dist/docs/reference/geometry/vector2.md +10 -2
  393. package/dist/docs/reference/geometry/vector3.md +10 -2
  394. package/dist/docs/reference/geometry.md +8 -6
  395. package/dist/docs/reference/model/Anchor3.md +6 -5
  396. package/dist/docs/reference/model/AttachOptions.md +11 -5
  397. package/dist/docs/reference/model/Bounds2-type.md +125 -0
  398. package/dist/docs/reference/model/Bounds2Data.md +44 -0
  399. package/dist/docs/reference/model/Bounds2Input.md +19 -0
  400. package/dist/docs/reference/model/Bounds3-type.md +125 -0
  401. package/dist/docs/reference/model/Bounds3Data.md +44 -0
  402. package/dist/docs/reference/model/Bounds3Input.md +19 -0
  403. package/dist/docs/reference/model/BoxEdge.md +1 -1
  404. package/dist/docs/reference/model/BoxEdgeSelection.md +1 -1
  405. package/dist/docs/reference/model/BoxEdgeTreatments.md +1 -1
  406. package/dist/docs/reference/model/BoxOptions.md +10 -10
  407. package/dist/docs/reference/model/ChamferedEdgeTreatment.md +1 -1
  408. package/dist/docs/reference/model/CircleContourOptions.md +1 -1
  409. package/dist/docs/reference/model/CircleOptions.md +3 -3
  410. package/dist/docs/reference/model/CircularPrimitiveOptions.md +1 -1
  411. package/dist/docs/reference/model/Computed.md +6 -1
  412. package/dist/docs/reference/model/ComputedValue.md +5 -1
  413. package/dist/docs/reference/model/Contour.md +6 -4
  414. package/dist/docs/reference/model/CorrespondingComponent.md +1 -1
  415. package/dist/docs/reference/model/CorrespondingContour.md +1 -1
  416. package/dist/docs/reference/model/CorrespondingProfile.md +1 -1
  417. package/dist/docs/reference/model/CorrespondingProfileStation.md +1 -1
  418. package/dist/docs/reference/model/CylinderOptions.md +3 -3
  419. package/dist/docs/reference/model/DiagnosticOptions.md +6 -1
  420. package/dist/docs/reference/model/EdgeTreatment.md +1 -1
  421. package/dist/docs/reference/model/EllipseContourOptions.md +3 -3
  422. package/dist/docs/reference/model/EllipseOptions.md +3 -3
  423. package/dist/docs/reference/model/EndTreatments.md +1 -1
  424. package/dist/docs/reference/model/ExtrudeOptions.md +6 -6
  425. package/dist/docs/reference/model/FinalizedModel.md +20 -10
  426. package/dist/docs/reference/model/FinalizedPart.md +1 -1
  427. package/dist/docs/reference/model/Frame3.md +6 -6
  428. package/dist/docs/reference/model/GenerateCallback.md +5 -1
  429. package/dist/docs/reference/model/GenerateContext.md +5 -1
  430. package/dist/docs/reference/model/GeneratedPart.md +5 -1
  431. package/dist/docs/reference/model/GenerationDiagnostic.md +6 -1
  432. package/dist/docs/reference/model/GenerationError.md +5 -1
  433. package/dist/docs/reference/model/GeometryResolution.md +5 -5
  434. package/dist/docs/reference/model/GeometrySamplingLimits.md +1 -1
  435. package/dist/docs/reference/model/GeometryToleranceOptions.md +1 -1
  436. package/dist/docs/reference/model/GridPatternOptions.md +12 -5
  437. package/dist/docs/reference/model/HeightfieldOptions.md +5 -5
  438. package/dist/docs/reference/model/HelicalThreadRidgeMeshOptions.md +4 -3
  439. package/dist/docs/reference/model/HelicalThreadSolidMeshPreflight.md +3 -2
  440. package/dist/docs/reference/model/HullOptions.md +5 -5
  441. package/dist/docs/reference/model/ImmutableBuffer-type.md +5 -1
  442. package/dist/docs/reference/model/ImmutableTriangleMesh.md +5 -1
  443. package/dist/docs/reference/model/ImplicitOptions.md +6 -6
  444. package/dist/docs/reference/model/InternalThreadCutterOptions.md +5 -4
  445. package/dist/docs/reference/model/KnuckleHinge-type.md +47 -0
  446. package/dist/docs/reference/model/KnuckleHingeBaseSpec.md +77 -0
  447. package/dist/docs/reference/model/KnuckleHingeHalfOptions.md +34 -0
  448. package/dist/docs/reference/model/KnuckleHingeOptions.md +38 -0
  449. package/dist/docs/reference/model/KnuckleHingeSamplingOptions.md +47 -0
  450. package/dist/docs/reference/model/KnuckleHingeSpec.md +18 -0
  451. package/dist/docs/reference/model/KnuckleHingeWeb.md +53 -0
  452. package/dist/docs/reference/model/LinearPatternOptions.md +13 -5
  453. package/dist/docs/reference/model/LoftCorrespondence.md +1 -1
  454. package/dist/docs/reference/model/LoftOptions.md +1 -1
  455. package/dist/docs/reference/model/LoftPlacement.md +1 -1
  456. package/dist/docs/reference/model/LoftStation.md +3 -3
  457. package/dist/docs/reference/model/MatchProfilesOptions.md +1 -1
  458. package/dist/docs/reference/model/ModelProgram.md +5 -1
  459. package/dist/docs/reference/model/ModelingLimits.md +1 -1
  460. package/dist/docs/reference/model/NumericArray.md +8 -1
  461. package/dist/docs/reference/model/PartGeometry.md +5 -1
  462. package/dist/docs/reference/model/PartOptions.md +5 -1
  463. package/dist/docs/reference/model/Path2-type.md +196 -0
  464. package/dist/docs/reference/model/Path2Data.md +50 -0
  465. package/dist/docs/reference/model/Path2Input.md +20 -0
  466. package/dist/docs/reference/model/Path3-type.md +196 -0
  467. package/dist/docs/reference/model/Path3Data.md +50 -0
  468. package/dist/docs/reference/model/Path3Input.md +20 -0
  469. package/dist/docs/reference/model/PathLocation.md +69 -0
  470. package/dist/docs/reference/model/PathNormalGuide.md +6 -5
  471. package/dist/docs/reference/model/PathOptions.md +38 -0
  472. package/dist/docs/reference/model/PathPatternOptions.md +4 -3
  473. package/dist/docs/reference/model/PathResamplingOptions.md +83 -0
  474. package/dist/docs/reference/model/PatternSource.md +2 -1
  475. package/dist/docs/reference/model/Pivot2Options.md +2 -1
  476. package/dist/docs/reference/model/Pivot3Options.md +2 -1
  477. package/dist/docs/reference/model/PlaneOptions.md +3 -3
  478. package/dist/docs/reference/model/PolygonData.md +3 -2
  479. package/dist/docs/reference/model/PolygonOptions.md +8 -8
  480. package/dist/docs/reference/model/{PrimitivePlacement.md → PrimitiveAttachment.md} +8 -7
  481. package/dist/docs/reference/model/{PrimitivePlacementOptions.md → PrimitiveAttachmentOptions.md} +42 -20
  482. package/dist/docs/reference/model/PrintableThreadFit.md +2 -1
  483. package/dist/docs/reference/model/PrintableThreadFitPolicy.md +2 -1
  484. package/dist/docs/reference/model/Profile.md +4 -2
  485. package/dist/docs/reference/model/ProfileComponent2.md +1 -1
  486. package/dist/docs/reference/model/ProfileContour2.md +4 -2
  487. package/dist/docs/reference/model/ProfileSpan2.md +3 -3
  488. package/dist/docs/reference/model/ProfiledEdgeTreatment.md +3 -3
  489. package/dist/docs/reference/model/RadialPatternOptions.md +18 -22
  490. package/dist/docs/reference/model/RadialSizing.md +1 -1
  491. package/dist/docs/reference/model/RadialSizingOptions.md +1 -1
  492. package/dist/docs/reference/model/RectangleContourOptions.md +3 -3
  493. package/dist/docs/reference/model/RectangleCornerTreatment.md +1 -1
  494. package/dist/docs/reference/model/RectangleCornerTreatments.md +1 -1
  495. package/dist/docs/reference/model/RectangleOptions.md +10 -10
  496. package/dist/docs/reference/model/RegionData.md +2 -2
  497. package/dist/docs/reference/model/RegularPolygonOptions.md +5 -5
  498. package/dist/docs/reference/model/RevolveOptions.md +9 -4
  499. package/dist/docs/reference/model/RoundedEdgeTreatment.md +1 -1
  500. package/dist/docs/reference/model/Section.md +20 -12
  501. package/dist/docs/reference/model/SectionHullOptions.md +5 -5
  502. package/dist/docs/reference/model/SectionInspection.md +10 -10
  503. package/dist/docs/reference/model/SectionOffsetJoin.md +1 -1
  504. package/dist/docs/reference/model/SectionOffsetOptions.md +1 -1
  505. package/dist/docs/reference/model/SmoothEdgeTreatment.md +1 -1
  506. package/dist/docs/reference/model/Solid.md +31 -7
  507. package/dist/docs/reference/model/SolidInspection.md +7 -7
  508. package/dist/docs/reference/model/{SolidRayHit.md → SolidSegmentHit.md} +6 -6
  509. package/dist/docs/reference/model/SphereOptions.md +3 -3
  510. package/dist/docs/reference/model/StarOptions.md +10 -10
  511. package/dist/docs/reference/model/{StrokePathCap.md → StrokeCap.md} +3 -3
  512. package/dist/docs/reference/model/{StrokePathJoin.md → StrokeJoin.md} +3 -3
  513. package/dist/docs/reference/model/StrokeOptions.md +6 -6
  514. package/dist/docs/reference/model/SvgOrigin.md +1 -1
  515. package/dist/docs/reference/model/SvgPathSectionOptions.md +1 -1
  516. package/dist/docs/reference/model/SvgSectionOptions.md +1 -1
  517. package/dist/docs/reference/model/SweepOptions.md +6 -6
  518. package/dist/docs/reference/model/SweepOrientation.md +7 -7
  519. package/dist/docs/reference/model/TextSectionOptions.md +1 -1
  520. package/dist/docs/reference/model/ThreadEndStyle.md +2 -1
  521. package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +2 -1
  522. package/dist/docs/reference/model/ThreadHandedness.md +2 -1
  523. package/dist/docs/reference/model/ThreadLeadInEnvelope.md +2 -1
  524. package/dist/docs/reference/model/ThreadLeadInShape.md +2 -1
  525. package/dist/docs/reference/model/ThreadProfile.md +4 -3
  526. package/dist/docs/reference/model/ThreadRidgeOptions.md +2 -1
  527. package/dist/docs/reference/model/ThreadedNutBevel.md +2 -1
  528. package/dist/docs/reference/model/ThreadedNutOptions.md +5 -4
  529. package/dist/docs/reference/model/ThreadedNutPreflight.md +4 -3
  530. package/dist/docs/reference/model/ThreadedNutShape.md +2 -1
  531. package/dist/docs/reference/model/ThreadedRodOptions.md +5 -4
  532. package/dist/docs/reference/model/TorusOptions.md +8 -8
  533. package/dist/docs/reference/model/Transform2-type.md +6 -5
  534. package/dist/docs/reference/model/Transform2Data.md +16 -0
  535. package/dist/docs/reference/model/Transform2Input.md +4 -3
  536. package/dist/docs/reference/model/Transform3-type.md +6 -5
  537. package/dist/docs/reference/model/Transform3Data.md +19 -0
  538. package/dist/docs/reference/model/Transform3Input.md +4 -3
  539. package/dist/docs/reference/model/TriangleMesh.md +1 -1
  540. package/dist/docs/reference/model/TriangleMeshAnalysis.md +4 -4
  541. package/dist/docs/reference/model/TriangleMeshMeasurements.md +3 -3
  542. package/dist/docs/reference/model/TubeOptions.md +8 -8
  543. package/dist/docs/reference/model/Vector2-type.md +6 -5
  544. package/dist/docs/reference/model/{Vector2Tuple.md → Vector2Data.md} +3 -3
  545. package/dist/docs/reference/model/Vector2Input.md +4 -3
  546. package/dist/docs/reference/model/Vector3-type.md +6 -5
  547. package/dist/docs/reference/model/{Vector3Tuple.md → Vector3Data.md} +3 -3
  548. package/dist/docs/reference/model/Vector3Input.md +4 -3
  549. package/dist/docs/reference/model/VectorTextLayout.md +1 -1
  550. package/dist/docs/reference/model/VectorTextMetrics.md +3 -3
  551. package/dist/docs/reference/model/anchor.md +2 -1
  552. package/dist/docs/reference/model/bounds2.md +36 -0
  553. package/dist/docs/reference/model/bounds3.md +36 -0
  554. package/dist/docs/reference/model/box.md +4 -4
  555. package/dist/docs/reference/model/castSegment.md +40 -0
  556. package/dist/docs/reference/model/categories/boolean-operations.md +10 -3
  557. package/dist/docs/reference/model/categories/bounded-surfaces.md +5 -3
  558. package/dist/docs/reference/model/categories/bounds.md +36 -0
  559. package/dist/docs/reference/model/categories/contracts.md +4 -2
  560. package/dist/docs/reference/model/categories/core-values-errors.md +11 -11
  561. package/dist/docs/reference/model/categories/explicit-profiles.md +7 -5
  562. package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +12 -3
  563. package/dist/docs/reference/model/categories/generation.md +11 -2
  564. package/dist/docs/reference/model/categories/hinges.md +38 -0
  565. package/dist/docs/reference/model/categories/inspection.md +12 -6
  566. package/dist/docs/reference/model/categories/mesh-inspection.md +5 -3
  567. package/dist/docs/reference/model/categories/paths.md +41 -0
  568. package/dist/docs/reference/model/categories/primitives.md +10 -4
  569. package/dist/docs/reference/model/categories/resolution.md +4 -2
  570. package/dist/docs/reference/model/categories/sections.md +12 -8
  571. package/dist/docs/reference/model/categories/threads.md +11 -8
  572. package/dist/docs/reference/model/categories/transforms-placement.md +23 -15
  573. package/dist/docs/reference/model/circle.md +1 -1
  574. package/dist/docs/reference/model/components.md +6 -6
  575. package/dist/docs/reference/model/compose.md +1 -1
  576. package/dist/docs/reference/model/cylinder.md +1 -1
  577. package/dist/docs/reference/model/distance.md +1 -1
  578. package/dist/docs/reference/model/ellipse.md +1 -1
  579. package/dist/docs/reference/model/extrude.md +3 -3
  580. package/dist/docs/reference/model/generate.md +5 -1
  581. package/dist/docs/reference/model/gridPattern.md +5 -4
  582. package/dist/docs/reference/model/heightfield.md +5 -2
  583. package/dist/docs/reference/model/hull.md +1 -1
  584. package/dist/docs/reference/model/immutableBuffer.md +5 -1
  585. package/dist/docs/reference/model/immutableMesh.md +5 -1
  586. package/dist/docs/reference/model/implicit.md +3 -3
  587. package/dist/docs/reference/model/inspectSection.md +1 -1
  588. package/dist/docs/reference/model/inspectSolid.md +1 -1
  589. package/dist/docs/reference/model/internalThreadCutter.md +5 -4
  590. package/dist/docs/reference/model/intersect.md +1 -1
  591. package/dist/docs/reference/model/isEmpty.md +1 -1
  592. package/dist/docs/reference/model/knuckleHinge.md +47 -0
  593. package/dist/docs/reference/model/linearPattern.md +5 -4
  594. package/dist/docs/reference/model/loft.md +1 -1
  595. package/dist/docs/reference/model/matchProfiles.md +2 -2
  596. package/dist/docs/reference/model/minkowskiSum.md +1 -1
  597. package/dist/docs/reference/model/path2.md +54 -0
  598. package/dist/docs/reference/model/path3.md +49 -0
  599. package/dist/docs/reference/model/pathPattern.md +14 -12
  600. package/dist/docs/reference/model/polygon.md +8 -5
  601. package/dist/docs/reference/model/preflightInternalThreadCutter.md +9 -3
  602. package/dist/docs/reference/model/preflightThreadedNut.md +9 -3
  603. package/dist/docs/reference/model/preflightThreadedRod.md +9 -3
  604. package/dist/docs/reference/model/radialPattern.md +6 -37
  605. package/dist/docs/reference/model/rectangle.md +7 -4
  606. package/dist/docs/reference/model/regularPolygon.md +1 -1
  607. package/dist/docs/reference/model/revolve.md +5 -4
  608. package/dist/docs/reference/model/solidFromMesh.md +1 -1
  609. package/dist/docs/reference/model/sphere.md +1 -1
  610. package/dist/docs/reference/model/split.md +1 -1
  611. package/dist/docs/reference/model/splitByPlane.md +1 -1
  612. package/dist/docs/reference/model/star.md +4 -4
  613. package/dist/docs/reference/model/stroke.md +8 -8
  614. package/dist/docs/reference/model/svgPathSection.md +1 -1
  615. package/dist/docs/reference/model/svgSection.md +1 -1
  616. package/dist/docs/reference/model/sweep.md +7 -7
  617. package/dist/docs/reference/model/textSection.md +1 -1
  618. package/dist/docs/reference/model/threadRidge.md +3 -2
  619. package/dist/docs/reference/model/threadedNut.md +5 -4
  620. package/dist/docs/reference/model/threadedRod.md +5 -4
  621. package/dist/docs/reference/model/torus.md +3 -3
  622. package/dist/docs/reference/model/transform2.md +14 -7
  623. package/dist/docs/reference/model/transform3.md +16 -7
  624. package/dist/docs/reference/model/tube.md +3 -3
  625. package/dist/docs/reference/model/union.md +1 -1
  626. package/dist/docs/reference/model/vector2.md +10 -2
  627. package/dist/docs/reference/model/vector3.md +10 -2
  628. package/dist/docs/reference/model.md +17 -9
  629. package/dist/docs/reference/text/Bounds2Data.md +34 -0
  630. package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +1 -1
  631. package/dist/docs/reference/text/Vector2Data.md +7 -0
  632. package/dist/docs/reference/text/VectorFont.md +2 -2
  633. package/dist/docs/reference/text/VectorFontOptions.md +1 -1
  634. package/dist/docs/reference/text/VectorTextArcBaseline.md +3 -3
  635. package/dist/docs/reference/text/VectorTextLayout.md +1 -1
  636. package/dist/docs/reference/text/VectorTextLayoutOptions.md +1 -1
  637. package/dist/docs/reference/text/VectorTextMetrics.md +3 -3
  638. package/dist/docs/reference/text/VectorTextOptions.md +1 -1
  639. package/dist/docs/reference/text/categories/font-preparation.md +8 -6
  640. package/dist/docs/reference/text/prepareVectorFont.md +2 -2
  641. package/dist/docs/reference/text.md +4 -2
  642. package/dist/engine/construction-operations.js +31 -14
  643. package/dist/engine/execution.js +39 -8
  644. package/dist/engine/extrusion-finishing.js +1 -1
  645. package/dist/engine/index.js +6 -1
  646. package/dist/engine/inspection-operations.js +13 -11
  647. package/dist/engine/knuckle-hinge-operation.js +85 -0
  648. package/dist/engine/loft-operations.js +35 -14
  649. package/dist/engine/mechanical-operations.js +3 -1
  650. package/dist/engine/model-summary.js +8 -5
  651. package/dist/engine/modeling-context.js +8 -1
  652. package/dist/engine/native/material-components.js +305 -0
  653. package/dist/engine/native/regions.js +2 -1
  654. package/dist/engine/native/threads.js +3 -3
  655. package/dist/engine/native/transforms.js +5 -7
  656. package/dist/engine/operation-environment.js +2 -2
  657. package/dist/engine/pattern-operations.js +1 -1
  658. package/dist/engine/placement.js +2 -2
  659. package/dist/engine/primitive-anchors.js +17 -17
  660. package/dist/engine/primitive-operations.js +1 -1
  661. package/dist/engine/primitive-profiles.js +7 -7
  662. package/dist/engine/profile-mesh.js +7 -7
  663. package/dist/engine/recipe-realization.js +10 -2
  664. package/dist/engine/section-operations.js +33 -8
  665. package/dist/engine/session-snapshot.js +14 -4
  666. package/dist/engine/session.js +10 -5
  667. package/dist/engine/shape-anchors.js +3 -3
  668. package/dist/engine/transform-operations.js +27 -27
  669. package/dist/geometry/anchors.js +40 -33
  670. package/dist/geometry/bounds-value.js +93 -0
  671. package/dist/geometry/bounds.js +10 -8
  672. package/dist/geometry/curves/sampling.js +15 -16
  673. package/dist/geometry/edge-finishing.js +1 -1
  674. package/dist/geometry/errors.js +1 -0
  675. package/dist/geometry/extrusion.js +13 -16
  676. package/dist/geometry/heightfield.js +12 -1
  677. package/dist/geometry/index.js +12 -11
  678. package/dist/geometry/loft/loft-simple-mesh.js +6 -6
  679. package/dist/geometry/loft/loft.js +22 -13
  680. package/dist/geometry/math/immutable-value.js +1 -1
  681. package/dist/geometry/math/vector-value.js +11 -3
  682. package/dist/geometry/math/vector2.js +1 -0
  683. package/dist/geometry/math/vector3.js +1 -0
  684. package/dist/geometry/mechanical/gear-motion.js +3 -3
  685. package/dist/geometry/mechanical/gears.js +38 -38
  686. package/dist/geometry/mechanical/index.js +4 -3
  687. package/dist/geometry/mechanical/knuckle-hinge.js +110 -0
  688. package/dist/geometry/mechanical/standards.js +1 -1
  689. package/dist/geometry/mechanical/thread-helices.js +2 -3
  690. package/dist/geometry/mechanical/thread-mesh-plan.js +11 -7
  691. package/dist/geometry/mechanical/thread-mesh.js +7 -7
  692. package/dist/geometry/mechanical/thread-profiles.js +5 -5
  693. package/dist/geometry/mechanical/thread-solids.js +31 -6
  694. package/dist/geometry/mechanical/thread-surface.js +1 -1
  695. package/dist/geometry/mechanical/threads.js +8 -8
  696. package/dist/geometry/mesh/mesh-centroid.js +1 -0
  697. package/dist/geometry/mesh/mesh-planar.js +25 -27
  698. package/dist/geometry/mesh/mesh-quality.js +5 -5
  699. package/dist/geometry/mesh/mesh-signature.js +13 -13
  700. package/dist/geometry/mesh/mesh-solid.js +8 -7
  701. package/dist/geometry/mesh/mesh.js +4 -15
  702. package/dist/geometry/paths/closest-point.js +8 -19
  703. package/dist/geometry/paths/frames.js +42 -11
  704. package/dist/geometry/paths/helix.js +17 -6
  705. package/dist/geometry/paths/path-value.js +268 -0
  706. package/dist/geometry/paths/planar.js +36 -23
  707. package/dist/geometry/paths/resampling.js +27 -5
  708. package/dist/geometry/patterns/placements.js +100 -27
  709. package/dist/geometry/patterns.js +5 -3
  710. package/dist/geometry/polygon-clipping.js +17 -0
  711. package/dist/geometry/profiles/contour.js +7 -6
  712. package/dist/geometry/profiles/matched.js +5 -4
  713. package/dist/geometry/profiles/profiles.js +4 -4
  714. package/dist/geometry/profiles/rectangle.js +14 -5
  715. package/dist/geometry/profiles/side-profile.js +9 -7
  716. package/dist/geometry/profiles/span-sampling.js +1 -1
  717. package/dist/geometry/resolution.js +34 -34
  718. package/dist/geometry/revolve/revolve-mesh.js +12 -7
  719. package/dist/geometry/stroke-path.js +12 -27
  720. package/dist/geometry/svg/fill.js +7 -21
  721. package/dist/geometry/svg-import.js +31 -25
  722. package/dist/geometry/sweeps/options.js +5 -4
  723. package/dist/geometry/sweeps/orientation.js +5 -5
  724. package/dist/geometry/sweeps/stations.js +10 -10
  725. package/dist/geometry/sweeps/sweep-closed.js +2 -2
  726. package/dist/geometry/sweeps/sweep-mesh.js +9 -3
  727. package/dist/geometry/sweeps/sweep-open.js +1 -1
  728. package/dist/geometry/sweeps/validation.js +4 -7
  729. package/dist/geometry/text-fitting.js +1 -0
  730. package/dist/geometry/transform-geometry.js +7 -14
  731. package/dist/geometry/transform-matrix.js +1 -1
  732. package/dist/geometry/{transform-chain.js → transform-value.js} +24 -15
  733. package/dist/index.js +3 -1
  734. package/dist/model/execution-binding.js +3 -3
  735. package/dist/model/geometry-recipes.js +1 -1
  736. package/dist/model/immutable-generation-data.js +62 -10
  737. package/dist/model/knuckle-hinge.js +1 -0
  738. package/dist/model/operations.js +79 -26
  739. package/dist/model/recipe-declaration.js +21 -7
  740. package/dist/model/shape-handles.js +2 -1
  741. package/dist/text/index.js +15 -9
  742. package/dist/text/vector-text-layout.js +31 -26
  743. package/package.json +1 -1
  744. package/dist/docs/reference/geometry/Bounds2.md +0 -39
  745. package/dist/docs/reference/geometry/Bounds3.md +0 -39
  746. package/dist/docs/reference/geometry/ClosestPointOnPathOptions.md +0 -34
  747. package/dist/docs/reference/geometry/ClosestPointOnPathResult.md +0 -65
  748. package/dist/docs/reference/geometry/Path2.md +0 -14
  749. package/dist/docs/reference/geometry/Path3.md +0 -14
  750. package/dist/docs/reference/geometry/PrimitivePlacement.md +0 -31
  751. package/dist/docs/reference/geometry/PrimitivePlacementOptions.md +0 -83
  752. package/dist/docs/reference/geometry/StrokePathCap.md +0 -7
  753. package/dist/docs/reference/geometry/StrokePathJoin.md +0 -7
  754. package/dist/docs/reference/geometry/Transform2Matrix.md +0 -14
  755. package/dist/docs/reference/geometry/Transform3Matrix.md +0 -17
  756. package/dist/docs/reference/geometry/Vector2Tuple.md +0 -14
  757. package/dist/docs/reference/geometry/Vector3Tuple.md +0 -14
  758. package/dist/docs/reference/geometry/closestPointOnPath.md +0 -110
  759. package/dist/docs/reference/geometry/cumulativePathLengths.md +0 -33
  760. package/dist/docs/reference/geometry/measureTriangleMesh.md +0 -55
  761. package/dist/docs/reference/geometry/pathLength.md +0 -33
  762. package/dist/docs/reference/geometry/strokePathRegion.md +0 -63
  763. package/dist/docs/reference/geometry/transformContour.md +0 -42
  764. package/dist/docs/reference/geometry/transformPath2.md +0 -40
  765. package/dist/docs/reference/geometry/transformPath3.md +0 -33
  766. package/dist/docs/reference/model/Bounds2.md +0 -39
  767. package/dist/docs/reference/model/Bounds3.md +0 -39
  768. package/dist/docs/reference/model/Path2.md +0 -20
  769. package/dist/docs/reference/model/Transform2Matrix.md +0 -15
  770. package/dist/docs/reference/model/Transform3Matrix.md +0 -18
  771. package/dist/docs/reference/model/rayCast.md +0 -40
  772. package/dist/docs/reference/model/toTriangleMesh.md +0 -27
  773. package/dist/docs/reference/text/Bounds2.md +0 -34
  774. package/dist/docs/reference/text/Vector2Tuple.md +0 -7
  775. package/dist/geometry/paths/path.js +0 -32
@@ -429,7 +429,7 @@ function measureSvgRegion(region) {
429
429
  let minEdgeLength = Number.POSITIVE_INFINITY;
430
430
  let minX = Number.POSITIVE_INFINITY;
431
431
  let minY = Number.POSITIVE_INFINITY;
432
- let shortEdges = 0;
432
+ let shortEdgeCount = 0;
433
433
  let vertices = 0;
434
434
  for (const polygon of region) {
435
435
  for (const loop of [polygon.outer, ...polygon.holes]) {
@@ -443,7 +443,7 @@ function measureSvgRegion(region) {
443
443
  for (const length of loopEdgeLengths(loop)) {
444
444
  minEdgeLength = Math.min(minEdgeLength, length);
445
445
  if (length < SHORT_EDGE_LENGTH_MM)
446
- shortEdges += 1;
446
+ shortEdgeCount += 1;
447
447
  }
448
448
  }
449
449
  }
@@ -456,13 +456,13 @@ function measureSvgRegion(region) {
456
456
  return Object.freeze({
457
457
  area: regionArea(region),
458
458
  bounds,
459
- components: region.length,
460
- contours: region.length + holes,
461
- holes,
459
+ componentCount: region.length,
460
+ contourCount: region.length + holes,
461
+ holeCount: holes,
462
462
  minEdgeLength: Number.isFinite(minEdgeLength) ? minEdgeLength : null,
463
- shortEdges,
464
- tinyIslands: region.filter((polygon) => polygonArea(polygon) < TINY_ISLAND_AREA_MM2).length,
465
- vertices,
463
+ shortEdgeCount,
464
+ tinyIslandCount: region.filter((polygon) => polygonArea(polygon) < TINY_ISLAND_AREA_MM2).length,
465
+ vertexCount: vertices,
466
466
  });
467
467
  }
468
468
  /**
@@ -476,7 +476,7 @@ function measureSvgRegion(region) {
476
476
  *
477
477
  * @param svg - Complete SVG XML source, limited to 256 KiB of UTF-8.
478
478
  * @param options - Physical flattening and viewport-origin controls.
479
- * @returns The exact normalized region used for import plus bounded review metrics and repairs.
479
+ * @returns The normalized sampled region plus bounded review metrics and repairs.
480
480
  * @throws {@link GeometryError} When XML, supported-feature, geometry, or complexity checks fail.
481
481
  */
482
482
  function createSvgRegionPreflight(svg, options = {}) {
@@ -498,10 +498,10 @@ function createSvgRegionPreflight(svg, options = {}) {
498
498
  const stack = [];
499
499
  const geometry = [];
500
500
  let elementCount = 0;
501
- let emptyElements = 0;
501
+ let emptyElementCount = 0;
502
502
  let expandedGeometryVertices = 0;
503
- let implicitFilledClosures = 0;
504
- let invisibleElements = 0;
503
+ let implicitFilledClosureCount = 0;
504
+ let invisibleElementCount = 0;
505
505
  let nodeCount = 0;
506
506
  let rootSeen = false;
507
507
  let strokeConstructionVertices = 0;
@@ -582,9 +582,9 @@ function createSvgRegionPreflight(svg, options = {}) {
582
582
  const paintedStroke = isPainted(paint.stroke, paint.strokeOpacity) && paint.strokeWidth > 0;
583
583
  const elementGeometry = [];
584
584
  if (!paintedFill && !paintedStroke)
585
- invisibleElements += 1;
585
+ invisibleElementCount += 1;
586
586
  if (paintedFill) {
587
- implicitFilledClosures += subpaths.filter((subpath) => !subpath.closed && subpath.points.length >= 3).length;
587
+ implicitFilledClosureCount += subpaths.filter((subpath) => !subpath.closed && subpath.points.length >= 3).length;
588
588
  appendGeometry(elementGeometry, fillGeometry(subpaths, paint.fillRule), "element fill output");
589
589
  }
590
590
  if (paintedStroke) {
@@ -606,7 +606,7 @@ function createSvgRegionPreflight(svg, options = {}) {
606
606
  }
607
607
  }
608
608
  if ((paintedFill || paintedStroke) && elementGeometry.every((value) => value.length === 0)) {
609
- emptyElements += 1;
609
+ emptyElementCount += 1;
610
610
  }
611
611
  geometry.push(...elementGeometry);
612
612
  }
@@ -628,26 +628,32 @@ function createSvgRegionPreflight(svg, options = {}) {
628
628
  geometry: measureSvgRegion(region),
629
629
  region,
630
630
  repairs: Object.freeze({
631
- emptyElements,
632
- implicitFilledClosures,
633
- invisibleElements,
634
- removedDuplicateVertices: budget.removedDuplicateCount,
635
- removedSeamVertices: budget.removedSeamCount,
631
+ emptyElementCount,
632
+ implicitFilledClosureCount,
633
+ invisibleElementCount,
634
+ removedDuplicateVertexCount: budget.removedDuplicateCount,
635
+ removedSeamVertexCount: budget.removedSeamCount,
636
636
  }),
637
637
  source: Object.freeze({
638
- bytes,
639
- elements: elementCount,
640
- emittedVertices: budget.emittedCount,
641
- parsedVertices: budget.parsedCount,
638
+ byteCount: bytes,
639
+ elementCount,
640
+ emittedVertexCount: budget.emittedCount,
641
+ parsedVertexCount: budget.parsedCount,
642
642
  }),
643
643
  });
644
644
  }
645
645
  /**
646
- * Preflights bounded SVG geometry without browser or Manifold dependencies.
646
+ * Parses and validates bounded SVG input, constructing its normalized sampled region and diagnostics.
647
+ *
648
+ * This pure operation performs curve flattening, fill and stroke construction, and polygon union;
649
+ * it needs no browser or engine. Geometry counts measure the returned region at the selected
650
+ * resolution, rather than predicting later mesh allocation. The region may be empty; tiny-island
651
+ * and short-edge indicators do not establish manufacturability or later solid validity.
647
652
  *
648
653
  * @param svg - Complete SVG XML source, limited to 256 KiB of UTF-8.
649
654
  * @param options - Physical flattening and viewport-origin controls.
650
655
  * @returns The canonical normalized region plus bounded source, topology, and safe-repair facts.
656
+ * @throws {@link GeometryError} When XML, supported-feature, geometry, or complexity checks fail.
651
657
  */
652
658
  export function preflightSvgRegion(svg, options = {}) {
653
659
  return createSvgRegionPreflight(svg, options);
@@ -1,4 +1,5 @@
1
1
  import { GeometryError } from "../errors.js";
2
+ import { vector2Data } from "../math/vector-value.js";
2
3
  /** @internal Validates local scales before any manufacturing buffer allocation. */
3
4
  export function resolveSweepScales(scale, stationCount) {
4
5
  const fail = () => {
@@ -10,14 +11,14 @@ export function resolveSweepScales(scale, stationCount) {
10
11
  fail();
11
12
  return [value, value];
12
13
  }
13
- if (!Array.isArray(value) ||
14
- value.length !== 2 ||
15
- !value.every((n) => typeof n === "number" && Number.isFinite(n) && n > 0))
14
+ const coordinates = vector2Data(value);
15
+ if (!coordinates.every((n) => typeof n === "number" && Number.isFinite(n) && n > 0))
16
16
  fail();
17
- return value;
17
+ return coordinates;
18
18
  };
19
19
  if (scale === undefined ||
20
20
  typeof scale === "number" ||
21
+ (typeof scale === "object" && scale !== null && "toData" in scale) ||
21
22
  (Array.isArray(scale) && typeof scale[0] === "number")) {
22
23
  const value = pair(scale ?? 1);
23
24
  return Array.from({ length: stationCount }, () => value);
@@ -14,7 +14,7 @@ export function validateSweepOptions(options) {
14
14
  "limits",
15
15
  "orientation",
16
16
  "resolution",
17
- "twistDegrees",
17
+ "twist",
18
18
  "twistBy",
19
19
  "scale",
20
20
  "seamProfileOffset",
@@ -27,8 +27,8 @@ export function validateSweepOptions(options) {
27
27
  options.twistBy !== "length" &&
28
28
  options.twistBy !== "stations")
29
29
  fail("Sweep twistBy must be length or stations.");
30
- if (!Number.isFinite(options.twistDegrees ?? 0))
31
- throw new GeometryError("NON_FINITE_VALUE", "Sweep twistDegrees must be finite.", {
30
+ if (!Number.isFinite(options.twist ?? 0))
31
+ throw new GeometryError("NON_FINITE_VALUE", "Sweep twist must be finite.", {
32
32
  operation: "sweep",
33
33
  });
34
34
  const policy = options.orientation;
@@ -58,8 +58,8 @@ export function validateSweepOptions(options) {
58
58
  if (Object.keys(policy).some((key) => !keys.includes(key)))
59
59
  fail("Unsupported field for the selected sweep orientation.");
60
60
  }
61
- function directedNormal(value, tangent, label) {
62
- validateSweepNormal(value, "sweep");
61
+ function directedNormal(input, tangent, label) {
62
+ const value = validateSweepNormal(input, "sweep");
63
63
  const maximum = Math.max(...value.map(Math.abs));
64
64
  const unit = normalize3([value[0] / maximum, value[1] / maximum, value[2] / maximum]);
65
65
  const projected = projectOntoPlane3(unit, tangent);
@@ -65,14 +65,14 @@ function frameRotation(from, to) {
65
65
  export function planSweepStations(contours, path, scales, options, frames) {
66
66
  const closed = options.closed ?? false;
67
67
  const segmentCount = closed ? path.length : path.length - 1;
68
- const twist = ((options.twistDegrees ?? 0) / 180) * Math.PI;
69
- if (!Number.isFinite(twist))
70
- throw new GeometryError("NON_FINITE_VALUE", "Sweep twistDegrees must be finite.", {
68
+ const twistRadians = ((options.twist ?? 0) / 180) * Math.PI;
69
+ if (!Number.isFinite(twistRadians))
70
+ throw new GeometryError("NON_FINITE_VALUE", "Sweep twist must be finite.", {
71
71
  operation: "sweep",
72
72
  });
73
73
  const intervals = [];
74
74
  const progress = sweepProgress(path, options);
75
- if (twist === 0)
75
+ if (twistRadians === 0)
76
76
  return { intervals: Array(segmentCount).fill(1), stationCount: path.length, progress };
77
77
  const resolution = resolveGeometryResolution(options.resolution, options.limits);
78
78
  const limits = resolveGeometrySamplingLimits(options.limits);
@@ -92,7 +92,7 @@ export function planSweepStations(contours, path, scales, options, frames) {
92
92
  let stationCount = closed ? 0 : 1;
93
93
  for (let i = 0; i < segmentCount; i++) {
94
94
  const next = (i + 1) % path.length;
95
- const twistStep = Math.abs(twist * (progress[i + 1] - progress[i]));
95
+ const twistStep = Math.abs(twistRadians * (progress[i + 1] - progress[i]));
96
96
  const frameAngle = frames === undefined ? 0 : frameRotation(frames[i], frames[next]).angle;
97
97
  const angle = frameAngle + twistStep;
98
98
  const maximumScale = Math.max(...scales[i], ...scales[next]);
@@ -104,9 +104,9 @@ export function planSweepStations(contours, path, scales, options, frames) {
104
104
  const a = curvature / 8, b = (edgeLength * (maximumScale * angle + scaleChange)) / 4;
105
105
  const requiredAngular = resolution.circularSegments === undefined
106
106
  ? Math.max(1, Math.ceil((b + Math.hypot(b, 2 * Math.sqrt(a * resolution.maxChordError))) /
107
- (2 * resolution.maxChordError)), Math.ceil((resolution.minimumSegments * angle) / (2 * Math.PI)))
107
+ (2 * resolution.maxChordError)), Math.ceil((resolution.minSegments * angle) / (2 * Math.PI)))
108
108
  : Math.max(1, Math.ceil((resolution.circularSegments * angle) / (2 * Math.PI)));
109
- const allowedAngular = Math.max(1, scaleChange === 0 ? 0 : resolution.maximumSegments, Math.ceil((resolution.maximumSegments * angle) / (2 * Math.PI)));
109
+ const allowedAngular = Math.max(1, scaleChange === 0 ? 0 : resolution.maxSegments, Math.ceil((resolution.maxSegments * angle) / (2 * Math.PI)));
110
110
  if (requiredAngular > allowedAngular)
111
111
  throw new GeometryError("COMPLEXITY_LIMIT", `Sweep surface refinement requires ${requiredAngular} intervals; the selected circular ceiling allows ${allowedAngular}.`, {
112
112
  operation: "sweep",
@@ -126,7 +126,7 @@ export function planSweepStations(contours, path, scales, options, frames) {
126
126
  }
127
127
  /** Inserts twist samples without calling authored guides again or changing original station meaning. */
128
128
  export function refineSweepStations(path, scales, frames, options, plan) {
129
- const twist = ((options.twistDegrees ?? 0) / 180) * Math.PI;
129
+ const twistRadians = ((options.twist ?? 0) / 180) * Math.PI;
130
130
  const segmentCount = plan.intervals.length;
131
131
  const points = [], sampledScales = [], sampledFrames = [], twists = [];
132
132
  for (let i = 0; i < segmentCount; i++) {
@@ -148,14 +148,14 @@ export function refineSweepStations(path, scales, frames, options, plan) {
148
148
  binormal: rotateAroundAxis3Radians(frames[i].binormal, rotation.axis, rotation.angle * amount),
149
149
  tangent: rotateAroundAxis3Radians(frames[i].tangent, rotation.axis, rotation.angle * amount),
150
150
  });
151
- twists.push(twist * (plan.progress[i] + (plan.progress[i + 1] - plan.progress[i]) * amount));
151
+ twists.push(twistRadians * (plan.progress[i] + (plan.progress[i + 1] - plan.progress[i]) * amount));
152
152
  }
153
153
  }
154
154
  if (options.closed !== true) {
155
155
  points.push(path.at(-1));
156
156
  sampledScales.push(scales.at(-1));
157
157
  sampledFrames.push(frames.at(-1));
158
- twists.push(twist);
158
+ twists.push(twistRadians);
159
159
  }
160
160
  return { path: points, scales: sampledScales, frames: sampledFrames, twists };
161
161
  }
@@ -20,9 +20,9 @@ export const buildClosedSweepMesh = (profile, path, options = {}) => {
20
20
  operation,
21
21
  });
22
22
  }
23
- const twistRadians = ((options.twistDegrees ?? 0) / 180) * Math.PI;
23
+ const twistRadians = ((options.twist ?? 0) / 180) * Math.PI;
24
24
  if (!Number.isFinite(twistRadians)) {
25
- throw new GeometryError("NON_FINITE_VALUE", "Sweep twistDegrees must be finite.", {
25
+ throw new GeometryError("NON_FINITE_VALUE", "Sweep twist must be finite.", {
26
26
  operation,
27
27
  });
28
28
  }
@@ -1,4 +1,6 @@
1
1
  import { GeometryError } from "../errors.js";
2
+ import { resolveModelingLimits } from "../model-limits.js";
3
+ import { path2InputData, path3InputData, } from "../paths/path-value.js";
2
4
  import { validateSweepOptions } from "./orientation.js";
3
5
  import { buildClosedSweepMesh } from "./sweep-closed.js";
4
6
  import { buildOpenSweepMesh } from "./sweep-open.js";
@@ -15,12 +17,16 @@ import { buildOpenSweepMesh } from "./sweep-open.js";
15
17
  */
16
18
  export function sweepMesh(profile, path, options = {}) {
17
19
  validateSweepOptions(options);
18
- if (options.closed === true) {
19
- return buildClosedSweepMesh(profile, path, options);
20
+ const limits = resolveModelingLimits(options.limits);
21
+ const outline = path2InputData(profile, true, { maxPathPoints: limits.maxProfilePoints }).points;
22
+ const data = path3InputData(path, options.closed, limits);
23
+ const selected = { ...options, closed: data.closed };
24
+ if (data.closed) {
25
+ return buildClosedSweepMesh(outline, data.points, selected);
20
26
  }
21
27
  if ((options.seamProfileOffset ?? 0) !== 0)
22
28
  throw new GeometryError("INVALID_ARGUMENT", "A seamProfileOffset requires a closed path.", {
23
29
  operation: "sweep",
24
30
  });
25
- return buildOpenSweepMesh(profile, path, options);
31
+ return buildOpenSweepMesh(outline, data.points, selected);
26
32
  }
@@ -13,7 +13,7 @@ export const buildOpenSweepMesh = (profile, path, options = {}) => {
13
13
  path = normalizeSweepPath(path, false, operation, options.limits);
14
14
  assertSweepAllocation(path.length, profile.length, false, operation, options.limits);
15
15
  let scales = resolveSweepScales(options.scale, path.length);
16
- const twistRadians = ((options.twistDegrees ?? 0) / 180) * Math.PI;
16
+ const twistRadians = ((options.twist ?? 0) / 180) * Math.PI;
17
17
  if (twistRadians !== 0) {
18
18
  const plan = planSweepStations([profile], path, scales, options);
19
19
  assertSweepAllocation(plan.stationCount, profile.length, false, operation, options.limits);
@@ -1,4 +1,5 @@
1
1
  import { GeometryError } from "../errors.js";
2
+ import { vector3Data } from "../math/vector-value.js";
2
3
  import { assertMeshAllocationWithinLimits, resolveModelingLimits, } from "../model-limits.js";
3
4
  import { writeMeshVertex } from "../numeric.js";
4
5
  import { normalizeContour } from "../regions.js";
@@ -97,13 +98,8 @@ export function writeSweepVertex(positions, offset, point, operation) {
97
98
  writeMeshVertex(positions, offset, point, operation);
98
99
  }
99
100
  /** @internal Checks user-provided orientation controls before vector normalization. */
100
- export function validateSweepNormal(normal, operation) {
101
- const hasArrayShape = Array.isArray(normal);
102
- if (!hasArrayShape || normal.length !== 3) {
103
- throw new GeometryError("INVALID_ARGUMENT", "Sweep normals must be exact XYZ tuples.", {
104
- operation,
105
- });
106
- }
101
+ export function validateSweepNormal(input, operation) {
102
+ const normal = vector3Data(input);
107
103
  if (![normal[0], normal[1], normal[2]].every(Number.isFinite)) {
108
104
  throw new GeometryError("NON_FINITE_VALUE", "Sweep normal coordinates must be finite XYZ values.", { operation });
109
105
  }
@@ -112,4 +108,5 @@ export function validateSweepNormal(normal, operation) {
112
108
  operation,
113
109
  });
114
110
  }
111
+ return normal;
115
112
  }
@@ -6,6 +6,7 @@ function fail(message) {
6
6
  }
7
7
  /**
8
8
  * Uniformly fits visible text ink inside finite XY bounds, centering it on the target.
9
+ *
9
10
  * Transforms retained vector paths before sampling, so later textSection/sampleTextContours
10
11
  * resolution remains in final millimetres. Logical advances scale without translation;
11
12
  * line count is unchanged. The input layout is preserved.
@@ -3,35 +3,28 @@ import { normalizeContour, normalizeRegion, signedContourArea } from "./regions.
3
3
  import { readTransformMatrix } from "./transform-matrix.js";
4
4
  import { embedTransform2 } from "./transform2.js";
5
5
  import { applyValidatedTransformPoint3, validateTransform3 } from "./transform3.js";
6
- /** Applies an affine transform to a 3D path without mutating its points. */
6
+ /** Internal owned coordinates for a Path3 result; no mutable coordinates escape the path value. */
7
7
  export function transformPath3(path, placement) {
8
8
  const transform = readTransformMatrix(placement, 3);
9
9
  validateTransform3(transform);
10
- return Object.freeze(path.map((point) => Object.freeze(applyValidatedTransformPoint3(transform, point))));
10
+ return path.map((point) => applyValidatedTransformPoint3(transform, point));
11
11
  }
12
12
  const transformPoint2 = (point, transform) => {
13
13
  const values = vector2Data(point);
14
14
  const transformed = applyValidatedTransformPoint3(transform, [values[0], values[1], 0]);
15
- return Object.freeze([transformed[0], transformed[1]]);
15
+ return [transformed[0], transformed[1]];
16
16
  };
17
- const transformPlanarPath = (path, transform) => Object.freeze(path.map((point) => transformPoint2(point, transform)));
18
- /** Applies a canonical affine XY transform to a 2D path without changing point order. */
17
+ const transformPlanarPath = (path, transform) => Object.freeze(path.map((point) => Object.freeze(transformPoint2(point, transform))));
18
+ /** Internal owned XY coordinates preserving path traversal; public interchange is frozen by Path2. */
19
19
  export function transformPath2(path, transform, tolerance = {}) {
20
- return transformPlanarPath(path, embedTransform2(readTransformMatrix(transform, 2), tolerance));
20
+ const matrix = embedTransform2(readTransformMatrix(transform, 2), tolerance);
21
+ return path.map((point) => transformPoint2(point, matrix));
21
22
  }
22
23
  const transformContourWithMatrix = (loop, transform, tolerance) => {
23
24
  const counterClockwise = signedContourArea(loop) > 0;
24
25
  const normalized = normalizeContour(loop, counterClockwise, tolerance);
25
26
  return normalizeContour(transformPlanarPath(normalized, transform), counterClockwise, tolerance);
26
27
  };
27
- /**
28
- * Applies a canonical affine XY transform to a closed loop and preserves its original winding.
29
- *
30
- * Reflections reverse the point order automatically through normalization.
31
- */
32
- export function transformContour(loop, transform, tolerance = {}) {
33
- return transformContourWithMatrix(loop, embedTransform2(readTransformMatrix(transform, 2), tolerance), tolerance);
34
- }
35
28
  /**
36
29
  * Transforms serialized polygon data with reflection-safe winding, without an engine.
37
30
  * Use Section.transform(placement) when authoring filled geometry; this utility serves pure data preparation.
@@ -2,7 +2,7 @@ import { GeometryError } from "./errors.js";
2
2
  export function readTransformMatrix(input, dimension) {
3
3
  let matrix = input;
4
4
  if (typeof input === "object" && input !== null && !Array.isArray(input)) {
5
- const method = Reflect.get(input, "toMatrix");
5
+ const method = Reflect.get(input, "toData");
6
6
  if (typeof method === "function")
7
7
  matrix = Reflect.apply(method, input, []);
8
8
  }
@@ -89,7 +89,7 @@ const Placement3 = /* @__PURE__ */ immutableMathClass(class Placement3 {
89
89
  applyNormal(normal) {
90
90
  return vector3(applyNormal(this, this.matrix, vector3Data(normal)));
91
91
  }
92
- toMatrix() {
92
+ toData() {
93
93
  return this.matrix;
94
94
  }
95
95
  to2D() {
@@ -101,7 +101,7 @@ const Placement2 = /* @__PURE__ */ immutableMathClass(class Placement2 {
101
101
  matrix;
102
102
  constructor(spatial) {
103
103
  this.spatial = spatial;
104
- this.matrix = restrictTransform3(spatial.toMatrix());
104
+ this.matrix = restrictTransform3(spatial.toData());
105
105
  Object.freeze(this);
106
106
  }
107
107
  translate(offset) {
@@ -124,15 +124,15 @@ const Placement2 = /* @__PURE__ */ immutableMathClass(class Placement2 {
124
124
  return new Placement2(this.spatial.inverse());
125
125
  }
126
126
  applyPoint(point) {
127
- return vector2(xy(applyValidatedTransformPoint3(this.spatial.toMatrix(), xyz(vector2Data(point)))));
127
+ return vector2(xy(applyValidatedTransformPoint3(this.spatial.toData(), xyz(vector2Data(point)))));
128
128
  }
129
129
  applyDirection(direction) {
130
- return vector2(xy(applyValidatedTransformDirection3(this.spatial.toMatrix(), xyz(vector2Data(direction)))));
130
+ return vector2(xy(applyValidatedTransformDirection3(this.spatial.toData(), xyz(vector2Data(direction)))));
131
131
  }
132
132
  applyNormal(normal) {
133
- return vector2(xy(applyNormal(this, this.spatial.toMatrix(), xyz(vector2Data(normal)))));
133
+ return vector2(xy(applyNormal(this, this.spatial.toData(), xyz(vector2Data(normal)))));
134
134
  }
135
- toMatrix() {
135
+ toData() {
136
136
  return this.matrix;
137
137
  }
138
138
  to3D() {
@@ -140,33 +140,42 @@ const Placement2 = /* @__PURE__ */ immutableMathClass(class Placement2 {
140
140
  }
141
141
  });
142
142
  /**
143
- * Creates an immutable XY transform, identity by default. Matrices are copied and validated.
143
+ * Creates an immutable XY transform, identity by default.
144
+ *
145
+ * Values and data are copied and validated.
144
146
  * Pass it directly to Section.transform() and planar data helpers; to3D() explicitly crosses into XYZ.
145
147
  * Zero scales and singular matrices throw GeometryError; negative scales reflect.
146
148
  *
149
+ * Use `toData()` for frozen matrix interchange.
150
+ *
147
151
  * @example
148
152
  * ```ts
149
153
  * const placement = transform2().rotate(90).translate([10, 0]);
150
- * placement.applyPoint([1, 0]).toArray(); // approximately [10, 1]
154
+ * placement.applyPoint([1, 0]).toData(); // approximately [10, 1]
151
155
  * ```
152
156
  */
153
- export function transform2(matrix) {
154
- return new Placement2(matrix === undefined
157
+ export function transform2(input) {
158
+ return new Placement2(input === undefined
155
159
  ? new Placement3(IDENTITY_TRANSFORM3)
156
- : new Placement3(embedTransform2(matrix)));
160
+ : new Placement3(embedTransform2(readTransformMatrix(input, 2))));
157
161
  }
158
162
  /**
159
- * Creates an immutable XYZ transform, identity by default. Matrices are copied and validated.
163
+ * Creates an immutable XYZ transform, identity by default.
164
+ *
165
+ * Values and data are copied and validated.
160
166
  * Calls apply in written order; rotations use degrees and pivots use current world coordinates.
161
167
  * Zero scales, singular matrices, nonfinite inputs and zero rotation axes throw GeometryError.
162
168
  * Use frameTransform3(frame) as the input for existing orthonormal frame placement.
163
169
  *
170
+ * Use `toData()` for frozen matrix interchange.
171
+ * [composeTransform3](/docs/reference/geometry/composeTransform3) takes matrices in after, before order.
172
+ *
164
173
  * @example
165
174
  * ```ts
166
175
  * const placement = transform3().rotate([0, 0, 90]).translate([10, 0, 0]);
167
- * placement.applyPoint([1, 0, 0]).toArray(); // approximately [10, 1, 0]
176
+ * placement.applyPoint([1, 0, 0]).toData(); // approximately [10, 1, 0]
168
177
  * ```
169
178
  */
170
- export function transform3(matrix = IDENTITY_TRANSFORM3) {
171
- return new Placement3(snapshotTransform3(matrix));
179
+ export function transform3(input = IDENTITY_TRANSFORM3) {
180
+ return new Placement3(snapshotTransform3(readTransformMatrix(input, 3)));
172
181
  }
package/dist/index.js CHANGED
@@ -1,6 +1,8 @@
1
1
  /** Immutable modeling recipes and math values; the host owns geometry evaluation. @packageDocumentation */
2
- export { transform2, transform3, } from "./geometry/transform-chain.js";
2
+ export { bounds2, bounds3, } from "./geometry/bounds-value.js";
3
+ export { transform2, transform3, } from "./geometry/transform-value.js";
3
4
  export { vector2, vector3, } from "./geometry/math/vector-value.js";
5
+ export { path2, path3, } from "./geometry/paths/path-value.js";
4
6
  export * from "./model/operations.js";
5
7
  export * from "./model/generation.js";
6
8
  export { immutableBuffer, immutableMesh } from "./model/immutable-buffer.js";
@@ -1,7 +1,7 @@
1
1
  import { GeometryError } from "../geometry/errors.js";
2
2
  // One protocol key lets locally bundled operation wrappers resolve the host's execution
3
3
  // without depending on package instances, class identity, or initializing a native runtime.
4
- const executionKey = Symbol.for("@metamesh/modeling/execution/6");
4
+ const executionKey = Symbol.for("@metamesh/modeling/execution/8");
5
5
  const bindings = globalThis;
6
6
  /** Internal host binding. Executable callbacks are synchronous and may not nest executions. */
7
7
  export function bindModelContext(context, build) {
@@ -10,7 +10,7 @@ export function bindModelContext(context, build) {
10
10
  operation: "build",
11
11
  });
12
12
  }
13
- bindings[executionKey] = { version: 6, context };
13
+ bindings[executionKey] = { version: 7, context };
14
14
  try {
15
15
  return build();
16
16
  }
@@ -31,5 +31,5 @@ export function currentModelContext(operation) {
31
31
  /** Reads an optional binding without initializing an engine or creating ambient authoring state. */
32
32
  export function activeModelContext() {
33
33
  const binding = bindings[executionKey];
34
- return binding?.version === 6 ? binding.context : undefined;
34
+ return binding?.version === 7 ? binding.context : undefined;
35
35
  }
@@ -1,7 +1,7 @@
1
1
  import { createSectionHandle, createSolidHandle } from "./shape-handles.js";
2
2
  // One realm protocol lets bundled authoring code declare recipes before a host is initialized.
3
3
  // The payload contains no native handles and the engine remains responsible for realization.
4
- const recipeKey = Symbol.for("@metamesh/modeling/recipe/6");
4
+ const recipeKey = Symbol.for("@metamesh/modeling/recipe/8");
5
5
  /** Reads private recipe metadata without requiring an execution context. */
6
6
  export const geometryRecipe = (value) => Object.getOwnPropertyDescriptor(value, recipeKey)?.value;
7
7
  /** Recognizes only opaque recipe handles issued by this engine. */