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,52 @@
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 { command, type GeometryNode, type IShape, Precision, ShapeType } from "chili-core";
5
+ import { GeoUtils } from "chili-geo";
6
+ import { PrismNode } from "../../bodys";
7
+ import type { LengthAtAxisSnapData } from "../../snap";
8
+ import { type IStep, LengthAtAxisStep } from "../../step";
9
+ import { SelectShapeStep } from "../../step/selectStep";
10
+ import { CreateCommand } from "../createCommand";
11
+
12
+ @command({
13
+ key: "create.extrude",
14
+ icon: "icon-prism",
15
+ })
16
+ export class Prism extends CreateCommand {
17
+ protected override geometryNode(): GeometryNode {
18
+ const shape = this.transformdFirstShape(this.stepDatas[0], false);
19
+ const { point, normal } = this.getAxis(shape);
20
+ const dist = this.stepDatas[1].point!.sub(point).dot(normal);
21
+ return new PrismNode(this.document, shape, dist);
22
+ }
23
+
24
+ protected override getSteps(): IStep[] {
25
+ return [
26
+ new SelectShapeStep(ShapeType.Face | ShapeType.Edge | ShapeType.Wire, "prompt.select.shape"),
27
+ new LengthAtAxisStep("prompt.pickNextPoint", this.getLengthStepData, true),
28
+ ];
29
+ }
30
+
31
+ private readonly getLengthStepData = (): LengthAtAxisSnapData => {
32
+ const shape = this.transformdFirstShape(this.stepDatas[0]);
33
+ const { point, normal } = this.getAxis(shape);
34
+ return {
35
+ point,
36
+ direction: normal,
37
+ preview: (p) => {
38
+ if (!p) return [];
39
+ const dist = p.sub(point).dot(normal);
40
+ if (Math.abs(dist) < Precision.Float) return [];
41
+ const vec = normal.multiply(dist);
42
+ return [this.meshCreatedShape("prism", shape, vec)];
43
+ },
44
+ };
45
+ };
46
+
47
+ private getAxis(shape: IShape) {
48
+ const point = this.stepDatas[0].shapes[0].point!;
49
+ const normal = GeoUtils.normal(shape as any);
50
+ return { point, normal };
51
+ }
52
+ }
@@ -0,0 +1,56 @@
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 { command, type GeometryNode, type Plane, type XYZ } from "chili-core";
5
+ import { PyramidNode } from "../../bodys";
6
+ import type { LengthAtAxisSnapData } from "../../snap";
7
+ import { type IStep, LengthAtAxisStep } from "../../step";
8
+ import { RectCommandBase } from "./rect";
9
+
10
+ @command({
11
+ key: "create.pyramid",
12
+ icon: "icon-pyramid",
13
+ })
14
+ export class Pyramid extends RectCommandBase {
15
+ protected override getSteps(): IStep[] {
16
+ const steps = super.getSteps();
17
+ const third = new LengthAtAxisStep("prompt.pickNextPoint", this.getHeightStepData);
18
+ return [...steps, third];
19
+ }
20
+
21
+ private readonly getHeightStepData = (): LengthAtAxisSnapData => {
22
+ const plane = this.stepDatas[1].plane;
23
+ if (plane === undefined) {
24
+ throw new Error("plane is undefined, please report bug");
25
+ }
26
+ const point = this.stepDatas[1].point!.add(this.stepDatas[0].point!).multiply(0.5);
27
+ return {
28
+ point,
29
+ direction: plane.normal,
30
+ preview: this.previewPyramid,
31
+ };
32
+ };
33
+
34
+ private readonly previewPyramid = (end: XYZ | undefined) => {
35
+ if (!end) {
36
+ return this.previewRect(this.stepDatas[1].point);
37
+ }
38
+
39
+ const data = this.rectDataFromTwoSteps();
40
+ return [
41
+ this.meshPoint(this.stepDatas[0].point!),
42
+ this.meshPoint(this.stepDatas[1].point!),
43
+ this.meshCreatedShape("pyramid", data.plane, data.dx, data.dy, this.getHeight(data.plane, end)),
44
+ ];
45
+ };
46
+
47
+ protected override geometryNode(): GeometryNode {
48
+ const rect = this.rectDataFromTwoSteps();
49
+ const dz = this.getHeight(rect.plane, this.stepDatas[2].point!);
50
+ return new PyramidNode(this.document, rect.plane, rect.dx, rect.dy, dz);
51
+ }
52
+
53
+ private getHeight(plane: Plane, point: XYZ): number {
54
+ return point.sub(plane.origin).dot(plane.normal);
55
+ }
56
+ }
@@ -0,0 +1,105 @@
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 { Config, command, type GeometryNode, MathUtils, Plane, Property, type XYZ } from "chili-core";
5
+ import { ViewUtils } from "chili-vis";
6
+ import { RectNode } from "../../bodys";
7
+ import type { SnapLengthAtPlaneData, SnapResult } from "../../snap";
8
+ import { type IStep, LengthAtPlaneStep, PointStep } from "../../step";
9
+ import { CreateCommand } from "../createCommand";
10
+
11
+ export interface RectData {
12
+ plane: Plane;
13
+ dx: number;
14
+ dy: number;
15
+ p1: XYZ;
16
+ p2: XYZ;
17
+ }
18
+
19
+ export namespace RectData {
20
+ export function get(atPlane: Plane, start: XYZ, end: XYZ): RectData {
21
+ const plane = new Plane(start, atPlane.normal, atPlane.xvec);
22
+ const vector = end.sub(start);
23
+ const dx = vector.dot(plane.xvec);
24
+ const dy = vector.dot(plane.yvec);
25
+ return { plane, dx, dy, p1: start, p2: end };
26
+ }
27
+ }
28
+
29
+ export abstract class RectCommandBase extends CreateCommand {
30
+ protected getSteps(): IStep[] {
31
+ return [
32
+ new PointStep("prompt.pickFistPoint"),
33
+ new LengthAtPlaneStep("prompt.pickNextPoint", this.nextSnapData),
34
+ ];
35
+ }
36
+
37
+ private readonly nextSnapData = (): SnapLengthAtPlaneData => {
38
+ const { point, view } = this.stepDatas[0];
39
+ return {
40
+ point: () => point!,
41
+ preview: this.previewRect,
42
+ plane: (tmp: XYZ | undefined) => this.findPlane(view, point!, tmp),
43
+ validator: this.handleValid,
44
+ prompt: (snaped: SnapResult) => {
45
+ const data = this.rectDataFromTemp(snaped.point!);
46
+ return `${data.dx.toFixed(2)}, ${data.dy.toFixed(2)}`;
47
+ },
48
+ };
49
+ };
50
+
51
+ private readonly handleValid = (end: XYZ) => {
52
+ const data = this.rectDataFromTemp(end);
53
+ return data !== undefined && !MathUtils.anyEqualZero(data.dx, data.dy);
54
+ };
55
+
56
+ protected previewRect = (end: XYZ | undefined) => {
57
+ if (end === undefined) return [this.meshPoint(this.stepDatas[0].point!)];
58
+ const { plane, dx, dy } = this.rectDataFromTemp(end);
59
+
60
+ return [
61
+ this.meshPoint(this.stepDatas[0].point!),
62
+ this.meshPoint(end),
63
+ this.meshCreatedShape("rect", plane, dx, dy),
64
+ ];
65
+ };
66
+
67
+ protected rectDataFromTemp(tmp: XYZ): RectData {
68
+ const { view, point } = this.stepDatas[0];
69
+ const plane = Config.instance.dynamicWorkplane
70
+ ? ViewUtils.raycastClosestPlane(view, point!, tmp)
71
+ : this.stepDatas[0].view.workplane.translateTo(point!);
72
+ return RectData.get(plane, point!, tmp);
73
+ }
74
+
75
+ protected rectDataFromTwoSteps() {
76
+ let rect: RectData;
77
+ if (this.stepDatas[1].plane) {
78
+ rect = RectData.get(this.stepDatas[1].plane, this.stepDatas[0].point!, this.stepDatas[1].point!);
79
+ } else {
80
+ rect = this.rectDataFromTemp(this.stepDatas[1].point!);
81
+ }
82
+ return rect;
83
+ }
84
+ }
85
+
86
+ @command({
87
+ key: "create.rect",
88
+ icon: "icon-rect",
89
+ })
90
+ export class Rect extends RectCommandBase {
91
+ @Property.define("option.command.isFace")
92
+ public get isFace() {
93
+ return this.getPrivateValue("isFace", false);
94
+ }
95
+ public set isFace(value: boolean) {
96
+ this.setProperty("isFace", value);
97
+ }
98
+
99
+ protected override geometryNode(): GeometryNode {
100
+ const { plane, dx, dy } = this.rectDataFromTwoSteps();
101
+ const node = new RectNode(this.document, plane, dx, dy);
102
+ node.isFace = this.isFace;
103
+ return node;
104
+ }
105
+ }
@@ -0,0 +1,62 @@
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
+ command,
6
+ type GeometryNode,
7
+ ICurve,
8
+ type IEdge,
9
+ type ILine,
10
+ type IShape,
11
+ type IShapeFilter,
12
+ Line,
13
+ Property,
14
+ ShapeType,
15
+ } from "chili-core";
16
+ import { RevolvedNode } from "../../bodys";
17
+ import type { IStep } from "../../step";
18
+ import { SelectShapeStep } from "../../step/selectStep";
19
+ import { CreateCommand } from "../createCommand";
20
+
21
+ @command({
22
+ key: "create.revol",
23
+ icon: "icon-revolve",
24
+ })
25
+ export class Revolve extends CreateCommand {
26
+ @Property.define("common.angle")
27
+ public get angle() {
28
+ return this.getPrivateValue("angle", 360);
29
+ }
30
+ public set angle(value: number) {
31
+ this.setProperty("angle", value);
32
+ }
33
+
34
+ protected override geometryNode(): GeometryNode {
35
+ const shape = this.transformdFirstShape(this.stepDatas[0], false);
36
+ const edge = (this.stepDatas[1].shapes[0].shape as IEdge).curve.basisCurve as ILine;
37
+ const transform = this.stepDatas[1].shapes[0].transform;
38
+ const axis = new Line(transform.ofPoint(edge.value(0)), transform.ofVector(edge.direction));
39
+ return new RevolvedNode(this.document, shape, axis, this.angle);
40
+ }
41
+
42
+ protected override getSteps(): IStep[] {
43
+ return [
44
+ new SelectShapeStep(ShapeType.Edge | ShapeType.Face | ShapeType.Wire, "prompt.select.shape"),
45
+ new SelectShapeStep(ShapeType.Edge, "prompt.select.edges", {
46
+ shapeFilter: new LineFilter(),
47
+ keepSelection: true,
48
+ }),
49
+ ];
50
+ }
51
+ }
52
+
53
+ class LineFilter implements IShapeFilter {
54
+ allow(shape: IShape): boolean {
55
+ if (shape.shapeType === ShapeType.Edge) {
56
+ const edge = shape as IEdge;
57
+ const curve = edge.curve.basisCurve;
58
+ return ICurve.isLine(curve);
59
+ }
60
+ return false;
61
+ }
62
+ }
@@ -0,0 +1,31 @@
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 { command, EditableShapeNode, I18n, ShapeType, VisualState } from "chili-core";
5
+ import type { IStep } from "../../step";
6
+ import { SelectShapeStep } from "../../step/selectStep";
7
+ import { MultistepCommand } from "../multistepCommand";
8
+
9
+ @command({
10
+ key: "create.section",
11
+ icon: "icon-section",
12
+ })
13
+ export class Section extends MultistepCommand {
14
+ protected override executeMainTask() {
15
+ const shape = this.transformdFirstShape(this.stepDatas[0]);
16
+ const path = this.transformdFirstShape(this.stepDatas[1]);
17
+ const section = shape.section(path);
18
+ const node = new EditableShapeNode(this.document, I18n.translate("command.create.section"), section);
19
+ this.document.modelManager.rootNode.add(node);
20
+ this.document.visual.update();
21
+ }
22
+
23
+ protected override getSteps(): IStep[] {
24
+ return [
25
+ new SelectShapeStep(ShapeType.Shape, "prompt.select.shape", {
26
+ selectedState: VisualState.faceTransparent,
27
+ }),
28
+ new SelectShapeStep(ShapeType.Shape, "prompt.select.shape", { keepSelection: true }),
29
+ ];
30
+ }
31
+ }
@@ -0,0 +1,48 @@
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 { command, type GeometryNode, Precision, XYZ } from "chili-core";
5
+ import { SphereNode } from "../../bodys";
6
+ import type { SnapLengthAtPlaneData } from "../../snap";
7
+ import { type IStep, LengthAtPlaneStep, PointStep } from "../../step";
8
+ import { CreateCommand } from "../createCommand";
9
+
10
+ @command({
11
+ key: "create.sphere",
12
+ icon: "icon-sphere",
13
+ })
14
+ export class Sphere extends CreateCommand {
15
+ protected override getSteps(): IStep[] {
16
+ const centerStep = new PointStep("prompt.pickCircleCenter");
17
+ const radiusStep = new LengthAtPlaneStep("prompt.pickRadius", this.getRadiusData);
18
+ return [centerStep, radiusStep];
19
+ }
20
+
21
+ private readonly getRadiusData = (): SnapLengthAtPlaneData => {
22
+ const point = this.stepDatas[0].point!;
23
+ return {
24
+ point: () => point,
25
+ preview: this.previewSphere,
26
+ plane: () => this.stepDatas[0].view.workplane.translateTo(point),
27
+ validator: (p: XYZ) => p.distanceTo(point) > Precision.Distance,
28
+ };
29
+ };
30
+
31
+ private readonly previewSphere = (end: XYZ | undefined) => {
32
+ if (!end) {
33
+ return [this.meshPoint(this.stepDatas[0].point!)];
34
+ }
35
+
36
+ const radius = this.stepDatas[0].point?.distanceTo(end)!;
37
+ return [
38
+ this.meshPoint(this.stepDatas[0].point!),
39
+ this.meshCreatedShape("circle", XYZ.unitZ, this.stepDatas[0].point!, radius),
40
+ this.meshCreatedShape("circle", XYZ.unitY, this.stepDatas[0].point!, radius),
41
+ ];
42
+ };
43
+
44
+ protected override geometryNode(): GeometryNode {
45
+ const radius = this.stepDatas[0].point!.distanceTo(this.stepDatas[1].point!);
46
+ return new SphereNode(this.document, this.stepDatas[0].point!, radius);
47
+ }
48
+ }
@@ -0,0 +1,39 @@
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 { command, type GeometryNode, type IWire, Property, ShapeType } from "chili-core";
5
+ import { SweepedNode } from "../../bodys";
6
+ import type { IStep } from "../../step";
7
+ import { SelectShapeStep } from "../../step/selectStep";
8
+ import { CreateCommand } from "../createCommand";
9
+
10
+ @command({
11
+ key: "create.sweep",
12
+ icon: "icon-sweep",
13
+ })
14
+ export class Sweep extends CreateCommand {
15
+ @Property.define("option.command.isRoundCorner")
16
+ get round() {
17
+ return this.getPrivateValue("round", false);
18
+ }
19
+
20
+ set round(value: boolean) {
21
+ this.setProperty("round", value);
22
+ }
23
+
24
+ protected override geometryNode(): GeometryNode {
25
+ const path = this.transformdFirstShape(this.stepDatas[0], false) as IWire;
26
+ const shapes = this.transformdShapes(this.stepDatas[1], false) as IWire[];
27
+ return new SweepedNode(this.document, shapes, path, this.round);
28
+ }
29
+
30
+ protected override getSteps(): IStep[] {
31
+ return [
32
+ new SelectShapeStep(ShapeType.Edge | ShapeType.Wire, "prompt.select.path"),
33
+ new SelectShapeStep(ShapeType.Edge | ShapeType.Wire, "prompt.select.section", {
34
+ keepSelection: true,
35
+ multiple: true,
36
+ }),
37
+ ];
38
+ }
39
+ }
@@ -0,0 +1,50 @@
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 { command, EditableShapeNode, I18n, Property, PubSub, ShapeType, Transaction } from "chili-core";
5
+ import { type IStep, SelectShapeStep } from "../../step";
6
+ import { MultistepCommand } from "../multistepCommand";
7
+
8
+ @command({
9
+ key: "create.thickSolid",
10
+ icon: "icon-thickSolid",
11
+ })
12
+ export class ThickSolidCommand extends MultistepCommand {
13
+ @Property.define("option.command.thickness")
14
+ get thickness() {
15
+ return this.getPrivateValue("thickness", 10);
16
+ }
17
+ set thickness(value: number) {
18
+ this.setProperty("thickness", value);
19
+ }
20
+
21
+ protected override executeMainTask(): void {
22
+ Transaction.execute(this.document, `excute ${Object.getPrototypeOf(this).data.name}`, () => {
23
+ this.stepDatas[0].shapes.forEach((x) => {
24
+ const subShape = this.application.shapeFactory.makeThickSolidBySimple(
25
+ x.shape,
26
+ this.thickness,
27
+ );
28
+ if (!subShape.isOk) {
29
+ PubSub.default.pub("showToast", "toast.converter.error");
30
+ return;
31
+ }
32
+ const model = new EditableShapeNode(
33
+ this.document,
34
+ I18n.translate("command.create.thickSolid"),
35
+ subShape,
36
+ );
37
+
38
+ const node = x.owner.node;
39
+ model.transform = node.transform;
40
+ node.parent!.insertAfter(node, model);
41
+ });
42
+ this.document.visual.update();
43
+ PubSub.default.pub("showToast", "toast.success");
44
+ });
45
+ }
46
+
47
+ protected override getSteps(): IStep[] {
48
+ return [new SelectShapeStep(ShapeType.Face, "prompt.select.faces", { multiple: true })];
49
+ }
50
+ }
@@ -0,0 +1,26 @@
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 { Act, command, I18n, type IApplication, type ICommand } from "chili-core";
5
+
6
+ let index = 0;
7
+
8
+ @command({
9
+ key: "act.alignCamera",
10
+ icon: "icon-act",
11
+ })
12
+ export class ActAlignCameraCommand implements ICommand {
13
+ async execute(application: IApplication): Promise<void> {
14
+ const view = application.activeView;
15
+ if (!view) return;
16
+
17
+ view.document.acts.push(
18
+ new Act(
19
+ `${I18n.translate("ribbon.group.act")} ${index++}`,
20
+ view.cameraController.cameraPosition,
21
+ view.cameraController.cameraTarget,
22
+ view.cameraController.cameraUp,
23
+ ),
24
+ );
25
+ }
26
+ }
@@ -0,0 +1,41 @@
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 { type GeometryNode, Property, Transaction } from "chili-core";
5
+ import { MultistepCommand } from "./multistepCommand";
6
+
7
+ const count = 1;
8
+
9
+ export abstract class CreateCommand extends MultistepCommand {
10
+ protected override executeMainTask() {
11
+ Transaction.execute(this.document, `excute ${Object.getPrototypeOf(this).data.name}`, () => {
12
+ const node = this.geometryNode();
13
+ this.document.modelManager.addNode(node);
14
+ this.document.visual.update();
15
+ });
16
+ }
17
+
18
+ protected abstract geometryNode(): GeometryNode;
19
+ }
20
+
21
+ export abstract class CreateNodeCommand extends MultistepCommand {
22
+ protected override executeMainTask() {
23
+ Transaction.execute(this.document, `excute ${Object.getPrototypeOf(this).data.name}`, () => {
24
+ this.document.modelManager.addNode(this.getNode());
25
+ this.document.visual.update();
26
+ });
27
+ }
28
+
29
+ protected abstract getNode(): GeometryNode;
30
+ }
31
+
32
+ export abstract class CreateFaceableCommand extends CreateCommand {
33
+ protected _isFace: boolean = false;
34
+ @Property.define("option.command.isFace")
35
+ public get isFace() {
36
+ return this._isFace;
37
+ }
38
+ public set isFace(value: boolean) {
39
+ this.setProperty("isFace", value);
40
+ }
41
+ }
@@ -0,0 +1,38 @@
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 { command, type INode, PubSub, Transaction } from "chili-core";
5
+ import { GetOrSelectNodeStep, type IStep } from "../step";
6
+ import { MultistepCommand } from "./multistepCommand";
7
+
8
+ @command({
9
+ key: "modify.deleteNode",
10
+ icon: "icon-delete",
11
+ })
12
+ export class Delete extends MultistepCommand {
13
+ protected override executeMainTask(): void {
14
+ const nodes: INode[] | undefined = this.stepDatas[0].nodes;
15
+ if (!nodes || nodes.length === 0) {
16
+ PubSub.default.pub("showToast", "toast.select.noSelected");
17
+ return;
18
+ }
19
+
20
+ if (
21
+ this.document.modelManager.currentNode &&
22
+ nodes.includes(this.document.modelManager.currentNode)
23
+ ) {
24
+ this.document.modelManager.currentNode = this.document.modelManager.rootNode;
25
+ }
26
+
27
+ this.document.selection.clearSelection();
28
+ Transaction.execute(this.document, "delete", () => {
29
+ nodes.forEach((model) => model.parent?.remove(model));
30
+ });
31
+ this.document.visual.update();
32
+ PubSub.default.pub("showToast", "toast.delete{0}Objects", nodes.length);
33
+ }
34
+
35
+ protected override getSteps(): IStep[] {
36
+ return [new GetOrSelectNodeStep("prompt.select.models", { multiple: true })];
37
+ }
38
+ }
@@ -0,0 +1,18 @@
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 { command, FolderNode, type IApplication, type ICommand } from "chili-core";
5
+
6
+ let index = 1;
7
+
8
+ @command({
9
+ key: "create.folder",
10
+ icon: "icon-folder-plus",
11
+ })
12
+ export class NewFolder implements ICommand {
13
+ async execute(app: IApplication): Promise<void> {
14
+ const document = app.activeView?.document!;
15
+ const folder = new FolderNode(document, `Folder${index++}`);
16
+ document.modelManager.addNode(folder);
17
+ }
18
+ }
@@ -0,0 +1,97 @@
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
+ AsyncController,
6
+ CancelableCommand,
7
+ Combobox,
8
+ command,
9
+ download,
10
+ I18n,
11
+ type IApplication,
12
+ type ICommand,
13
+ Property,
14
+ PubSub,
15
+ readFilesAsync,
16
+ } from "chili-core";
17
+ import { SelectNodeStep } from "../step";
18
+ import { importFiles } from "../utils";
19
+
20
+ @command({
21
+ key: "file.import",
22
+ icon: "icon-import",
23
+ })
24
+ export class Import implements ICommand {
25
+ async execute(application: IApplication): Promise<void> {
26
+ const extenstions = application.dataExchange.importFormats().join(",");
27
+ const files = await readFilesAsync(extenstions, true);
28
+ if (!files.isOk || files.value.length === 0) {
29
+ alert(files.error);
30
+ return;
31
+ }
32
+ importFiles(application, files.value);
33
+ }
34
+ }
35
+
36
+ @command({
37
+ key: "file.export",
38
+ icon: "icon-export",
39
+ })
40
+ export class Export extends CancelableCommand {
41
+ @Property.define("file.format")
42
+ public get formats() {
43
+ return this.getPrivateValue("formats", this.initCombobox());
44
+ }
45
+ public set formats(value: Combobox<string>) {
46
+ this.setProperty("formats", value);
47
+ }
48
+
49
+ private initCombobox() {
50
+ const box = new Combobox<string>();
51
+ box.items.push(...this.application.dataExchange.exportFormats());
52
+ return box;
53
+ }
54
+
55
+ protected async executeAsync() {
56
+ const nodes = await this.selectNodesAsync();
57
+ if (!nodes || nodes.length === 0) {
58
+ PubSub.default.pub("showToast", "toast.select.noSelected");
59
+ return;
60
+ }
61
+
62
+ PubSub.default.pub(
63
+ "showPermanent",
64
+ async () => {
65
+ const format = this.formats.selectedItem;
66
+ if (format === undefined) return;
67
+
68
+ const data = await this.application.dataExchange.export(format, nodes);
69
+ if (!data) return;
70
+
71
+ let suffix = format;
72
+
73
+ if (suffix === ".stl binary") {
74
+ suffix = ".stl";
75
+ } else if (suffix === ".ply binary") {
76
+ suffix = ".ply";
77
+ }
78
+
79
+ PubSub.default.pub("showToast", "toast.downloading");
80
+ download(data, `${nodes[0].name}${suffix}`);
81
+ },
82
+ "toast.excuting{0}",
83
+ I18n.translate("command.file.export"),
84
+ );
85
+ }
86
+
87
+ private async selectNodesAsync() {
88
+ this.controller = new AsyncController();
89
+ const step = new SelectNodeStep("prompt.select.models", { multiple: true, keepSelection: true });
90
+ const data = await step.execute(this.application.activeView?.document!, this.controller);
91
+ if (!data?.nodes) {
92
+ PubSub.default.pub("showToast", "prompt.select.noModelSelected");
93
+ return undefined;
94
+ }
95
+ return data.nodes;
96
+ }
97
+ }