@metamesh/modeling 0.13.0 → 0.15.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 (740) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/README.md +67 -9
  3. package/dist/api/engine.d.ts +14 -7
  4. package/dist/api/geometry.d.ts +787 -447
  5. package/dist/api/index.d.ts +637 -250
  6. package/dist/api/text.d.ts +6 -4
  7. package/dist/docs/guides/concepts.md +135 -17
  8. package/dist/docs/guides/fonts.md +8 -0
  9. package/dist/docs/guides/fundamentals.md +8 -3
  10. package/dist/docs/guides/generation.md +6 -4
  11. package/dist/docs/guides/hosting.md +27 -14
  12. package/dist/docs/guides/recipes.md +82 -11
  13. package/dist/docs/manifest.json +1911 -856
  14. package/dist/docs/reference/engine/Export3mfOptions.md +1 -1
  15. package/dist/docs/reference/engine/ExportMeshPart.md +1 -1
  16. package/dist/docs/reference/engine/GenerationOptions.md +1 -1
  17. package/dist/docs/reference/engine/GeometryResource.md +1 -1
  18. package/dist/docs/reference/engine/ModelDependencies.md +1 -1
  19. package/dist/docs/reference/engine/ModelEngine.md +1 -1
  20. package/dist/docs/reference/engine/ModelEngineOptions.md +4 -8
  21. package/dist/docs/reference/engine/ModelSession.md +1 -1
  22. package/dist/docs/reference/engine/ModelSnapshot.md +20 -9
  23. package/dist/docs/reference/engine/SessionOptions.md +1 -1
  24. package/dist/docs/reference/engine/SnapshotPart.md +4 -4
  25. package/dist/docs/reference/engine/categories/host-lifecycle.md +2 -2
  26. package/dist/docs/reference/engine/createModelEngine.md +3 -3
  27. package/dist/docs/reference/engine/defaultModelingLimits.md +1 -1
  28. package/dist/docs/reference/engine/modelingWasmUrl.md +1 -1
  29. package/dist/docs/reference/engine/validateModel.md +1 -1
  30. package/dist/docs/reference/engine.md +2 -2
  31. package/dist/docs/reference/geometry/AcmeThreadProfileSpec.md +1 -1
  32. package/dist/docs/reference/geometry/AlignedCircularSegmentsOptions.md +17 -4
  33. package/dist/docs/reference/geometry/{Anchor3.md → Anchor3-type.md} +9 -5
  34. package/dist/docs/reference/geometry/ArcCurve2.md +7 -7
  35. package/dist/docs/reference/geometry/ArcCurve3.md +9 -9
  36. package/dist/docs/reference/geometry/{AttachTransformOptions.md → AttachOptions.md} +14 -5
  37. package/dist/docs/reference/geometry/AxisAngleRotation3.md +6 -1
  38. package/dist/docs/reference/geometry/Bounds2.md +4 -4
  39. package/dist/docs/reference/geometry/Bounds3.md +4 -4
  40. package/dist/docs/reference/geometry/BoundsFit2.md +3 -3
  41. package/dist/docs/reference/geometry/BoundsFit3.md +3 -3
  42. package/dist/docs/reference/geometry/BoundsFitOptions.md +1 -1
  43. package/dist/docs/reference/geometry/BoundsFromSizeOptions.md +1 -1
  44. package/dist/docs/reference/geometry/BoxAnchorFace.md +8 -1
  45. package/dist/docs/reference/geometry/BoxAnchorOptions.md +8 -4
  46. package/dist/docs/reference/geometry/BoxEdge.md +1 -1
  47. package/dist/docs/reference/geometry/BoxEdgeSelection.md +1 -1
  48. package/dist/docs/reference/geometry/BoxEdgeTreatments.md +1 -1
  49. package/dist/docs/reference/geometry/BoxOptions.md +10 -10
  50. package/dist/docs/reference/geometry/ButtressPressureFlankSide.md +1 -1
  51. package/dist/docs/reference/geometry/ButtressThreadProfileSpec.md +1 -1
  52. package/dist/docs/reference/geometry/ChamferedEdgeTreatment.md +1 -1
  53. package/dist/docs/reference/geometry/CircleContourOptions.md +1 -1
  54. package/dist/docs/reference/geometry/CircularPrimitiveOptions.md +1 -1
  55. package/dist/docs/reference/geometry/CircularResolutionOptions.md +107 -0
  56. package/dist/docs/reference/geometry/ClearanceHoleDimensions.md +1 -1
  57. package/dist/docs/reference/geometry/ClearanceHoleFit.md +1 -1
  58. package/dist/docs/reference/geometry/CompensatedThreadDiameters.md +1 -1
  59. package/dist/docs/reference/geometry/Contour.md +3 -3
  60. package/dist/docs/reference/geometry/ContourCurve.md +1 -1
  61. package/dist/docs/reference/geometry/ContourPoint.md +1 -1
  62. package/dist/docs/reference/geometry/ContourSegment.md +1 -1
  63. package/dist/docs/reference/geometry/CorrespondingComponent.md +1 -1
  64. package/dist/docs/reference/geometry/CorrespondingContour.md +1 -1
  65. package/dist/docs/reference/geometry/CorrespondingProfile.md +1 -1
  66. package/dist/docs/reference/geometry/CorrespondingProfileStation.md +1 -1
  67. package/dist/docs/reference/geometry/CubicBezierCurve2.md +6 -6
  68. package/dist/docs/reference/geometry/CubicBezierCurve3.md +6 -6
  69. package/dist/docs/reference/geometry/Curve2.md +1 -1
  70. package/dist/docs/reference/geometry/Curve3.md +1 -1
  71. package/dist/docs/reference/geometry/CurveSamplingOptions.md +5 -3
  72. package/dist/docs/reference/geometry/CustomThreadProfileSpec.md +3 -3
  73. package/dist/docs/reference/geometry/CylinderAnchorFace.md +8 -1
  74. package/dist/docs/reference/geometry/CylinderAnchorOptions.md +9 -5
  75. package/dist/docs/reference/geometry/CylinderOptions.md +3 -3
  76. package/dist/docs/reference/geometry/CylindricalGearDimensions.md +3 -3
  77. package/dist/docs/reference/geometry/CylindricalGearMeshKind.md +1 -1
  78. package/dist/docs/reference/geometry/CylindricalGearOutlineOptions.md +1 -1
  79. package/dist/docs/reference/geometry/CylindricalGearPairDimensions.md +3 -3
  80. package/dist/docs/reference/geometry/CylindricalGearPairMotionOptions.md +1 -1
  81. package/dist/docs/reference/geometry/CylindricalGearPairMotionReport.md +1 -1
  82. package/dist/docs/reference/geometry/CylindricalGearPairSpec.md +1 -1
  83. package/dist/docs/reference/geometry/CylindricalGearSpec.md +6 -6
  84. package/dist/docs/reference/geometry/DEFAULT_GEOMETRY_TOLERANCE.md +1 -1
  85. package/dist/docs/reference/geometry/EdgeTreatment.md +1 -1
  86. package/dist/docs/reference/geometry/EllipseContourOptions.md +3 -3
  87. package/dist/docs/reference/geometry/EndTreatments.md +1 -1
  88. package/dist/docs/reference/geometry/ExtrudeOptions.md +6 -6
  89. package/dist/docs/reference/geometry/ExtrusionSamplingOptions.md +5 -5
  90. package/dist/docs/reference/geometry/FittedTextLayout.md +1 -1
  91. package/dist/docs/reference/geometry/Frame3.md +6 -6
  92. package/dist/docs/reference/geometry/GeometryError.md +1 -1
  93. package/dist/docs/reference/geometry/GeometryErrorCode.md +1 -1
  94. package/dist/docs/reference/geometry/GeometryErrorContext.md +1 -1
  95. package/dist/docs/reference/geometry/GeometryResolution.md +14 -5
  96. package/dist/docs/reference/geometry/GeometrySamplingLimits.md +1 -1
  97. package/dist/docs/reference/geometry/GeometryToleranceOptions.md +1 -1
  98. package/dist/docs/reference/geometry/GridPatternOptions.md +11 -5
  99. package/dist/docs/reference/geometry/HeightfieldMeshLimits.md +1 -1
  100. package/dist/docs/reference/geometry/HeightfieldOptions.md +5 -5
  101. package/dist/docs/reference/geometry/HeightfieldPreflight.md +1 -1
  102. package/dist/docs/reference/geometry/HelicalThreadRidgeMeshOptions.md +5 -5
  103. package/dist/docs/reference/geometry/HelicalThreadSolidMeshOptions.md +6 -6
  104. package/dist/docs/reference/geometry/HelicalThreadSolidMeshPreflight.md +1 -1
  105. package/dist/docs/reference/geometry/IDENTITY_TRANSFORM3.md +7 -3
  106. package/dist/docs/reference/geometry/InternalThreadCutterOptions.md +6 -6
  107. package/dist/docs/reference/geometry/LineCurve2.md +4 -4
  108. package/dist/docs/reference/geometry/LineCurve3.md +4 -4
  109. package/dist/docs/reference/geometry/LinearPatternOptions.md +12 -5
  110. package/dist/docs/reference/geometry/LoftCorrespondence.md +1 -1
  111. package/dist/docs/reference/geometry/LoftMeshStation.md +4 -4
  112. package/dist/docs/reference/geometry/LoftOptions.md +1 -1
  113. package/dist/docs/reference/geometry/LoftPlacement.md +1 -1
  114. package/dist/docs/reference/geometry/METRIC_FASTENER_STANDARDS.md +1 -1
  115. package/dist/docs/reference/geometry/MatchProfilesOptions.md +1 -1
  116. package/dist/docs/reference/geometry/MetricFastenerSize.md +1 -1
  117. package/dist/docs/reference/geometry/MetricFastenerStandard.md +1 -1
  118. package/dist/docs/reference/geometry/MetricHexNutDimensions.md +1 -1
  119. package/dist/docs/reference/geometry/MetricSocketCapHeadDimensions.md +1 -1
  120. package/dist/docs/reference/geometry/ModelingLimits.md +1 -1
  121. package/dist/docs/reference/geometry/PRINTABLE_THREAD_FIT_POLICIES.md +1 -1
  122. package/dist/docs/reference/geometry/Path2-type.md +192 -0
  123. package/dist/docs/reference/geometry/Path2Data.md +14 -0
  124. package/dist/docs/reference/geometry/Path2Input.md +15 -0
  125. package/dist/docs/reference/geometry/Path3-type.md +192 -0
  126. package/dist/docs/reference/geometry/Path3Data.md +14 -0
  127. package/dist/docs/reference/geometry/Path3Input.md +15 -0
  128. package/dist/docs/reference/geometry/PathFrame.md +5 -5
  129. package/dist/docs/reference/geometry/PathLocation.md +65 -0
  130. package/dist/docs/reference/geometry/PathNormalGuide.md +6 -5
  131. package/dist/docs/reference/geometry/PathOptions.md +34 -0
  132. package/dist/docs/reference/geometry/PathPatternOptions.md +3 -3
  133. package/dist/docs/reference/geometry/PathPlacement.md +4 -4
  134. package/dist/docs/reference/geometry/PathResamplingOptions.md +80 -0
  135. package/dist/docs/reference/geometry/Pivot2Options.md +26 -0
  136. package/dist/docs/reference/geometry/Pivot3Options.md +26 -0
  137. package/dist/docs/reference/geometry/PlanarMeshOptimizationFallbackReason.md +1 -1
  138. package/dist/docs/reference/geometry/PlanarMeshOptimizationOptions.md +22 -22
  139. package/dist/docs/reference/geometry/PlanarMeshOptimizationResult.md +1 -1
  140. package/dist/docs/reference/geometry/PlanarPatchQuality.md +3 -3
  141. package/dist/docs/reference/geometry/{Polygon.md → PolygonData.md} +2 -2
  142. package/dist/docs/reference/geometry/PolylineResamplingOptions.md +4 -4
  143. package/dist/docs/reference/geometry/PrimitiveAttachment.md +31 -0
  144. package/dist/docs/reference/geometry/PrimitiveAttachmentOptions.md +104 -0
  145. package/dist/docs/reference/geometry/PrintableThreadFit.md +1 -1
  146. package/dist/docs/reference/geometry/PrintableThreadFitPolicy.md +1 -1
  147. package/dist/docs/reference/geometry/Profile.md +1 -1
  148. package/dist/docs/reference/geometry/ProfileComponent2.md +1 -1
  149. package/dist/docs/reference/geometry/ProfileContour2.md +1 -1
  150. package/dist/docs/reference/geometry/ProfileSpan2.md +3 -3
  151. package/dist/docs/reference/geometry/ProfiledEdgeTreatment.md +3 -3
  152. package/dist/docs/reference/geometry/RackPitchDimensions.md +1 -1
  153. package/dist/docs/reference/geometry/RackPitchSpec.md +5 -5
  154. package/dist/docs/reference/geometry/RadialPatternOptions.md +17 -22
  155. package/dist/docs/reference/geometry/RadialSizing.md +1 -1
  156. package/dist/docs/reference/geometry/RadialSizingOptions.md +1 -1
  157. package/dist/docs/reference/geometry/RectangleContourOptions.md +3 -3
  158. package/dist/docs/reference/geometry/RectangleCornerTreatment.md +1 -1
  159. package/dist/docs/reference/geometry/RectangleCornerTreatments.md +1 -1
  160. package/dist/docs/reference/geometry/RectangleProfileOptions.md +3 -3
  161. package/dist/docs/reference/geometry/RegionData.md +14 -0
  162. package/dist/docs/reference/geometry/RegularPolygonContourOptions.md +3 -3
  163. package/dist/docs/reference/geometry/ResolvedGeometryTolerance.md +1 -1
  164. package/dist/docs/reference/geometry/RevolveOptions.md +9 -4
  165. package/dist/docs/reference/geometry/RoundedEdgeTreatment.md +1 -1
  166. package/dist/docs/reference/geometry/RowLayoutOptions.md +1 -1
  167. package/dist/docs/reference/geometry/SampleContourOptions.md +3 -3
  168. package/dist/docs/reference/geometry/SampleHelixOptions.md +1 -1
  169. package/dist/docs/reference/geometry/SampleSideProfileOptions.md +3 -3
  170. package/dist/docs/reference/geometry/SampledCurve2.md +4 -4
  171. package/dist/docs/reference/geometry/SampledCurve3.md +4 -4
  172. package/dist/docs/reference/geometry/SampledThreadHelices.md +3 -3
  173. package/dist/docs/reference/geometry/SideProfileCurve.md +1 -1
  174. package/dist/docs/reference/geometry/SideProfilePoint.md +1 -1
  175. package/dist/docs/reference/geometry/SideProfileSegment.md +1 -1
  176. package/dist/docs/reference/geometry/SmoothEdgeTreatment.md +1 -1
  177. package/dist/docs/reference/geometry/SolidMeshValidationOptions.md +3 -3
  178. package/dist/docs/reference/geometry/SphereOptions.md +3 -3
  179. package/dist/docs/reference/geometry/SquareThreadProfileSpec.md +1 -1
  180. package/dist/docs/reference/geometry/StrokeCap.md +7 -0
  181. package/dist/docs/reference/geometry/StrokeJoin.md +7 -0
  182. package/dist/docs/reference/geometry/{StrokePathRegionOptions.md → StrokeOptions.md} +8 -8
  183. package/dist/docs/reference/geometry/SvgImportOptions.md +1 -1
  184. package/dist/docs/reference/geometry/SvgRegionPreflight.md +3 -3
  185. package/dist/docs/reference/geometry/SvgRegionPreflightGeometryMetrics.md +13 -13
  186. package/dist/docs/reference/geometry/SvgRegionPreflightRepairs.md +11 -11
  187. package/dist/docs/reference/geometry/SvgRegionPreflightSourceMetrics.md +9 -9
  188. package/dist/docs/reference/geometry/SweepOptions.md +6 -6
  189. package/dist/docs/reference/geometry/SweepOrientation.md +7 -7
  190. package/dist/docs/reference/geometry/ThreadBevelOptions.md +1 -1
  191. package/dist/docs/reference/geometry/ThreadCircularSegmentsOptions.md +5 -5
  192. package/dist/docs/reference/geometry/ThreadCompensationOptions.md +1 -1
  193. package/dist/docs/reference/geometry/ThreadEndStyle.md +1 -1
  194. package/dist/docs/reference/geometry/ThreadEndTreatmentOptions.md +1 -1
  195. package/dist/docs/reference/geometry/ThreadHandedness.md +1 -1
  196. package/dist/docs/reference/geometry/ThreadHelixOptions.md +3 -3
  197. package/dist/docs/reference/geometry/ThreadLeadInEnvelope.md +1 -1
  198. package/dist/docs/reference/geometry/ThreadLeadInShape.md +1 -1
  199. package/dist/docs/reference/geometry/{ThreadProfile.md → ThreadProfile-type.md} +3 -3
  200. package/dist/docs/reference/geometry/ThreadProfileBaseSpec.md +1 -1
  201. package/dist/docs/reference/geometry/ThreadProfileSpec.md +1 -1
  202. package/dist/docs/reference/geometry/ThreadRole.md +1 -1
  203. package/dist/docs/reference/geometry/ThreadedNutBevel.md +1 -1
  204. package/dist/docs/reference/geometry/ThreadedNutOptions.md +6 -6
  205. package/dist/docs/reference/geometry/ThreadedNutPreflight.md +1 -1
  206. package/dist/docs/reference/geometry/ThreadedNutShape.md +1 -1
  207. package/dist/docs/reference/geometry/ThreadedRodOptions.md +6 -6
  208. package/dist/docs/reference/geometry/TorusOptions.md +8 -8
  209. package/dist/docs/reference/geometry/Transform2-type.md +255 -0
  210. package/dist/docs/reference/geometry/Transform2Input.md +19 -0
  211. package/dist/docs/reference/geometry/Transform2Matrix.md +14 -0
  212. package/dist/docs/reference/geometry/Transform3-type.md +295 -0
  213. package/dist/docs/reference/geometry/Transform3Input.md +19 -0
  214. package/dist/docs/reference/geometry/Transform3Matrix.md +17 -0
  215. package/dist/docs/reference/geometry/TrapezoidalThreadProfileSpec.md +5 -4
  216. package/dist/docs/reference/geometry/TriangleMesh.md +1 -1
  217. package/dist/docs/reference/geometry/TriangleMeshAnalysis.md +2 -2
  218. package/dist/docs/reference/geometry/TriangleMeshAnalysisOptions.md +1 -1
  219. package/dist/docs/reference/geometry/TriangleMeshMeasurements.md +1 -1
  220. package/dist/docs/reference/geometry/TriangleMeshQualityOptions.md +3 -3
  221. package/dist/docs/reference/geometry/TriangleMeshQualityReport.md +1 -1
  222. package/dist/docs/reference/geometry/TriangleMeshSignature.md +2 -2
  223. package/dist/docs/reference/geometry/TriangleMeshSignatureOptions.md +3 -3
  224. package/dist/docs/reference/geometry/TriangleMeshSignatureTolerances.md +1 -1
  225. package/dist/docs/reference/geometry/TriangleMeshValidationOptions.md +1 -1
  226. package/dist/docs/reference/geometry/TriangularThreadProfileSpec.md +1 -1
  227. package/dist/docs/reference/geometry/TubeOptions.md +8 -8
  228. package/dist/docs/reference/geometry/Vector2-type.md +269 -0
  229. package/dist/docs/reference/geometry/Vector2Input.md +19 -0
  230. package/dist/docs/reference/geometry/Vector2Tuple.md +14 -0
  231. package/dist/docs/reference/geometry/Vector3-type.md +281 -0
  232. package/dist/docs/reference/geometry/Vector3Input.md +19 -0
  233. package/dist/docs/reference/geometry/Vector3Tuple.md +14 -0
  234. package/dist/docs/reference/geometry/VectorTextArcBaseline.md +3 -3
  235. package/dist/docs/reference/geometry/VectorTextLayout.md +1 -1
  236. package/dist/docs/reference/geometry/VectorTextLayoutOptions.md +1 -1
  237. package/dist/docs/reference/geometry/VectorTextMetrics.md +1 -1
  238. package/dist/docs/reference/geometry/VectorTextOptions.md +1 -1
  239. package/dist/docs/reference/geometry/add2.md +36 -0
  240. package/dist/docs/reference/geometry/add3.md +10 -6
  241. package/dist/docs/reference/geometry/analyzeTriangleMesh.md +1 -1
  242. package/dist/docs/reference/geometry/analyzeTriangleMeshQuality.md +2 -2
  243. package/dist/docs/reference/geometry/{createAnchor3.md → anchor3.md} +13 -9
  244. package/dist/docs/reference/geometry/anchorFrame3.md +5 -5
  245. package/dist/docs/reference/geometry/applyTransformDirection3.md +11 -7
  246. package/dist/docs/reference/geometry/applyTransformPoint3.md +11 -7
  247. package/dist/docs/reference/geometry/attachmentTransform3.md +77 -0
  248. package/dist/docs/reference/geometry/boundsCenter.md +7 -7
  249. package/dist/docs/reference/geometry/boundsFromSize.md +7 -7
  250. package/dist/docs/reference/geometry/boundsSize.md +7 -7
  251. package/dist/docs/reference/geometry/boxAnchor3.md +10 -6
  252. package/dist/docs/reference/geometry/categories/bounds-layout.md +1 -1
  253. package/dist/docs/reference/geometry/categories/curves-paths.md +15 -10
  254. package/dist/docs/reference/geometry/categories/mechanical.md +6 -6
  255. package/dist/docs/reference/geometry/categories/meshes.md +3 -4
  256. package/dist/docs/reference/geometry/categories/pattern-placement.md +7 -7
  257. package/dist/docs/reference/geometry/categories/primitive-options.md +4 -4
  258. package/dist/docs/reference/geometry/categories/profiles-regions.md +5 -6
  259. package/dist/docs/reference/geometry/categories/resolution-errors.md +3 -2
  260. package/dist/docs/reference/geometry/categories/transforms-math.md +41 -12
  261. package/dist/docs/reference/geometry/categories/vector-import.md +5 -5
  262. package/dist/docs/reference/geometry/circleContour.md +1 -1
  263. package/dist/docs/reference/geometry/closeToAxis.md +4 -4
  264. package/dist/docs/reference/geometry/compensateThreadDiameters.md +1 -1
  265. package/dist/docs/reference/geometry/compensateThreadProfileAxially.md +5 -5
  266. package/dist/docs/reference/geometry/compensateThreadProfileForFaceting.md +5 -5
  267. package/dist/docs/reference/geometry/composeTransform3.md +10 -6
  268. package/dist/docs/reference/geometry/computeClosedParallelTransportFrames.md +10 -6
  269. package/dist/docs/reference/geometry/computeParallelTransportFrames.md +8 -7
  270. package/dist/docs/reference/geometry/computeTriangleMeshCentroid.md +4 -4
  271. package/dist/docs/reference/geometry/{createTriangleMeshSignature.md → computeTriangleMeshSignature.md} +4 -4
  272. package/dist/docs/reference/geometry/containsBounds.md +1 -1
  273. package/dist/docs/reference/geometry/contourContainsPoint.md +4 -4
  274. package/dist/docs/reference/geometry/cross2.md +36 -0
  275. package/dist/docs/reference/geometry/cross3.md +10 -6
  276. package/dist/docs/reference/geometry/cylinderAnchor3.md +10 -6
  277. package/dist/docs/reference/geometry/defaultGeometrySamplingLimits.md +1 -1
  278. package/dist/docs/reference/geometry/distance2.md +36 -0
  279. package/dist/docs/reference/geometry/distance3.md +36 -0
  280. package/dist/docs/reference/geometry/distributeAlongPath.md +8 -6
  281. package/dist/docs/reference/geometry/dot2.md +36 -0
  282. package/dist/docs/reference/geometry/dot3.md +9 -5
  283. package/dist/docs/reference/geometry/ellipseContour.md +1 -1
  284. package/dist/docs/reference/geometry/eulerTransform3.md +10 -6
  285. package/dist/docs/reference/geometry/extrudeMesh.md +8 -8
  286. package/dist/docs/reference/geometry/fitBounds.md +1 -1
  287. package/dist/docs/reference/geometry/fitTextLayout.md +1 -1
  288. package/dist/docs/reference/geometry/frameTransform3.md +8 -4
  289. package/dist/docs/reference/geometry/{getMetricClearanceHole.md → getMetricClearanceHoleDiameter.md} +3 -3
  290. package/dist/docs/reference/geometry/getMetricFastenerStandard.md +1 -1
  291. package/dist/docs/reference/geometry/gridPatternTransforms.md +5 -5
  292. package/dist/docs/reference/geometry/heightfieldMesh.md +1 -1
  293. package/dist/docs/reference/geometry/{buildHelicalThreadRidgeMesh.md → helicalThreadRidgeMesh.md} +5 -5
  294. package/dist/docs/reference/geometry/{buildHelicalThreadSolidMesh.md → helicalThreadSolidMesh.md} +5 -5
  295. package/dist/docs/reference/geometry/inverseTransform3.md +9 -5
  296. package/dist/docs/reference/geometry/isGeometryError.md +1 -1
  297. package/dist/docs/reference/geometry/joinTriangleMeshes.md +1 -1
  298. package/dist/docs/reference/geometry/layoutRow.md +4 -4
  299. package/dist/docs/reference/geometry/length2.md +30 -0
  300. package/dist/docs/reference/geometry/length3.md +8 -4
  301. package/dist/docs/reference/geometry/lerp2.md +42 -0
  302. package/dist/docs/reference/geometry/lerp3.md +10 -6
  303. package/dist/docs/reference/geometry/linearPatternTransforms.md +5 -5
  304. package/dist/docs/reference/geometry/loftMesh.md +2 -1
  305. package/dist/docs/reference/geometry/matchProfiles.md +1 -1
  306. package/dist/docs/reference/geometry/measureInternalCylindricalGearPairMotion.md +3 -2
  307. package/dist/docs/reference/geometry/meshBounds.md +1 -1
  308. package/dist/docs/reference/geometry/minimumCylindricalGearToothCountWithoutUndercut.md +3 -3
  309. package/dist/docs/reference/geometry/normalize2.md +36 -0
  310. package/dist/docs/reference/geometry/normalize3.md +10 -6
  311. package/dist/docs/reference/geometry/normalizeContour.md +4 -4
  312. package/dist/docs/reference/geometry/normalizePolygon.md +5 -5
  313. package/dist/docs/reference/geometry/normalizeRegion.md +5 -5
  314. package/dist/docs/reference/geometry/optimizePlanarPatches.md +11 -11
  315. package/dist/docs/reference/geometry/path2.md +42 -0
  316. package/dist/docs/reference/geometry/path3.md +42 -0
  317. package/dist/docs/reference/geometry/pathPatternTransforms.md +8 -8
  318. package/dist/docs/reference/geometry/preflightHeightfield.md +1 -1
  319. package/dist/docs/reference/geometry/preflightHelicalThreadSolidMesh.md +3 -3
  320. package/dist/docs/reference/geometry/preflightInternalThreadCutter.md +3 -3
  321. package/dist/docs/reference/geometry/preflightSvgRegion.md +1 -1
  322. package/dist/docs/reference/geometry/preflightThreadedNut.md +3 -3
  323. package/dist/docs/reference/geometry/preflightThreadedRod.md +3 -3
  324. package/dist/docs/reference/geometry/projectOntoPlane3.md +10 -6
  325. package/dist/docs/reference/geometry/radialPatternTransforms.md +4 -20
  326. package/dist/docs/reference/geometry/rectangleContour.md +2 -2
  327. package/dist/docs/reference/geometry/rectangleProfile.md +2 -2
  328. package/dist/docs/reference/geometry/regionArea.md +4 -4
  329. package/dist/docs/reference/geometry/regionBounds.md +4 -4
  330. package/dist/docs/reference/geometry/regularPolygonContour.md +5 -5
  331. package/dist/docs/reference/geometry/resamplePolyline2.md +5 -5
  332. package/dist/docs/reference/geometry/resamplePolyline3.md +5 -5
  333. package/dist/docs/reference/geometry/resolveAlignedCircularSegments.md +8 -4
  334. package/dist/docs/reference/geometry/resolveArcSegments.md +6 -6
  335. package/dist/docs/reference/geometry/resolveCircularSegments.md +6 -5
  336. package/dist/docs/reference/geometry/resolveCylindricalGear.md +1 -1
  337. package/dist/docs/reference/geometry/resolveCylindricalGearPair.md +1 -1
  338. package/dist/docs/reference/geometry/resolveExtrusionDivisions.md +6 -6
  339. package/dist/docs/reference/geometry/resolveGeometrySamplingLimits.md +1 -1
  340. package/dist/docs/reference/geometry/resolveGeometryTolerance.md +1 -1
  341. package/dist/docs/reference/geometry/resolvePrintableThreadFitPolicy.md +1 -1
  342. package/dist/docs/reference/geometry/resolveRackPitch.md +1 -1
  343. package/dist/docs/reference/geometry/resolveThreadCircularSegments.md +4 -4
  344. package/dist/docs/reference/geometry/reverseTriangleMesh.md +1 -1
  345. package/dist/docs/reference/geometry/revolveMesh.md +10 -10
  346. package/dist/docs/reference/geometry/rotate2.md +36 -0
  347. package/dist/docs/reference/geometry/rotationTransform3.md +10 -6
  348. package/dist/docs/reference/geometry/roundClosedPolylinePath.md +8 -6
  349. package/dist/docs/reference/geometry/sampleContour.md +3 -3
  350. package/dist/docs/reference/geometry/sampleCurve2.md +3 -3
  351. package/dist/docs/reference/geometry/sampleCurve3.md +2 -2
  352. package/dist/docs/reference/geometry/sampleCylindricalGearOutline.md +1 -1
  353. package/dist/docs/reference/geometry/sampleHelix.md +5 -5
  354. package/dist/docs/reference/geometry/sampleInternalCylindricalGearSpaceOutline.md +1 -1
  355. package/dist/docs/reference/geometry/sampleRackToothPath.md +4 -4
  356. package/dist/docs/reference/geometry/sampleSideProfile.md +6 -6
  357. package/dist/docs/reference/geometry/sampleTextContours.md +1 -1
  358. package/dist/docs/reference/geometry/sampleThreadHelices.md +2 -2
  359. package/dist/docs/reference/geometry/scale2.md +36 -0
  360. package/dist/docs/reference/geometry/scale3.md +9 -5
  361. package/dist/docs/reference/geometry/scaleTransform3.md +10 -6
  362. package/dist/docs/reference/geometry/signedContourArea.md +1 -1
  363. package/dist/docs/reference/geometry/starContour.md +4 -4
  364. package/dist/docs/reference/geometry/strokeRegionData.md +63 -0
  365. package/dist/docs/reference/geometry/subtract2.md +36 -0
  366. package/dist/docs/reference/geometry/subtract3.md +10 -6
  367. package/dist/docs/reference/geometry/sweepMesh.md +9 -9
  368. package/dist/docs/reference/geometry/{createThreadProfile.md → threadProfile.md} +6 -6
  369. package/dist/docs/reference/geometry/transform2.md +38 -0
  370. package/dist/docs/reference/geometry/transform3.md +38 -0
  371. package/dist/docs/reference/geometry/transformDeterminant3.md +8 -4
  372. package/dist/docs/reference/geometry/transformRegionData.md +40 -0
  373. package/dist/docs/reference/geometry/transformTriangleMesh.md +6 -6
  374. package/dist/docs/reference/geometry/translationTransform3.md +10 -6
  375. package/dist/docs/reference/geometry/triangulateContour.md +1 -1
  376. package/dist/docs/reference/geometry/validateSolidMesh.md +2 -2
  377. package/dist/docs/reference/geometry/validateTransform3.md +9 -5
  378. package/dist/docs/reference/geometry/validateTriangleMesh.md +1 -1
  379. package/dist/docs/reference/geometry/vector2.md +31 -0
  380. package/dist/docs/reference/geometry/vector3.md +38 -0
  381. package/dist/docs/reference/geometry.md +3 -3
  382. package/dist/docs/reference/model/Anchor3.md +5 -5
  383. package/dist/docs/reference/model/AttachOptions.md +10 -5
  384. package/dist/docs/reference/model/Bounds2.md +4 -4
  385. package/dist/docs/reference/model/Bounds3.md +4 -4
  386. package/dist/docs/reference/model/BoxEdge.md +1 -1
  387. package/dist/docs/reference/model/BoxEdgeSelection.md +1 -1
  388. package/dist/docs/reference/model/BoxEdgeTreatments.md +1 -1
  389. package/dist/docs/reference/model/BoxOptions.md +10 -10
  390. package/dist/docs/reference/model/ChamferedEdgeTreatment.md +1 -1
  391. package/dist/docs/reference/model/CircleContourOptions.md +1 -1
  392. package/dist/docs/reference/model/CircleOptions.md +3 -3
  393. package/dist/docs/reference/model/CircularPrimitiveOptions.md +1 -1
  394. package/dist/docs/reference/model/Computed.md +1 -1
  395. package/dist/docs/reference/model/ComputedValue.md +1 -1
  396. package/dist/docs/reference/model/Contour.md +3 -3
  397. package/dist/docs/reference/model/CorrespondingComponent.md +1 -1
  398. package/dist/docs/reference/model/CorrespondingContour.md +1 -1
  399. package/dist/docs/reference/model/CorrespondingProfile.md +1 -1
  400. package/dist/docs/reference/model/CorrespondingProfileStation.md +1 -1
  401. package/dist/docs/reference/model/CylinderOptions.md +3 -3
  402. package/dist/docs/reference/model/DiagnosticOptions.md +1 -1
  403. package/dist/docs/reference/model/EdgeTreatment.md +1 -1
  404. package/dist/docs/reference/model/EllipseContourOptions.md +3 -3
  405. package/dist/docs/reference/model/EllipseOptions.md +3 -3
  406. package/dist/docs/reference/model/EndTreatments.md +1 -1
  407. package/dist/docs/reference/model/ExtrudeOptions.md +6 -6
  408. package/dist/docs/reference/model/FinalizedModel.md +18 -8
  409. package/dist/docs/reference/model/FinalizedPart.md +1 -1
  410. package/dist/docs/reference/model/Frame3.md +6 -6
  411. package/dist/docs/reference/model/GenerateCallback.md +1 -1
  412. package/dist/docs/reference/model/GenerateContext.md +5 -5
  413. package/dist/docs/reference/model/GeneratedPart.md +6 -6
  414. package/dist/docs/reference/model/GenerationDiagnostic.md +1 -1
  415. package/dist/docs/reference/model/GenerationError.md +1 -1
  416. package/dist/docs/reference/model/GeometryResolution.md +5 -5
  417. package/dist/docs/reference/model/GeometrySamplingLimits.md +1 -1
  418. package/dist/docs/reference/model/GeometryToleranceOptions.md +1 -1
  419. package/dist/docs/reference/model/GridPatternOptions.md +11 -5
  420. package/dist/docs/reference/model/HeightfieldOptions.md +5 -5
  421. package/dist/docs/reference/model/HelicalThreadRidgeMeshOptions.md +3 -3
  422. package/dist/docs/reference/model/HelicalThreadSolidMeshPreflight.md +1 -1
  423. package/dist/docs/reference/model/HullOptions.md +7 -7
  424. package/dist/docs/reference/model/ImmutableBuffer-type.md +1 -1
  425. package/dist/docs/reference/model/ImmutableTriangleMesh.md +1 -1
  426. package/dist/docs/reference/model/ImplicitOptions.md +4 -4
  427. package/dist/docs/reference/model/InternalThreadCutterOptions.md +4 -4
  428. package/dist/docs/reference/model/LinearPatternOptions.md +12 -5
  429. package/dist/docs/reference/model/LoftCorrespondence.md +1 -1
  430. package/dist/docs/reference/model/LoftOptions.md +1 -1
  431. package/dist/docs/reference/model/LoftPlacement.md +1 -1
  432. package/dist/docs/reference/model/LoftStation.md +4 -4
  433. package/dist/docs/reference/model/MatchProfilesOptions.md +1 -1
  434. package/dist/docs/reference/model/ModelProgram.md +1 -1
  435. package/dist/docs/reference/model/ModelingLimits.md +1 -1
  436. package/dist/docs/reference/model/NumericArray.md +1 -1
  437. package/dist/docs/reference/model/PartGeometry.md +1 -1
  438. package/dist/docs/reference/model/PartOptions.md +6 -6
  439. package/dist/docs/reference/model/Path2-type.md +192 -0
  440. package/dist/docs/reference/model/Path2Data.md +14 -0
  441. package/dist/docs/reference/model/Path2Input.md +15 -0
  442. package/dist/docs/reference/model/Path3-type.md +192 -0
  443. package/dist/docs/reference/model/Path3Data.md +14 -0
  444. package/dist/docs/reference/model/Path3Input.md +15 -0
  445. package/dist/docs/reference/model/PathLocation.md +65 -0
  446. package/dist/docs/reference/model/PathNormalGuide.md +6 -5
  447. package/dist/docs/reference/model/PathOptions.md +34 -0
  448. package/dist/docs/reference/model/PathPatternOptions.md +3 -3
  449. package/dist/docs/reference/model/PathResamplingOptions.md +79 -0
  450. package/dist/docs/reference/model/PatternSource.md +2 -2
  451. package/dist/docs/reference/model/Pivot2Options.md +27 -0
  452. package/dist/docs/reference/model/Pivot3Options.md +27 -0
  453. package/dist/docs/reference/model/PlaneOptions.md +3 -3
  454. package/dist/docs/reference/model/{Polygon-type.md → PolygonData.md} +2 -2
  455. package/dist/docs/reference/model/PolygonOptions.md +85 -8
  456. package/dist/docs/reference/model/{PrimitivePlacement.md → PrimitiveAttachment.md} +7 -7
  457. package/dist/docs/reference/model/{PrimitivePlacementOptions.md → PrimitiveAttachmentOptions.md} +41 -20
  458. package/dist/docs/reference/model/PrintableThreadFit.md +1 -1
  459. package/dist/docs/reference/model/PrintableThreadFitPolicy.md +1 -1
  460. package/dist/docs/reference/model/Profile.md +1 -1
  461. package/dist/docs/reference/model/ProfileComponent2.md +1 -1
  462. package/dist/docs/reference/model/ProfileContour2.md +1 -1
  463. package/dist/docs/reference/model/ProfileSpan2.md +3 -3
  464. package/dist/docs/reference/model/ProfiledEdgeTreatment.md +3 -3
  465. package/dist/docs/reference/model/RadialPatternOptions.md +17 -22
  466. package/dist/docs/reference/model/RadialSizing.md +1 -1
  467. package/dist/docs/reference/model/RadialSizingOptions.md +1 -1
  468. package/dist/docs/reference/model/RectangleContourOptions.md +3 -3
  469. package/dist/docs/reference/model/RectangleCornerTreatment.md +1 -1
  470. package/dist/docs/reference/model/RectangleCornerTreatments.md +1 -1
  471. package/dist/docs/reference/model/RectangleOptions.md +10 -10
  472. package/dist/docs/reference/model/{Region.md → RegionData.md} +4 -4
  473. package/dist/docs/reference/model/RegularPolygonOptions.md +5 -5
  474. package/dist/docs/reference/model/RevolveOptions.md +9 -4
  475. package/dist/docs/reference/model/RoundedEdgeTreatment.md +1 -1
  476. package/dist/docs/reference/model/Section.md +81 -40
  477. package/dist/docs/reference/model/SectionHullOptions.md +7 -7
  478. package/dist/docs/reference/model/SectionInspection.md +10 -10
  479. package/dist/docs/reference/model/{RegionOffsetJoin.md → SectionOffsetJoin.md} +3 -3
  480. package/dist/docs/reference/model/{RegionOffsetOptions.md → SectionOffsetOptions.md} +4 -4
  481. package/dist/docs/reference/model/SmoothEdgeTreatment.md +1 -1
  482. package/dist/docs/reference/model/Solid.md +66 -26
  483. package/dist/docs/reference/model/SolidInspection.md +7 -7
  484. package/dist/docs/reference/model/{SolidRayHit.md → SolidSegmentHit.md} +6 -6
  485. package/dist/docs/reference/model/SphereOptions.md +3 -3
  486. package/dist/docs/reference/model/StarOptions.md +10 -10
  487. package/dist/docs/reference/model/StrokeCap.md +16 -0
  488. package/dist/docs/reference/model/StrokeJoin.md +16 -0
  489. package/dist/docs/reference/model/StrokeOptions.md +91 -0
  490. package/dist/docs/reference/model/SvgOrigin.md +1 -1
  491. package/dist/docs/reference/model/SvgPathSectionOptions.md +1 -1
  492. package/dist/docs/reference/model/SvgSectionOptions.md +1 -1
  493. package/dist/docs/reference/model/SweepOptions.md +6 -6
  494. package/dist/docs/reference/model/SweepOrientation.md +7 -7
  495. package/dist/docs/reference/model/TextSectionOptions.md +1 -1
  496. package/dist/docs/reference/model/ThreadEndStyle.md +1 -1
  497. package/dist/docs/reference/model/ThreadEndTreatmentOptions.md +1 -1
  498. package/dist/docs/reference/model/ThreadHandedness.md +1 -1
  499. package/dist/docs/reference/model/ThreadLeadInEnvelope.md +1 -1
  500. package/dist/docs/reference/model/ThreadLeadInShape.md +1 -1
  501. package/dist/docs/reference/model/ThreadProfile.md +3 -3
  502. package/dist/docs/reference/model/ThreadRidgeOptions.md +1 -1
  503. package/dist/docs/reference/model/ThreadedNutBevel.md +1 -1
  504. package/dist/docs/reference/model/ThreadedNutOptions.md +4 -4
  505. package/dist/docs/reference/model/ThreadedNutPreflight.md +1 -1
  506. package/dist/docs/reference/model/ThreadedNutShape.md +1 -1
  507. package/dist/docs/reference/model/ThreadedRodOptions.md +4 -4
  508. package/dist/docs/reference/model/TorusOptions.md +8 -8
  509. package/dist/docs/reference/model/Transform2-type.md +256 -0
  510. package/dist/docs/reference/model/Transform2Input.md +20 -0
  511. package/dist/docs/reference/model/Transform2Matrix.md +15 -0
  512. package/dist/docs/reference/model/Transform3-type.md +296 -0
  513. package/dist/docs/reference/model/Transform3Input.md +20 -0
  514. package/dist/docs/reference/model/{Transform3.md → Transform3Matrix.md} +3 -3
  515. package/dist/docs/reference/model/TriangleMesh.md +1 -1
  516. package/dist/docs/reference/model/TriangleMeshAnalysis.md +2 -2
  517. package/dist/docs/reference/model/TriangleMeshMeasurements.md +1 -1
  518. package/dist/docs/reference/model/TubeOptions.md +8 -8
  519. package/dist/docs/reference/model/Vector2-type.md +270 -0
  520. package/dist/docs/reference/model/Vector2Input.md +20 -0
  521. package/dist/docs/reference/model/{Vector2.md → Vector2Tuple.md} +3 -3
  522. package/dist/docs/reference/model/Vector3-type.md +282 -0
  523. package/dist/docs/reference/model/Vector3Input.md +20 -0
  524. package/dist/docs/reference/model/{Vector3.md → Vector3Tuple.md} +3 -3
  525. package/dist/docs/reference/model/VectorTextLayout.md +1 -1
  526. package/dist/docs/reference/model/VectorTextMetrics.md +1 -1
  527. package/dist/docs/reference/model/anchor.md +1 -1
  528. package/dist/docs/reference/model/box.md +4 -4
  529. package/dist/docs/reference/model/castSegment.md +40 -0
  530. package/dist/docs/reference/model/categories/boolean-operations.md +4 -4
  531. package/dist/docs/reference/model/categories/bounded-surfaces.md +3 -3
  532. package/dist/docs/reference/model/categories/contracts.md +2 -2
  533. package/dist/docs/reference/model/categories/core-values-errors.md +5 -5
  534. package/dist/docs/reference/model/categories/explicit-profiles.md +3 -3
  535. package/dist/docs/reference/model/categories/extrude-revolve-sweep.md +2 -2
  536. package/dist/docs/reference/model/categories/generation.md +1 -1
  537. package/dist/docs/reference/model/categories/inspection.md +7 -8
  538. package/dist/docs/reference/model/categories/mesh-inspection.md +2 -2
  539. package/dist/docs/reference/model/categories/paths.md +33 -0
  540. package/dist/docs/reference/model/categories/primitives.md +3 -3
  541. package/dist/docs/reference/model/categories/resolution.md +2 -2
  542. package/dist/docs/reference/model/categories/sections.md +10 -8
  543. package/dist/docs/reference/model/categories/threads.md +5 -5
  544. package/dist/docs/reference/model/categories/transforms-placement.md +27 -13
  545. package/dist/docs/reference/model/circle.md +1 -1
  546. package/dist/docs/reference/model/components.md +10 -7
  547. package/dist/docs/reference/model/compose.md +1 -1
  548. package/dist/docs/reference/model/cylinder.md +1 -1
  549. package/dist/docs/reference/model/distance.md +2 -2
  550. package/dist/docs/reference/model/ellipse.md +1 -1
  551. package/dist/docs/reference/model/extrude.md +3 -3
  552. package/dist/docs/reference/model/generate.md +1 -1
  553. package/dist/docs/reference/model/gridPattern.md +4 -4
  554. package/dist/docs/reference/model/heightfield.md +2 -2
  555. package/dist/docs/reference/model/hull.md +2 -2
  556. package/dist/docs/reference/model/immutableBuffer.md +1 -1
  557. package/dist/docs/reference/model/immutableMesh.md +1 -1
  558. package/dist/docs/reference/model/implicit.md +3 -3
  559. package/dist/docs/reference/model/inspectSection.md +1 -1
  560. package/dist/docs/reference/model/inspectSolid.md +1 -1
  561. package/dist/docs/reference/model/internalThreadCutter.md +4 -4
  562. package/dist/docs/reference/model/intersect.md +1 -1
  563. package/dist/docs/reference/model/isEmpty.md +2 -2
  564. package/dist/docs/reference/model/linearPattern.md +4 -4
  565. package/dist/docs/reference/model/loft.md +1 -1
  566. package/dist/docs/reference/model/matchProfiles.md +2 -2
  567. package/dist/docs/reference/model/minkowskiSum.md +1 -1
  568. package/dist/docs/reference/model/path2.md +42 -0
  569. package/dist/docs/reference/model/path3.md +42 -0
  570. package/dist/docs/reference/model/pathPattern.md +13 -12
  571. package/dist/docs/reference/model/polygon.md +4 -4
  572. package/dist/docs/reference/model/preflightInternalThreadCutter.md +3 -3
  573. package/dist/docs/reference/model/preflightThreadedNut.md +3 -3
  574. package/dist/docs/reference/model/preflightThreadedRod.md +3 -3
  575. package/dist/docs/reference/model/radialPattern.md +5 -37
  576. package/dist/docs/reference/model/rectangle.md +4 -4
  577. package/dist/docs/reference/model/regularPolygon.md +1 -1
  578. package/dist/docs/reference/model/revolve.md +5 -4
  579. package/dist/docs/reference/model/solidFromMesh.md +1 -1
  580. package/dist/docs/reference/model/sphere.md +1 -1
  581. package/dist/docs/reference/model/split.md +1 -1
  582. package/dist/docs/reference/model/splitByPlane.md +1 -1
  583. package/dist/docs/reference/model/star.md +4 -4
  584. package/dist/docs/reference/model/stroke.md +74 -0
  585. package/dist/docs/reference/model/svgPathSection.md +1 -1
  586. package/dist/docs/reference/model/svgSection.md +1 -1
  587. package/dist/docs/reference/model/sweep.md +7 -7
  588. package/dist/docs/reference/model/textSection.md +1 -1
  589. package/dist/docs/reference/model/threadRidge.md +2 -2
  590. package/dist/docs/reference/model/threadedNut.md +4 -4
  591. package/dist/docs/reference/model/threadedRod.md +4 -4
  592. package/dist/docs/reference/model/torus.md +3 -3
  593. package/dist/docs/reference/model/transform2.md +39 -0
  594. package/dist/docs/reference/model/transform3.md +39 -0
  595. package/dist/docs/reference/model/tube.md +3 -3
  596. package/dist/docs/reference/model/union.md +1 -1
  597. package/dist/docs/reference/model/vector2.md +32 -0
  598. package/dist/docs/reference/model/vector3.md +39 -0
  599. package/dist/docs/reference/model.md +9 -8
  600. package/dist/docs/reference/text/Bounds2.md +4 -4
  601. package/dist/docs/reference/text/MAX_VECTOR_FONT_BYTES.md +1 -1
  602. package/dist/docs/reference/text/Vector2Tuple.md +7 -0
  603. package/dist/docs/reference/text/VectorFont.md +2 -2
  604. package/dist/docs/reference/text/VectorFontOptions.md +1 -1
  605. package/dist/docs/reference/text/VectorTextArcBaseline.md +3 -3
  606. package/dist/docs/reference/text/VectorTextLayout.md +1 -1
  607. package/dist/docs/reference/text/VectorTextLayoutOptions.md +1 -1
  608. package/dist/docs/reference/text/VectorTextMetrics.md +1 -1
  609. package/dist/docs/reference/text/VectorTextOptions.md +1 -1
  610. package/dist/docs/reference/text/categories/font-preparation.md +4 -4
  611. package/dist/docs/reference/text/prepareVectorFont.md +2 -2
  612. package/dist/docs/reference/text.md +1 -1
  613. package/dist/engine/construction-operations.js +31 -14
  614. package/dist/engine/deferred-context.js +11 -181
  615. package/dist/engine/execution.js +39 -8
  616. package/dist/engine/extrusion-finishing.js +1 -1
  617. package/dist/engine/index.js +6 -1
  618. package/dist/engine/inspection-operations.js +13 -11
  619. package/dist/engine/loft-operations.js +35 -14
  620. package/dist/engine/model-summary.js +8 -5
  621. package/dist/engine/native/material-components.js +305 -0
  622. package/dist/engine/native/regions.js +2 -1
  623. package/dist/engine/native/threads.js +3 -3
  624. package/dist/engine/native/transforms.js +11 -8
  625. package/dist/engine/operation-environment.js +2 -2
  626. package/dist/engine/pattern-operations.js +3 -3
  627. package/dist/engine/placement.js +2 -2
  628. package/dist/engine/primitive-anchors.js +17 -17
  629. package/dist/engine/primitive-operations.js +1 -1
  630. package/dist/engine/primitive-profiles.js +8 -7
  631. package/dist/engine/profile-mesh.js +7 -7
  632. package/dist/engine/recipe-realization.js +35 -21
  633. package/dist/engine/section-operations.js +52 -11
  634. package/dist/engine/session-graph.js +1 -1
  635. package/dist/engine/session-native.js +1 -1
  636. package/dist/engine/session-snapshot.js +17 -6
  637. package/dist/engine/session.js +13 -8
  638. package/dist/engine/shape-anchors.js +5 -11
  639. package/dist/engine/transform-operations.js +66 -49
  640. package/dist/geometry/anchors.js +40 -33
  641. package/dist/geometry/curves/sampling.js +14 -14
  642. package/dist/geometry/edge-finishing.js +1 -1
  643. package/dist/geometry/extrusion.js +13 -16
  644. package/dist/geometry/index.js +13 -10
  645. package/dist/geometry/loft/loft-simple-mesh.js +6 -6
  646. package/dist/geometry/loft/loft.js +22 -13
  647. package/dist/geometry/math/immutable-value.js +20 -0
  648. package/dist/geometry/math/vector-value.js +168 -0
  649. package/dist/geometry/math/vector2.js +80 -0
  650. package/dist/geometry/math/vector3.js +37 -7
  651. package/dist/geometry/mechanical/gear-motion.js +8 -5
  652. package/dist/geometry/mechanical/gears.js +38 -38
  653. package/dist/geometry/mechanical/index.js +3 -3
  654. package/dist/geometry/mechanical/standards.js +1 -1
  655. package/dist/geometry/mechanical/thread-helices.js +2 -3
  656. package/dist/geometry/mechanical/thread-mesh-plan.js +4 -5
  657. package/dist/geometry/mechanical/thread-mesh.js +7 -7
  658. package/dist/geometry/mechanical/thread-profiles.js +5 -5
  659. package/dist/geometry/mechanical/thread-solids.js +2 -2
  660. package/dist/geometry/mechanical/thread-surface.js +1 -1
  661. package/dist/geometry/mechanical/threads.js +8 -8
  662. package/dist/geometry/mesh/mesh-planar.js +25 -27
  663. package/dist/geometry/mesh/mesh-quality.js +5 -5
  664. package/dist/geometry/mesh/mesh-signature.js +13 -13
  665. package/dist/geometry/mesh/mesh-solid-intersections.js +5 -1
  666. package/dist/geometry/mesh/mesh-solid.js +7 -7
  667. package/dist/geometry/mesh/mesh.js +4 -15
  668. package/dist/geometry/paths/closest-point.js +63 -0
  669. package/dist/geometry/paths/frames.js +44 -14
  670. package/dist/geometry/paths/helix.js +16 -6
  671. package/dist/geometry/paths/path-value.js +252 -0
  672. package/dist/geometry/paths/planar.js +36 -23
  673. package/dist/geometry/paths/resampling.js +27 -5
  674. package/dist/geometry/patterns/placements.js +100 -27
  675. package/dist/geometry/patterns.js +2 -2
  676. package/dist/geometry/polygon-clipping.js +17 -0
  677. package/dist/geometry/primitive-resolution.js +4 -1
  678. package/dist/geometry/profiles/contour.js +6 -6
  679. package/dist/geometry/profiles/matched.js +4 -4
  680. package/dist/geometry/profiles/profiles.js +4 -4
  681. package/dist/geometry/profiles/rectangle.js +4 -4
  682. package/dist/geometry/profiles/side-profile.js +7 -7
  683. package/dist/geometry/profiles/span-sampling.js +1 -1
  684. package/dist/geometry/resolution.js +51 -39
  685. package/dist/geometry/revolve/revolve-mesh.js +12 -7
  686. package/dist/geometry/stroke-path.js +57 -68
  687. package/dist/geometry/svg/fill.js +7 -21
  688. package/dist/geometry/svg-import.js +23 -23
  689. package/dist/geometry/sweeps/options.js +5 -4
  690. package/dist/geometry/sweeps/orientation.js +5 -5
  691. package/dist/geometry/sweeps/stations.js +14 -14
  692. package/dist/geometry/sweeps/sweep-closed.js +5 -5
  693. package/dist/geometry/sweeps/sweep-mesh.js +9 -3
  694. package/dist/geometry/sweeps/sweep-open.js +4 -4
  695. package/dist/geometry/sweeps/validation.js +4 -7
  696. package/dist/geometry/transform-chain.js +172 -0
  697. package/dist/geometry/transform-geometry.js +27 -30
  698. package/dist/geometry/transform-matrix.js +14 -0
  699. package/dist/geometry/transform2.js +60 -0
  700. package/dist/geometry/transform3.js +70 -26
  701. package/dist/index.js +4 -0
  702. package/dist/model/execution-binding.js +10 -5
  703. package/dist/model/geometry-recipes.js +15 -0
  704. package/dist/{engine → model}/immutable-generation-data.js +88 -6
  705. package/dist/model/operation-dispatch.js +10 -3
  706. package/dist/model/operations.js +45 -35
  707. package/dist/model/recipe-declaration.js +199 -0
  708. package/dist/model/shape-handles.js +17 -5
  709. package/dist/text/index.js +15 -9
  710. package/dist/text/vector-text-layout.js +31 -26
  711. package/package.json +1 -1
  712. package/dist/docs/reference/geometry/Path2.md +0 -14
  713. package/dist/docs/reference/geometry/Path3.md +0 -14
  714. package/dist/docs/reference/geometry/PrimitivePlacement.md +0 -31
  715. package/dist/docs/reference/geometry/PrimitivePlacementOptions.md +0 -83
  716. package/dist/docs/reference/geometry/Region.md +0 -14
  717. package/dist/docs/reference/geometry/StrokePathCap.md +0 -7
  718. package/dist/docs/reference/geometry/StrokePathJoin.md +0 -7
  719. package/dist/docs/reference/geometry/Transform3.md +0 -12
  720. package/dist/docs/reference/geometry/Vector2.md +0 -7
  721. package/dist/docs/reference/geometry/Vector3.md +0 -7
  722. package/dist/docs/reference/geometry/attachTransform.md +0 -73
  723. package/dist/docs/reference/geometry/cumulativePathLengths.md +0 -33
  724. package/dist/docs/reference/geometry/measureTriangleMesh.md +0 -55
  725. package/dist/docs/reference/geometry/pathLength.md +0 -33
  726. package/dist/docs/reference/geometry/rotateAroundAxis3.md +0 -38
  727. package/dist/docs/reference/geometry/strokePathRegion.md +0 -63
  728. package/dist/docs/reference/geometry/transformContour.md +0 -42
  729. package/dist/docs/reference/geometry/transformPath2.md +0 -40
  730. package/dist/docs/reference/geometry/transformPath3.md +0 -33
  731. package/dist/docs/reference/geometry/transformRegion.md +0 -40
  732. package/dist/docs/reference/model/Transform2.md +0 -15
  733. package/dist/docs/reference/model/fromRegion.md +0 -33
  734. package/dist/docs/reference/model/rayCast.md +0 -40
  735. package/dist/docs/reference/model/toRegion.md +0 -33
  736. package/dist/docs/reference/model/toTriangleMesh.md +0 -27
  737. package/dist/docs/reference/text/Vector2.md +0 -7
  738. package/dist/engine/geometry-recipes.js +0 -12
  739. package/dist/engine/pattern-transform.js +0 -9
  740. package/dist/geometry/paths/path.js +0 -32
