chili3d 0.6.1

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 (472) hide show
  1. package/.github/workflows/main.yml +26 -0
  2. package/.vscode/c_cpp_properties.json +30 -0
  3. package/.vscode/launch.json +21 -0
  4. package/.vscode/settings.json +8 -0
  5. package/Dockerfile +7 -0
  6. package/LICENSE +661 -0
  7. package/README.md +184 -0
  8. package/biome.json +67 -0
  9. package/compose.yml +7 -0
  10. package/cpp/CMakeLists.txt +96 -0
  11. package/cpp/CMakePresets.json +43 -0
  12. package/cpp/README.md +21 -0
  13. package/cpp/src/converter.cpp +413 -0
  14. package/cpp/src/factory.cpp +612 -0
  15. package/cpp/src/geometry.cpp +204 -0
  16. package/cpp/src/mesher.cpp +330 -0
  17. package/cpp/src/opencascade.cpp +414 -0
  18. package/cpp/src/shape.cpp +447 -0
  19. package/cpp/src/shared.cpp +83 -0
  20. package/cpp/src/shared.hpp +211 -0
  21. package/cpp/src/transient.cpp +29 -0
  22. package/cpp/src/utils.cpp +114 -0
  23. package/cpp/src/utils.hpp +25 -0
  24. package/cpp/test/index.html +146 -0
  25. package/package.json +49 -0
  26. package/packages/chili/package.json +11 -0
  27. package/packages/chili/src/application.ts +200 -0
  28. package/packages/chili/src/bodys/arc.ts +61 -0
  29. package/packages/chili/src/bodys/boolean.ts +32 -0
  30. package/packages/chili/src/bodys/box.ts +73 -0
  31. package/packages/chili/src/bodys/circle.ts +57 -0
  32. package/packages/chili/src/bodys/cone.ts +64 -0
  33. package/packages/chili/src/bodys/cylinder.ts +69 -0
  34. package/packages/chili/src/bodys/ellipse.ts +85 -0
  35. package/packages/chili/src/bodys/face.ts +72 -0
  36. package/packages/chili/src/bodys/fuse.ts +44 -0
  37. package/packages/chili/src/bodys/index.ts +16 -0
  38. package/packages/chili/src/bodys/line.ts +48 -0
  39. package/packages/chili/src/bodys/polygon.ts +40 -0
  40. package/packages/chili/src/bodys/prism.ts +49 -0
  41. package/packages/chili/src/bodys/pyramid.ts +64 -0
  42. package/packages/chili/src/bodys/rect.ts +69 -0
  43. package/packages/chili/src/bodys/revolve.ts +54 -0
  44. package/packages/chili/src/bodys/sphere.ts +48 -0
  45. package/packages/chili/src/bodys/sweep.ts +67 -0
  46. package/packages/chili/src/bodys/wire.ts +36 -0
  47. package/packages/chili/src/commands/application/index.ts +10 -0
  48. package/packages/chili/src/commands/application/newDocument.ts +17 -0
  49. package/packages/chili/src/commands/application/openDocument.ts +35 -0
  50. package/packages/chili/src/commands/application/performanceTest.ts +64 -0
  51. package/packages/chili/src/commands/application/saveDocument.ts +24 -0
  52. package/packages/chili/src/commands/application/toFile.ts +35 -0
  53. package/packages/chili/src/commands/application/toggleDynamicWorkplane.ts +15 -0
  54. package/packages/chili/src/commands/application/wechatGroup.ts +42 -0
  55. package/packages/chili/src/commands/boolean.ts +109 -0
  56. package/packages/chili/src/commands/create/arc.ts +110 -0
  57. package/packages/chili/src/commands/create/bezier.ts +116 -0
  58. package/packages/chili/src/commands/create/box.ts +59 -0
  59. package/packages/chili/src/commands/create/circle.ts +54 -0
  60. package/packages/chili/src/commands/create/cone.ts +104 -0
  61. package/packages/chili/src/commands/create/converter.ts +159 -0
  62. package/packages/chili/src/commands/create/copySubShape.ts +37 -0
  63. package/packages/chili/src/commands/create/curveProjection.ts +61 -0
  64. package/packages/chili/src/commands/create/cylinder.ts +96 -0
  65. package/packages/chili/src/commands/create/ellipse.ts +95 -0
  66. package/packages/chili/src/commands/create/group.ts +205 -0
  67. package/packages/chili/src/commands/create/index.ts +26 -0
  68. package/packages/chili/src/commands/create/line.ts +61 -0
  69. package/packages/chili/src/commands/create/loft.ts +149 -0
  70. package/packages/chili/src/commands/create/offset.ts +131 -0
  71. package/packages/chili/src/commands/create/polygon.ts +104 -0
  72. package/packages/chili/src/commands/create/prism.ts +52 -0
  73. package/packages/chili/src/commands/create/pyramid.ts +56 -0
  74. package/packages/chili/src/commands/create/rect.ts +105 -0
  75. package/packages/chili/src/commands/create/revolve.ts +62 -0
  76. package/packages/chili/src/commands/create/section.ts +31 -0
  77. package/packages/chili/src/commands/create/sphere.ts +48 -0
  78. package/packages/chili/src/commands/create/sweep.ts +39 -0
  79. package/packages/chili/src/commands/create/thickSolid.ts +50 -0
  80. package/packages/chili/src/commands/createActCommand.ts +26 -0
  81. package/packages/chili/src/commands/createCommand.ts +41 -0
  82. package/packages/chili/src/commands/delete.ts +38 -0
  83. package/packages/chili/src/commands/folder.ts +18 -0
  84. package/packages/chili/src/commands/importExport.ts +97 -0
  85. package/packages/chili/src/commands/index.ts +17 -0
  86. package/packages/chili/src/commands/measure/angle.ts +130 -0
  87. package/packages/chili/src/commands/measure/index.ts +6 -0
  88. package/packages/chili/src/commands/measure/length.ts +57 -0
  89. package/packages/chili/src/commands/measure/select.module.css +68 -0
  90. package/packages/chili/src/commands/measure/select.ts +228 -0
  91. package/packages/chili/src/commands/modify/array.ts +447 -0
  92. package/packages/chili/src/commands/modify/break.ts +78 -0
  93. package/packages/chili/src/commands/modify/brush.ts +100 -0
  94. package/packages/chili/src/commands/modify/chamfer.ts +70 -0
  95. package/packages/chili/src/commands/modify/explode.ts +91 -0
  96. package/packages/chili/src/commands/modify/fillet.ts +69 -0
  97. package/packages/chili/src/commands/modify/index.ts +16 -0
  98. package/packages/chili/src/commands/modify/mirror.ts +49 -0
  99. package/packages/chili/src/commands/modify/move.ts +39 -0
  100. package/packages/chili/src/commands/modify/removeFeature.ts +56 -0
  101. package/packages/chili/src/commands/modify/removeSubShapes.ts +44 -0
  102. package/packages/chili/src/commands/modify/rotate.ts +112 -0
  103. package/packages/chili/src/commands/modify/split.ts +81 -0
  104. package/packages/chili/src/commands/modify/transformedCommand.ts +100 -0
  105. package/packages/chili/src/commands/modify/trim.ts +254 -0
  106. package/packages/chili/src/commands/multistepCommand.ts +125 -0
  107. package/packages/chili/src/commands/redo.ts +16 -0
  108. package/packages/chili/src/commands/undo.ts +16 -0
  109. package/packages/chili/src/commands/workingPlane.ts +150 -0
  110. package/packages/chili/src/comparers/NumberEqualityComparer.ts +12 -0
  111. package/packages/chili/src/comparers/XYZEqualityComparer.ts +12 -0
  112. package/packages/chili/src/comparers/index.ts +5 -0
  113. package/packages/chili/src/document.ts +145 -0
  114. package/packages/chili/src/editEventHandler.ts +20 -0
  115. package/packages/chili/src/index.ts +12 -0
  116. package/packages/chili/src/selection.ts +178 -0
  117. package/packages/chili/src/services/commandService.ts +105 -0
  118. package/packages/chili/src/services/editorService.ts +46 -0
  119. package/packages/chili/src/services/hotkeyService.ts +102 -0
  120. package/packages/chili/src/services/index.ts +6 -0
  121. package/packages/chili/src/snap/dimension.ts +33 -0
  122. package/packages/chili/src/snap/handlers/angleSnapEventHandler.ts +60 -0
  123. package/packages/chili/src/snap/handlers/index.ts +7 -0
  124. package/packages/chili/src/snap/handlers/lengthSnapEventHandler.ts +117 -0
  125. package/packages/chili/src/snap/handlers/pointSnapEventHandler.ts +176 -0
  126. package/packages/chili/src/snap/handlers/snapEventHandler.ts +288 -0
  127. package/packages/chili/src/snap/index.ts +6 -0
  128. package/packages/chili/src/snap/snap.ts +50 -0
  129. package/packages/chili/src/snap/snaps/axisSnap.ts +57 -0
  130. package/packages/chili/src/snap/snaps/baseSnap.ts +69 -0
  131. package/packages/chili/src/snap/snaps/featurePointStrategy.ts +64 -0
  132. package/packages/chili/src/snap/snaps/index.ts +7 -0
  133. package/packages/chili/src/snap/snaps/objectSnap.ts +264 -0
  134. package/packages/chili/src/snap/snaps/planeSnap.ts +55 -0
  135. package/packages/chili/src/snap/snaps/pointOnCurveSnap.ts +24 -0
  136. package/packages/chili/src/snap/tracking/axis.ts +32 -0
  137. package/packages/chili/src/snap/tracking/axisTracking.ts +46 -0
  138. package/packages/chili/src/snap/tracking/index.ts +6 -0
  139. package/packages/chili/src/snap/tracking/objectTracking.ts +90 -0
  140. package/packages/chili/src/snap/tracking/trackingBase.ts +40 -0
  141. package/packages/chili/src/snap/tracking/trackingSnap.ts +201 -0
  142. package/packages/chili/src/step/angleStep.ts +32 -0
  143. package/packages/chili/src/step/index.ts +8 -0
  144. package/packages/chili/src/step/lengthStep.ts +32 -0
  145. package/packages/chili/src/step/pointStep.ts +87 -0
  146. package/packages/chili/src/step/selectStep.ts +130 -0
  147. package/packages/chili/src/step/step.ts +55 -0
  148. package/packages/chili/src/utils.ts +19 -0
  149. package/packages/chili/test/command.test.ts +4 -0
  150. package/packages/chili-builder/package.json +13 -0
  151. package/packages/chili-builder/src/additionalModule.ts +15 -0
  152. package/packages/chili-builder/src/appBuilder.ts +176 -0
  153. package/packages/chili-builder/src/defaultDataExchange.ts +152 -0
  154. package/packages/chili-builder/src/index.ts +5 -0
  155. package/packages/chili-builder/src/ribbon.ts +129 -0
  156. package/packages/chili-controls/package.json +9 -0
  157. package/packages/chili-controls/src/collection.ts +96 -0
  158. package/packages/chili-controls/src/controls.ts +83 -0
  159. package/packages/chili-controls/src/converters/colorConverter.ts +39 -0
  160. package/packages/chili-controls/src/converters/index.ts +8 -0
  161. package/packages/chili-controls/src/converters/numberConverter.ts +15 -0
  162. package/packages/chili-controls/src/converters/stringConverter.ts +13 -0
  163. package/packages/chili-controls/src/converters/urlConverter.ts +10 -0
  164. package/packages/chili-controls/src/converters/xyzConverter.ts +28 -0
  165. package/packages/chili-controls/src/expander/expander.module.css +38 -0
  166. package/packages/chili-controls/src/expander/expander.ts +59 -0
  167. package/packages/chili-controls/src/expander/index.ts +4 -0
  168. package/packages/chili-controls/src/htmlProps.ts +10 -0
  169. package/packages/chili-controls/src/index.ts +10 -0
  170. package/packages/chili-controls/src/radioGroup.module.css +20 -0
  171. package/packages/chili-controls/src/radioGroup.ts +54 -0
  172. package/packages/chili-controls/src/utils.ts +20 -0
  173. package/packages/chili-controls/test/converter.test.ts +70 -0
  174. package/packages/chili-controls/test/styleMock.js +4 -0
  175. package/packages/chili-core/package.json +7 -0
  176. package/packages/chili-core/src/application.ts +38 -0
  177. package/packages/chili-core/src/command/command.ts +154 -0
  178. package/packages/chili-core/src/command/commandKeys.ts +8 -0
  179. package/packages/chili-core/src/command/decarator.ts +43 -0
  180. package/packages/chili-core/src/command/index.ts +6 -0
  181. package/packages/chili-core/src/config.ts +145 -0
  182. package/packages/chili-core/src/constants.ts +8 -0
  183. package/packages/chili-core/src/dataExchange.ts +12 -0
  184. package/packages/chili-core/src/document.ts +25 -0
  185. package/packages/chili-core/src/editor.ts +12 -0
  186. package/packages/chili-core/src/foundation/asyncController.ts +55 -0
  187. package/packages/chili-core/src/foundation/binding.ts +132 -0
  188. package/packages/chili-core/src/foundation/collection.ts +208 -0
  189. package/packages/chili-core/src/foundation/converter.ts +9 -0
  190. package/packages/chili-core/src/foundation/deepObserver.ts +154 -0
  191. package/packages/chili-core/src/foundation/disposable.ts +18 -0
  192. package/packages/chili-core/src/foundation/dto/index.ts +9 -0
  193. package/packages/chili-core/src/foundation/equalityComparer.ts +6 -0
  194. package/packages/chili-core/src/foundation/gc.ts +36 -0
  195. package/packages/chili-core/src/foundation/history.ts +237 -0
  196. package/packages/chili-core/src/foundation/id.ts +25 -0
  197. package/packages/chili-core/src/foundation/index.ts +26 -0
  198. package/packages/chili-core/src/foundation/lazy.ts +18 -0
  199. package/packages/chili-core/src/foundation/linkedList.ts +141 -0
  200. package/packages/chili-core/src/foundation/logger.ts +45 -0
  201. package/packages/chili-core/src/foundation/messageType.ts +8 -0
  202. package/packages/chili-core/src/foundation/objectStorage.ts +50 -0
  203. package/packages/chili-core/src/foundation/observer.ts +147 -0
  204. package/packages/chili-core/src/foundation/precision.ts +8 -0
  205. package/packages/chili-core/src/foundation/pubsub.ts +74 -0
  206. package/packages/chili-core/src/foundation/result.ts +69 -0
  207. package/packages/chili-core/src/foundation/storage.ts +10 -0
  208. package/packages/chili-core/src/foundation/transaction.ts +77 -0
  209. package/packages/chili-core/src/foundation/utils/debounce.ts +15 -0
  210. package/packages/chili-core/src/foundation/utils/download.ts +16 -0
  211. package/packages/chili-core/src/foundation/utils/index.ts +6 -0
  212. package/packages/chili-core/src/foundation/utils/readFileAsync.ts +84 -0
  213. package/packages/chili-core/src/i18n/i18n.ts +107 -0
  214. package/packages/chili-core/src/i18n/index.ts +5 -0
  215. package/packages/chili-core/src/i18n/keys.ts +265 -0
  216. package/packages/chili-core/src/index.ts +26 -0
  217. package/packages/chili-core/src/material.ts +269 -0
  218. package/packages/chili-core/src/math/boundingBox.ts +226 -0
  219. package/packages/chili-core/src/math/index.ts +14 -0
  220. package/packages/chili-core/src/math/line.ts +55 -0
  221. package/packages/chili-core/src/math/lineSegment.ts +166 -0
  222. package/packages/chili-core/src/math/mathUtils.ts +45 -0
  223. package/packages/chili-core/src/math/matrix4.ts +414 -0
  224. package/packages/chili-core/src/math/plane.ts +96 -0
  225. package/packages/chili-core/src/math/planeAngle.ts +53 -0
  226. package/packages/chili-core/src/math/quaternion.ts +131 -0
  227. package/packages/chili-core/src/math/ray.ts +30 -0
  228. package/packages/chili-core/src/math/xy.ts +104 -0
  229. package/packages/chili-core/src/math/xyz.ts +181 -0
  230. package/packages/chili-core/src/model/component.ts +305 -0
  231. package/packages/chili-core/src/model/facebaseNode.ts +17 -0
  232. package/packages/chili-core/src/model/folderNode.ts +289 -0
  233. package/packages/chili-core/src/model/geometryNode.ts +185 -0
  234. package/packages/chili-core/src/model/groupNode.ts +19 -0
  235. package/packages/chili-core/src/model/index.ts +12 -0
  236. package/packages/chili-core/src/model/meshNode.ts +53 -0
  237. package/packages/chili-core/src/model/node.ts +315 -0
  238. package/packages/chili-core/src/model/shapeNode.ts +195 -0
  239. package/packages/chili-core/src/model/visualNode.ts +39 -0
  240. package/packages/chili-core/src/modelManager.ts +147 -0
  241. package/packages/chili-core/src/navigation.ts +58 -0
  242. package/packages/chili-core/src/property.ts +60 -0
  243. package/packages/chili-core/src/selection.ts +33 -0
  244. package/packages/chili-core/src/selectionFilter.ts +28 -0
  245. package/packages/chili-core/src/serialize/index.ts +4 -0
  246. package/packages/chili-core/src/serialize/serializer.ts +231 -0
  247. package/packages/chili-core/src/service.ts +10 -0
  248. package/packages/chili-core/src/shape/curve.ts +174 -0
  249. package/packages/chili-core/src/shape/geometry.ts +17 -0
  250. package/packages/chili-core/src/shape/index.ts +12 -0
  251. package/packages/chili-core/src/shape/lineType.ts +7 -0
  252. package/packages/chili-core/src/shape/meshData.ts +347 -0
  253. package/packages/chili-core/src/shape/shape.ts +104 -0
  254. package/packages/chili-core/src/shape/shapeConverter.ts +17 -0
  255. package/packages/chili-core/src/shape/shapeFactory.ts +58 -0
  256. package/packages/chili-core/src/shape/shapeType.ts +75 -0
  257. package/packages/chili-core/src/shape/surface.ts +154 -0
  258. package/packages/chili-core/src/snapType.ts +32 -0
  259. package/packages/chili-core/src/ui/button.ts +16 -0
  260. package/packages/chili-core/src/ui/combobox.ts +27 -0
  261. package/packages/chili-core/src/ui/dialog.ts +7 -0
  262. package/packages/chili-core/src/ui/index.ts +8 -0
  263. package/packages/chili-core/src/ui/ribbon.ts +15 -0
  264. package/packages/chili-core/src/ui/window.ts +13 -0
  265. package/packages/chili-core/src/visual/act.ts +59 -0
  266. package/packages/chili-core/src/visual/cameraController.ts +22 -0
  267. package/packages/chili-core/src/visual/cursorType.ts +4 -0
  268. package/packages/chili-core/src/visual/detectedData.ts +14 -0
  269. package/packages/chili-core/src/visual/eventHandler.ts +15 -0
  270. package/packages/chili-core/src/visual/highlighter.ts +16 -0
  271. package/packages/chili-core/src/visual/index.ts +20 -0
  272. package/packages/chili-core/src/visual/meshExporter.ts +11 -0
  273. package/packages/chili-core/src/visual/meshUtils.ts +276 -0
  274. package/packages/chili-core/src/visual/textGenerator.ts +8 -0
  275. package/packages/chili-core/src/visual/view.ts +80 -0
  276. package/packages/chili-core/src/visual/viewGizmo.ts +8 -0
  277. package/packages/chili-core/src/visual/viewport.ts +10 -0
  278. package/packages/chili-core/src/visual/visual.ts +24 -0
  279. package/packages/chili-core/src/visual/visualContext.ts +29 -0
  280. package/packages/chili-core/src/visual/visualFactory.ts +10 -0
  281. package/packages/chili-core/src/visual/visualObject.ts +25 -0
  282. package/packages/chili-core/src/visual/visualShape.ts +30 -0
  283. package/packages/chili-core/test/binding.test.ts +95 -0
  284. package/packages/chili-core/test/boundingBox.test.ts +60 -0
  285. package/packages/chili-core/test/collection.test.ts +53 -0
  286. package/packages/chili-core/test/history.test.ts +42 -0
  287. package/packages/chili-core/test/line.test.ts +75 -0
  288. package/packages/chili-core/test/linesegment.test.ts +98 -0
  289. package/packages/chili-core/test/linkedList.test.ts +82 -0
  290. package/packages/chili-core/test/math.test.ts +34 -0
  291. package/packages/chili-core/test/matrix.test.ts +129 -0
  292. package/packages/chili-core/test/node.test.ts +122 -0
  293. package/packages/chili-core/test/nodeList.test.ts +247 -0
  294. package/packages/chili-core/test/observer.test.ts +91 -0
  295. package/packages/chili-core/test/plane.test.ts +31 -0
  296. package/packages/chili-core/test/quaternion.test.ts +14 -0
  297. package/packages/chili-core/test/result.test.ts +24 -0
  298. package/packages/chili-core/test/serializer.test.ts +58 -0
  299. package/packages/chili-core/test/snapType.test.ts +10 -0
  300. package/packages/chili-core/test/task.test.ts +41 -0
  301. package/packages/chili-core/test/testDocument.ts +70 -0
  302. package/packages/chili-core/test/transaction.test.ts +42 -0
  303. package/packages/chili-core/test/visual.test.ts +42 -0
  304. package/packages/chili-core/test/xyz.test.ts +260 -0
  305. package/packages/chili-geo/package.json +9 -0
  306. package/packages/chili-geo/src/index.ts +4 -0
  307. package/packages/chili-geo/src/utils.ts +113 -0
  308. package/packages/chili-i18n/package.json +9 -0
  309. package/packages/chili-i18n/src/en.ts +270 -0
  310. package/packages/chili-i18n/src/index.ts +8 -0
  311. package/packages/chili-i18n/src/pt-br.ts +67 -0
  312. package/packages/chili-i18n/src/zh-cn.ts +269 -0
  313. package/packages/chili-storage/package.json +9 -0
  314. package/packages/chili-storage/src/index.ts +4 -0
  315. package/packages/chili-storage/src/indexedDBStorage.ts +150 -0
  316. package/packages/chili-three/package.json +13 -0
  317. package/packages/chili-three/src/cameraController.ts +335 -0
  318. package/packages/chili-three/src/common.ts +65 -0
  319. package/packages/chili-three/src/constants.ts +12 -0
  320. package/packages/chili-three/src/highlightable.ts +13 -0
  321. package/packages/chili-three/src/index.ts +4 -0
  322. package/packages/chili-three/src/meshExporter.ts +69 -0
  323. package/packages/chili-three/src/outlinePass.js +340 -0
  324. package/packages/chili-three/src/texture_points.jpg +0 -0
  325. package/packages/chili-three/src/threeGeometry.ts +207 -0
  326. package/packages/chili-three/src/threeGeometryFactory.ts +120 -0
  327. package/packages/chili-three/src/threeHelper.ts +174 -0
  328. package/packages/chili-three/src/threeHighlighter.ts +257 -0
  329. package/packages/chili-three/src/threeView.module.css +39 -0
  330. package/packages/chili-three/src/threeView.ts +669 -0
  331. package/packages/chili-three/src/threeViewEventHandler.ts +193 -0
  332. package/packages/chili-three/src/threeVisual.ts +92 -0
  333. package/packages/chili-three/src/threeVisualContext.ts +435 -0
  334. package/packages/chili-three/src/threeVisualFactory.ts +12 -0
  335. package/packages/chili-three/src/threeVisualObject.ts +442 -0
  336. package/packages/chili-three/src/viewGizmo.ts +305 -0
  337. package/packages/chili-three/test/cameraControls.ts +10 -0
  338. package/packages/chili-three/test/testDocument.ts +68 -0
  339. package/packages/chili-three/test/testEdge.ts +171 -0
  340. package/packages/chili-three/test/testView.ts +78 -0
  341. package/packages/chili-three/test/three.test.ts +44 -0
  342. package/packages/chili-three/test/viewGizmo.ts +12 -0
  343. package/packages/chili-ui/package.json +12 -0
  344. package/packages/chili-ui/src/cursor/draw.cur +0 -0
  345. package/packages/chili-ui/src/cursor/index.ts +17 -0
  346. package/packages/chili-ui/src/dialog.module.css +63 -0
  347. package/packages/chili-ui/src/dialog.ts +42 -0
  348. package/packages/chili-ui/src/editor.module.css +83 -0
  349. package/packages/chili-ui/src/editor.ts +142 -0
  350. package/packages/chili-ui/src/home/home.module.css +301 -0
  351. package/packages/chili-ui/src/home/home.ts +243 -0
  352. package/packages/chili-ui/src/home/index.ts +4 -0
  353. package/packages/chili-ui/src/home/languageSelector.ts +27 -0
  354. package/packages/chili-ui/src/home/navigation3DSelector.ts +27 -0
  355. package/packages/chili-ui/src/home/themeSelector.ts +34 -0
  356. package/packages/chili-ui/src/index.ts +5 -0
  357. package/packages/chili-ui/src/mainWindow.module.css +144 -0
  358. package/packages/chili-ui/src/mainWindow.ts +154 -0
  359. package/packages/chili-ui/src/okCancel.module.css +54 -0
  360. package/packages/chili-ui/src/okCancel.ts +58 -0
  361. package/packages/chili-ui/src/permanent.module.css +44 -0
  362. package/packages/chili-ui/src/permanent.ts +31 -0
  363. package/packages/chili-ui/src/project/index.ts +4 -0
  364. package/packages/chili-ui/src/project/projectView.module.css +37 -0
  365. package/packages/chili-ui/src/project/projectView.ts +77 -0
  366. package/packages/chili-ui/src/project/toolBar.module.css +16 -0
  367. package/packages/chili-ui/src/project/toolBar.ts +73 -0
  368. package/packages/chili-ui/src/project/tree/index.ts +5 -0
  369. package/packages/chili-ui/src/project/tree/tree.module.css +16 -0
  370. package/packages/chili-ui/src/project/tree/tree.ts +265 -0
  371. package/packages/chili-ui/src/project/tree/treeItem.module.css +21 -0
  372. package/packages/chili-ui/src/project/tree/treeItem.ts +89 -0
  373. package/packages/chili-ui/src/project/tree/treeItemGroup.module.css +33 -0
  374. package/packages/chili-ui/src/project/tree/treeItemGroup.ts +85 -0
  375. package/packages/chili-ui/src/project/tree/treeModel.module.css +11 -0
  376. package/packages/chili-ui/src/project/tree/treeModel.ts +20 -0
  377. package/packages/chili-ui/src/property/check.ts +39 -0
  378. package/packages/chili-ui/src/property/colorPorperty.module.css +6 -0
  379. package/packages/chili-ui/src/property/colorProperty.ts +63 -0
  380. package/packages/chili-ui/src/property/common.module.css +14 -0
  381. package/packages/chili-ui/src/property/index.ts +4 -0
  382. package/packages/chili-ui/src/property/input.module.css +19 -0
  383. package/packages/chili-ui/src/property/input.ts +140 -0
  384. package/packages/chili-ui/src/property/material/index.ts +5 -0
  385. package/packages/chili-ui/src/property/material/materialDataContent.ts +44 -0
  386. package/packages/chili-ui/src/property/material/materialEditor.module.css +98 -0
  387. package/packages/chili-ui/src/property/material/materialEditor.ts +147 -0
  388. package/packages/chili-ui/src/property/material/textureEditor.module.css +46 -0
  389. package/packages/chili-ui/src/property/material/textureEditor.ts +61 -0
  390. package/packages/chili-ui/src/property/materialProperty.module.css +30 -0
  391. package/packages/chili-ui/src/property/materialProperty.ts +86 -0
  392. package/packages/chili-ui/src/property/matrixProperty.ts +147 -0
  393. package/packages/chili-ui/src/property/propertyBase.module.css +3 -0
  394. package/packages/chili-ui/src/property/propertyBase.ts +14 -0
  395. package/packages/chili-ui/src/property/propertyView.module.css +36 -0
  396. package/packages/chili-ui/src/property/propertyView.ts +115 -0
  397. package/packages/chili-ui/src/property/utils.ts +48 -0
  398. package/packages/chili-ui/src/ribbon/commandContext.module.css +73 -0
  399. package/packages/chili-ui/src/ribbon/commandContext.ts +239 -0
  400. package/packages/chili-ui/src/ribbon/index.ts +4 -0
  401. package/packages/chili-ui/src/ribbon/ribbon.module.css +286 -0
  402. package/packages/chili-ui/src/ribbon/ribbon.ts +288 -0
  403. package/packages/chili-ui/src/ribbon/ribbonButton.module.css +75 -0
  404. package/packages/chili-ui/src/ribbon/ribbonButton.ts +88 -0
  405. package/packages/chili-ui/src/ribbon/ribbonData.ts +66 -0
  406. package/packages/chili-ui/src/ribbon/ribbonStack.module.css +6 -0
  407. package/packages/chili-ui/src/ribbon/ribbonStack.ts +13 -0
  408. package/packages/chili-ui/src/ribbon/ribbonToggleButton.module.css +3 -0
  409. package/packages/chili-ui/src/ribbon/ribbonToggleButton.ts +6 -0
  410. package/packages/chili-ui/src/statusbar/index.ts +4 -0
  411. package/packages/chili-ui/src/statusbar/snapConfig.module.css +25 -0
  412. package/packages/chili-ui/src/statusbar/snapConfig.ts +92 -0
  413. package/packages/chili-ui/src/statusbar/statusbar.module.css +28 -0
  414. package/packages/chili-ui/src/statusbar/statusbar.ts +54 -0
  415. package/packages/chili-ui/src/toast/index.ts +4 -0
  416. package/packages/chili-ui/src/toast/toast.module.css +27 -0
  417. package/packages/chili-ui/src/toast/toast.ts +39 -0
  418. package/packages/chili-ui/src/viewport/flyout/flyout.module.css +9 -0
  419. package/packages/chili-ui/src/viewport/flyout/flyout.ts +77 -0
  420. package/packages/chili-ui/src/viewport/flyout/index.ts +6 -0
  421. package/packages/chili-ui/src/viewport/flyout/input.module.css +21 -0
  422. package/packages/chili-ui/src/viewport/flyout/input.ts +89 -0
  423. package/packages/chili-ui/src/viewport/flyout/tip.module.css +21 -0
  424. package/packages/chili-ui/src/viewport/flyout/tip.ts +45 -0
  425. package/packages/chili-ui/src/viewport/index.ts +4 -0
  426. package/packages/chili-ui/src/viewport/layoutViewport.module.css +21 -0
  427. package/packages/chili-ui/src/viewport/layoutViewport.ts +76 -0
  428. package/packages/chili-ui/src/viewport/viewport.module.css +179 -0
  429. package/packages/chili-ui/src/viewport/viewport.ts +296 -0
  430. package/packages/chili-vis/package.json +9 -0
  431. package/packages/chili-vis/src/index.ts +7 -0
  432. package/packages/chili-vis/src/nodeSelectionEventHandler.ts +122 -0
  433. package/packages/chili-vis/src/selectionEventHandler.ts +145 -0
  434. package/packages/chili-vis/src/shapeSelectionEventHandler.ts +176 -0
  435. package/packages/chili-vis/src/viewUtils.ts +64 -0
  436. package/packages/chili-wasm/lib/chili-wasm.d.ts +827 -0
  437. package/packages/chili-wasm/lib/chili-wasm.js +5275 -0
  438. package/packages/chili-wasm/lib/chili-wasm.wasm +0 -0
  439. package/packages/chili-wasm/package.json +10 -0
  440. package/packages/chili-wasm/src/converter.ts +124 -0
  441. package/packages/chili-wasm/src/curve.ts +589 -0
  442. package/packages/chili-wasm/src/factory.ts +331 -0
  443. package/packages/chili-wasm/src/geometry.ts +51 -0
  444. package/packages/chili-wasm/src/helper.ts +435 -0
  445. package/packages/chili-wasm/src/index.ts +5 -0
  446. package/packages/chili-wasm/src/mesher.ts +114 -0
  447. package/packages/chili-wasm/src/shape.ts +481 -0
  448. package/packages/chili-wasm/src/surface.ts +510 -0
  449. package/packages/chili-wasm/src/wasm.ts +13 -0
  450. package/packages/chili-web/package.json +9 -0
  451. package/packages/chili-web/src/index.ts +33 -0
  452. package/packages/chili-web/src/loading.ts +67 -0
  453. package/packages/global.d.ts +31 -0
  454. package/public/favicon.svg +10 -0
  455. package/public/fonts/fzhei.json +46120 -0
  456. package/public/iconfont.js +1 -0
  457. package/public/images/wechat.jpg +0 -0
  458. package/public/index.css +13 -0
  459. package/public/index.html +24 -0
  460. package/rspack.config.ts +93 -0
  461. package/rstest.config.ts +27 -0
  462. package/screenshots/screenshot.png +0 -0
  463. package/scripts/add_copyright.mjs +59 -0
  464. package/scripts/build-npm.mjs +105 -0
  465. package/scripts/common.mjs +24 -0
  466. package/scripts/release.mjs +92 -0
  467. package/scripts/restore-package-json.mjs +27 -0
  468. package/scripts/setup_wasm_deps.mjs +97 -0
  469. package/scripts/update-package-json.mjs +27 -0
  470. package/tsconfig.build.json +14 -0
  471. package/tsconfig.build.tsbuildinfo +1 -0
  472. package/tsconfig.json +19 -0
