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,91 @@
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
+ ComponentNode,
6
+ command,
7
+ EditableShapeNode,
8
+ GroupNode,
9
+ type IShape,
10
+ MultiShapeNode,
11
+ ShapeNode,
12
+ ShapeType,
13
+ Transaction,
14
+ } from "chili-core";
15
+ import type { IStep } from "../../step";
16
+ import { GetOrSelectNodeStep } from "../../step/selectStep";
17
+ import { MultistepCommand } from "../multistepCommand";
18
+
19
+ @command({
20
+ key: "modify.explode",
21
+ icon: "icon-explode",
22
+ })
23
+ export class Explode extends MultistepCommand {
24
+ protected override getSteps(): IStep[] {
25
+ return [new GetOrSelectNodeStep("prompt.select.shape", { multiple: true })];
26
+ }
27
+
28
+ protected override executeMainTask() {
29
+ this.document.selection.clearSelection();
30
+
31
+ Transaction.execute(this.document, `excute ${Object.getPrototypeOf(this).data.name}`, () => {
32
+ this.stepDatas[0].nodes?.forEach((x) => {
33
+ if (x instanceof ShapeNode) {
34
+ this.explodeShapeNode(x);
35
+ } else if (x instanceof ComponentNode) {
36
+ this.explodeComponentNode(x);
37
+ } else if (x instanceof MultiShapeNode) {
38
+ this.explodeMultiShapeNode(x);
39
+ }
40
+ });
41
+ });
42
+
43
+ this.document.visual.update();
44
+ }
45
+
46
+ private explodeShapeNode(x: ShapeNode) {
47
+ const subShapes = x.shape.value.iterShape();
48
+ if (subShapes.length === 1) {
49
+ const subShapeNode = new EditableShapeNode(this.document, x.name, subShapes[0], x.materialId);
50
+ subShapeNode.transform = x.transform;
51
+ x.parent?.insertAfter(x.previousSibling, subShapeNode);
52
+ } else {
53
+ this.groupShapes(x, subShapes);
54
+ }
55
+
56
+ x.parent?.remove(x);
57
+ }
58
+
59
+ private groupShapes(node: ShapeNode, subShapes: IShape[]) {
60
+ const folder = new GroupNode(this.document, node.name);
61
+ folder.transform = node.transform;
62
+ node.parent?.insertAfter(node.previousSibling, folder);
63
+
64
+ let i = 1;
65
+ for (const subShape of subShapes) {
66
+ const name = `${ShapeType.stringValue(subShape.shapeType)} ${i++}`;
67
+ const subShapeNode = new EditableShapeNode(this.document, name, subShape);
68
+ folder.add(subShapeNode);
69
+ }
70
+ }
71
+
72
+ private explodeComponentNode(x: ComponentNode) {
73
+ for (const node of x.component.nodes) {
74
+ const newNode = node.clone();
75
+ newNode.transform = node.transform.multiply(x.transform);
76
+ x.parent?.insertAfter(x.previousSibling, newNode);
77
+ }
78
+
79
+ x.parent?.remove(x);
80
+ }
81
+
82
+ private explodeMultiShapeNode(x: MultiShapeNode) {
83
+ for (const shape of x.shapes) {
84
+ const node = new EditableShapeNode(this.document, x.name, shape.transformed(x.transform));
85
+ x.parent?.insertAfter(x.previousSibling, node);
86
+ }
87
+
88
+ x.parent?.remove(x);
89
+ x.shapes.forEach((x) => x.dispose());
90
+ }
91
+ }
@@ -0,0 +1,69 @@
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
+ EditableShapeNode,
7
+ type ISubEdgeShape,
8
+ Property,
9
+ type ShapeNode,
10
+ ShapeType,
11
+ Transaction,
12
+ VisualState,
13
+ } from "chili-core";
14
+ import { SelectShapeStep } from "../../step/selectStep";
15
+ import { MultistepCommand } from "../multistepCommand";
16
+
17
+ @command({
18
+ key: "modify.fillet",
19
+ icon: "icon-fillet",
20
+ })
21
+ export class FilletCommand extends MultistepCommand {
22
+ @Property.define("circle.radius")
23
+ get radius() {
24
+ return this.getPrivateValue("radius", 10);
25
+ }
26
+
27
+ set radius(value: number) {
28
+ this.setProperty("radius", value);
29
+ }
30
+
31
+ protected override executeMainTask() {
32
+ Transaction.execute(this.document, `excute ${Object.getPrototypeOf(this).data.name}`, () => {
33
+ const node = this.stepDatas[0].shapes[0].owner.node as ShapeNode;
34
+ const edges = this.stepDatas.at(-1)!.shapes.map((x) => (x.shape as ISubEdgeShape).index);
35
+ const filetShape = this.document.application.shapeFactory.fillet(
36
+ node.shape.value,
37
+ edges,
38
+ this.radius,
39
+ );
40
+
41
+ const model = new EditableShapeNode(this.document, node.name, filetShape, node.materialId);
42
+ model.transform = node.transform;
43
+ (node.parent ?? this.document.modelManager.rootNode).add(model);
44
+ node.parent?.remove(node);
45
+ this.document.visual.update();
46
+ });
47
+ }
48
+
49
+ protected override getSteps() {
50
+ return [
51
+ new SelectShapeStep(ShapeType.Shape, "prompt.select.shape", {
52
+ shapeFilter: {
53
+ allow: (shape) => {
54
+ return (
55
+ shape.shapeType === ShapeType.Solid ||
56
+ shape.shapeType === ShapeType.Compound ||
57
+ shape.shapeType === ShapeType.CompoundSolid
58
+ );
59
+ },
60
+ },
61
+ selectedState: VisualState.faceTransparent,
62
+ }),
63
+ new SelectShapeStep(ShapeType.Edge, "prompt.select.edges", {
64
+ multiple: true,
65
+ keepSelection: true,
66
+ }),
67
+ ];
68
+ }
69
+ }
@@ -0,0 +1,16 @@
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 "./array";
5
+ export * from "./break";
6
+ export * from "./brush";
7
+ export * from "./chamfer";
8
+ export * from "./explode";
9
+ export * from "./fillet";
10
+ export * from "./mirror";
11
+ export * from "./move";
12
+ export * from "./removeFeature";
13
+ export * from "./removeSubShapes";
14
+ export * from "./rotate";
15
+ export * from "./split";
16
+ export * from "./trim";
@@ -0,0 +1,49 @@
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, Matrix4, Plane, type ShapeMeshData, type XYZ } from "chili-core";
5
+ import { Dimension, type PointSnapData } from "../../snap";
6
+ import { type IStep, PointStep } from "../../step";
7
+ import { TransformedCommand } from "./transformedCommand";
8
+
9
+ @command({
10
+ key: "modify.mirror",
11
+ icon: "icon-mirror",
12
+ })
13
+ export class Mirror extends TransformedCommand {
14
+ protected override transfrom(point: XYZ): Matrix4 {
15
+ const center = this.stepDatas[0].point!;
16
+ const xvec = this.stepDatas[0].view.workplane.normal;
17
+ const yvec = point.sub(center);
18
+ const normal = yvec.cross(xvec);
19
+ const plane = new Plane(center, normal, xvec);
20
+ return Matrix4.createMirrorWithPlane(plane);
21
+ }
22
+
23
+ getSteps(): IStep[] {
24
+ const firstStep = new PointStep("prompt.pickFistPoint", undefined, true);
25
+ const secondStep = new PointStep("prompt.pickNextPoint", this.getSecondPointData, true);
26
+ return [firstStep, secondStep];
27
+ }
28
+
29
+ private readonly getSecondPointData = (): PointSnapData => {
30
+ return {
31
+ refPoint: () => this.stepDatas[0].point!,
32
+ dimension: Dimension.D1D2,
33
+ preview: this.mirrorPreview,
34
+ validator: (p) => {
35
+ const vec = p.sub(this.stepDatas[0].point!);
36
+ return vec.length() > 1e-3 && !vec.isParallelTo(this.stepDatas[0].view.workplane.normal);
37
+ },
38
+ };
39
+ };
40
+
41
+ private readonly mirrorPreview = (point: XYZ | undefined): ShapeMeshData[] => {
42
+ const p1 = this.meshPoint(this.stepDatas[0].point!);
43
+ if (!point) return [p1];
44
+ const shape = this.transformPreview(point);
45
+ const offset = point.sub(this.stepDatas[0].point!).normalize()!.multiply(1e6);
46
+ const line = this.getTempLineData(this.stepDatas[0].point!.sub(offset), point.add(offset));
47
+ return [p1, shape, line];
48
+ };
49
+ }
@@ -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, Matrix4, type XYZ } from "chili-core";
5
+ import { Dimension, type PointSnapData } from "../../snap";
6
+ import { type IStep, PointStep } from "../../step";
7
+ import { TransformedCommand } from "./transformedCommand";
8
+
9
+ @command({
10
+ key: "modify.move",
11
+ icon: "icon-move",
12
+ })
13
+ export class Move extends TransformedCommand {
14
+ getSteps(): IStep[] {
15
+ return [
16
+ new PointStep("prompt.pickFistPoint", undefined, true),
17
+ new PointStep("prompt.pickNextPoint", this.getSecondPointData, true),
18
+ ];
19
+ }
20
+
21
+ private readonly getSecondPointData = (): PointSnapData => {
22
+ return {
23
+ refPoint: () => this.stepDatas[0].point!,
24
+ dimension: Dimension.D1D2D3,
25
+ preview: this.movePreview,
26
+ };
27
+ };
28
+
29
+ private readonly movePreview = (point: XYZ | undefined) => {
30
+ const p1 = this.meshPoint(this.stepDatas[0].point!);
31
+ if (!point) return [p1];
32
+ return [p1, this.transformPreview(point), this.getTempLineData(this.stepDatas[0].point!, point)];
33
+ };
34
+
35
+ protected override transfrom(point: XYZ): Matrix4 {
36
+ const { x, y, z } = point.sub(this.stepDatas[0].point!);
37
+ return Matrix4.fromTranslation(x, y, z);
38
+ }
39
+ }
@@ -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 {
5
+ command,
6
+ EditableShapeNode,
7
+ type IFace,
8
+ type ShapeNode,
9
+ ShapeType,
10
+ Transaction,
11
+ VisualState,
12
+ } from "chili-core";
13
+ import { SelectShapeStep } from "../../step/selectStep";
14
+ import { MultistepCommand } from "../multistepCommand";
15
+
16
+ @command({
17
+ key: "modify.removeFeature",
18
+ icon: "icon-removeFeature",
19
+ })
20
+ export class RemoveFaceCommand extends MultistepCommand {
21
+ protected override executeMainTask() {
22
+ Transaction.execute(this.document, `excute ${Object.getPrototypeOf(this).data.name}`, () => {
23
+ const node = this.stepDatas[0].shapes[0].owner.node as ShapeNode;
24
+ const faces = this.stepDatas.at(-1)!.shapes.map((x) => x.shape as IFace);
25
+ const filetShape = this.document.application.shapeFactory.removeFeature(node.shape.value, faces);
26
+
27
+ const model = new EditableShapeNode(this.document, node.name, filetShape, node.materialId);
28
+ model.transform = node.transform;
29
+
30
+ this.document.modelManager.addNode(model);
31
+ node.parent?.remove(node);
32
+ this.document.visual.update();
33
+ });
34
+ }
35
+
36
+ protected override getSteps() {
37
+ return [
38
+ new SelectShapeStep(ShapeType.Shape, "prompt.select.shape", {
39
+ shapeFilter: {
40
+ allow: (shape) => {
41
+ return (
42
+ shape.shapeType === ShapeType.Solid ||
43
+ shape.shapeType === ShapeType.Compound ||
44
+ shape.shapeType === ShapeType.CompoundSolid
45
+ );
46
+ },
47
+ },
48
+ selectedState: VisualState.faceTransparent,
49
+ }),
50
+ new SelectShapeStep(ShapeType.Face, "prompt.select.faces", {
51
+ multiple: true,
52
+ keepSelection: true,
53
+ }),
54
+ ];
55
+ }
56
+ }
@@ -0,0 +1,44 @@
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, type ShapeNode, ShapeType, Transaction, VisualState } from "chili-core";
5
+ import { SelectShapeStep } from "../../step/selectStep";
6
+ import { MultistepCommand } from "../multistepCommand";
7
+
8
+ @command({
9
+ key: "modify.removeShapes",
10
+ icon: "icon-removeSubShape",
11
+ })
12
+ export class RemoveSubShapesCommand extends MultistepCommand {
13
+ protected override executeMainTask() {
14
+ Transaction.execute(this.document, `excute ${Object.getPrototypeOf(this).data.name}`, () => {
15
+ const node = this.stepDatas[0].shapes[0].owner.node as ShapeNode;
16
+ const subShapes = this.stepDatas.at(-1)!.shapes.map((x) => x.shape);
17
+ const shape = this.document.application.shapeFactory.removeSubShape(node.shape.value, subShapes);
18
+
19
+ const model = new EditableShapeNode(this.document, node.name, shape, node.materialId);
20
+ model.transform = node.transform;
21
+
22
+ node.parent?.insertAfter(node.previousSibling, model);
23
+ node.parent?.remove(node);
24
+ this.document.visual.update();
25
+ });
26
+ }
27
+
28
+ protected override getSteps() {
29
+ return [
30
+ new SelectShapeStep(ShapeType.Shape, "prompt.select.shape", {
31
+ shapeFilter: {
32
+ allow: (shape) => {
33
+ return shape.shapeType !== ShapeType.Vertex && shape.shapeType !== ShapeType.Edge;
34
+ },
35
+ },
36
+ selectedState: VisualState.faceTransparent,
37
+ }),
38
+ new SelectShapeStep(ShapeType.Edge | ShapeType.Face, "prompt.select.shape", {
39
+ multiple: true,
40
+ keepSelection: true,
41
+ }),
42
+ ];
43
+ }
44
+ }
@@ -0,0 +1,112 @@
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, Matrix4, Precision, type ShapeMeshData, type XYZ } from "chili-core";
5
+ import { Dimension, type PointSnapData, type SnapLengthAtPlaneData } from "../../snap";
6
+ import { AngleStep, type IStep, LengthAtPlaneStep, PointStep } from "../../step";
7
+ import { TransformedCommand } from "./transformedCommand";
8
+
9
+ @command({
10
+ key: "modify.rotate",
11
+ icon: "icon-rotate",
12
+ })
13
+ export class Rotate extends TransformedCommand {
14
+ protected override transfrom(point: XYZ): Matrix4 {
15
+ const normal = this.stepDatas[1].plane!.normal;
16
+ const center = this.stepDatas[0].point!;
17
+ const angle = this.getAngle(point);
18
+ return Matrix4.fromAxisRad(center, normal, angle);
19
+ }
20
+
21
+ getSteps(): IStep[] {
22
+ const firstStep = new PointStep("prompt.pickFistPoint", undefined, true);
23
+ const secondStep = new LengthAtPlaneStep("prompt.pickNextPoint", this.getSecondPointData, true);
24
+ const thirdStep = new AngleStep(
25
+ "prompt.pickNextPoint",
26
+ () => this.stepDatas[0].point!,
27
+ () => this.stepDatas[1].point!,
28
+ this.getThirdPointData,
29
+ true,
30
+ );
31
+ return [firstStep, secondStep, thirdStep];
32
+ }
33
+
34
+ private readonly getSecondPointData = (): SnapLengthAtPlaneData => {
35
+ const { point, view } = this.stepDatas[0];
36
+ return {
37
+ point: () => point!,
38
+ preview: this.circlePreview,
39
+ plane: (p: XYZ | undefined) => this.findPlane(view, point!, p),
40
+ validator: (p: XYZ) => {
41
+ if (p.distanceTo(point!) < Precision.Distance) return false;
42
+ return p.sub(point!).isParallelTo(this.stepDatas[0].view.workplane.normal) === false;
43
+ },
44
+ };
45
+ };
46
+
47
+ private readonly circlePreview = (end: XYZ | undefined) => {
48
+ const visualCenter = this.meshPoint(this.stepDatas[0].point!);
49
+ if (!end) return [visualCenter];
50
+ const { point, view } = this.stepDatas[0];
51
+ const plane = this.findPlane(view, point!, end);
52
+ return [
53
+ visualCenter,
54
+ this.meshLine(this.stepDatas[0].point!, end),
55
+ this.meshCreatedShape("circle", plane.normal, point!, plane.projectDistance(point!, end)),
56
+ ];
57
+ };
58
+
59
+ private readonly getThirdPointData = (): PointSnapData => {
60
+ return {
61
+ dimension: Dimension.D1D2,
62
+ preview: this.anglePreview,
63
+ plane: () => this.stepDatas[1].plane!,
64
+ validator: (p) => {
65
+ return (
66
+ p.distanceTo(this.stepDatas[0].point!) > 1e-3 &&
67
+ p.distanceTo(this.stepDatas[1].point!) > 1e-3
68
+ );
69
+ },
70
+ };
71
+ };
72
+
73
+ private getAngle(point: XYZ) {
74
+ const normal = this.stepDatas[1].plane!.normal;
75
+ const center = this.stepDatas[0].point!;
76
+ const p1 = this.stepDatas[1].point!;
77
+ const v1 = p1.sub(center);
78
+ const v2 = point.sub(center);
79
+ return v1.angleOnPlaneTo(v2, normal)!;
80
+ }
81
+
82
+ private readonly anglePreview = (point: XYZ | undefined): ShapeMeshData[] => {
83
+ point = point ?? this.stepDatas[1].point!;
84
+ const result = [
85
+ this.transformPreview(point),
86
+ this.meshPoint(this.stepDatas[0].point!),
87
+ this.meshPoint(this.stepDatas[1].point!),
88
+ this.getRayData(this.stepDatas[1].point!),
89
+ this.getRayData(point),
90
+ ];
91
+
92
+ const angle = this.getAngle(point);
93
+ if (Math.abs(angle) > Precision.Angle) {
94
+ result.push(
95
+ this.meshCreatedShape(
96
+ "arc",
97
+ this.stepDatas[1].plane!.normal,
98
+ this.stepDatas[0].point!,
99
+ this.stepDatas[1].point!,
100
+ (angle * 180) / Math.PI,
101
+ ),
102
+ );
103
+ }
104
+ return result;
105
+ };
106
+
107
+ private getRayData(end: XYZ) {
108
+ const center = this.stepDatas[0].point!;
109
+ const rayEnd = center.add(end.sub(center).normalize()!.multiply(1e6));
110
+ return this.getTempLineData(center, rayEnd);
111
+ }
112
+ }
@@ -0,0 +1,81 @@
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
+ EditableShapeNode,
7
+ type IEdge,
8
+ type IVisualObject,
9
+ ShapeType,
10
+ Transaction,
11
+ VisualState,
12
+ } from "chili-core";
13
+ import type { IStep } from "../../step";
14
+ import { SelectShapeStep } from "../../step/selectStep";
15
+ import { MultistepCommand } from "../multistepCommand";
16
+
17
+ @command({
18
+ key: "modify.split",
19
+ icon: "icon-split",
20
+ })
21
+ export class Split extends MultistepCommand {
22
+ private splitedShape() {
23
+ const shape1 = this.stepDatas[0].shapes[0].shape;
24
+ const invertTransform = this.stepDatas[0].shapes[0].transform.invert()!;
25
+ const edges = this.stepDatas[1].shapes.map((x) =>
26
+ x.shape.transformedMul(x.transform.multiply(invertTransform)),
27
+ ) as IEdge[];
28
+ const result = shape1.split(edges);
29
+
30
+ edges.forEach((x) => x.dispose());
31
+
32
+ return result;
33
+ }
34
+
35
+ protected override executeMainTask() {
36
+ Transaction.execute(this.document, `excute ${Object.getPrototypeOf(this).data.name}`, () => {
37
+ const old = this.stepDatas[0].nodes![0];
38
+ const shape = this.splitedShape();
39
+ const subShapes = shape.iterShape();
40
+ if (subShapes.length > 1) {
41
+ let i = 1;
42
+ old.parent?.add(
43
+ ...subShapes.map((x) => {
44
+ const model = new EditableShapeNode(this.document, old.name + i++, x);
45
+ model.transform = old.transform;
46
+ return model;
47
+ }),
48
+ );
49
+ } else {
50
+ const model = new EditableShapeNode(this.document, old.name, shape);
51
+ model.transform = old.transform;
52
+ old.parent?.add(model);
53
+ }
54
+
55
+ this.removeModels(
56
+ this.stepDatas[0].shapes[0].owner,
57
+ ...this.stepDatas[1].shapes.map((x) => x.owner),
58
+ );
59
+ this.document.visual.update();
60
+ });
61
+ }
62
+
63
+ private removeModels(...shapes: IVisualObject[]) {
64
+ shapes.forEach((x) => {
65
+ const model = this.document.visual.context.getNode(x);
66
+ model?.parent?.remove(model);
67
+ });
68
+ }
69
+
70
+ protected override getSteps(): IStep[] {
71
+ return [
72
+ new SelectShapeStep(ShapeType.Shape, "prompt.select.shape", {
73
+ selectedState: VisualState.faceTransparent,
74
+ }),
75
+ new SelectShapeStep(ShapeType.Edge | ShapeType.Wire | ShapeType.Face, "prompt.select.shape", {
76
+ multiple: true,
77
+ keepSelection: true,
78
+ }),
79
+ ];
80
+ }
81
+ }
@@ -0,0 +1,100 @@
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
+ BoundingBox,
7
+ ComponentNode,
8
+ EdgeMeshData,
9
+ GeometryNode,
10
+ LineType,
11
+ type Matrix4,
12
+ MeshNode,
13
+ Property,
14
+ PubSub,
15
+ Transaction,
16
+ VisualConfig,
17
+ VisualNode,
18
+ type XYZ,
19
+ } from "chili-core";
20
+ import { MultistepCommand } from "../multistepCommand";
21
+
22
+ export abstract class TransformedCommand extends MultistepCommand {
23
+ protected models?: VisualNode[];
24
+ protected positions?: number[];
25
+
26
+ @Property.define("common.clone")
27
+ get isClone() {
28
+ return this.getPrivateValue("isClone", false);
29
+ }
30
+ set isClone(value: boolean) {
31
+ this.setProperty("isClone", value);
32
+ }
33
+
34
+ protected abstract transfrom(p2: XYZ): Matrix4;
35
+
36
+ protected transformPreview = (point: XYZ): EdgeMeshData => {
37
+ const transform = this.transfrom(point);
38
+ const positions = transform.ofPoints(this.positions!);
39
+ return {
40
+ position: new Float32Array(positions),
41
+ lineType: LineType.Solid,
42
+ color: VisualConfig.defaultEdgeColor,
43
+ range: [],
44
+ };
45
+ };
46
+
47
+ private async ensureSelectedModels() {
48
+ this.models = this.document.selection.getSelectedNodes().filter((x) => x instanceof VisualNode);
49
+ if (this.models.length > 0) return true;
50
+
51
+ this.controller = new AsyncController();
52
+ this.models = await this.document.selection.pickNode("prompt.select.models", this.controller, true);
53
+
54
+ if (this.models.length > 0) return true;
55
+ if (this.controller.result?.status === "success") {
56
+ PubSub.default.pub("showToast", "toast.select.noSelected");
57
+ }
58
+ return false;
59
+ }
60
+
61
+ protected override async canExcute(): Promise<boolean> {
62
+ if (!(await this.ensureSelectedModels())) return false;
63
+
64
+ this.positions = this.models!.flatMap((model) => {
65
+ if (model instanceof MeshNode) {
66
+ return model.mesh.position ? model.transform.ofPoints(model.mesh.position) : [];
67
+ } else if (model instanceof GeometryNode) {
68
+ return model.mesh.edges?.position ? model.transform.ofPoints(model.mesh.edges.position) : [];
69
+ } else if (model instanceof ComponentNode) {
70
+ return Array.from(BoundingBox.wireframe(model.boundingBox()!).position);
71
+ }
72
+ return [];
73
+ });
74
+ return true;
75
+ }
76
+
77
+ protected getTempLineData(start: XYZ, end: XYZ) {
78
+ return EdgeMeshData.from(start, end, VisualConfig.temporaryEdgeColor, LineType.Solid);
79
+ }
80
+
81
+ protected executeMainTask(): void {
82
+ Transaction.execute(this.document, `excute ${Object.getPrototypeOf(this).data.name}`, () => {
83
+ const transform = this.transfrom(this.stepDatas.at(-1)!.point!);
84
+
85
+ if (this.isClone) {
86
+ this.models?.forEach((x) => {
87
+ const clone = x.clone();
88
+ clone.transform = x.transform.multiply(transform);
89
+ x.parent?.insertAfter(x, clone);
90
+ });
91
+ } else {
92
+ this.models?.forEach((x) => {
93
+ x.transform = x.transform.multiply(transform);
94
+ });
95
+ }
96
+
97
+ this.document.visual.update();
98
+ });
99
+ }
100
+ }