@@ -0,0 +1,305 @@
1
+ import { GeometryError } from "../../geometry/errors.js";
2
+ import { triangleSolidAngle } from "../../geometry/mesh/mesh-solid-intersections.js";
3
+ import { assertMeshAllocationWithinLimits, } from "../../geometry/model-limits.js";
4
+ import { ownScopedManifoldValue, scopedManifoldModule, } from "./context.js";
5
+ import { assertNativeSolidStatus } from "./status.js";
6
+ const MAXIMUM_CONTAINMENT_TESTS = 2_000_000;
7
+ /** Certifies the native sign only when its floating-point error cannot reach zero. */
8
+ function certifiedNativeOrientation(volume, bounds, triangles) {
9
+ const magnitudes = bounds.min.map((value, axis) => Math.max(Math.abs(value), Math.abs(bounds.max[axis])));
10
+ const ranges = bounds.min.map((value, axis) => bounds.max[axis] - value);
11
+ const magnitude = Math.max(...magnitudes);
12
+ // Pinned Manifold 3.5.4 src/properties.cpp:245-270 computes edge-cross/dot/6
13
+ // terms q followed by s'=fl(s+q), c+=fl(fl(s-s')+q). In exact algebra the
14
+ // compensation cancels the running-sum errors. For u=2^-53 and n*u<1/4,
15
+ // remaining summation error is <=(6u+7n^2*u^2)*sum(abs(q)). For
16
+ // P=sum(Mi*Rj*Rk), each triangle's absolute product sum is <=P/3 and its
17
+ // arithmetic error is <=64uP. Their total is <80*u*n*P*(1+n^2*u);
18
+ // 512 also covers rounding of ranges/P. This selects arithmetic, never size.
19
+ // These windows keep the bound finite/normal and absolute subnormal errors
20
+ // below its spare margin; coordinates outside them use exact arithmetic.
21
+ if (!Number.isFinite(volume) ||
22
+ triangles < 4 ||
23
+ triangles >= 2 ** 31 ||
24
+ magnitude < 2 ** -300 ||
25
+ magnitude > 2 ** 300 ||
26
+ ranges.some((range) => range < 2 ** -300 || range > 2 ** 300))
27
+ return undefined;
28
+ const productSum = magnitudes[0] * ranges[1] * ranges[2] +
29
+ magnitudes[1] * ranges[0] * ranges[2] +
30
+ magnitudes[2] * ranges[0] * ranges[1];
31
+ const unitRoundoff = Number.EPSILON / 2;
32
+ const error = 512 * unitRoundoff * triangles * productSum * (1 + triangles * triangles * unitRoundoff);
33
+ if (!Number.isFinite(error))
34
+ return undefined;
35
+ return Math.abs(volume) > error ? (volume < 0 ? -1 : 1) : undefined;
36
+ }
37
+ /** Observes native coordinates and topology without converting geometry to Float32. */
38
+ function nativeShellMesh(scope, shell, limits) {
39
+ const vertices = shell.numVert();
40
+ const properties = shell.numPropVert();
41
+ const triangles = shell.numTri();
42
+ // Both native observation work and copied topology stay within the host's mesh limits.
43
+ // Charge the Float64 coordinates, Float32 property mesh, index map and triangle indices.
44
+ assertMeshAllocationWithinLimits(Math.max(vertices, properties), triangles, vertices * 24 + properties * (shell.numProp() + 4) * 4 + triangles * 12, "components", limits);
45
+ const coordinates = new Float64Array(vertices * 3);
46
+ const encoded = ownScopedManifoldValue(scope, shell.warpBatch((positions, count) => {
47
+ coordinates.set(positions);
48
+ for (let vertex = 0; vertex < count; vertex++) {
49
+ // Exact Float32-safe IDs recover native indices even when property vertices
50
+ // are duplicated or reordered by getMesh(). The original coordinates stay Float64.
51
+ positions[vertex * 3] = vertex % 65536;
52
+ positions[vertex * 3 + 1] = Math.floor(vertex / 65536);
53
+ positions[vertex * 3 + 2] = 0;
54
+ }
55
+ }));
56
+ assertNativeSolidStatus(encoded, "components");
57
+ if (encoded.numVert() !== vertices || encoded.numTri() !== triangles)
58
+ throw new GeometryError("INVALID_TOPOLOGY", "Native observation changed shell topology.", {
59
+ operation: "components",
60
+ });
61
+ const mesh = encoded.getMesh();
62
+ if (mesh.numVert !== properties || mesh.numTri !== triangles)
63
+ throw new GeometryError("INVALID_TOPOLOGY", "Native observation changed property topology.", {
64
+ operation: "components",
65
+ });
66
+ const indices = new Uint32Array(properties);
67
+ for (let vertex = 0; vertex < properties; vertex++) {
68
+ const offset = vertex * mesh.numProp;
69
+ const low = mesh.vertProperties[offset];
70
+ const high = mesh.vertProperties[offset + 1];
71
+ const index = low + high * 65536;
72
+ if (!Number.isInteger(low) ||
73
+ low < 0 ||
74
+ low >= 65536 ||
75
+ !Number.isInteger(high) ||
76
+ high < 0 ||
77
+ !Number.isSafeInteger(index) ||
78
+ index >= vertices ||
79
+ mesh.vertProperties[offset + 2] !== 0)
80
+ throw new GeometryError("INVALID_TOPOLOGY", "Native observation lost a vertex identity.", {
81
+ operation: "components",
82
+ });
83
+ indices[vertex] = index;
84
+ }
85
+ return { coordinates, vertexIndices: indices, triangles: mesh.triVerts };
86
+ }
87
+ /** Computes signed enclosed volume without rounding, including folded contact boundaries. */
88
+ function nativeShellOrientation(mesh) {
89
+ const { coordinates, vertexIndices, triangles } = mesh;
90
+ const bits = new DataView(new ArrayBuffer(8));
91
+ const fractionMask = (1n << 52n) - 1n;
92
+ const representation = (value) => {
93
+ bits.setFloat64(0, value);
94
+ return bits.getBigUint64(0);
95
+ };
96
+ let minimumExponent = 2047;
97
+ for (const value of coordinates) {
98
+ if (!Number.isFinite(value))
99
+ throw new GeometryError("NON_FINITE_VALUE", "Native coordinates must be finite.", {
100
+ operation: "components",
101
+ });
102
+ if (value !== 0)
103
+ minimumExponent = Math.min(minimumExponent, Number((representation(value) >> 52n) & 2047n) || 1);
104
+ }
105
+ // One common binary scale makes each coefficient exact while avoiding thousands
106
+ // of unnecessary zero bits for ordinary millimetre coordinates.
107
+ const integer = (value) => {
108
+ if (value === 0)
109
+ return 0n;
110
+ const encodedValue = representation(value);
111
+ const exponent = Number((encodedValue >> 52n) & 2047n);
112
+ const significand = (encodedValue & fractionMask) | (exponent === 0 ? 0n : 1n << 52n);
113
+ const magnitude = significand << BigInt((exponent || 1) - minimumExponent);
114
+ return encodedValue >> 63n === 0n ? magnitude : -magnitude;
115
+ };
116
+ const origin = [integer(coordinates[0]), integer(coordinates[1]), integer(coordinates[2])];
117
+ const pointAt = (propertyVertex) => {
118
+ const offset = vertexIndices[propertyVertex] * 3;
119
+ return [
120
+ integer(coordinates[offset]) - origin[0],
121
+ integer(coordinates[offset + 1]) - origin[1],
122
+ integer(coordinates[offset + 2]) - origin[2],
123
+ ];
124
+ };
125
+ let volume = 0n;
126
+ for (let triangle = 0; triangle < triangles.length; triangle += 3) {
127
+ const a = pointAt(triangles[triangle]);
128
+ const b = pointAt(triangles[triangle + 1]);
129
+ const c = pointAt(triangles[triangle + 2]);
130
+ volume +=
131
+ a[0] * (b[1] * c[2] - b[2] * c[1]) +
132
+ a[1] * (b[2] * c[0] - b[0] * c[2]) +
133
+ a[2] * (b[0] * c[1] - b[1] * c[0]);
134
+ }
135
+ return volume < 0n ? -1 : volume > 0n ? 1 : 0;
136
+ }
137
+ /** Internal material decomposition; inward boundary shells stay with their enclosing exterior. */
138
+ export function solidMaterialComponents(scope, solid, limits) {
139
+ assertNativeSolidStatus(solid, "components");
140
+ assertMeshAllocationWithinLimits(Math.max(solid.numVert(), solid.numPropVert()), solid.numTri(), solid.numPropVert() * (solid.numProp() + 3) * 4 + solid.numTri() * 12, "components", limits);
141
+ const shells = solid.decompose().map((shell) => ownScopedManifoldValue(scope, shell));
142
+ const boundaries = shells
143
+ .map((shell) => ({ shell, volume: shell.volume(), bounds: shell.boundingBox() }))
144
+ .filter(({ bounds }) => {
145
+ // Coplanar Boolean contact can leave native boundary shells without any material.
146
+ // Exact collapsed native bounds identify axis-aligned contacts cheaply. Do not
147
+ // use volume, an epsilon or Float32 mesh tests: any of them could
148
+ // discard a thin positive piece or an inward shell enclosing a real cavity.
149
+ return bounds.min.every((value, axis) => value !== bounds.max[axis]);
150
+ })
151
+ .map((entry) => ({
152
+ ...entry,
153
+ orientation: certifiedNativeOrientation(entry.volume, entry.bounds, entry.shell.numTri()),
154
+ }));
155
+ const uncertain = boundaries.filter(({ orientation }) => orientation === undefined);
156
+ if (uncertain.length > 0) {
157
+ let vertices = 0;
158
+ let properties = 0;
159
+ let triangles = 0;
160
+ let bytes = 0;
161
+ for (const { shell } of uncertain) {
162
+ vertices += shell.numVert();
163
+ properties += shell.numPropVert();
164
+ triangles += shell.numTri();
165
+ bytes +=
166
+ shell.numVert() * 24 +
167
+ shell.numPropVert() * (shell.numProp() + 4) * 4 +
168
+ shell.numTri() * 12;
169
+ }
170
+ assertMeshAllocationWithinLimits(Math.max(vertices, properties), triangles, bytes, "components", limits);
171
+ }
172
+ const meshes = new Map();
173
+ let observedVertices = 0;
174
+ let observedProperties = 0;
175
+ let observedTriangles = 0;
176
+ let observedBytes = 0;
177
+ const meshFor = (shell) => {
178
+ const cached = meshes.get(shell);
179
+ if (cached !== undefined)
180
+ return cached;
181
+ const vertices = observedVertices + shell.numVert();
182
+ const properties = observedProperties + shell.numPropVert();
183
+ const triangles = observedTriangles + shell.numTri();
184
+ const bytes = observedBytes +
185
+ shell.numVert() * 24 +
186
+ shell.numPropVert() * (shell.numProp() + 4) * 4 +
187
+ shell.numTri() * 12;
188
+ assertMeshAllocationWithinLimits(Math.max(vertices, properties), triangles, bytes, "components", limits);
189
+ const mesh = nativeShellMesh(scope, shell, limits);
190
+ meshes.set(shell, mesh);
191
+ observedVertices = vertices;
192
+ observedProperties = properties;
193
+ observedTriangles = triangles;
194
+ observedBytes = bytes;
195
+ return mesh;
196
+ };
197
+ const entries = boundaries
198
+ .map((entry) => ({
199
+ ...entry,
200
+ orientation: entry.orientation ?? nativeShellOrientation(meshFor(entry.shell)),
201
+ }))
202
+ .filter(({ orientation }) => orientation !== 0);
203
+ let tests = 0;
204
+ const spend = (count = 1) => {
205
+ tests += count;
206
+ if (tests > MAXIMUM_CONTAINMENT_TESTS)
207
+ throw new GeometryError("COMPLEXITY_LIMIT", "Material component containment exceeds its work ceiling.", {
208
+ operation: "components",
209
+ details: { required: tests, allowed: MAXIMUM_CONTAINMENT_TESTS },
210
+ });
211
+ };
212
+ const exteriors = entries.filter(({ orientation }) => orientation > 0);
213
+ const cavities = entries.filter(({ orientation }) => orientation < 0);
214
+ if (exteriors.length === 0)
215
+ return Object.freeze([]);
216
+ if (cavities.length === 0)
217
+ return Object.freeze(exteriors.map(({ shell }) => shell));
218
+ const pointAt = (mesh, index) => {
219
+ const offset = mesh.vertexIndices[index] * 3;
220
+ return [
221
+ mesh.coordinates[offset],
222
+ mesh.coordinates[offset + 1],
223
+ mesh.coordinates[offset + 2],
224
+ ];
225
+ };
226
+ const candidates = [...exteriors].sort((left, right) => Math.abs(left.volume) - Math.abs(right.volume));
227
+ const enclosingExterior = (entry) => {
228
+ return candidates.find((candidate) => {
229
+ spend();
230
+ if (candidate === entry ||
231
+ entry.bounds.min.some((value, axis) => value < candidate.bounds.min[axis]) ||
232
+ entry.bounds.max.some((value, axis) => value > candidate.bounds.max[axis]))
233
+ return false;
234
+ const childMesh = meshFor(entry.shell);
235
+ const point = pointAt(childMesh, childMesh.triangles[0]);
236
+ const mesh = meshFor(candidate.shell);
237
+ let angle = 0;
238
+ for (let triangle = 0; triangle < mesh.triangles.length; triangle += 3) {
239
+ spend();
240
+ angle += triangleSolidAngle(point, [
241
+ pointAt(mesh, mesh.triangles[triangle]),
242
+ pointAt(mesh, mesh.triangles[triangle + 1]),
243
+ pointAt(mesh, mesh.triangles[triangle + 2]),
244
+ ]);
245
+ }
246
+ return Math.abs(angle) > 2 * Math.PI;
247
+ });
248
+ };
249
+ const module = scopedManifoldModule(scope);
250
+ const enclosedCavities = cavities.map((cavity) => ({
251
+ cavity,
252
+ parent: enclosingExterior(cavity),
253
+ }));
254
+ const orphanedCavity = enclosedCavities.some(({ parent }) => parent === undefined);
255
+ if (exteriors.length === 1 && entries.length === shells.length && !orphanedCavity)
256
+ return Object.freeze([solid]);
257
+ if (entries.length !== shells.length || orphanedCavity) {
258
+ // Selecting from the original would retain contact sheets inside a sealed cavity.
259
+ // Rebuild only this exceptional case from its material boundaries. The JS kernel's
260
+ // compose aliases union, so turn inward shells into positive native cutters instead.
261
+ const cutters = new Map(exteriors.map(({ shell }) => [shell, []]));
262
+ for (const { cavity, parent } of enclosedCavities) {
263
+ // An inward shell removes positive occupancy only inside an exterior. A lone
264
+ // inward contact remnant cannot define a bounded piece of material.
265
+ if (parent === undefined)
266
+ continue;
267
+ // Warp preserves winding while native mirror reverses it. The two exact X sign
268
+ // changes restore all Float64 coordinates without a mesh round-trip or tolerance.
269
+ spend(cavity.shell.numVert());
270
+ const reflected = ownScopedManifoldValue(scope, cavity.shell.warpBatch((vertices, count) => {
271
+ for (let vertex = 0; vertex < count; vertex++) {
272
+ vertices[vertex * 3] = -vertices[vertex * 3];
273
+ }
274
+ }));
275
+ const cutter = ownScopedManifoldValue(scope, reflected.mirror([1, 0, 0]));
276
+ assertNativeSolidStatus(cutter, "components");
277
+ cutters.get(parent.shell).push(cutter);
278
+ }
279
+ return Object.freeze(exteriors.map(({ shell }) => {
280
+ const holes = cutters.get(shell);
281
+ const component = holes.length === 0
282
+ ? shell
283
+ : ownScopedManifoldValue(scope, module.Manifold.difference([shell, ...holes]));
284
+ assertNativeSolidStatus(component, "components");
285
+ return component;
286
+ }));
287
+ }
288
+ const children = new Map(exteriors.map(({ shell }) => [shell, []]));
289
+ for (const exterior of exteriors) {
290
+ const parent = enclosingExterior(exterior);
291
+ if (parent !== undefined)
292
+ children.get(parent.shell).push(exterior.shell);
293
+ }
294
+ // The JS kernel aliases compose to union, which fills independently supplied inward shells.
295
+ // Select from the original material instead, retaining its native precision and cavity winding.
296
+ return Object.freeze(exteriors.map(({ shell }) => {
297
+ const selected = ownScopedManifoldValue(scope, solid.intersect(shell));
298
+ const nested = children.get(shell);
299
+ const component = nested.length === 0
300
+ ? selected
301
+ : ownScopedManifoldValue(scope, module.Manifold.difference([selected, ...nested]));
302
+ assertNativeSolidStatus(component, "components");
303
+ return component;
304
+ }));
305
+ }
@@ -2,7 +2,8 @@ import { GeometryError } from "../../geometry/errors.js";
2
2
  import { contourContainsPoint, normalizeContour, normalizeRegion, signedContourArea, } from "../../geometry/regions.js";