@@ -0,0 +1,435 @@
1
+ // Part of the Chili3d Project, under the AGPL-3.0 License.
2
+ // See LICENSE file in the project root for full license information.
3
+
4
+ import {
5
+ Continuity,
6
+ CurveType,
7
+ gc,
8
+ type ICurve,
9
+ Id,
10
+ type IShape,
11
+ type ISurface,
12
+ JoinType,
13
+ type Line,
14
+ Matrix4,
15
+ Orientation,
16
+ Plane,
17
+ ShapeType,
18
+ SurfaceType,
19
+ XYZ,
20
+ } from "chili-core";
21
+ import type {
22
+ Geom_BezierCurve,
23
+ Geom_BSplineCurve,
24
+ Geom_Circle,
25
+ Geom_Curve,
26
+ Geom_Ellipse,
27
+ Geom_Hyperbola,
28
+ Geom_Line,
29
+ Geom_OffsetCurve,
30
+ Geom_Parabola,
31
+ Geom_Surface,
32
+ Geom_TrimmedCurve,
33
+ GeomAbs_Shape,
34
+ gp_Ax1,
35
+ gp_Ax2,
36
+ gp_Ax3,
37
+ gp_Dir,
38
+ gp_Pln,
39
+ gp_Pnt,
40
+ gp_Trsf,
41
+ gp_Vec,
42
+ TopAbs_ShapeEnum,
43
+ TopoDS_Shape,
44
+ Vector3,
45
+ } from "../lib/chili-wasm";
46
+ import {
47
+ OccBezierCurve,
48
+ OccBSplineCurve,
49
+ OccCircle,
50
+ OccEllipse,
51
+ OccHyperbola,
52
+ OccLine,
53
+ OccOffsetCurve,
54
+ OccParabola,
55
+ OccTrimmedCurve,
56
+ } from "./curve";
57
+ import {
58
+ OccCompound,
59
+ OccCompSolid,
60
+ OccEdge,
61
+ OccFace,
62
+ OccShape,
63
+ OccShell,
64
+ OccSolid,
65
+ OccVertex,
66
+ OccWire,
67
+ } from "./shape";
68
+ import {
69
+ OccBezierSurface,
70
+ OccBSplineSurface,
71
+ OccCompositeSurface,
72
+ OccConicalSurface,
73
+ OccCylindricalSurface,
74
+ OccOffsetSurface,
75
+ OccPlane,
76
+ OccPlateSurface,
77
+ OccRectangularSurface,
78
+ OccSphericalSurface,
79
+ OccSurfaceOfLinearExtrusion,
80
+ OccSurfaceOfRevolution,
81
+ OccToroidalSurface,
82
+ } from "./surface";
83
+
84
+ export class OcctHelper {
85
+ static toXYZ(p: gp_Pnt | gp_Dir | gp_Vec | Vector3): XYZ {
86
+ return new XYZ(p.x, p.y, p.z);
87
+ }
88
+
89
+ static toDir(value: Vector3) {
90
+ return new wasm.gp_Dir(value.x, value.y, value.z);
91
+ }
92
+
93
+ static toPnt(value: Vector3) {
94
+ return new wasm.gp_Pnt(value.x, value.y, value.z);
95
+ }
96
+
97
+ static toVec(value: Vector3) {
98
+ return new wasm.gp_Vec(value.x, value.y, value.z);
99
+ }
100
+
101
+ static toAx1(ray: Line): gp_Ax1 {
102
+ return gc((c) => {
103
+ return new wasm.gp_Ax1(c(OcctHelper.toPnt(ray.point)), c(OcctHelper.toDir(ray.direction)));
104
+ });
105
+ }
106
+
107
+ static toAx2(plane: Plane): gp_Ax2 {
108
+ return gc((c) => {
109
+ return new wasm.gp_Ax2(
110
+ c(OcctHelper.toPnt(plane.origin)),
111
+ c(OcctHelper.toDir(plane.normal)),
112
+ c(OcctHelper.toDir(plane.xvec)),
113
+ );
114
+ });
115
+ }
116
+
117
+ static toAx3(plane: Plane): gp_Ax3 {
118
+ return new wasm.gp_Ax3(
119
+ OcctHelper.toPnt(plane.origin),
120
+ OcctHelper.toDir(plane.normal),
121
+ OcctHelper.toDir(plane.xvec),
122
+ );
123
+ }
124
+
125
+ static fromAx23(ax: gp_Ax2 | gp_Ax3): Plane {
126
+ return gc((c) => {
127
+ return new Plane(
128
+ OcctHelper.toXYZ(c(ax.location())),
129
+ OcctHelper.toXYZ(c(ax.direction())),
130
+ OcctHelper.toXYZ(c(ax.xDirection())),
131
+ );
132
+ });
133
+ }
134
+
135
+ static fromPln(pln: gp_Pln): Plane {
136
+ return gc((c) => {
137
+ const ax3 = c(pln.position());
138
+ return OcctHelper.fromAx23(ax3);
139
+ });
140
+ }
141
+
142
+ static toPln(plane: Plane): gp_Pln {
143
+ return gc((c) => {
144
+ return new wasm.gp_Pln(c(OcctHelper.toAx3(plane)));
145
+ });
146
+ }
147
+
148
+ static convertFromMatrix(matrix: Matrix4): gp_Trsf {
149
+ const arr = matrix.toArray();
150
+ const trsf = new wasm.gp_Trsf();
151
+ trsf.setValues(
152
+ arr[0],
153
+ arr[4],
154
+ arr[8],
155
+ arr[12],
156
+ arr[1],
157
+ arr[5],
158
+ arr[9],
159
+ arr[13],
160
+ arr[2],
161
+ arr[6],
162
+ arr[10],
163
+ arr[14],
164
+ );
165
+ return trsf;
166
+ }
167
+
168
+ static convertToMatrix(matrix: gp_Trsf): Matrix4 {
169
+ const arr: number[] = [
170
+ matrix.value(1, 1),
171
+ matrix.value(2, 1),
172
+ matrix.value(3, 1),
173
+ 0,
174
+ matrix.value(1, 2),
175
+ matrix.value(2, 2),
176
+ matrix.value(3, 2),
177
+ 0,
178
+ matrix.value(1, 3),
179
+ matrix.value(2, 3),
180
+ matrix.value(3, 3),
181
+ 0,
182
+ matrix.value(1, 4),
183
+ matrix.value(2, 4),
184
+ matrix.value(3, 4),
185
+ 1,
186
+ ];
187
+ return Matrix4.fromArray(arr);
188
+ }
189
+
190
+ static getOrientation(shape: TopoDS_Shape): Orientation {
191
+ switch (shape.getOrientation()) {
192
+ case wasm.TopAbs_Orientation.TopAbs_FORWARD:
193
+ return Orientation.FORWARD;
194
+ case wasm.TopAbs_Orientation.TopAbs_REVERSED:
195
+ return Orientation.REVERSED;
196
+ case wasm.TopAbs_Orientation.TopAbs_INTERNAL:
197
+ return Orientation.INTERNAL;
198
+ case wasm.TopAbs_Orientation.TopAbs_EXTERNAL:
199
+ return Orientation.EXTERNAL;
200
+ default:
201
+ return Orientation.FORWARD;
202
+ }
203
+ }
204
+
205
+ static getShapeType(shape: TopoDS_Shape): ShapeType {
206
+ if (shape.isNull()) {
207
+ throw new Error("Shape is null");
208
+ }
209
+
210
+ switch (shape.shapeType()) {
211
+ case wasm.TopAbs_ShapeEnum.TopAbs_COMPOUND:
212
+ return ShapeType.Compound;
213
+ case wasm.TopAbs_ShapeEnum.TopAbs_COMPSOLID:
214
+ return ShapeType.CompoundSolid;
215
+ case wasm.TopAbs_ShapeEnum.TopAbs_SOLID:
216
+ return ShapeType.Solid;
217
+ case wasm.TopAbs_ShapeEnum.TopAbs_SHELL:
218
+ return ShapeType.Shell;
219
+ case wasm.TopAbs_ShapeEnum.TopAbs_FACE:
220
+ return ShapeType.Face;
221
+ case wasm.TopAbs_ShapeEnum.TopAbs_WIRE:
222
+ return ShapeType.Wire;
223
+ case wasm.TopAbs_ShapeEnum.TopAbs_EDGE:
224
+ return ShapeType.Edge;
225
+ case wasm.TopAbs_ShapeEnum.TopAbs_VERTEX:
226
+ return ShapeType.Vertex;
227
+ default:
228
+ return ShapeType.Shape;
229
+ }
230
+ }
231
+
232
+ static getShapeEnum(shapeType: ShapeType): TopAbs_ShapeEnum {
233
+ switch (shapeType) {
234
+ case ShapeType.Compound:
235
+ return wasm.TopAbs_ShapeEnum.TopAbs_COMPOUND;
236
+ case ShapeType.CompoundSolid:
237
+ return wasm.TopAbs_ShapeEnum.TopAbs_COMPSOLID;
238
+ case ShapeType.Solid:
239
+ return wasm.TopAbs_ShapeEnum.TopAbs_SOLID;
240
+ case ShapeType.Shell:
241
+ return wasm.TopAbs_ShapeEnum.TopAbs_SHELL;
242
+ case ShapeType.Face:
243
+ return wasm.TopAbs_ShapeEnum.TopAbs_FACE;
244
+ case ShapeType.Wire:
245
+ return wasm.TopAbs_ShapeEnum.TopAbs_WIRE;
246
+ case ShapeType.Edge:
247
+ return wasm.TopAbs_ShapeEnum.TopAbs_EDGE;
248
+ case ShapeType.Vertex:
249
+ return wasm.TopAbs_ShapeEnum.TopAbs_VERTEX;
250
+ case ShapeType.Shape:
251
+ return wasm.TopAbs_ShapeEnum.TopAbs_SHAPE;
252
+ default:
253
+ throw new Error("Unknown shape type: " + shapeType);
254
+ }
255
+ }
256
+
257
+ static getActualShape(shape: TopoDS_Shape): TopoDS_Shape {
258
+ if (shape.isNull()) {
259
+ throw new Error("Shape is null");
260
+ }
261
+
262
+ switch (shape.shapeType()) {
263
+ case wasm.TopAbs_ShapeEnum.TopAbs_COMPOUND:
264
+ return wasm.TopoDS.compound(shape);
265
+ case wasm.TopAbs_ShapeEnum.TopAbs_COMPSOLID:
266
+ return wasm.TopoDS.compsolid(shape);
267
+ case wasm.TopAbs_ShapeEnum.TopAbs_SOLID:
268
+ return wasm.TopoDS.solid(shape);
269
+ case wasm.TopAbs_ShapeEnum.TopAbs_SHELL:
270
+ return wasm.TopoDS.shell(shape);
271
+ case wasm.TopAbs_ShapeEnum.TopAbs_FACE:
272
+ return wasm.TopoDS.face(shape);
273
+ case wasm.TopAbs_ShapeEnum.TopAbs_WIRE:
274
+ return wasm.TopoDS.wire(shape);
275
+ case wasm.TopAbs_ShapeEnum.TopAbs_EDGE:
276
+ return wasm.TopoDS.edge(shape);
277
+ case wasm.TopAbs_ShapeEnum.TopAbs_VERTEX:
278
+ return wasm.TopoDS.vertex(shape);
279
+ default:
280
+ return shape;
281
+ }
282
+ }
283
+
284
+ static getJoinType(joinType: JoinType) {
285
+ switch (joinType) {
286
+ case JoinType.arc:
287
+ return wasm.GeomAbs_JoinType.GeomAbs_Arc;
288
+ case JoinType.intersection:
289
+ return wasm.GeomAbs_JoinType.GeomAbs_Intersection;
290
+ case JoinType.tangent:
291
+ return wasm.GeomAbs_JoinType.GeomAbs_Tangent;
292
+ default:
293
+ throw new Error("Unknown join type: " + joinType);
294
+ }
295
+ }
296
+
297
+ static wrapShape(shape: TopoDS_Shape, id: string = Id.generate()): IShape {
298
+ if (shape.isNull()) {
299
+ throw new Error("Shape is null");
300
+ }
301
+
302
+ switch (shape.shapeType()) {
303
+ case wasm.TopAbs_ShapeEnum.TopAbs_COMPOUND:
304
+ return new OccCompound(wasm.TopoDS.compound(shape), id);
305
+ case wasm.TopAbs_ShapeEnum.TopAbs_COMPSOLID:
306
+ return new OccCompSolid(wasm.TopoDS.compsolid(shape), id);
307
+ case wasm.TopAbs_ShapeEnum.TopAbs_SOLID:
308
+ return new OccSolid(wasm.TopoDS.solid(shape), id);
309
+ case wasm.TopAbs_ShapeEnum.TopAbs_SHELL:
310
+ return new OccShell(wasm.TopoDS.shell(shape), id);
311
+ case wasm.TopAbs_ShapeEnum.TopAbs_FACE:
312
+ return new OccFace(wasm.TopoDS.face(shape), id);
313
+ case wasm.TopAbs_ShapeEnum.TopAbs_WIRE:
314
+ return new OccWire(wasm.TopoDS.wire(shape), id);
315
+ case wasm.TopAbs_ShapeEnum.TopAbs_EDGE:
316
+ return new OccEdge(wasm.TopoDS.edge(shape), id);
317
+ case wasm.TopAbs_ShapeEnum.TopAbs_VERTEX:
318
+ return new OccVertex(wasm.TopoDS.vertex(shape), id);
319
+ default:
320
+ return new OccShape(shape, id);
321
+ }
322
+ }
323
+
324
+ static wrapCurve(curve: Geom_Curve): ICurve {
325
+ const isType = (type: string) => wasm.Transient.isInstance(curve, type);
326
+ if (isType("Geom_Line")) return new OccLine(curve as Geom_Line);
327
+ else if (isType("Geom_Circle")) return new OccCircle(curve as Geom_Circle);
328
+ else if (isType("Geom_Ellipse")) return new OccEllipse(curve as Geom_Ellipse);
329
+ else if (isType("Geom_Hyperbola")) return new OccHyperbola(curve as Geom_Hyperbola);
330
+ else if (isType("Geom_Parabola")) return new OccParabola(curve as Geom_Parabola);
331
+ else if (isType("Geom_BezierCurve")) return new OccBezierCurve(curve as Geom_BezierCurve);
332
+ else if (isType("Geom_BSplineCurve")) return new OccBSplineCurve(curve as Geom_BSplineCurve);
333
+ else if (isType("Geom_OffsetCurve")) return new OccOffsetCurve(curve as Geom_OffsetCurve);
334
+ else if (isType("Geom_TrimmedCurve")) return new OccTrimmedCurve(curve as Geom_TrimmedCurve);
335
+
336
+ throw new Error("Unknown curve type: " + String(curve));
337
+ }
338
+
339
+ static getCurveType(curve: Geom_Curve): CurveType {
340
+ const isType = (type: string) => wasm.Transient.isInstance(curve, type);
341
+ if (isType("Geom_Line")) return CurveType.Line;
342
+ else if (isType("Geom_Circle")) return CurveType.Circle;
343
+ else if (isType("Geom_Ellipse")) return CurveType.Ellipse;
344
+ else if (isType("Geom_Hyperbola")) return CurveType.Hyperbola;
345
+ else if (isType("Geom_Parabola")) return CurveType.Parabola;
346
+ else if (isType("Geom_BezierCurve")) return CurveType.BezierCurve;
347
+ else if (isType("Geom_BSplineCurve")) return CurveType.BSplineCurve;
348
+ else if (isType("Geom_OffsetCurve")) return CurveType.OffsetCurve;
349
+ else if (isType("Geom_TrimmedCurve")) return CurveType.TrimmedCurve;
350
+
351
+ throw new Error("Unknown curve type");
352
+ }
353
+
354
+ static wrapSurface(surface: Geom_Surface): ISurface {
355
+ const isType = (type: string) => wasm.Transient.isInstance(surface, type);
356
+ const actualSurface = surface as any;
357
+ if (isType("GeomPlate_Surface")) return new OccPlateSurface(actualSurface);
358
+ else if (isType("Geom_Plane")) return new OccPlane(actualSurface);
359
+ else if (isType("Geom_SurfaceOfLinearExtrusion"))
360
+ return new OccSurfaceOfLinearExtrusion(actualSurface);
361
+ else if (isType("Geom_SurfaceOfRevolution")) return new OccSurfaceOfRevolution(actualSurface);
362
+ else if (isType("Geom_OffsetSurface")) return new OccOffsetSurface(actualSurface);
363
+ else if (isType("Geom_BSplineSurface")) return new OccBSplineSurface(actualSurface);
364
+ else if (isType("Geom_BezierSurface")) return new OccBezierSurface(actualSurface);
365
+ else if (isType("Geom_CylindricalSurface")) return new OccCylindricalSurface(actualSurface);
366
+ else if (isType("Geom_ConicalSurface")) return new OccConicalSurface(actualSurface);
367
+ else if (isType("Geom_SphericalSurface")) return new OccSphericalSurface(actualSurface);
368
+ else if (isType("Geom_RectangularTrimmedSurface")) return new OccRectangularSurface(actualSurface);
369
+ else if (isType("Geom_ToroidalSurface")) return new OccToroidalSurface(actualSurface);
370
+ else if (isType("ShapeExtent_CompositeSurface")) return new OccCompositeSurface(actualSurface);
371
+
372
+ throw new Error("Unknown surface type: " + String(surface));
373
+ }
374
+
375
+ static getSurfaceType(surface: Geom_Surface): SurfaceType {
376
+ const isType = (type: string) => wasm.Transient.isInstance(surface, type);
377
+ if (isType("GeomPlate_Surface")) return SurfaceType.Plate;
378
+ else if (isType("Geom_Plane")) return SurfaceType.Plane;
379
+ else if (isType("Geom_SurfaceOfLinearExtrusion")) return SurfaceType.Extrusion;
380
+ else if (isType("Geom_SurfaceOfRevolution")) return SurfaceType.Revolution;
381
+ else if (isType("Geom_OffsetSurface")) return SurfaceType.Offset;
382
+ else if (isType("Geom_BSplineSurface")) return SurfaceType.BSpline;
383
+ else if (isType("Geom_BezierSurface")) return SurfaceType.Bezier;
384
+ else if (isType("Geom_CylindricalSurface")) return SurfaceType.Cylinder;
385
+ else if (isType("Geom_ConicalSurface")) return SurfaceType.Conical;
386
+ else if (isType("Geom_SphericalSurface")) return SurfaceType.Spherical;
387
+ else if (isType("Geom_RectangularTrimmedSurface")) return SurfaceType.RectangularTrimmed;
388
+ else if (isType("Geom_ToroidalSurface")) return SurfaceType.Toroidal;
389
+ else if (isType("ShapeExtent_CompositeSurface")) return SurfaceType.Composite;
390
+
391
+ throw new Error("Unknown surface type");
392
+ }
393
+
394
+ static convertToContinuity(cni: GeomAbs_Shape) {
395
+ switch (cni) {
396
+ case wasm.GeomAbs_Shape.GeomAbs_C0:
397
+ return Continuity.C0;
398
+ case wasm.GeomAbs_Shape.GeomAbs_G1:
399
+ return Continuity.G1;
400
+ case wasm.GeomAbs_Shape.GeomAbs_C1:
401
+ return Continuity.C1;
402
+ case wasm.GeomAbs_Shape.GeomAbs_G2:
403
+ return Continuity.G2;
404
+ case wasm.GeomAbs_Shape.GeomAbs_C2:
405
+ return Continuity.C2;
406
+ case wasm.GeomAbs_Shape.GeomAbs_C3:
407
+ return Continuity.C3;
408
+ case wasm.GeomAbs_Shape.GeomAbs_CN:
409
+ return Continuity.CN;
410
+ default:
411
+ throw new Error("unknown continuity");
412
+ }
413
+ }
414
+
415
+ static convertFromContinuity(continuity: Continuity) {
416
+ switch (continuity) {
417
+ case Continuity.C0:
418
+ return wasm.GeomAbs_Shape.GeomAbs_C0;
419
+ case Continuity.G1:
420
+ return wasm.GeomAbs_Shape.GeomAbs_G1;
421
+ case Continuity.C1:
422
+ return wasm.GeomAbs_Shape.GeomAbs_C1;
423
+ case Continuity.G2:
424
+ return wasm.GeomAbs_Shape.GeomAbs_G2;
425
+ case Continuity.C2:
426
+ return wasm.GeomAbs_Shape.GeomAbs_C2;
427
+ case Continuity.C3:
428
+ return wasm.GeomAbs_Shape.GeomAbs_C3;
429
+ case Continuity.CN:
430
+ return wasm.GeomAbs_Shape.GeomAbs_CN;
431
+ default:
432
+ throw new Error("unknown continuity");
433
+ }
434
+ }
435
+ }
@@ -0,0 +1,5 @@
1
+ // Part of the Chili3d Project, under the AGPL-3.0 License.
2
+ // See LICENSE file in the project root for full license information.
3
+
4
+ export * from "./factory";
5
+ export * from "./wasm";
@@ -0,0 +1,114 @@
1
+ // Part of the Chili3d Project, under the AGPL-3.0 License.
2
+ // See LICENSE file in the project root for full license information.
3
+
4
+ import {
5
+ type EdgeMeshData,
6
+ type FaceMeshData,
7
+ gc,
8
+ type IDisposable,
9
+ type IShapeMeshData,
10
+ LineType,
11
+ type ShapeMeshRange,
12
+ VisualConfig,
13
+ } from "chili-core";
14
+ import type { EdgeMeshData as OccEdgeMeshData, FaceMeshData as OccFaceMeshData } from "../lib/chili-wasm";
15
+ import { type OccShape, OccSubEdgeShape, OccSubFaceShape } from "./shape";
16
+
17
+ export class Mesher implements IShapeMeshData, IDisposable {
18
+ private _isMeshed = false;
19
+ private _lines?: EdgeMeshData;
20
+ private _faces?: FaceMeshData;
21
+
22
+ get edges(): EdgeMeshData | undefined {
23
+ if (this._lines === undefined) {
24
+ this.mesh();
25
+ }
26
+ return this._lines;
27
+ }
28
+ set edges(value: EdgeMeshData | undefined) {
29
+ this._lines = value;
30
+ }
31
+
32
+ get faces(): FaceMeshData | undefined {
33
+ if (this._faces === undefined) {
34
+ this.mesh();
35
+ }
36
+ return this._faces;
37
+ }
38
+ set faces(value: FaceMeshData | undefined) {
39
+ this._faces = value;
40
+ }
41
+
42
+ constructor(private shape: OccShape) {}
43
+
44
+ private mesh() {
45
+ if (this._isMeshed) {
46
+ return;
47
+ }
48
+ this._isMeshed = true;
49
+
50
+ gc((c) => {
51
+ const occMesher = c(new wasm.Mesher(this.shape.shape, 0.005));
52
+ const meshData = c(occMesher.mesh());
53
+ const faceMeshData = c(meshData.faceMeshData);
54
+ const edgeMeshData = c(meshData.edgeMeshData);
55
+
56
+ this._faces = this.parseFaceMeshData(faceMeshData);
57
+ this._lines = this.parseEdgeMeshData(edgeMeshData);
58
+ });
59
+ }
60
+
61
+ private parseFaceMeshData(faceMeshData: OccFaceMeshData): FaceMeshData {
62
+ return {
63
+ position: new Float32Array(faceMeshData.position),
64
+ normal: new Float32Array(faceMeshData.normal),
65
+ uv: new Float32Array(faceMeshData.uv),
66
+ index: new Uint32Array(faceMeshData.index),
67
+ range: this.getFaceRanges(faceMeshData),
68
+ color: VisualConfig.defaultFaceColor,
69
+ groups: [],
70
+ };
71
+ }
72
+
73
+ private parseEdgeMeshData(edgeMeshData: OccEdgeMeshData): EdgeMeshData {
74
+ return {
75
+ lineType: LineType.Solid,
76
+ position: new Float32Array(edgeMeshData.position),
77
+ range: this.getEdgeRanges(edgeMeshData),
78
+ color: VisualConfig.defaultEdgeColor,
79
+ };
80
+ }
81
+
82
+ dispose(): void {
83
+ this._faces?.range.forEach((g) => g.shape.dispose());
84
+ this._lines?.range.forEach((g) => g.shape.dispose());
85
+
86
+ this.shape = null as any;
87
+ this._faces = null as any;
88
+ this._lines = null as any;
89
+ }
90
+
91
+ private getEdgeRanges(data: OccEdgeMeshData): ShapeMeshRange[] {
92
+ const result: ShapeMeshRange[] = [];
93
+ for (let i = 0; i < data.edges.length; i++) {
94
+ result.push({
95
+ start: data.group[2 * i],
96
+ count: data.group[2 * i + 1],
97
+ shape: new OccSubEdgeShape(this.shape, data.edges[i], i),
98
+ });
99
+ }
100
+ return result;
101
+ }
102
+
103
+ private getFaceRanges(data: OccFaceMeshData): ShapeMeshRange[] {
104
+ const result: ShapeMeshRange[] = [];
105
+ for (let i = 0; i < data.faces.length; i++) {
106
+ result.push({
107
+ start: data.group[2 * i],
108
+ count: data.group[2 * i + 1],
109
+ shape: new OccSubFaceShape(this.shape, data.faces[i], i),
110
+ });
111
+ }
112
+ return result;
113
+ }
114
+ }