3
3
  import { assertSamplingCount, resolveGeometrySamplingLimits, } from "../../geometry/sampling-limits.js";
4
4
  import { assertScopedManifoldValue, ownScopedManifoldValue, scopedManifoldModule, } from "./context.js";
5
- const MAX_AGGREGATE_CONTOURS = 25_000;
5
+ /** @internal One contour ceiling shared with authored input normalization preflights. */
6
+ export const MAX_AGGREGATE_CONTOURS = 25_000;
6
7
  const assertRegionBounds = (regions, operation, limits = {}) => {
7
8
  const hasArrayShape = Array.isArray(regions);
8
9
  if (!hasArrayShape) {
@@ -1,10 +1,10 @@
1
- import { buildHelicalThreadRidgeMesh, buildHelicalThreadSolidMesh, } from "../../geometry/mechanical/index.js";
1
+ import { helicalThreadRidgeMesh, helicalThreadSolidMesh } from "../../geometry/mechanical/index.js";
2
2
  import { resolveCompensatedThreadSolidMesh, resolveThreadedNutSolid, } from "../../geometry/mechanical/thread-solids.js";
3
3
  import { triangleMeshToManifold } from "./adapter.js";
4
4
  export { preflightThreadedRodSolid, preflightInternalThreadCutterSolid, preflightThreadedNutSolid, } from "../../geometry/mechanical/thread-solids.js";
5
5
  /** Converts the runtime-neutral ridge mesh into a scope-owned Manifold solid. */
6
6
  export function threadRidgeSolid(module, options, scope) {
7
- return triangleMeshToManifold(module, buildHelicalThreadRidgeMesh(options), scope);
7
+ return triangleMeshToManifold(module, helicalThreadRidgeMesh(options), scope);
8
8
  }
9
9
  const compensatedThreadSolid = (module, options, role, scope) => {
10
10
  const resolved = resolveCompensatedThreadSolidMesh(options, role);
@@ -12,7 +12,7 @@ const compensatedThreadSolid = (module, options, role, scope) => {
12
12
  };
13
13
  const compensatedThreadSolidFromResolved = (module, resolved, scope) => {
14
14
  const { axialExtension, meshOptions } = resolved;
15
- const combined = triangleMeshToManifold(module, buildHelicalThreadSolidMesh(meshOptions), scope);
15
+ const combined = triangleMeshToManifold(module, helicalThreadSolidMesh(meshOptions), scope);
16
16
  return axialExtension === 0 ? combined : scope.own(combined.translate([0, 0, -axialExtension]));
17
17
  };
18
18
  /** Creates a compensated, scope-owned external threaded rod along +Z. */
@@ -1,4 +1,4 @@
1
- import { attachTransform } from "../../geometry/anchors.js";
1
+ import { attachmentTransform3 } from "../../geometry/anchors.js";
2
2
  import { GeometryError } from "../../geometry/errors.js";
3
3
  import { assertScopedManifoldValue, ownScopedManifoldValue, } from "./context.js";
4
4
  const finiteVector = (value, name, operation) => {
@@ -33,7 +33,12 @@ export function rotate(context, solid, xyzDegrees) {
33
33
  export function scale(context, solid, factors) {
34
34
  assertScopedManifoldValue(context, solid);
35
35
  const values = typeof factors === "number" ? [factors] : factors;
36
- if (!values.every(Number.isFinite) || values.some((value) => value === 0)) {
36
+ if (!values.every(Number.isFinite)) {
37
+ throw new GeometryError("NON_FINITE_VALUE", "Scale factors must be finite.", {
38
+ operation: "scale",
39
+ });
40
+ }
41
+ if (values.some((value) => value === 0)) {
37
42
  throw new GeometryError("SINGULAR_TRANSFORM", "Scale factors must be finite and non-zero.", {
38
43
  operation: "scale",
39
44
  });
@@ -95,17 +100,15 @@ export function transform(context, solid, matrix) {
95
100
  }
96
101
  /** Moves a local source anchor onto a world-space target anchor. */
97
102
  export function attach(context, solid, source, target, options = {}) {
98
- if (options.spinDegrees !== undefined && !Number.isFinite(options.spinDegrees)) {
99
- throw new GeometryError("NON_FINITE_VALUE", "spinDegrees must be finite.", {
103
+ if (options.spin !== undefined && !Number.isFinite(options.spin)) {
104
+ throw new GeometryError("NON_FINITE_VALUE", "spin must be finite.", {
100
105
  operation: "attach",
101
106
  });
102
107
  }
103
- return transform(context, solid, attachTransform(source, target, {
108
+ return transform(context, solid, attachmentTransform3(source, target, {
104
109
  ...(options.alignment === undefined ? {} : { alignment: options.alignment }),
105
110
  ...(options.gap === undefined ? {} : { gap: options.gap }),
106
- ...(options.spinDegrees === undefined
107
- ? {}
108
- : { spinRadians: (options.spinDegrees * Math.PI) / 180 }),
111
+ ...(options.spin === undefined ? {} : { spin: options.spin }),
109
112
  ...(options.tolerance === undefined ? {} : { tolerance: options.tolerance }),
110
113
  }));
111
114
  }
@@ -9,8 +9,8 @@ export function createOperationEnvironment(owner, resolution) {
9
9
  ...value,
10
10
  resolution: {
11
11
  ...resolution,
12
- maximumSegments: Math.min(resolution.maximumSegments ?? limits.maxCircularSegments, limits.maxCircularSegments),
13
- minimumSegments: Math.min(resolution.minimumSegments ?? 16, limits.maxCircularSegments),
12
+ maxSegments: Math.min(resolution.maxSegments ?? limits.maxCircularSegments, limits.maxCircularSegments),
13
+ minSegments: Math.min(resolution.minSegments ?? 16, limits.maxCircularSegments),
14
14
  ...value.resolution,
15
15
  },
16
16
  limits,
@@ -1,7 +1,7 @@
1
1
  import { gridPatternPlan, linearPatternPlan, pathPatternPlan, radialPatternPlan, } from "../geometry/patterns/placements.js";
2
2
  import { assertSamplingCount } from "../geometry/sampling-limits.js";
3
+ import { restrictTransform3 } from "../geometry/transform2.js";
3
4
  import { IDENTITY_TRANSFORM3 } from "../geometry/transform3.js";
4
- import { sectionPatternTransform } from "./pattern-transform.js";
5
5
  /** Private pattern owner; all copies use the shared transform/metadata/lifetime path. */
6
6
  export function createPatternOperations(environment, transforms) {
7
7
  const apply = (source, makePlan, operation) => {
@@ -28,11 +28,11 @@ export function createPatternOperations(environment, transforms) {
28
28
  const shape = typeof source === "function" ? source(index) : source;
29
29
  if (typeof source === "function")
30
30
  budget(shape, 1);
31
- const matrix = plan.transformAt(index);
31
+ const matrix = plan.transformAt(index, kind === "section" ? 2 : 3);
32
32
  copies.push(matrix.every((value, i) => value === IDENTITY_TRANSFORM3[i])
33
33
  ? shape
34
34
  : kind === "section"
35
- ? transforms.operations.transform(shape, sectionPatternTransform(matrix, operation))
35
+ ? transforms.operations.transform(shape, restrictTransform3(matrix))
36
36
  : transforms.operations.transform(shape, matrix));
37
37
  }
38
38
  return copies;
@@ -1,5 +1,5 @@
1
1
  import { validateAnalyzedSolidMesh } from "../geometry/mesh/mesh-solid.js";
2
- import { measureTriangleMesh } from "../geometry/mesh/mesh.js";
2
+ import { analyzeTriangleMesh } from "../geometry/mesh/mesh.js";
3
3
  import { composeTransform3, eulerTransform3, translationTransform3, } from "../geometry/transform3.js";
4
4
  /** Places already validated immutable geometry once, retaining its indexed topology. */
5
5
  export function placeFinalizedGeometry(source, position, rotation, meshValidation) {
@@ -16,7 +16,7 @@ export function placeFinalizedGeometry(source, position, rotation, meshValidatio
16
16
  const mesh = { positions, indices: source.indices };
17
17
  // Rigid placement preserves indexed connectivity. Measure actual Float32 world output to keep
18
18
  // exact bounds/volume/area without another topology or kernel pass under the default policy.
19
- const measurements = Object.freeze({ ...source.measurements, ...measureTriangleMesh(mesh) });
19
+ const measurements = Object.freeze({ ...source.measurements, ...analyzeTriangleMesh(mesh) });
20
20
  // Float32 placement can close gaps between shells even when the local mesh passed validation.
21
21
  if (meshValidation === "solid")
22
22
  validateAnalyzedSolidMesh(mesh, measurements);
@@ -1,4 +1,4 @@
1
- import { boxAnchor3, createAnchor3 } from "../geometry/anchors.js";
1
+ import { anchor3, boxAnchor3 } from "../geometry/anchors.js";
2
2
  import { resolveCylinderRadii } from "../geometry/cylinder.js";
3
3
  const faces = ["left", "right", "back", "front", "bottom", "top"];
4
4
  /** Nominal primitive datums; construction validates dimensions before these factories run. */
@@ -6,7 +6,7 @@ export function boxAnchors(options) {
6
6
  const size = typeof options.size === "number" ? [options.size, options.size, options.size] : options.size;
7
7
  const center = options.center === false ? [size[0] / 2, size[1] / 2, size[2] / 2] : [0, 0, 0];
8
8
  return {
9
- center: createAnchor3(center, [0, 0, 1]),
9
+ center: anchor3(center, [0, 0, 1]),
10
10
  ...Object.fromEntries(faces.map((face) => [
11
11
  face,
12
12
  boxAnchor3({
@@ -24,13 +24,13 @@ function axialAnchors(radii, height, centered) {
24
24
  const radius = (radii[0] + radii[1]) / 2;
25
25
  const slope = (radii[1] - radii[0]) / height;
26
26
  return {
27
- center: createAnchor3([0, 0, middle], [0, 0, 1]),
28
- ...(radii[0] === 0 ? {} : { bottom: createAnchor3([0, 0, bottom], [0, 0, -1]) }),
29
- ...(radii[1] === 0 ? {} : { top: createAnchor3([0, 0, bottom + height], [0, 0, 1]) }),
30
- right: createAnchor3([radius, 0, middle], [1, 0, -slope], [0, 0, 1]),
31
- left: createAnchor3([-radius, 0, middle], [-1, 0, -slope], [0, 0, 1]),
32
- front: createAnchor3([0, radius, middle], [0, 1, -slope], [0, 0, 1]),
33
- back: createAnchor3([0, -radius, middle], [0, -1, -slope], [0, 0, 1]),
27
+ center: anchor3([0, 0, middle], [0, 0, 1]),
28
+ ...(radii[0] === 0 ? {} : { bottom: anchor3([0, 0, bottom], [0, 0, -1]) }),
29
+ ...(radii[1] === 0 ? {} : { top: anchor3([0, 0, bottom + height], [0, 0, 1]) }),
30
+ right: anchor3([radius, 0, middle], [1, 0, -slope], [0, 0, 1]),
31
+ left: anchor3([-radius, 0, middle], [-1, 0, -slope], [0, 0, 1]),
32
+ front: anchor3([0, radius, middle], [0, 1, -slope], [0, 0, 1]),
33
+ back: anchor3([0, -radius, middle], [0, -1, -slope], [0, 0, 1]),
34
34
  };
35
35
  }
36
36
  /** Cylinder and frustum cap anchors omit an end whose nominal radius is zero. */
@@ -55,16 +55,16 @@ export function torusAnchors(options) {
55
55
  export function planarAnchors(size, centered = true) {
56
56
  const x = centered ? 0 : size[0] / 2, y = centered ? 0 : size[1] / 2;
57
57
  return {
58
- center: createAnchor3([x, y, 0], [0, 0, 1]),
59
- top: createAnchor3([x, y, 0], [0, 0, 1]),
60
- bottom: createAnchor3([x, y, 0], [0, 0, -1]),
61
- right: createAnchor3([x + size[0] / 2, y, 0], [1, 0, 0], [0, 0, 1]),
62
- left: createAnchor3([x - size[0] / 2, y, 0], [-1, 0, 0], [0, 0, 1]),
63
- front: createAnchor3([x, y + size[1] / 2, 0], [0, 1, 0], [0, 0, 1]),
64
- back: createAnchor3([x, y - size[1] / 2, 0], [0, -1, 0], [0, 0, 1]),
58
+ center: anchor3([x, y, 0], [0, 0, 1]),
59
+ top: anchor3([x, y, 0], [0, 0, 1]),
60
+ bottom: anchor3([x, y, 0], [0, 0, -1]),
61
+ right: anchor3([x + size[0] / 2, y, 0], [1, 0, 0], [0, 0, 1]),
62
+ left: anchor3([x - size[0] / 2, y, 0], [-1, 0, 0], [0, 0, 1]),
63
+ front: anchor3([x, y + size[1] / 2, 0], [0, 1, 0], [0, 0, 1]),
64
+ back: anchor3([x, y - size[1] / 2, 0], [0, -1, 0], [0, 0, 1]),
65
65
  };
66
66
  }
67
67
  /** A construction-origin reference for primitives without meaningful principal side datums. */
68
68
  export const originAnchor = () => ({
69
- center: createAnchor3([0, 0, 0], [0, 0, 1]),
69
+ center: anchor3([0, 0, 0], [0, 0, 1]),
70
70
  });
@@ -137,7 +137,7 @@ export function createPrimitiveOperations(environment, transforms, sections) {
137
137
  return environment.rememberPrimitiveProfile(section, polygonSectionProfile(`polygon-${value.sides}`, loop, resolved.resolution, resolved.limits));
138
138
  }),
139
139
  star: (value) => placedSection(value, () => {
140
- const angle = (validateFiniteNumber(value.rotationDegrees ?? 0, "star") * Math.PI) / 180;
140
+ const angle = (validateFiniteNumber(value.rotation ?? 0, "star") * Math.PI) / 180;
141
141
  const resolved = withResolutionDefaults(value);
142
142
  const loop = starContour(value.outerRadius, value.points, value.innerRadius, resolved.limits).map(([x, y]) => [
143
143
  x * Math.cos(angle) - y * Math.sin(angle),
@@ -44,8 +44,8 @@ export function ellipticalSectionProfile(radii, options, resolution, limits, fac
44
44
  kind: "arc",
45
45
  center: [0, 0],
46
46
  radius,
47
- startDegrees: 0,
48
- sweepDegrees: 360,
47
+ startAngle: 0,
48
+ sweepAngle: 360,
49
49
  ...(segments === undefined ? {} : { segments }),
50
50
  },
51
51
  ],
@@ -181,15 +181,16 @@ export function correspondingPrimitiveProfiles(sources, options, limits) {
181
181
  const policy = source.spanResolution?.[span.id] ?? source.resolution;
182
182
  const original = resolveGeometryResolution({
183
183
  ...policy,
184
- maximumSegments: Math.min(policy.maximumSegments ?? selected.maxCircularSegments, selected.maxCircularSegments),
185
- minimumSegments: Math.min(policy.minimumSegments ?? 16, selected.maxCircularSegments),
184
+ maxSegments: Math.min(policy.maxSegments ?? selected.maxCircularSegments, selected.maxCircularSegments),
185
+ minSegments: Math.min(policy.minSegments ?? 16, selected.maxCircularSegments),
186
186
  }, selected);
187
187
  const edgeLength = Math.min(original.maxSegmentLength ?? Infinity, target.maxSegmentLength ?? Infinity) /
188
188
  scale;
189
189
  const resolution = {
190
+ sizing: source.faceSizing ? "face" : "vertex",
190
191
  maxChordError: Math.min(original.maxChordError, target.maxChordError) / scale,
191
- maximumSegments: Math.min(original.maximumSegments, target.maximumSegments),
192
- minimumSegments: Math.min(Math.max(original.minimumSegments, target.minimumSegments), Math.min(original.maximumSegments, target.maximumSegments)),
192
+ maxSegments: Math.min(original.maxSegments, target.maxSegments),
193
+ minSegments: Math.min(Math.max(original.minSegments, target.minSegments), Math.min(original.maxSegments, target.maxSegments)),
193
194
  ...(Number.isFinite(edgeLength) ? { maxSegmentLength: edgeLength } : {}),
194
195
  ...(target.circularSegments === undefined
195
196
  ? {}
@@ -198,7 +199,7 @@ export function correspondingPrimitiveProfiles(sources, options, limits) {
198
199
  const segments = span.kind === "arc"
199
200
  ? span.radius === 0
200
201
  ? 1
201
- : resolveArcSegments(span.radius, Math.abs(span.sweepDegrees), resolution, selected)
202
+ : resolveArcSegments(span.radius, Math.abs(span.sweepAngle), resolution, selected)
202
203
  : span.kind === "line"
203
204
  ? resolveLineSegmentCount(Math.hypot(span.end[0] - span.start[0], span.end[1] - span.start[1]), resolution.maxSegmentLength)
204
205
  : resolveUniformCubicSegments(planarCubicControl(span), resolveGeometryResolution(resolution, selected), selected.maxProfilePoints);
@@ -42,12 +42,12 @@ function profileMeshAllocation(first, stationCount, limits, closed) {
42
42
  fail("Matched contours require at least three logical points and paired span identities.");
43
43
  logicalCount += contour.points.length;
44
44
  }
45
- const maximumVertices = logicalCount * stationCount;
45
+ const maxVertices = logicalCount * stationCount;
46
46
  const capTriangles = 2 * (logicalCount + firstContours.length * 2);
47
47
  const maximumTriangles = (closed ? stationCount : stationCount - 1) * logicalCount * 2 + (closed ? 0 : capTriangles);
48
48
  assertSamplingCount(logicalCount, "loft", limits.maxProfilePoints);
49
- assertMeshAllocationWithinLimits(maximumVertices, maximumTriangles, 12 * (maximumVertices + maximumTriangles), "loft", limits);
50
- return { firstContours, maximumVertices, maximumTriangles };
49
+ assertMeshAllocationWithinLimits(maxVertices, maximumTriangles, 12 * (maxVertices + maximumTriangles), "loft", limits);
50
+ return { firstContours, maxVertices, maximumTriangles };
51
51
  }
52
52
  /** Internal native hole-cap triangulation over copied, explicit matched logical slots. */
53
53
  export function buildProfileLoftMesh(module, stations, limits, closed = false, seamProfileOffset = 0, positionFor) {
@@ -55,8 +55,8 @@ export function buildProfileLoftMesh(module, stations, limits, closed = false, s
55
55
  fail("Profile lofts require a bounded station array with two stations, or three for a closed path.");
56
56
  assertSamplingCount(stations.length, "loft", limits.maxPathPoints);
57
57
  const first = stations[0].profile;
58
- const { firstContours, maximumVertices, maximumTriangles } = profileMeshAllocation(first, stations.length, limits, closed);
59
- const positions = new Float32Array(maximumVertices * 3);
58
+ const { firstContours, maxVertices, maximumTriangles } = profileMeshAllocation(first, stations.length, limits, closed);
59
+ const positions = new Float32Array(maxVertices * 3);
60
60
  const indices = new Uint32Array(maximumTriangles * 3);
61
61
  let vertexCount = 0, cursor = 0;
62
62
  const physicalStations = stations.map((station, stationIndex) => {
@@ -205,9 +205,9 @@ export function buildProfileSweepMesh(module, profile, inputPath, options, limit
205
205
  assertSamplingCount(contourList(profile).reduce((count, contour) => count + contour.points.length, 0), "sweep", limits.maxSweepProfilePoints);
206
206
  profileMeshAllocation(profile, path.length, limits, closed);
207
207
  let scales = resolveSweepScales(options.scale, path.length);
208
- const twist = options.twistDegrees ?? 0;
208
+ const twist = options.twist ?? 0;
209
209
  if (!Number.isFinite(twist))
210
- fail("Sweep twistDegrees must be finite.");
210
+ fail("Sweep twist must be finite.");
211
211
  const seamProfileOffset = options.seamProfileOffset ?? 0;
212
212
  if (!Number.isSafeInteger(seamProfileOffset) || (!closed && seamProfileOffset !== 0))
213
213
  fail("A finite integer seamProfileOffset requires a closed path.");