rayforge 1.3.2__tar.gz → 1.4__tar.gz

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 (1313) hide show
  1. rayforge-1.4/PKG-INFO +115 -0
  2. rayforge-1.4/data/org.rayforge.rayforge.metainfo.xml +531 -0
  3. rayforge-1.4/rayforge/addon_mgr/addon_manager.py +1733 -0
  4. rayforge-1.4/rayforge/addon_mgr/lazy_loader.py +148 -0
  5. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-ai-workpiece/ai_workpiece_generator/generator.py +104 -0
  6. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-ai-workpiece/ai_workpiece_generator/widgets/dialog.py +281 -0
  7. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/ai_workpiece_generator.pot +64 -0
  8. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/de/LC_MESSAGES/ai_workpiece_generator.mo +0 -0
  9. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/de/LC_MESSAGES/ai_workpiece_generator.po +70 -0
  10. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/en/LC_MESSAGES/ai_workpiece_generator.mo +0 -0
  11. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/en/LC_MESSAGES/ai_workpiece_generator.po +67 -0
  12. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/es/LC_MESSAGES/ai_workpiece_generator.mo +0 -0
  13. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/es/LC_MESSAGES/ai_workpiece_generator.po +69 -0
  14. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/fr/LC_MESSAGES/ai_workpiece_generator.mo +0 -0
  15. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/fr/LC_MESSAGES/ai_workpiece_generator.po +69 -0
  16. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/pt/LC_MESSAGES/ai_workpiece_generator.mo +0 -0
  17. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/pt/LC_MESSAGES/ai_workpiece_generator.po +68 -0
  18. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/uk/LC_MESSAGES/ai_workpiece_generator.mo +0 -0
  19. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/uk/LC_MESSAGES/ai_workpiece_generator.po +69 -0
  20. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/zh_CN/LC_MESSAGES/ai_workpiece_generator.mo +0 -0
  21. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/zh_CN/LC_MESSAGES/ai_workpiece_generator.po +63 -0
  22. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/backend.py +89 -0
  23. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/commands/material_test_cmd.py +190 -0
  24. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/producers/material_test_grid_producer.py +481 -0
  25. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/steps/contour_step.py +78 -0
  26. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/steps/frame_step.py +72 -0
  27. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/steps/shrinkwrap_step.py +75 -0
  28. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-laser/tests/steps/test_contour_step.py +192 -0
  29. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-post/locale/de/LC_MESSAGES/post_processors.mo +0 -0
  30. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-post/locale/de/LC_MESSAGES/post_processors.po +313 -0
  31. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-post/locale/en/LC_MESSAGES/post_processors.po +303 -0
  32. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-post/locale/es/LC_MESSAGES/post_processors.mo +0 -0
  33. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-post/locale/es/LC_MESSAGES/post_processors.po +311 -0
  34. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-post/locale/fr/LC_MESSAGES/post_processors.mo +0 -0
  35. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-post/locale/fr/LC_MESSAGES/post_processors.po +315 -0
  36. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-post/locale/post_processors.pot +303 -0
  37. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-post/locale/pt/LC_MESSAGES/post_processors.mo +0 -0
  38. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-post/locale/pt/LC_MESSAGES/post_processors.po +309 -0
  39. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-post/locale/uk/LC_MESSAGES/post_processors.mo +0 -0
  40. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-post/locale/uk/LC_MESSAGES/post_processors.po +310 -0
  41. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-post/locale/zh_CN/LC_MESSAGES/post_processors.mo +0 -0
  42. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-post/locale/zh_CN/LC_MESSAGES/post_processors.po +302 -0
  43. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-post/post_processors/backend.py +39 -0
  44. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-post/post_processors/transformers/__init__.py +32 -0
  45. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-post/post_processors/transformers/merge_lines_transformer.py +473 -0
  46. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-post/post_processors/widgets/__init__.py +27 -0
  47. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-post/post_processors/widgets/merge_lines_widget.py +104 -0
  48. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-post/tests/transformers/test_merge_lines_transformer.py +252 -0
  49. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/locale/de/LC_MESSAGES/sketcher.mo +0 -0
  50. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/locale/de/LC_MESSAGES/sketcher.po +678 -0
  51. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/locale/en/LC_MESSAGES/sketcher.po +678 -0
  52. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/locale/es/LC_MESSAGES/sketcher.mo +0 -0
  53. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/locale/es/LC_MESSAGES/sketcher.po +678 -0
  54. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/locale/fr/LC_MESSAGES/sketcher.mo +0 -0
  55. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/locale/fr/LC_MESSAGES/sketcher.po +681 -0
  56. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/locale/pt/LC_MESSAGES/sketcher.mo +0 -0
  57. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/locale/pt/LC_MESSAGES/sketcher.po +678 -0
  58. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/locale/sketcher.pot +697 -0
  59. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/locale/uk/LC_MESSAGES/sketcher.mo +0 -0
  60. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/locale/uk/LC_MESSAGES/sketcher.po +679 -0
  61. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/locale/zh_CN/LC_MESSAGES/sketcher.mo +0 -0
  62. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/locale/zh_CN/LC_MESSAGES/sketcher.po +678 -0
  63. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/__init__.py +93 -0
  64. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/base.py +205 -0
  65. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/bezier.py +463 -0
  66. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/ellipse.py +298 -0
  67. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/fill.py +72 -0
  68. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/items.py +250 -0
  69. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/point.py +228 -0
  70. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/constraints/distance.py +299 -0
  71. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/constraints/equal_distance.py +234 -0
  72. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/constraints/equal_length.py +329 -0
  73. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/constraints/symmetry.py +288 -0
  74. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/entities/__init__.py +19 -0
  75. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/entities/ellipse.py +234 -0
  76. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/entities/entity.py +184 -0
  77. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/entities/line.py +131 -0
  78. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/registry.py +252 -0
  79. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/sketch.py +1490 -0
  80. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/snap/__init__.py +24 -0
  81. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/snap/engine.py +235 -0
  82. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/snap/producers/__init__.py +20 -0
  83. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/snap/producers/centers.py +97 -0
  84. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/snap/producers/entity_points.py +60 -0
  85. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/snap/producers/equidistant.py +168 -0
  86. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/snap/producers/intersections.py +279 -0
  87. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/snap/producers/midpoints.py +77 -0
  88. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/snap/producers/on_entity.py +161 -0
  89. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/snap/spatial.py +90 -0
  90. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/snap/types.py +183 -0
  91. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/image/importer.py +189 -0
  92. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/image/renderer.py +333 -0
  93. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/hittest.py +254 -0
  94. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/renderer.py +1110 -0
  95. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/sketchcanvas.py +465 -0
  96. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/sketchelement.py +402 -0
  97. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/studio.py +546 -0
  98. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/__init__.py +123 -0
  99. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/arc_tool.py +336 -0
  100. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/base.py +160 -0
  101. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/circle_tool.py +196 -0
  102. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/coincident_constraint_tool.py +97 -0
  103. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/fill_tool.py +87 -0
  104. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/path_tool.py +624 -0
  105. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/rectangle_tool.py +303 -0
  106. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/select_tool.py +888 -0
  107. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/snap_mixin.py +512 -0
  108. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/commands/test_ellipse_cmd.py +451 -0
  109. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/commands/test_fill_cmd.py +163 -0
  110. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/constraints/test_equal_length_constraint.py +504 -0
  111. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/entities/test_ellipse_entity.py +377 -0
  112. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/snap/producers/test_producer_centers.py +361 -0
  113. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/snap/producers/test_producer_entity_points.py +328 -0
  114. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/snap/producers/test_producer_equidistant.py +476 -0
  115. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/snap/producers/test_producer_intersections.py +538 -0
  116. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/snap/producers/test_producer_midpoints.py +338 -0
  117. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/snap/producers/test_producer_on_entity.py +434 -0
  118. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/snap/test_snap_engine.py +399 -0
  119. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/snap/test_snap_spatial.py +377 -0
  120. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/snap/test_snap_types.py +289 -0
  121. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/test_sketch_fill_methods.py +211 -0
  122. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/test_sketcher_sketch.py +1248 -0
  123. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/tests/image/test_sketch_importer.py +418 -0
  124. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/tests/ui_gtk/tools/test_arc_tool.py +160 -0
  125. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/tests/ui_gtk/tools/test_circle_tool.py +634 -0
  126. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/tests/ui_gtk/tools/test_path_tool.py +312 -0
  127. rayforge-1.4/rayforge/builtin_addons/rayforge-addon-sketcher/tests/ui_gtk/tools/test_rectangle_tool.py +245 -0
  128. rayforge-1.4/rayforge/camera/calibration/__init__.py +10 -0
  129. rayforge-1.4/rayforge/camera/calibration/calibrator.py +240 -0
  130. rayforge-1.4/rayforge/camera/calibration/charuco.py +208 -0
  131. rayforge-1.4/rayforge/camera/calibration/result.py +135 -0
  132. rayforge-1.4/rayforge/camera/controller.py +728 -0
  133. rayforge-1.4/rayforge/camera/models/camera.py +575 -0
  134. rayforge-1.4/rayforge/core/ai/__init__.py +21 -0
  135. rayforge-1.4/rayforge/core/ai/ai_service.py +240 -0
  136. rayforge-1.4/rayforge/core/ai/openai_provider.py +159 -0
  137. rayforge-1.4/rayforge/core/ai/provider.py +152 -0
  138. rayforge-1.4/rayforge/core/asset.py +103 -0
  139. rayforge-1.4/rayforge/core/config.py +284 -0
  140. rayforge-1.4/rayforge/core/geo/contours.py +465 -0
  141. rayforge-1.4/rayforge/core/geo/polygon.py +869 -0
  142. rayforge-1.4/rayforge/core/geo/transform.py +632 -0
  143. rayforge-1.4/rayforge/core/geometry_provider.py +65 -0
  144. rayforge-1.4/rayforge/core/layer.py +294 -0
  145. rayforge-1.4/rayforge/core/ops/__init__.py +62 -0
  146. rayforge-1.4/rayforge/core/ops/commands.py +542 -0
  147. rayforge-1.4/rayforge/core/ops/container.py +1616 -0
  148. rayforge-1.4/rayforge/core/stock.py +275 -0
  149. rayforge-1.4/rayforge/core/vectorization_spec.py +100 -0
  150. rayforge-1.4/rayforge/core/workflow.py +140 -0
  151. rayforge-1.4/rayforge/core/workpiece.py +1487 -0
  152. rayforge-1.4/rayforge/doceditor/editor.py +538 -0
  153. rayforge-1.4/rayforge/doceditor/layer_cmd.py +251 -0
  154. rayforge-1.4/rayforge/image/material_test_grid_renderer.py +167 -0
  155. rayforge-1.4/rayforge/image/pdf/__init__.py +5 -0
  156. rayforge-1.4/rayforge/image/pdf/importer.py +85 -0
  157. rayforge-1.4/rayforge/image/pdf/pdf_trace.py +231 -0
  158. rayforge-1.4/rayforge/image/pdf/pdf_vector.py +701 -0
  159. rayforge-1.4/rayforge/image/pdf/renderer.py +159 -0
  160. rayforge-1.4/rayforge/image/structures.py +361 -0
  161. rayforge-1.4/rayforge/image/svg/svg_base.py +514 -0
  162. rayforge-1.4/rayforge/image/svg/svgutil.py +350 -0
  163. rayforge-1.4/rayforge/locale/de/LC_MESSAGES/rayforge.mo +0 -0
  164. rayforge-1.4/rayforge/locale/es/LC_MESSAGES/rayforge.mo +0 -0
  165. rayforge-1.4/rayforge/locale/fr/LC_MESSAGES/rayforge.mo +0 -0
  166. rayforge-1.4/rayforge/locale/pt/LC_MESSAGES/rayforge.mo +0 -0
  167. rayforge-1.4/rayforge/locale/uk/LC_MESSAGES/rayforge.mo +0 -0
  168. rayforge-1.4/rayforge/locale/zh_CN/LC_MESSAGES/rayforge.mo +0 -0
  169. rayforge-1.4/rayforge/machine/cmd.py +418 -0
  170. rayforge-1.4/rayforge/machine/driver/driver.py +542 -0
  171. rayforge-1.4/rayforge/machine/driver/dummy.py +255 -0
  172. rayforge-1.4/rayforge/machine/driver/grbl.py +806 -0
  173. rayforge-1.4/rayforge/machine/driver/grbl_serial.py +1296 -0
  174. rayforge-1.4/rayforge/machine/driver/grbl_util.py +989 -0
  175. rayforge-1.4/rayforge/machine/driver/smoothie.py +479 -0
  176. rayforge-1.4/rayforge/machine/models/controller.py +641 -0
  177. rayforge-1.4/rayforge/machine/models/dialect/base.py +228 -0
  178. rayforge-1.4/rayforge/machine/models/dialect/grbl.py +36 -0
  179. rayforge-1.4/rayforge/machine/models/dialect/grbl_dynamic.py +36 -0
  180. rayforge-1.4/rayforge/machine/models/dialect/mach4_m67.py +37 -0
  181. rayforge-1.4/rayforge/machine/models/dialect/marlin.py +35 -0
  182. rayforge-1.4/rayforge/machine/models/dialect/smoothieware.py +33 -0
  183. rayforge-1.4/rayforge/machine/models/dialect_manager.py +157 -0
  184. rayforge-1.4/rayforge/machine/models/laser.py +164 -0
  185. rayforge-1.4/rayforge/machine/models/machine.py +1337 -0
  186. rayforge-1.4/rayforge/machine/models/manager.py +243 -0
  187. rayforge-1.4/rayforge/machine/models/profile.py +355 -0
  188. rayforge-1.4/rayforge/machine/models/rotary_module.py +132 -0
  189. rayforge-1.4/rayforge/pipeline/coordspace.py +751 -0
  190. rayforge-1.4/rayforge/pipeline/encoder/gcode.py +613 -0
  191. rayforge-1.4/rayforge/pipeline/encoder/vertexencoder.py +288 -0
  192. rayforge-1.4/rayforge/pipeline/pipeline.py +1297 -0
  193. rayforge-1.4/rayforge/pipeline/stage/step_compute.py +307 -0
  194. rayforge-1.4/rayforge/resources/icons/image-x-generic-symbolic.svg +43 -0
  195. rayforge-1.4/rayforge/resources/icons/rotary-symbolic.svg +76 -0
  196. rayforge-1.4/rayforge/resources/icons/terminal-symbolic.svg +39 -0
  197. rayforge-1.4/rayforge/shared/gcodeedit/highlighter.py +194 -0
  198. rayforge-1.4/rayforge/shared/util/versioning.py +235 -0
  199. rayforge-1.4/rayforge/ui_gtk/actions.py +741 -0
  200. rayforge-1.4/rayforge/ui_gtk/addon_manager/addon_dialog.py +282 -0
  201. rayforge-1.4/rayforge/ui_gtk/addon_manager/addon_list.py +495 -0
  202. rayforge-1.4/rayforge/ui_gtk/camera/calibration_wizard.py +714 -0
  203. rayforge-1.4/rayforge/ui_gtk/camera/camera_preferences_page.py +379 -0
  204. rayforge-1.4/rayforge/ui_gtk/camera/display_widget.py +164 -0
  205. rayforge-1.4/rayforge/ui_gtk/camera/image_settings_dialog.py +329 -0
  206. rayforge-1.4/rayforge/ui_gtk/canvas/axis.py +544 -0
  207. rayforge-1.4/rayforge/ui_gtk/canvas/worldsurface.py +423 -0
  208. rayforge-1.4/rayforge/ui_gtk/canvas2d/elements/axis_extent_frame.py +87 -0
  209. rayforge-1.4/rayforge/ui_gtk/canvas2d/elements/rotary_surface.py +97 -0
  210. rayforge-1.4/rayforge/ui_gtk/canvas2d/surface.py +1369 -0
  211. rayforge-1.4/rayforge/ui_gtk/canvas3d/axis_renderer_3d.py +492 -0
  212. rayforge-1.4/rayforge/ui_gtk/canvas3d/canvas3d.py +1262 -0
  213. rayforge-1.4/rayforge/ui_gtk/canvas3d/cylinder_renderer.py +121 -0
  214. rayforge-1.4/rayforge/ui_gtk/canvas3d/scene_assembler.py +84 -0
  215. rayforge-1.4/rayforge/ui_gtk/canvas3d/texture_renderer.py +546 -0
  216. rayforge-1.4/rayforge/ui_gtk/doceditor/asset_list_view.py +240 -0
  217. rayforge-1.4/rayforge/ui_gtk/doceditor/edit_recipe_dialog.py +342 -0
  218. rayforge-1.4/rayforge/ui_gtk/doceditor/import_dialog.py +601 -0
  219. rayforge-1.4/rayforge/ui_gtk/doceditor/layer_list.py +156 -0
  220. rayforge-1.4/rayforge/ui_gtk/doceditor/layer_settings_dialog.py +131 -0
  221. rayforge-1.4/rayforge/ui_gtk/doceditor/layer_view.py +276 -0
  222. rayforge-1.4/rayforge/ui_gtk/doceditor/material_library_list.py +324 -0
  223. rayforge-1.4/rayforge/ui_gtk/doceditor/material_list.py +313 -0
  224. rayforge-1.4/rayforge/ui_gtk/doceditor/property_providers/transform.py +601 -0
  225. rayforge-1.4/rayforge/ui_gtk/doceditor/recipe_list.py +214 -0
  226. rayforge-1.4/rayforge/ui_gtk/doceditor/workflow_view.py +197 -0
  227. rayforge-1.4/rayforge/ui_gtk/machine/control_panel.py +535 -0
  228. rayforge-1.4/rayforge/ui_gtk/machine/device_settings_page.py +404 -0
  229. rayforge-1.4/rayforge/ui_gtk/machine/dialect_editor.py +301 -0
  230. rayforge-1.4/rayforge/ui_gtk/machine/dialect_list.py +213 -0
  231. rayforge-1.4/rayforge/ui_gtk/machine/general_preferences_page.py +329 -0
  232. rayforge-1.4/rayforge/ui_gtk/machine/hardware_page.py +416 -0
  233. rayforge-1.4/rayforge/ui_gtk/machine/laser_preferences_page.py +627 -0
  234. rayforge-1.4/rayforge/ui_gtk/machine/macro_list.py +145 -0
  235. rayforge-1.4/rayforge/ui_gtk/machine/rotary_module_page.py +531 -0
  236. rayforge-1.4/rayforge/ui_gtk/machine/settings_dialog.py +259 -0
  237. rayforge-1.4/rayforge/ui_gtk/machine/template_selector.py +99 -0
  238. rayforge-1.4/rayforge/ui_gtk/main_menu.py +280 -0
  239. rayforge-1.4/rayforge/ui_gtk/mainwindow.py +2155 -0
  240. rayforge-1.4/rayforge/ui_gtk/project_cmd.py +296 -0
  241. rayforge-1.4/rayforge/ui_gtk/settings/ai_settings_page.py +562 -0
  242. rayforge-1.4/rayforge/ui_gtk/settings/machine_settings_page.py +234 -0
  243. rayforge-1.4/rayforge/ui_gtk/shared/expander.py +167 -0
  244. rayforge-1.4/rayforge/ui_gtk/shared/icon_tab_widget.py +85 -0
  245. rayforge-1.4/rayforge/ui_gtk/toolbar.py +395 -0
  246. rayforge-1.4/rayforge/ui_gtk/varset/varsetwidget.py +287 -0
  247. rayforge-1.4/rayforge/ui_gtk/view_mode_cmd.py +110 -0
  248. rayforge-1.4/rayforge/worker_init.py +171 -0
  249. rayforge-1.4/rayforge.egg-info/PKG-INFO +115 -0
  250. rayforge-1.4/rayforge.egg-info/SOURCES.txt +1103 -0
  251. rayforge-1.4/rayforge.egg-info/requires.txt +31 -0
  252. rayforge-1.4/requirements.txt +24 -0
  253. rayforge-1.3.2/PKG-INFO +0 -114
  254. rayforge-1.3.2/data/org.rayforge.rayforge.metainfo.xml +0 -460
  255. rayforge-1.3.2/rayforge/addon_mgr/addon_manager.py +0 -1474
  256. rayforge-1.3.2/rayforge/addon_mgr/lazy_loader.py +0 -137
  257. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-ai-workpiece/ai_workpiece_generator/generator.py +0 -122
  258. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-ai-workpiece/ai_workpiece_generator/widgets/dialog.py +0 -284
  259. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/ai_workpiece_generator.pot +0 -101
  260. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/de/LC_MESSAGES/ai_workpiece_generator.mo +0 -0
  261. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/de/LC_MESSAGES/ai_workpiece_generator.po +0 -109
  262. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/en/LC_MESSAGES/ai_workpiece_generator.mo +0 -0
  263. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/en/LC_MESSAGES/ai_workpiece_generator.po +0 -104
  264. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/es/LC_MESSAGES/ai_workpiece_generator.mo +0 -0
  265. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/es/LC_MESSAGES/ai_workpiece_generator.po +0 -107
  266. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/fr/LC_MESSAGES/ai_workpiece_generator.mo +0 -0
  267. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/fr/LC_MESSAGES/ai_workpiece_generator.po +0 -106
  268. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/pt/LC_MESSAGES/ai_workpiece_generator.mo +0 -0
  269. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/pt/LC_MESSAGES/ai_workpiece_generator.po +0 -105
  270. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/uk/LC_MESSAGES/ai_workpiece_generator.mo +0 -0
  271. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/uk/LC_MESSAGES/ai_workpiece_generator.po +0 -106
  272. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/zh_CN/LC_MESSAGES/ai_workpiece_generator.mo +0 -0
  273. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-ai-workpiece/locale/zh_CN/LC_MESSAGES/ai_workpiece_generator.po +0 -100
  274. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/backend.py +0 -84
  275. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/commands/material_test_cmd.py +0 -165
  276. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/producers/material_test_grid_producer.py +0 -478
  277. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/steps/contour_step.py +0 -73
  278. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/steps/frame_step.py +0 -67
  279. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/steps/shrinkwrap_step.py +0 -70
  280. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-laser/tests/steps/test_contour_step.py +0 -191
  281. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-post/locale/de/LC_MESSAGES/post_processors.mo +0 -0
  282. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-post/locale/de/LC_MESSAGES/post_processors.po +0 -278
  283. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-post/locale/en/LC_MESSAGES/post_processors.po +0 -271
  284. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-post/locale/es/LC_MESSAGES/post_processors.mo +0 -0
  285. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-post/locale/es/LC_MESSAGES/post_processors.po +0 -279
  286. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-post/locale/fr/LC_MESSAGES/post_processors.mo +0 -0
  287. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-post/locale/fr/LC_MESSAGES/post_processors.po +0 -280
  288. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-post/locale/post_processors.pot +0 -271
  289. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-post/locale/pt/LC_MESSAGES/post_processors.mo +0 -0
  290. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-post/locale/pt/LC_MESSAGES/post_processors.po +0 -277
  291. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-post/locale/uk/LC_MESSAGES/post_processors.mo +0 -0
  292. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-post/locale/uk/LC_MESSAGES/post_processors.po +0 -277
  293. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-post/locale/zh_CN/LC_MESSAGES/post_processors.mo +0 -0
  294. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-post/locale/zh_CN/LC_MESSAGES/post_processors.po +0 -270
  295. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-post/post_processors/backend.py +0 -37
  296. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-post/post_processors/transformers/__init__.py +0 -30
  297. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-post/post_processors/widgets/__init__.py +0 -24
  298. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/locale/de/LC_MESSAGES/sketcher.mo +0 -0
  299. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/locale/de/LC_MESSAGES/sketcher.po +0 -655
  300. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/locale/en/LC_MESSAGES/sketcher.po +0 -655
  301. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/locale/es/LC_MESSAGES/sketcher.mo +0 -0
  302. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/locale/es/LC_MESSAGES/sketcher.po +0 -655
  303. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/locale/fr/LC_MESSAGES/sketcher.mo +0 -0
  304. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/locale/fr/LC_MESSAGES/sketcher.po +0 -658
  305. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/locale/pt/LC_MESSAGES/sketcher.mo +0 -0
  306. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/locale/pt/LC_MESSAGES/sketcher.po +0 -655
  307. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/locale/sketcher.pot +0 -674
  308. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/locale/uk/LC_MESSAGES/sketcher.mo +0 -0
  309. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/locale/uk/LC_MESSAGES/sketcher.po +0 -656
  310. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/locale/zh_CN/LC_MESSAGES/sketcher.mo +0 -0
  311. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/locale/zh_CN/LC_MESSAGES/sketcher.po +0 -655
  312. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/__init__.py +0 -90
  313. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/base.py +0 -192
  314. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/bezier.py +0 -461
  315. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/fill.py +0 -56
  316. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/items.py +0 -245
  317. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/point.py +0 -215
  318. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/constraints/distance.py +0 -286
  319. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/constraints/equal_distance.py +0 -148
  320. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/constraints/equal_length.py +0 -294
  321. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/constraints/symmetry.py +0 -282
  322. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/entities/__init__.py +0 -17
  323. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/entities/entity.py +0 -160
  324. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/entities/line.py +0 -129
  325. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/registry.py +0 -216
  326. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/sketch.py +0 -1394
  327. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/image/importer.py +0 -189
  328. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/image/renderer.py +0 -229
  329. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/hittest.py +0 -250
  330. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/renderer.py +0 -901
  331. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/sketchcanvas.py +0 -459
  332. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/sketchelement.py +0 -379
  333. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/studio.py +0 -467
  334. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/__init__.py +0 -121
  335. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/arc_tool.py +0 -299
  336. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/base.py +0 -151
  337. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/circle_tool.py +0 -235
  338. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/coincident_constraint_tool.py +0 -97
  339. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/fill_tool.py +0 -54
  340. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/path_tool.py +0 -568
  341. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/rectangle_tool.py +0 -268
  342. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/select_tool.py +0 -812
  343. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/commands/test_fill_cmd.py +0 -163
  344. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/constraints/test_equal_length_constraint.py +0 -301
  345. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/test_sketch_fill_methods.py +0 -211
  346. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/test_sketcher_sketch.py +0 -1248
  347. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/tests/image/test_sketch_importer.py +0 -406
  348. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/tests/ui_gtk/tools/test_arc_tool.py +0 -148
  349. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/tests/ui_gtk/tools/test_circle_tool.py +0 -164
  350. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/tests/ui_gtk/tools/test_path_tool.py +0 -301
  351. rayforge-1.3.2/rayforge/builtin_addons/rayforge-addon-sketcher/tests/ui_gtk/tools/test_rectangle_tool.py +0 -207
  352. rayforge-1.3.2/rayforge/camera/controller.py +0 -718
  353. rayforge-1.3.2/rayforge/camera/models/camera.py +0 -395
  354. rayforge-1.3.2/rayforge/core/ai/__init__.py +0 -20
  355. rayforge-1.3.2/rayforge/core/ai/ai_service.py +0 -246
  356. rayforge-1.3.2/rayforge/core/ai/openai_provider.py +0 -132
  357. rayforge-1.3.2/rayforge/core/ai/provider.py +0 -106
  358. rayforge-1.3.2/rayforge/core/asset.py +0 -103
  359. rayforge-1.3.2/rayforge/core/config.py +0 -294
  360. rayforge-1.3.2/rayforge/core/geo/contours.py +0 -443
  361. rayforge-1.3.2/rayforge/core/geo/polygon.py +0 -828
  362. rayforge-1.3.2/rayforge/core/geo/transform.py +0 -621
  363. rayforge-1.3.2/rayforge/core/geometry_provider.py +0 -64
  364. rayforge-1.3.2/rayforge/core/layer.py +0 -254
  365. rayforge-1.3.2/rayforge/core/ops/__init__.py +0 -60
  366. rayforge-1.3.2/rayforge/core/ops/commands.py +0 -530
  367. rayforge-1.3.2/rayforge/core/ops/container.py +0 -1610
  368. rayforge-1.3.2/rayforge/core/stock.py +0 -275
  369. rayforge-1.3.2/rayforge/core/vectorization_spec.py +0 -94
  370. rayforge-1.3.2/rayforge/core/workflow.py +0 -134
  371. rayforge-1.3.2/rayforge/core/workpiece.py +0 -1489
  372. rayforge-1.3.2/rayforge/doceditor/editor.py +0 -476
  373. rayforge-1.3.2/rayforge/doceditor/layer_cmd.py +0 -249
  374. rayforge-1.3.2/rayforge/image/material_test_grid_renderer.py +0 -168
  375. rayforge-1.3.2/rayforge/image/pdf/__init__.py +0 -3
  376. rayforge-1.3.2/rayforge/image/pdf/importer.py +0 -262
  377. rayforge-1.3.2/rayforge/image/pdf/renderer.py +0 -119
  378. rayforge-1.3.2/rayforge/image/structures.py +0 -339
  379. rayforge-1.3.2/rayforge/image/svg/svg_base.py +0 -501
  380. rayforge-1.3.2/rayforge/image/svg/svgutil.py +0 -324
  381. rayforge-1.3.2/rayforge/locale/de/LC_MESSAGES/rayforge.mo +0 -0
  382. rayforge-1.3.2/rayforge/locale/es/LC_MESSAGES/rayforge.mo +0 -0
  383. rayforge-1.3.2/rayforge/locale/fr/LC_MESSAGES/rayforge.mo +0 -0
  384. rayforge-1.3.2/rayforge/locale/pt/LC_MESSAGES/rayforge.mo +0 -0
  385. rayforge-1.3.2/rayforge/locale/uk/LC_MESSAGES/rayforge.mo +0 -0
  386. rayforge-1.3.2/rayforge/locale/zh_CN/LC_MESSAGES/rayforge.mo +0 -0
  387. rayforge-1.3.2/rayforge/machine/cmd.py +0 -381
  388. rayforge-1.3.2/rayforge/machine/driver/driver.py +0 -518
  389. rayforge-1.3.2/rayforge/machine/driver/dummy.py +0 -242
  390. rayforge-1.3.2/rayforge/machine/driver/grbl.py +0 -788
  391. rayforge-1.3.2/rayforge/machine/driver/grbl_serial.py +0 -1239
  392. rayforge-1.3.2/rayforge/machine/driver/grbl_util.py +0 -965
  393. rayforge-1.3.2/rayforge/machine/driver/smoothie.py +0 -461
  394. rayforge-1.3.2/rayforge/machine/models/controller.py +0 -619
  395. rayforge-1.3.2/rayforge/machine/models/dialect/base.py +0 -224
  396. rayforge-1.3.2/rayforge/machine/models/dialect/grbl.py +0 -35
  397. rayforge-1.3.2/rayforge/machine/models/dialect/grbl_dynamic.py +0 -35
  398. rayforge-1.3.2/rayforge/machine/models/dialect/mach4_m67.py +0 -36
  399. rayforge-1.3.2/rayforge/machine/models/dialect/marlin.py +0 -34
  400. rayforge-1.3.2/rayforge/machine/models/dialect/smoothieware.py +0 -32
  401. rayforge-1.3.2/rayforge/machine/models/dialect_manager.py +0 -119
  402. rayforge-1.3.2/rayforge/machine/models/laser.py +0 -136
  403. rayforge-1.3.2/rayforge/machine/models/machine.py +0 -1314
  404. rayforge-1.3.2/rayforge/machine/models/manager.py +0 -235
  405. rayforge-1.3.2/rayforge/machine/models/profile.py +0 -327
  406. rayforge-1.3.2/rayforge/pipeline/coordspace.py +0 -694
  407. rayforge-1.3.2/rayforge/pipeline/encoder/gcode.py +0 -558
  408. rayforge-1.3.2/rayforge/pipeline/encoder/vertexencoder.py +0 -174
  409. rayforge-1.3.2/rayforge/pipeline/pipeline.py +0 -1285
  410. rayforge-1.3.2/rayforge/pipeline/stage/step_compute.py +0 -293
  411. rayforge-1.3.2/rayforge/pipeline/steps/__init__.py +0 -7
  412. rayforge-1.3.2/rayforge/shared/gcodeedit/highlighter.py +0 -194
  413. rayforge-1.3.2/rayforge/shared/util/versioning.py +0 -234
  414. rayforge-1.3.2/rayforge/ui_gtk/actions.py +0 -747
  415. rayforge-1.3.2/rayforge/ui_gtk/addon_manager/addon_dialog.py +0 -268
  416. rayforge-1.3.2/rayforge/ui_gtk/addon_manager/addon_list.py +0 -481
  417. rayforge-1.3.2/rayforge/ui_gtk/camera/camera_preferences_page.py +0 -379
  418. rayforge-1.3.2/rayforge/ui_gtk/camera/display_widget.py +0 -164
  419. rayforge-1.3.2/rayforge/ui_gtk/camera/image_settings_dialog.py +0 -313
  420. rayforge-1.3.2/rayforge/ui_gtk/canvas/axis.py +0 -538
  421. rayforge-1.3.2/rayforge/ui_gtk/canvas/worldsurface.py +0 -418
  422. rayforge-1.3.2/rayforge/ui_gtk/canvas2d/elements/axis_extent_frame.py +0 -88
  423. rayforge-1.3.2/rayforge/ui_gtk/canvas2d/surface.py +0 -1327
  424. rayforge-1.3.2/rayforge/ui_gtk/canvas3d/axis_renderer_3d.py +0 -490
  425. rayforge-1.3.2/rayforge/ui_gtk/canvas3d/canvas3d.py +0 -1053
  426. rayforge-1.3.2/rayforge/ui_gtk/canvas3d/scene_assembler.py +0 -76
  427. rayforge-1.3.2/rayforge/ui_gtk/canvas3d/texture_renderer.py +0 -282
  428. rayforge-1.3.2/rayforge/ui_gtk/doceditor/asset_list_view.py +0 -265
  429. rayforge-1.3.2/rayforge/ui_gtk/doceditor/edit_recipe_dialog.py +0 -342
  430. rayforge-1.3.2/rayforge/ui_gtk/doceditor/import_dialog.py +0 -575
  431. rayforge-1.3.2/rayforge/ui_gtk/doceditor/layer_list.py +0 -184
  432. rayforge-1.3.2/rayforge/ui_gtk/doceditor/layer_view.py +0 -257
  433. rayforge-1.3.2/rayforge/ui_gtk/doceditor/material_library_list.py +0 -326
  434. rayforge-1.3.2/rayforge/ui_gtk/doceditor/material_list.py +0 -313
  435. rayforge-1.3.2/rayforge/ui_gtk/doceditor/property_providers/transform.py +0 -601
  436. rayforge-1.3.2/rayforge/ui_gtk/doceditor/recipe_list.py +0 -214
  437. rayforge-1.3.2/rayforge/ui_gtk/doceditor/workflow_view.py +0 -226
  438. rayforge-1.3.2/rayforge/ui_gtk/machine/control_panel.py +0 -526
  439. rayforge-1.3.2/rayforge/ui_gtk/machine/device_settings_page.py +0 -404
  440. rayforge-1.3.2/rayforge/ui_gtk/machine/dialect_editor.py +0 -248
  441. rayforge-1.3.2/rayforge/ui_gtk/machine/dialect_list.py +0 -250
  442. rayforge-1.3.2/rayforge/ui_gtk/machine/general_preferences_page.py +0 -329
  443. rayforge-1.3.2/rayforge/ui_gtk/machine/hardware_page.py +0 -415
  444. rayforge-1.3.2/rayforge/ui_gtk/machine/laser_preferences_page.py +0 -512
  445. rayforge-1.3.2/rayforge/ui_gtk/machine/macro_list.py +0 -145
  446. rayforge-1.3.2/rayforge/ui_gtk/machine/settings_dialog.py +0 -249
  447. rayforge-1.3.2/rayforge/ui_gtk/main_menu.py +0 -283
  448. rayforge-1.3.2/rayforge/ui_gtk/mainwindow.py +0 -2238
  449. rayforge-1.3.2/rayforge/ui_gtk/project_cmd.py +0 -283
  450. rayforge-1.3.2/rayforge/ui_gtk/settings/ai_settings_page.py +0 -562
  451. rayforge-1.3.2/rayforge/ui_gtk/settings/machine_settings_page.py +0 -234
  452. rayforge-1.3.2/rayforge/ui_gtk/shared/expander.py +0 -142
  453. rayforge-1.3.2/rayforge/ui_gtk/toolbar.py +0 -403
  454. rayforge-1.3.2/rayforge/ui_gtk/varset/varsetwidget.py +0 -287
  455. rayforge-1.3.2/rayforge/ui_gtk/view_mode_cmd.py +0 -105
  456. rayforge-1.3.2/rayforge/worker_init.py +0 -169
  457. rayforge-1.3.2/rayforge.egg-info/PKG-INFO +0 -114
  458. rayforge-1.3.2/rayforge.egg-info/SOURCES.txt +0 -1059
  459. rayforge-1.3.2/rayforge.egg-info/requires.txt +0 -30
  460. rayforge-1.3.2/requirements.txt +0 -23
  461. {rayforge-1.3.2 → rayforge-1.4}/LICENSE +0 -0
  462. {rayforge-1.3.2 → rayforge-1.4}/MANIFEST.in +0 -0
  463. {rayforge-1.3.2 → rayforge-1.4}/README.md +0 -0
  464. {rayforge-1.3.2 → rayforge-1.4}/data/org.rayforge.rayforge.desktop +0 -0
  465. {rayforge-1.3.2 → rayforge-1.4}/data/org.rayforge.rayforge.xml +0 -0
  466. {rayforge-1.3.2 → rayforge-1.4}/pyproject.toml +0 -0
  467. {rayforge-1.3.2 → rayforge-1.4}/rayforge/__init__.py +0 -0
  468. {rayforge-1.3.2 → rayforge-1.4}/rayforge/addon_mgr/__init__.py +0 -0
  469. {rayforge-1.3.2 → rayforge-1.4}/rayforge/addon_mgr/addon.py +0 -0
  470. {rayforge-1.3.2 → rayforge-1.4}/rayforge/addon_mgr/manifest.py +0 -0
  471. {rayforge-1.3.2 → rayforge-1.4}/rayforge/addon_mgr/update_cmd.py +0 -0
  472. {rayforge-1.3.2 → rayforge-1.4}/rayforge/app.py +0 -0
  473. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-ai-workpiece/ai_workpiece_generator/__init__.py +0 -0
  474. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-ai-workpiece/ai_workpiece_generator/backend.py +0 -0
  475. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-ai-workpiece/ai_workpiece_generator/controller.py +0 -0
  476. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-ai-workpiece/ai_workpiece_generator/frontend.py +0 -0
  477. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-ai-workpiece/ai_workpiece_generator/widgets/__init__.py +0 -0
  478. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-ai-workpiece/rayforge-addon.yaml +0 -0
  479. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/__init__.py +0 -0
  480. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/commands/__init__.py +0 -0
  481. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/frontend.py +0 -0
  482. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/producers/__init__.py +0 -0
  483. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/producers/contour_producer.py +0 -0
  484. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/producers/frame_producer.py +0 -0
  485. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/producers/raster_producer.py +0 -0
  486. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/producers/raster_util.py +0 -0
  487. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/producers/shrinkwrap_producer.py +0 -0
  488. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/steps/__init__.py +0 -0
  489. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/steps/material_test.py +0 -0
  490. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/steps/raster_step.py +0 -0
  491. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/widgets/__init__.py +0 -0
  492. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/widgets/contour_widget.py +0 -0
  493. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/widgets/frame_widget.py +0 -0
  494. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/widgets/material_test_grid_widget.py +0 -0
  495. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/widgets/raster_widget.py +0 -0
  496. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/laser_essentials/widgets/shrinkwrap_widget.py +0 -0
  497. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/locale/de/LC_MESSAGES/laser_essentials.mo +0 -0
  498. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/locale/de/LC_MESSAGES/laser_essentials.po +0 -0
  499. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/locale/en/LC_MESSAGES/laser_essentials.mo +0 -0
  500. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/locale/en/LC_MESSAGES/laser_essentials.po +0 -0
  501. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/locale/es/LC_MESSAGES/laser_essentials.mo +0 -0
  502. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/locale/es/LC_MESSAGES/laser_essentials.po +0 -0
  503. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/locale/fr/LC_MESSAGES/laser_essentials.mo +0 -0
  504. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/locale/fr/LC_MESSAGES/laser_essentials.po +0 -0
  505. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/locale/laser_essentials.pot +0 -0
  506. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/locale/pt/LC_MESSAGES/laser_essentials.mo +0 -0
  507. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/locale/pt/LC_MESSAGES/laser_essentials.po +0 -0
  508. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/locale/uk/LC_MESSAGES/laser_essentials.mo +0 -0
  509. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/locale/uk/LC_MESSAGES/laser_essentials.po +0 -0
  510. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/locale/zh_CN/LC_MESSAGES/laser_essentials.mo +0 -0
  511. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/locale/zh_CN/LC_MESSAGES/laser_essentials.po +0 -0
  512. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/rayforge-addon.yaml +0 -0
  513. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/tests/conftest.py +0 -0
  514. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/tests/producers/test_contour_producer.py +0 -0
  515. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/tests/producers/test_material_test_grid_producer.py +0 -0
  516. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/tests/producers/test_raster_producer.py +0 -0
  517. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/tests/producers/test_raster_util.py +0 -0
  518. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/tests/steps/test_frame_step.py +0 -0
  519. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/tests/steps/test_material_test_step.py +0 -0
  520. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/tests/steps/test_raster_step.py +0 -0
  521. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-laser/tests/steps/test_shrinkwrap_step.py +0 -0
  522. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/core_materials/__init__.py +0 -0
  523. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/core_materials/backend.py +0 -0
  524. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/__library__.yaml +0 -0
  525. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/abs.yaml +0 -0
  526. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/acrylic.yaml +0 -0
  527. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/acrylic_black.yaml +0 -0
  528. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/acrylic_blue.yaml +0 -0
  529. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/acrylic_gray.yaml +0 -0
  530. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/acrylic_green.yaml +0 -0
  531. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/acrylic_orange.yaml +0 -0
  532. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/acrylic_pink.yaml +0 -0
  533. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/acrylic_purple.yaml +0 -0
  534. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/acrylic_red.yaml +0 -0
  535. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/acrylic_white.yaml +0 -0
  536. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/acrylic_yellow.yaml +0 -0
  537. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/aluminum.yaml +0 -0
  538. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/ash.yaml +0 -0
  539. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/bamboo.yaml +0 -0
  540. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/birch.yaml +0 -0
  541. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/brass.yaml +0 -0
  542. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/bronze.yaml +0 -0
  543. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/cardboard.yaml +0 -0
  544. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/cedar.yaml +0 -0
  545. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/ceramic.yaml +0 -0
  546. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/cherry.yaml +0 -0
  547. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/copper.yaml +0 -0
  548. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/cork.yaml +0 -0
  549. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/ebony.yaml +0 -0
  550. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/elm.yaml +0 -0
  551. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/fabric_canvas.yaml +0 -0
  552. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/fabric_cotton.yaml +0 -0
  553. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/fabric_denim.yaml +0 -0
  554. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/fabric_felt.yaml +0 -0
  555. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/foam.yaml +0 -0
  556. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/galvanized_steel.yaml +0 -0
  557. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/glass.yaml +0 -0
  558. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/granite.yaml +0 -0
  559. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/hdpe.yaml +0 -0
  560. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/hickory.yaml +0 -0
  561. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/lead.yaml +0 -0
  562. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/leather.yaml +0 -0
  563. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/mahogany.yaml +0 -0
  564. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/maple.yaml +0 -0
  565. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/marble.yaml +0 -0
  566. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/mdf.yaml +0 -0
  567. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/nickel.yaml +0 -0
  568. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/nylon.yaml +0 -0
  569. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/oak.yaml +0 -0
  570. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/paper.yaml +0 -0
  571. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/petg.yaml +0 -0
  572. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/pine.yaml +0 -0
  573. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/pla.yaml +0 -0
  574. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/plywood.yaml +0 -0
  575. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/polycarbonate.yaml +0 -0
  576. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/polyethylene.yaml +0 -0
  577. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/polypropylene.yaml +0 -0
  578. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/ptfe.yaml +0 -0
  579. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/pvc.yaml +0 -0
  580. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/rosewood.yaml +0 -0
  581. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/rubber.yaml +0 -0
  582. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/slate.yaml +0 -0
  583. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/slate_blue.yaml +0 -0
  584. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/spruce.yaml +0 -0
  585. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/stainless_steel.yaml +0 -0
  586. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/steel.yaml +0 -0
  587. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/stone.yaml +0 -0
  588. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/teak.yaml +0 -0
  589. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/titanium.yaml +0 -0
  590. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/walnut.yaml +0 -0
  591. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/materials/zinc.yaml +0 -0
  592. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-materials/rayforge-addon.yaml +0 -0
  593. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-post/locale/en/LC_MESSAGES/post_processors.mo +0 -0
  594. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-post/post_processors/__init__.py +0 -0
  595. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-post/post_processors/frontend.py +0 -0
  596. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-post/post_processors/transformers/crop_transformer.py +0 -0
  597. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-post/post_processors/transformers/multipass_transformer.py +0 -0
  598. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-post/post_processors/transformers/optimize_transformer.py +0 -0
  599. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-post/post_processors/transformers/overscan_transformer.py +0 -0
  600. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-post/post_processors/transformers/smooth_transformer.py +0 -0
  601. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-post/post_processors/transformers/tabs_transformer.py +0 -0
  602. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-post/post_processors/widgets/crop_widget.py +0 -0
  603. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-post/post_processors/widgets/multipass_widget.py +0 -0
  604. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-post/post_processors/widgets/optimize_widget.py +0 -0
  605. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-post/post_processors/widgets/overscan_widget.py +0 -0
  606. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-post/post_processors/widgets/smooth_widget.py +0 -0
  607. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-post/rayforge-addon.yaml +0 -0
  608. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-post/tests/conftest.py +0 -0
  609. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-post/tests/transformers/test_crop_transformer.py +0 -0
  610. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-post/tests/transformers/test_multipass_transformer.py +0 -0
  611. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-post/tests/transformers/test_optimize_transformer.py +0 -0
  612. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-post/tests/transformers/test_overscan_transformer.py +0 -0
  613. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-post/tests/transformers/test_smooth_transformer.py +0 -0
  614. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/locale/en/LC_MESSAGES/sketcher.mo +0 -0
  615. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/rayforge-addon.yaml +0 -0
  616. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/__init__.py +0 -0
  617. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/backend.py +0 -0
  618. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/__init__.py +0 -0
  619. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/angle_constraint.py +0 -0
  620. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/arc.py +0 -0
  621. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/chamfer.py +0 -0
  622. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/circle.py +0 -0
  623. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/constraint.py +0 -0
  624. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/constraint_create.py +0 -0
  625. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/construction.py +0 -0
  626. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/dimension.py +0 -0
  627. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/distance_constraint.py +0 -0
  628. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/equal_constraint.py +0 -0
  629. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/fillet.py +0 -0
  630. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/grid.py +0 -0
  631. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/line.py +0 -0
  632. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/live_text_edit.py +0 -0
  633. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/rectangle.py +0 -0
  634. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/rounded_rect.py +0 -0
  635. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/straighten.py +0 -0
  636. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/symmetry_constraint.py +0 -0
  637. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/tangent_constraint.py +0 -0
  638. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/text_box.py +0 -0
  639. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/text_property.py +0 -0
  640. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/commands/waypoint.py +0 -0
  641. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/constraints/__init__.py +0 -0
  642. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/constraints/angle.py +0 -0
  643. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/constraints/aspect_ratio.py +0 -0
  644. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/constraints/base.py +0 -0
  645. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/constraints/coincident.py +0 -0
  646. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/constraints/collinear.py +0 -0
  647. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/constraints/diameter.py +0 -0
  648. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/constraints/drag.py +0 -0
  649. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/constraints/horizontal.py +0 -0
  650. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/constraints/parallelogram.py +0 -0
  651. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/constraints/perpendicular.py +0 -0
  652. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/constraints/point_on_line.py +0 -0
  653. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/constraints/radius.py +0 -0
  654. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/constraints/tangent.py +0 -0
  655. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/constraints/vertical.py +0 -0
  656. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/entities/arc.py +0 -0
  657. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/entities/bezier.py +0 -0
  658. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/entities/circle.py +0 -0
  659. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/entities/point.py +0 -0
  660. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/entities/text_box.py +0 -0
  661. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/params.py +0 -0
  662. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/selection.py +0 -0
  663. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/solver.py +0 -0
  664. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/core/types.py +0 -0
  665. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/frontend.py +0 -0
  666. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/image/__init__.py +0 -0
  667. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/image/exporter.py +0 -0
  668. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/__init__.py +0 -0
  669. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/asset_row_widget.py +0 -0
  670. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/conflicts_widget.py +0 -0
  671. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/editor.py +0 -0
  672. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/font_properties.py +0 -0
  673. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/menu.py +0 -0
  674. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/piemenu.py +0 -0
  675. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/property_provider.py +0 -0
  676. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/sketch_cmd.py +0 -0
  677. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/sketch_mode_cmd.py +0 -0
  678. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/angle_constraint_tool.py +0 -0
  679. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/aspect_ratio_constraint_tool.py +0 -0
  680. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/chamfer_tool.py +0 -0
  681. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/construction_tool.py +0 -0
  682. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/delete_tool.py +0 -0
  683. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/diameter_constraint_tool.py +0 -0
  684. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/dimension_input.py +0 -0
  685. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/distance_constraint_tool.py +0 -0
  686. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/equal_constraint_tool.py +0 -0
  687. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/fillet_tool.py +0 -0
  688. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/grid_tool.py +0 -0
  689. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/horizontal_constraint_tool.py +0 -0
  690. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/perpendicular_constraint_tool.py +0 -0
  691. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/radius_constraint_tool.py +0 -0
  692. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/rounded_rect_tool.py +0 -0
  693. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/straighten_tool.py +0 -0
  694. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/symmetry_constraint_tool.py +0 -0
  695. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/tangent_constraint_tool.py +0 -0
  696. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/text_box_tool.py +0 -0
  697. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/vertical_constraint_tool.py +0 -0
  698. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/waypoint_sharp_tool.py +0 -0
  699. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/waypoint_smooth_tool.py +0 -0
  700. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/sketcher/ui_gtk/tools/waypoint_symmetric_tool.py +0 -0
  701. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/conftest.py +0 -0
  702. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/commands/test_angle_constraint_cmd.py +0 -0
  703. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/commands/test_arc_cmd.py +0 -0
  704. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/commands/test_base_cmd.py +0 -0
  705. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/commands/test_chamfer_cmd.py +0 -0
  706. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/commands/test_circle_cmd.py +0 -0
  707. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/commands/test_constraint_cmd.py +0 -0
  708. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/commands/test_constraint_create_cmd.py +0 -0
  709. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/commands/test_construction_cmd.py +0 -0
  710. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/commands/test_distance_constraint_cmd.py +0 -0
  711. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/commands/test_equal_constraint_cmd.py +0 -0
  712. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/commands/test_fillet_cmd.py +0 -0
  713. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/commands/test_grid_cmd.py +0 -0
  714. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/commands/test_items_cmd.py +0 -0
  715. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/commands/test_line_cmd.py +0 -0
  716. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/commands/test_live_text_edit_cmd.py +0 -0
  717. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/commands/test_point_cmd.py +0 -0
  718. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/commands/test_rectangle_cmd.py +0 -0
  719. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/commands/test_rounded_rect_cmd.py +0 -0
  720. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/commands/test_straighten_cmd.py +0 -0
  721. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/commands/test_symmetry_constraint_cmd.py +0 -0
  722. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/commands/test_tangent_constraint_cmd.py +0 -0
  723. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/commands/test_text_box_cmd.py +0 -0
  724. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/commands/test_text_property_cmd.py +0 -0
  725. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/constraints/test_angle_constraint.py +0 -0
  726. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/constraints/test_aspect_ratio_constraint.py +0 -0
  727. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/constraints/test_coincident_constraint.py +0 -0
  728. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/constraints/test_collinear_constraint.py +0 -0
  729. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/constraints/test_diameter_constraint.py +0 -0
  730. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/constraints/test_distance_constraint.py +0 -0
  731. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/constraints/test_drag_constraint.py +0 -0
  732. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/constraints/test_equal_distance_constraint.py +0 -0
  733. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/constraints/test_horizontal_constraint.py +0 -0
  734. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/constraints/test_parallelogram_constraint.py +0 -0
  735. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/constraints/test_perpendicular_constraint.py +0 -0
  736. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/constraints/test_point_on_line_constraint.py +0 -0
  737. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/constraints/test_radius_constraint.py +0 -0
  738. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/constraints/test_symmetry_constraint.py +0 -0
  739. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/constraints/test_tangent_constraint.py +0 -0
  740. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/constraints/test_vertical_constraint.py +0 -0
  741. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/entities/test_arc_entity.py +0 -0
  742. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/entities/test_bezier_entity.py +0 -0
  743. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/entities/test_circle_entity.py +0 -0
  744. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/entities/test_entity_registry.py +0 -0
  745. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/entities/test_line_entity.py +0 -0
  746. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/entities/test_point.py +0 -0
  747. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/entities/test_text_box_entity.py +0 -0
  748. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/sketcherapp.py +0 -0
  749. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/test_constraint_conflicts.py +0 -0
  750. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/test_sketch_from_geometry.py +0 -0
  751. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/test_sketch_properties.py +0 -0
  752. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/test_sketcher_params.py +0 -0
  753. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/test_sketcher_selection.py +0 -0
  754. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/core/test_sketcher_solver.py +0 -0
  755. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/image/test_sketch_exporter.py +0 -0
  756. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/test_sketcher_asset_cmd.py +0 -0
  757. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/test_sketcher_commands.py +0 -0
  758. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/test_sketcher_file_cmd.py +0 -0
  759. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/test_sketcher_workpiece.py +0 -0
  760. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/ui_gtk/test_text_box.py +0 -0
  761. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/ui_gtk/tools/test_base_tool.py +0 -0
  762. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/ui_gtk/tools/test_fill_tool.py +0 -0
  763. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/ui_gtk/tools/test_grid_tool.py +0 -0
  764. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/ui_gtk/tools/test_rounded_rect_tool.py +0 -0
  765. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/ui_gtk/tools/test_select_tool.py +0 -0
  766. {rayforge-1.3.2 → rayforge-1.4}/rayforge/builtin_addons/rayforge-addon-sketcher/tests/ui_gtk/tools/test_text_box_tool.py +0 -0
  767. {rayforge-1.3.2 → rayforge-1.4}/rayforge/camera/__init__.py +0 -0
  768. {rayforge-1.3.2 → rayforge-1.4}/rayforge/camera/manager.py +0 -0
  769. {rayforge-1.3.2 → rayforge-1.4}/rayforge/camera/models/__init__.py +0 -0
  770. {rayforge-1.3.2 → rayforge-1.4}/rayforge/config.py +0 -0
  771. {rayforge-1.3.2 → rayforge-1.4}/rayforge/const.py +0 -0
  772. {rayforge-1.3.2 → rayforge-1.4}/rayforge/context.py +0 -0
  773. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/__init__.py +0 -0
  774. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/addon_config.py +0 -0
  775. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/ai/config.py +0 -0
  776. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/asset_registry.py +0 -0
  777. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/capability.py +0 -0
  778. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/doc.py +0 -0
  779. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/expression/__init__.py +0 -0
  780. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/expression/context.py +0 -0
  781. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/expression/errors.py +0 -0
  782. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/expression/evaluator.py +0 -0
  783. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/expression/parser.py +0 -0
  784. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/expression/tokenizer.py +0 -0
  785. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/expression/validator.py +0 -0
  786. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/geo/__init__.py +0 -0
  787. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/geo/analysis.py +0 -0
  788. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/geo/cleanup.py +0 -0
  789. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/geo/clipping.py +0 -0
  790. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/geo/constants.py +0 -0
  791. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/geo/fitting.py +0 -0
  792. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/geo/font_config.py +0 -0
  793. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/geo/geometry.py +0 -0
  794. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/geo/intersect.py +0 -0
  795. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/geo/linearize.py +0 -0
  796. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/geo/minkowski.py +0 -0
  797. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/geo/primitives.py +0 -0
  798. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/geo/query.py +0 -0
  799. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/geo/simplify.py +0 -0
  800. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/geo/smooth.py +0 -0
  801. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/geo/split.py +0 -0
  802. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/geo/text.py +0 -0
  803. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/geo/types.py +0 -0
  804. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/group.py +0 -0
  805. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/hooks.py +0 -0
  806. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/item.py +0 -0
  807. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/library_manager.py +0 -0
  808. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/material.py +0 -0
  809. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/material_library.py +0 -0
  810. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/matrix.py +0 -0
  811. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/ops/flip.py +0 -0
  812. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/ops/group.py +0 -0
  813. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/ops/timing.py +0 -0
  814. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/recipe.py +0 -0
  815. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/recipe_manager.py +0 -0
  816. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/source_asset.py +0 -0
  817. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/source_asset_segment.py +0 -0
  818. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/step.py +0 -0
  819. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/step_registry.py +0 -0
  820. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/stock_asset.py +0 -0
  821. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/tab.py +0 -0
  822. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/undo/__init__.py +0 -0
  823. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/undo/command.py +0 -0
  824. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/undo/composite_cmd.py +0 -0
  825. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/undo/dict_cmd.py +0 -0
  826. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/undo/history.py +0 -0
  827. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/undo/list_cmd.py +0 -0
  828. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/undo/property_cmd.py +0 -0
  829. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/undo/setter_cmd.py +0 -0
  830. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/varset/__init__.py +0 -0
  831. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/varset/baudratevar.py +0 -0
  832. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/varset/boolvar.py +0 -0
  833. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/varset/choicevar.py +0 -0
  834. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/varset/floatvar.py +0 -0
  835. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/varset/hostnamevar.py +0 -0
  836. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/varset/intvar.py +0 -0
  837. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/varset/portvar.py +0 -0
  838. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/varset/serialportvar.py +0 -0
  839. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/varset/textareavar.py +0 -0
  840. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/varset/urlvar.py +0 -0
  841. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/varset/var.py +0 -0
  842. {rayforge-1.3.2 → rayforge-1.4}/rayforge/core/varset/varset.py +0 -0
  843. {rayforge-1.3.2 → rayforge-1.4}/rayforge/debug.py +0 -0
  844. {rayforge-1.3.2 → rayforge-1.4}/rayforge/doceditor/__init__.py +0 -0
  845. {rayforge-1.3.2 → rayforge-1.4}/rayforge/doceditor/asset_cmd.py +0 -0
  846. {rayforge-1.3.2 → rayforge-1.4}/rayforge/doceditor/command_registry.py +0 -0
  847. {rayforge-1.3.2 → rayforge-1.4}/rayforge/doceditor/edit_cmd.py +0 -0
  848. {rayforge-1.3.2 → rayforge-1.4}/rayforge/doceditor/file_cmd.py +0 -0
  849. {rayforge-1.3.2 → rayforge-1.4}/rayforge/doceditor/group_cmd.py +0 -0
  850. {rayforge-1.3.2 → rayforge-1.4}/rayforge/doceditor/layout/__init__.py +0 -0
  851. {rayforge-1.3.2 → rayforge-1.4}/rayforge/doceditor/layout/align.py +0 -0
  852. {rayforge-1.3.2 → rayforge-1.4}/rayforge/doceditor/layout/auto.py +0 -0
  853. {rayforge-1.3.2 → rayforge-1.4}/rayforge/doceditor/layout/base.py +0 -0
  854. {rayforge-1.3.2 → rayforge-1.4}/rayforge/doceditor/layout/registry.py +0 -0
  855. {rayforge-1.3.2 → rayforge-1.4}/rayforge/doceditor/layout/spread.py +0 -0
  856. {rayforge-1.3.2 → rayforge-1.4}/rayforge/doceditor/layout_cmd.py +0 -0
  857. {rayforge-1.3.2 → rayforge-1.4}/rayforge/doceditor/split_cmd.py +0 -0
  858. {rayforge-1.3.2 → rayforge-1.4}/rayforge/doceditor/step_cmd.py +0 -0
  859. {rayforge-1.3.2 → rayforge-1.4}/rayforge/doceditor/stock_cmd.py +0 -0
  860. {rayforge-1.3.2 → rayforge-1.4}/rayforge/doceditor/tab_cmd.py +0 -0
  861. {rayforge-1.3.2 → rayforge-1.4}/rayforge/doceditor/transform_cmd.py +0 -0
  862. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/__init__.py +0 -0
  863. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/assembler.py +0 -0
  864. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/base_exporter.py +0 -0
  865. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/base_importer.py +0 -0
  866. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/base_renderer.py +0 -0
  867. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/bmp/__init__.py +0 -0
  868. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/bmp/importer.py +0 -0
  869. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/bmp/parser.py +0 -0
  870. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/bmp/renderer.py +0 -0
  871. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/denoise.py +0 -0
  872. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/dither.py +0 -0
  873. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/dxf/__init__.py +0 -0
  874. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/dxf/exporter.py +0 -0
  875. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/dxf/importer.py +0 -0
  876. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/dxf/renderer.py +0 -0
  877. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/engine.py +0 -0
  878. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/hull.py +0 -0
  879. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/jpg/__init__.py +0 -0
  880. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/jpg/importer.py +0 -0
  881. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/jpg/renderer.py +0 -0
  882. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/ops_renderer.py +0 -0
  883. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/png/__init__.py +0 -0
  884. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/png/importer.py +0 -0
  885. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/png/renderer.py +0 -0
  886. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/procedural/__init__.py +0 -0
  887. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/procedural/importer.py +0 -0
  888. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/procedural/renderer.py +0 -0
  889. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/registry.py +0 -0
  890. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/ruida/__init__.py +0 -0
  891. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/ruida/importer.py +0 -0
  892. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/ruida/job.py +0 -0
  893. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/ruida/parser.py +0 -0
  894. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/ruida/renderer.py +0 -0
  895. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/svg/__init__.py +0 -0
  896. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/svg/exporter.py +0 -0
  897. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/svg/importer.py +0 -0
  898. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/svg/renderer.py +0 -0
  899. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/svg/svg_fallback.py +0 -0
  900. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/svg/svg_trace.py +0 -0
  901. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/svg/svg_vector.py +0 -0
  902. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/tracing.py +0 -0
  903. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/util/__init__.py +0 -0
  904. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/util/grayscale.py +0 -0
  905. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/util/transparency.py +0 -0
  906. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/util/unit.py +0 -0
  907. {rayforge-1.3.2 → rayforge-1.4}/rayforge/image/util/vips.py +0 -0
  908. {rayforge-1.3.2 → rayforge-1.4}/rayforge/license/__init__.py +0 -0
  909. {rayforge-1.3.2 → rayforge-1.4}/rayforge/license/gumroad_provider.py +0 -0
  910. {rayforge-1.3.2 → rayforge-1.4}/rayforge/license/patreon_provider.py +0 -0
  911. {rayforge-1.3.2 → rayforge-1.4}/rayforge/license/provider.py +0 -0
  912. {rayforge-1.3.2 → rayforge-1.4}/rayforge/license/validator.py +0 -0
  913. {rayforge-1.3.2 → rayforge-1.4}/rayforge/locale/en/LC_MESSAGES/rayforge.mo +0 -0
  914. {rayforge-1.3.2 → rayforge-1.4}/rayforge/logging_setup.py +0 -0
  915. {rayforge-1.3.2 → rayforge-1.4}/rayforge/machine/__init__.py +0 -0
  916. {rayforge-1.3.2 → rayforge-1.4}/rayforge/machine/driver/__init__.py +0 -0
  917. {rayforge-1.3.2 → rayforge-1.4}/rayforge/machine/driver/ruida/__init__.py +0 -0
  918. {rayforge-1.3.2 → rayforge-1.4}/rayforge/machine/driver/ruida/ruida_framing.py +0 -0
  919. {rayforge-1.3.2 → rayforge-1.4}/rayforge/machine/driver/ruida/ruida_maps.py +0 -0
  920. {rayforge-1.3.2 → rayforge-1.4}/rayforge/machine/driver/ruida/ruida_util.py +0 -0
  921. {rayforge-1.3.2 → rayforge-1.4}/rayforge/machine/job_monitor.py +0 -0
  922. {rayforge-1.3.2 → rayforge-1.4}/rayforge/machine/models/__init__.py +0 -0
  923. {rayforge-1.3.2 → rayforge-1.4}/rayforge/machine/models/colors.py +0 -0
  924. {rayforge-1.3.2 → rayforge-1.4}/rayforge/machine/models/dialect/__init__.py +0 -0
  925. {rayforge-1.3.2 → rayforge-1.4}/rayforge/machine/models/machine_hours.py +0 -0
  926. {rayforge-1.3.2 → rayforge-1.4}/rayforge/machine/models/macro.py +0 -0
  927. {rayforge-1.3.2 → rayforge-1.4}/rayforge/machine/transport/__init__.py +0 -0
  928. {rayforge-1.3.2 → rayforge-1.4}/rayforge/machine/transport/http.py +0 -0
  929. {rayforge-1.3.2 → rayforge-1.4}/rayforge/machine/transport/serial.py +0 -0
  930. {rayforge-1.3.2 → rayforge-1.4}/rayforge/machine/transport/serial_server.py +0 -0
  931. {rayforge-1.3.2 → rayforge-1.4}/rayforge/machine/transport/telnet.py +0 -0
  932. {rayforge-1.3.2 → rayforge-1.4}/rayforge/machine/transport/transport.py +0 -0
  933. {rayforge-1.3.2 → rayforge-1.4}/rayforge/machine/transport/udp.py +0 -0
  934. {rayforge-1.3.2 → rayforge-1.4}/rayforge/machine/transport/udp_server.py +0 -0
  935. {rayforge-1.3.2 → rayforge-1.4}/rayforge/machine/transport/validators.py +0 -0
  936. {rayforge-1.3.2 → rayforge-1.4}/rayforge/machine/transport/websocket.py +0 -0
  937. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/__init__.py +0 -0
  938. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/artifact/__init__.py +0 -0
  939. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/artifact/base.py +0 -0
  940. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/artifact/handle.py +0 -0
  941. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/artifact/job.py +0 -0
  942. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/artifact/key.py +0 -0
  943. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/artifact/lifecycle.py +0 -0
  944. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/artifact/manager.py +0 -0
  945. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/artifact/step_ops.py +0 -0
  946. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/artifact/step_render.py +0 -0
  947. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/artifact/store.py +0 -0
  948. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/artifact/workpiece.py +0 -0
  949. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/artifact/workpiece_view.py +0 -0
  950. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/context.py +0 -0
  951. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/coord.py +0 -0
  952. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/dag/__init__.py +0 -0
  953. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/dag/graph.py +0 -0
  954. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/dag/node.py +0 -0
  955. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/dag/scheduler.py +0 -0
  956. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/encoder/__init__.py +0 -0
  957. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/encoder/base.py +0 -0
  958. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/encoder/cairoencoder.py +0 -0
  959. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/encoder/context.py +0 -0
  960. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/encoder/textureencoder.py +0 -0
  961. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/producer/__init__.py +0 -0
  962. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/producer/base.py +0 -0
  963. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/producer/placeholder.py +0 -0
  964. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/producer/registry.py +0 -0
  965. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/stage/__init__.py +0 -0
  966. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/stage/base.py +0 -0
  967. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/stage/job_compute.py +0 -0
  968. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/stage/job_runner.py +0 -0
  969. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/stage/job_stage.py +0 -0
  970. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/stage/step_runner.py +0 -0
  971. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/stage/step_stage.py +0 -0
  972. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/stage/workpiece_compute.py +0 -0
  973. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/stage/workpiece_runner.py +0 -0
  974. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/stage/workpiece_stage.py +0 -0
  975. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/transformer/__init__.py +0 -0
  976. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/transformer/base.py +0 -0
  977. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/transformer/placeholder.py +0 -0
  978. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/transformer/registry.py +0 -0
  979. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/view/__init__.py +0 -0
  980. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/view/view_compute.py +0 -0
  981. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/view/view_manager.py +0 -0
  982. {rayforge-1.3.2 → rayforge-1.4}/rayforge/pipeline/view/view_runner.py +0 -0
  983. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/3d-rotation-symbolic.svg +0 -0
  984. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/3d-symbolic.svg +0 -0
  985. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/add-stock-symbolic.svg +0 -0
  986. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/add-symbolic.svg +0 -0
  987. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/addon-builtin-symbolic.svg +0 -0
  988. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/addon-symbolic.svg +0 -0
  989. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/ai-symbolic.svg +0 -0
  990. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/alarm-symbolic.svg +0 -0
  991. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/align-bottom-symbolic.svg +0 -0
  992. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/align-horizontal-center-symbolic.svg +0 -0
  993. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/align-left-symbolic.svg +0 -0
  994. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/align-right-symbolic.svg +0 -0
  995. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/align-top-symbolic.svg +0 -0
  996. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/align-vertical-center-symbolic.svg +0 -0
  997. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/arrow-east-symbolic.svg +0 -0
  998. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/arrow-north-east-symbolic.svg +0 -0
  999. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/arrow-north-symbolic.svg +0 -0
  1000. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/arrow-north-west-symbolic.svg +0 -0
  1001. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/arrow-south-east-symbolic.svg +0 -0
  1002. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/arrow-south-symbolic.svg +0 -0
  1003. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/arrow-south-west-symbolic.svg +0 -0
  1004. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/arrow-west-symbolic.svg +0 -0
  1005. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/arrow-z-down-symbolic.svg +0 -0
  1006. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/arrow-z-up-symbolic.svg +0 -0
  1007. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/auto-layout-symbolic.svg +0 -0
  1008. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/batch-symbolic.svg +0 -0
  1009. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/bottom-left-symbolic.svg +0 -0
  1010. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/bottom-right-symbolic.svg +0 -0
  1011. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/camera-off-symbolic.svg +0 -0
  1012. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/camera-on-symbolic.svg +0 -0
  1013. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/center-symbolic.svg +0 -0
  1014. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/check-circle-symbolic.svg +0 -0
  1015. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/check-symbolic.svg +0 -0
  1016. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/chevron-right-symbolic.svg +0 -0
  1017. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/clear-alarm-symbolic.svg +0 -0
  1018. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/clear-layers-symbolic.svg +0 -0
  1019. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/clear-symbolic.svg +0 -0
  1020. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/close-document-symbolic.svg +0 -0
  1021. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/close-symbolic.svg +0 -0
  1022. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/code-symbolic.svg +0 -0
  1023. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/compass-symbolic.svg +0 -0
  1024. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/copy-symbolic.svg +0 -0
  1025. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/crosshairs-symbolic.svg +0 -0
  1026. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/crown-symbolic.svg +0 -0
  1027. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/cut-symbolic.svg +0 -0
  1028. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/cycle-symbolic.svg +0 -0
  1029. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/delete-symbolic.svg +0 -0
  1030. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/distribute-horizontal-symbolic.svg +0 -0
  1031. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/distribute-vertical-symbolic.svg +0 -0
  1032. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/door-symbolic.svg +0 -0
  1033. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/download-symbolic.svg +0 -0
  1034. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/drag-handle-symbolic.svg +0 -0
  1035. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/edit-symbolic.svg +0 -0
  1036. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/engrave-symbolic.svg +0 -0
  1037. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/eraser-symbolic.svg +0 -0
  1038. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/error-symbolic.svg +0 -0
  1039. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/export-symbolic.svg +0 -0
  1040. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/fast-forward-symbolic.svg +0 -0
  1041. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/fast-rewind-symbolic.svg +0 -0
  1042. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/flip-horizontal-symbolic.svg +0 -0
  1043. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/flip-vertical-symbolic.svg +0 -0
  1044. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/frame-symbolic.svg +0 -0
  1045. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/gcode-symbolic.svg +0 -0
  1046. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/general-symbolic.svg +0 -0
  1047. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/go-down-symbolic.svg +0 -0
  1048. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/go-next-symbolic.svg +0 -0
  1049. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/go-previous-symbolic.svg +0 -0
  1050. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/go-up-symbolic.svg +0 -0
  1051. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/hardware-symbolic.svg +0 -0
  1052. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/home-symbolic.svg +0 -0
  1053. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/home-x-symbolic.svg +0 -0
  1054. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/home-y-symbolic.svg +0 -0
  1055. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/home-z-symbolic.svg +0 -0
  1056. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/homing-symbolic.svg +0 -0
  1057. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/hourglass-symbolic.svg +0 -0
  1058. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/info-symbolic.svg +0 -0
  1059. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/jog-symbolic.svg +0 -0
  1060. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/laps-symbolic.svg +0 -0
  1061. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/laser-off-symbolic.svg +0 -0
  1062. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/laser-on-symbolic.svg +0 -0
  1063. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/laser-path-symbolic.svg +0 -0
  1064. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/layer-symbolic.svg +0 -0
  1065. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/license-symbolic.svg +0 -0
  1066. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/lock-open-symbolic.svg +0 -0
  1067. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/lock-symbolic.svg +0 -0
  1068. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/locked-symbolic.svg +0 -0
  1069. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/machine-settings-advanced-symbolic.svg +0 -0
  1070. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/machine-settings-general-symbolic.svg +0 -0
  1071. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/material-symbolic.svg +0 -0
  1072. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/next-symbolic.svg +0 -0
  1073. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/open-in-new-symbolic.svg +0 -0
  1074. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/open-symbolic.svg +0 -0
  1075. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/org.rayforge.rayforge.svg +0 -0
  1076. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/pan-down-symbolic.svg +0 -0
  1077. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/pause-symbolic.svg +0 -0
  1078. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/play-arrow-symbolic.svg +0 -0
  1079. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/post-processor-symbolic.svg +0 -0
  1080. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/preliminary-check-symbolic.svg +0 -0
  1081. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/preview-off-symbolic.svg +0 -0
  1082. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/preview_off-symbolic.svg +0 -0
  1083. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/previous-symbolic.svg +0 -0
  1084. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/publish-symbolic.svg +0 -0
  1085. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/query-symbolic.svg +0 -0
  1086. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/question-box-symbolic.svg +0 -0
  1087. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/question-mark-symbolic.svg +0 -0
  1088. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/queued-symbolic.svg +0 -0
  1089. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/rayforge.icns +0 -0
  1090. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/recipe-symbolic.svg +0 -0
  1091. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/redo-symbolic.svg +0 -0
  1092. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/refresh-symbolic.svg +0 -0
  1093. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/reset-stock-symbolic.svg +0 -0
  1094. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/resume-symbolic.svg +0 -0
  1095. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/save-as-symbolic.svg +0 -0
  1096. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/save-symbolic.svg +0 -0
  1097. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/save_as-symbolic.svg +0 -0
  1098. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/score-symbolic.svg +0 -0
  1099. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/send-symbolic.svg +0 -0
  1100. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/settings-symbolic.svg +0 -0
  1101. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/siren-symbolic.svg +0 -0
  1102. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-add-symbolic.svg +0 -0
  1103. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-arc-symbolic.svg +0 -0
  1104. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-bezier-sharp-symbolic.svg +0 -0
  1105. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-bezier-smooth-symbolic.svg +0 -0
  1106. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-bezier-symbolic.svg +0 -0
  1107. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-bezier-symmetric-symbolic.svg +0 -0
  1108. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-chamfer-symbolic.svg +0 -0
  1109. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-circle-symbolic.svg +0 -0
  1110. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-constrain-angle-symbolic.svg +0 -0
  1111. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-constrain-aspect-symbolic.svg +0 -0
  1112. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-constrain-equal-symbolic.svg +0 -0
  1113. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-constrain-horizontal-symbolic.svg +0 -0
  1114. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-constrain-perpendicular-symbolic.svg +0 -0
  1115. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-constrain-point-symbolic.svg +0 -0
  1116. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-constrain-symmetric-symbolic.svg +0 -0
  1117. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-constrain-tangential-symbolic.svg +0 -0
  1118. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-constrain-vertical-symbolic.svg +0 -0
  1119. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-constrain-verticalhorizontal-symbolic.svg +0 -0
  1120. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-construction-symbolic.svg +0 -0
  1121. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-diameter-symbolic.svg +0 -0
  1122. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-distance-symbolic.svg +0 -0
  1123. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-edit-symbolic.svg +0 -0
  1124. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-fill-symbolic.svg +0 -0
  1125. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-fillet-symbolic.svg +0 -0
  1126. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-grid-symbolic.svg +0 -0
  1127. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-line-symbolic.svg +0 -0
  1128. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-radius-symbolic.svg +0 -0
  1129. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-rect-symbolic.svg +0 -0
  1130. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-rounded-rect-symbolic.svg +0 -0
  1131. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-select-symbolic.svg +0 -0
  1132. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sketch-text-symbolic.svg +0 -0
  1133. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/skip-forward-symbolic.svg +0 -0
  1134. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/skip-previous-symbolic.svg +0 -0
  1135. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/sleep-symbolic.svg +0 -0
  1136. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/status-check-symbolic.svg +0 -0
  1137. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/status-connected-symbolic.svg +0 -0
  1138. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/status-connecting-symbolic.svg +0 -0
  1139. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/status-idle-symbolic.svg +0 -0
  1140. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/status-offline-symbolic.svg +0 -0
  1141. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/step-settings-symbolic.svg +0 -0
  1142. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/stock-symbolic.svg +0 -0
  1143. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/stop-symbolic.svg +0 -0
  1144. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/tabs-equidistant-symbolic.svg +0 -0
  1145. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/tabs-visible-symbolic.svg +0 -0
  1146. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/test-symbolic.svg +0 -0
  1147. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/timeline-symbolic.svg +0 -0
  1148. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/timer-symbolic.svg +0 -0
  1149. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/tool-change-symbolic.svg +0 -0
  1150. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/top-left-symbolic.svg +0 -0
  1151. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/top-right-symbolic.svg +0 -0
  1152. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/travel-path-symbolic.svg +0 -0
  1153. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/ui-settings-symbolic.svg +0 -0
  1154. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/undo-symbolic.svg +0 -0
  1155. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/unlocking-symbolic.svg +0 -0
  1156. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/variable-symbolic.svg +0 -0
  1157. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/visibility-off-symbolic.svg +0 -0
  1158. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/visibility-on-symbolic.svg +0 -0
  1159. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/warning-symbolic.svg +0 -0
  1160. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/zero-here-symbolic.svg +0 -0
  1161. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/zoom-fit-best-symbolic.svg +0 -0
  1162. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/zoom-in-symbolic.svg +0 -0
  1163. {rayforge-1.3.2 → rayforge-1.4}/rayforge/resources/icons/zoom-out-symbolic.svg +0 -0
  1164. {rayforge-1.3.2 → rayforge-1.4}/rayforge/shared/__init__.py +0 -0
  1165. {rayforge-1.3.2 → rayforge-1.4}/rayforge/shared/gcodeedit/__init__.py +0 -0
  1166. {rayforge-1.3.2 → rayforge-1.4}/rayforge/shared/gcodeedit/editor.py +0 -0
  1167. {rayforge-1.3.2 → rayforge-1.4}/rayforge/shared/gcodeedit/viewer.py +0 -0
  1168. {rayforge-1.3.2 → rayforge-1.4}/rayforge/shared/tasker/__init__.py +0 -0
  1169. {rayforge-1.3.2 → rayforge-1.4}/rayforge/shared/tasker/context.py +0 -0
  1170. {rayforge-1.3.2 → rayforge-1.4}/rayforge/shared/tasker/manager.py +0 -0
  1171. {rayforge-1.3.2 → rayforge-1.4}/rayforge/shared/tasker/pool.py +0 -0
  1172. {rayforge-1.3.2 → rayforge-1.4}/rayforge/shared/tasker/progress.py +0 -0
  1173. {rayforge-1.3.2 → rayforge-1.4}/rayforge/shared/tasker/proxy.py +0 -0
  1174. {rayforge-1.3.2 → rayforge-1.4}/rayforge/shared/tasker/task.py +0 -0
  1175. {rayforge-1.3.2 → rayforge-1.4}/rayforge/shared/units/__init__.py +0 -0
  1176. {rayforge-1.3.2 → rayforge-1.4}/rayforge/shared/units/definitions.py +0 -0
  1177. {rayforge-1.3.2 → rayforge-1.4}/rayforge/shared/units/engine.py +0 -0
  1178. {rayforge-1.3.2 → rayforge-1.4}/rayforge/shared/units/formatter.py +0 -0
  1179. {rayforge-1.3.2 → rayforge-1.4}/rayforge/shared/util/__init__.py +0 -0
  1180. {rayforge-1.3.2 → rayforge-1.4}/rayforge/shared/util/cache.py +0 -0
  1181. {rayforge-1.3.2 → rayforge-1.4}/rayforge/shared/util/colors.py +0 -0
  1182. {rayforge-1.3.2 → rayforge-1.4}/rayforge/shared/util/debug.py +0 -0
  1183. {rayforge-1.3.2 → rayforge-1.4}/rayforge/shared/util/glib.py +0 -0
  1184. {rayforge-1.3.2 → rayforge-1.4}/rayforge/shared/util/localized.py +0 -0
  1185. {rayforge-1.3.2 → rayforge-1.4}/rayforge/shared/util/once.py +0 -0
  1186. {rayforge-1.3.2 → rayforge-1.4}/rayforge/shared/util/po_compiler.py +0 -0
  1187. {rayforge-1.3.2 → rayforge-1.4}/rayforge/shared/util/size.py +0 -0
  1188. {rayforge-1.3.2 → rayforge-1.4}/rayforge/shared/util/template.py +0 -0
  1189. {rayforge-1.3.2 → rayforge-1.4}/rayforge/shared/util/time_format.py +0 -0
  1190. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/__init__.py +0 -0
  1191. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/about.py +0 -0
  1192. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/action_registry.py +0 -0
  1193. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/addon_manager/__init__.py +0 -0
  1194. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/addon_manager/license_dialog.py +0 -0
  1195. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/camera/__init__.py +0 -0
  1196. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/camera/alignment_dialog.py +0 -0
  1197. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/camera/point_bubble_widget.py +0 -0
  1198. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/camera/properties_widget.py +0 -0
  1199. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/camera/selection_dialog.py +0 -0
  1200. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas/__init__.py +0 -0
  1201. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas/canvas.py +0 -0
  1202. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas/cursor.py +0 -0
  1203. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas/element.py +0 -0
  1204. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas/hittest.py +0 -0
  1205. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas/intersect.py +0 -0
  1206. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas/multiselect.py +0 -0
  1207. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas/overlays.py +0 -0
  1208. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas/region.py +0 -0
  1209. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas/shrinkwrap.py +0 -0
  1210. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas/transform.py +0 -0
  1211. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas2d/__init__.py +0 -0
  1212. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas2d/context_menu.py +0 -0
  1213. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas2d/drag_drop_cmd.py +0 -0
  1214. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas2d/elements/__init__.py +0 -0
  1215. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas2d/elements/camera_image.py +0 -0
  1216. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas2d/elements/dot.py +0 -0
  1217. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas2d/elements/group.py +0 -0
  1218. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas2d/elements/layer.py +0 -0
  1219. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas2d/elements/simulation_overlay.py +0 -0
  1220. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas2d/elements/step.py +0 -0
  1221. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas2d/elements/stock.py +0 -0
  1222. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas2d/elements/tab_handle.py +0 -0
  1223. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas2d/elements/work_origin.py +0 -0
  1224. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas2d/elements/workpiece.py +0 -0
  1225. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas2d/simulation_controls.py +0 -0
  1226. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas2d/simulator_cmd.py +0 -0
  1227. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas3d/__init__.py +0 -0
  1228. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas3d/camera.py +0 -0
  1229. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas3d/gl_utils.py +0 -0
  1230. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas3d/ops_renderer.py +0 -0
  1231. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas3d/plane_renderer.py +0 -0
  1232. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas3d/shaders.py +0 -0
  1233. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas3d/sphere_renderer.py +0 -0
  1234. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/canvas3d/text_renderer_3d.py +0 -0
  1235. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/doceditor/__init__.py +0 -0
  1236. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/doceditor/add_material_dialog.py +0 -0
  1237. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/doceditor/add_tabs_popover.py +0 -0
  1238. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/doceditor/asset_row_factory.py +0 -0
  1239. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/doceditor/asset_row_widget.py +0 -0
  1240. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/doceditor/file_dialogs.py +0 -0
  1241. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/doceditor/image_metadata_dialog.py +0 -0
  1242. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/doceditor/import_handler.py +0 -0
  1243. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/doceditor/item_properties.py +0 -0
  1244. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/doceditor/material_selector.py +0 -0
  1245. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/doceditor/missing_features_dialog.py +0 -0
  1246. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/doceditor/property_providers/__init__.py +0 -0
  1247. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/doceditor/property_providers/base.py +0 -0
  1248. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/doceditor/property_providers/workpiece.py +0 -0
  1249. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/doceditor/recipe_control_widget.py +0 -0
  1250. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/doceditor/recipe_selector_dialog.py +0 -0
  1251. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/doceditor/step_box.py +0 -0
  1252. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/doceditor/step_settings/__init__.py +0 -0
  1253. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/doceditor/step_settings/base.py +0 -0
  1254. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/doceditor/step_settings/placeholder.py +0 -0
  1255. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/doceditor/step_settings_dialog.py +0 -0
  1256. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/doceditor/stock_properties_dialog.py +0 -0
  1257. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/icons.py +0 -0
  1258. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/machine/__init__.py +0 -0
  1259. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/machine/advanced_preferences_page.py +0 -0
  1260. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/machine/connection_status_widget.py +0 -0
  1261. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/machine/console.py +0 -0
  1262. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/machine/gcode_editor.py +0 -0
  1263. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/machine/gcode_settings_page.py +0 -0
  1264. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/machine/hook_list.py +0 -0
  1265. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/machine/hooks_macros_page.py +0 -0
  1266. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/machine/jog_widget.py +0 -0
  1267. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/machine/machine_selector.py +0 -0
  1268. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/machine/maintenance_page.py +0 -0
  1269. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/machine/profile_selector.py +0 -0
  1270. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/machine/status_widget.py +0 -0
  1271. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/settings/__init__.py +0 -0
  1272. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/settings/addon_manager_page.py +0 -0
  1273. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/settings/general_preferences_page.py +0 -0
  1274. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/settings/license_settings_page.py +0 -0
  1275. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/settings/material_manager_page.py +0 -0
  1276. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/settings/recipe_manager_page.py +0 -0
  1277. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/settings/settings_dialog.py +0 -0
  1278. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/shared/__init__.py +0 -0
  1279. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/shared/adwfix.py +0 -0
  1280. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/shared/direction_preview.py +0 -0
  1281. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/shared/draglist.py +0 -0
  1282. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/shared/expression_entry.py +0 -0
  1283. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/shared/gtk.py +0 -0
  1284. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/shared/gtk_color.py +0 -0
  1285. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/shared/histogram_preview.py +0 -0
  1286. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/shared/key.py +0 -0
  1287. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/shared/keyboard.py +0 -0
  1288. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/shared/optional_spin_row.py +0 -0
  1289. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/shared/patched_dialog_window.py +0 -0
  1290. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/shared/piemenu.py +0 -0
  1291. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/shared/popover_menu.py +0 -0
  1292. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/shared/preferences_group.py +0 -0
  1293. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/shared/preferences_page.py +0 -0
  1294. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/shared/progress_bar.py +0 -0
  1295. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/shared/round_button.py +0 -0
  1296. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/shared/shortcut.py +0 -0
  1297. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/shared/slider.py +0 -0
  1298. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/shared/splitbutton.py +0 -0
  1299. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/shared/status_bar.py +0 -0
  1300. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/shared/undo_button.py +0 -0
  1301. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/shared/unit_spin_row.py +0 -0
  1302. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/shared/usage_consent_dialog.py +0 -0
  1303. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/task_bar.py +0 -0
  1304. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/varset/__init__.py +0 -0
  1305. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/varset/var_row_factory.py +0 -0
  1306. {rayforge-1.3.2 → rayforge-1.4}/rayforge/ui_gtk/varset/varset_editor.py +0 -0
  1307. {rayforge-1.3.2 → rayforge-1.4}/rayforge/uiscript.py +0 -0
  1308. {rayforge-1.3.2 → rayforge-1.4}/rayforge/usage.py +0 -0
  1309. {rayforge-1.3.2 → rayforge-1.4}/rayforge/version.py +0 -0
  1310. {rayforge-1.3.2 → rayforge-1.4}/rayforge.egg-info/dependency_links.txt +0 -0
  1311. {rayforge-1.3.2 → rayforge-1.4}/rayforge.egg-info/entry_points.txt +0 -0
  1312. {rayforge-1.3.2 → rayforge-1.4}/rayforge.egg-info/top_level.txt +0 -0
  1313. {rayforge-1.3.2 → rayforge-1.4}/setup.cfg +0 -0
rayforge-1.4/PKG-INFO ADDED
@@ -0,0 +1,115 @@
1
+ Metadata-Version: 2.4
2
+ Name: rayforge
3
+ Version: 1.4
4
+ Summary: A desktop application for laser cutting and engraving
5
+ Author-email: Samuel Abels <knipknap@gmail.com>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/barebaric/rayforge
8
+ Project-URL: Bug Tracker, https://github.com/barebaric/rayforge/issues
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: Operating System :: POSIX :: Linux
11
+ Classifier: Intended Audience :: End Users/Desktop
12
+ Classifier: Intended Audience :: Manufacturing
13
+ Requires-Python: >=3.10
14
+ Description-Content-Type: text/markdown
15
+ License-File: LICENSE
16
+ Requires-Dist: aiohttp==3.13.3
17
+ Requires-Dist: asyncudp==0.11.0
18
+ Requires-Dist: blinker==1.9.0
19
+ Requires-Dist: ezdxf==1.4.2
20
+ Requires-Dist: GitPython==3.1.44
21
+ Requires-Dist: numpy==2.3.4
22
+ Requires-Dist: opencv_python
23
+ Requires-Dist: platformdirs==4.3.6
24
+ Requires-Dist: pluggy==1.6.0
25
+ Requires-Dist: pycairo==1.28.0
26
+ Requires-Dist: pyclipper==1.3.0.post6
27
+ Requires-Dist: PyGObject==3.50.0
28
+ Requires-Dist: PyMuPDF==1.27.2.2
29
+ Requires-Dist: PyOpenGL==3.1.10
30
+ Requires-Dist: PyOpenGL_accelerate==3.1.10
31
+ Requires-Dist: pypdf==6.9.1
32
+ Requires-Dist: pyserial_asyncio==0.6
33
+ Requires-Dist: pyvips==3.0.0
34
+ Requires-Dist: PyYAML==6.0.2
35
+ Requires-Dist: scipy==1.16.3
36
+ Requires-Dist: semver==3.0.2
37
+ Requires-Dist: svgelements==1.9.6
38
+ Requires-Dist: vtracer==0.6.11
39
+ Requires-Dist: websockets==14.2
40
+ Provides-Extra: test
41
+ Requires-Dist: pytest; extra == "test"
42
+ Requires-Dist: pytest-asyncio; extra == "test"
43
+ Requires-Dist: pytest-mock; extra == "test"
44
+ Requires-Dist: pytest-cov; extra == "test"
45
+ Requires-Dist: pygobject-stubs; extra == "test"
46
+ Dynamic: license-file
47
+
48
+ [![GitHub Release](https://img.shields.io/github/release/barebaric/rayforge.svg?style=flat)](https://github.com/barebaric/rayforge/releases/)
49
+ [![PyPI version](https://img.shields.io/pypi/v/rayforge)](https://pypi.org/project/rayforge/)
50
+ [![Snap Release](https://snapcraft.io/rayforge/badge.svg)](https://snapcraft.io/rayforge)
51
+ [![Launchpad PPA](https://img.shields.io/badge/PPA-blue)](https://launchpad.net/~knipknap/+archive/ubuntu/rayforge)
52
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
53
+
54
+ [![Get it from the Snap Store](https://snapcraft.io/en/light/install.svg)](https://snapcraft.io/rayforge)
55
+ <a href="https://flathub.org/apps/org.rayforge.rayforge"><img alt="Get it from Flathub" src="website/static/images/flathub-badge.svg" height="55"/></a>
56
+ <a href="https://www.patreon.com/c/knipknap"><img src="https://c5.patreon.com/external/logo/become_a_patron_button.png" alt="Become a Patron" height="55"/></a>
57
+
58
+ # Rayforge
59
+
60
+ Rayforge is a modern, cross-platform 2D CAD, G-code sender and control software for GRBL-based laser cutters and engravers.
61
+ Built with Gtk4 and Libadwaita, it provides a clean, native interface for Linux and Windows, offering a full suite of tools
62
+ for both hobbyists and professionals.
63
+
64
+ ![Screenshot](website/static/screenshots/main-standard.png)
65
+
66
+ You can also check the [official Rayforge homepage](https://rayforge.org).
67
+ We also have a [Discord](https://discord.gg/sTHNdTtpQJ).
68
+
69
+
70
+ ## Key Features
71
+
72
+ | Feature | Description |
73
+ | :--------------------------- | :--------------------------------------------------------------------------------------------------------------- |
74
+ | **Modern UI** | Polished and modern UI built with Gtk4 and Libadwaita. Supports system, light, and dark themes. |
75
+ | **Parametric Sketch Editor** | Create precise, constraint-based 2D designs with geometric and dimensional constraints. |
76
+ | **Multi-Layer Operations** | Assign different operations (e.g., engrave then cut) to layers in your design. |
77
+ | **Versatile Operations** | Supports Contour, Raster Engraving (with cross-hatch fill), Shrink Wrap, and Depth Engraving. |
78
+ | **Overscan & Kerf Comp.** | Improve engraving quality with overscan and ensure dimensional accuracy with kerf compensation. |
79
+ | **2.5D Cutting** | Perform multi-pass cuts with a configurable step-down between each pass for thick materials. |
80
+ | **3D G-code Preview** | Visualize G-code toolpaths in 3D to verify the job before sending it to the machine. |
81
+ | **Multi-Machine Profiles** | Configure and instantly switch between multiple machine profiles. |
82
+ | **GRBL Firmware Settings** | Read and write firmware parameters (`$$`) directly from the UI. |
83
+ | **Comprehensive 2D Canvas** | Full suite of tools: alignment, transformation, measurement, zoom, pan, and more. |
84
+ | **Advanced Path Generation** | High-quality image tracing, travel time optimization, path smoothing, and spot size interpolation. |
85
+ | **Holding Tabs** | Add tabs to contour cuts to hold pieces in place. Supports manual and automatic placement. |
86
+ | **G-code Macros & Hooks** | Run custom G-code snippets before/after jobs. Supports variable substitution. |
87
+ | **Broad File Support** | Import from SVG, DXF, PDF, JPEG, PNG, BMP, and even Ruida files (`.rd`). |
88
+ | **Multi-Laser Operations** | Choose different lasers for each operation in a job |
89
+ | **Camera Integration** | Use a USB camera for workpiece alignment, positioning, and background tracing. |
90
+ | **Cross-Platform** | Native builds for Linux and Windows. |
91
+ | **Extensible** | Open development model makes it easy to [add support for new devices](website/docs/developer/driver.md). |
92
+ | **Multi-Language** | Available in English, Portuguese, Spanish, German, French, and Chinese. |
93
+ | **G-code Dialects** | Supports GRBL, Smoothieware, and other GRBL-compatible firmwares. |
94
+
95
+ ## Device Support
96
+
97
+ | Device Type | Connection Method | Notes |
98
+ | :--------------- | :---------------------- | :------------------------------------------------------------- |
99
+ | **GRBL** | Serial Port | Supported since version 0.13. The most common connection type. |
100
+ | **GRBL** | Network (WiFi/Ethernet) | Connect to any GRBL device on your network. |
101
+ | **Smoothieware** | Telnet | Supported since version 0.15. |
102
+
103
+ ## Installation
104
+
105
+ For installation instructions [refer to our homepage](https://rayforge.org/docs/getting-started/installation).
106
+
107
+ ## Development
108
+
109
+ For detailed information about developing for Rayforge, including setup instructions,
110
+ testing, and contribution guidelines, please see the
111
+ [Developer Documentation](https://rayforge.org/docs/latest/developer/getting-started/).
112
+
113
+ ## License
114
+
115
+ This project is licensed under the **MIT License**. See the `LICENSE` file for details.
@@ -0,0 +1,531 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <component type="desktop-application">
3
+ <id>org.rayforge.rayforge</id>
4
+ <developer id="org.rayforge">
5
+ <name translate="no">Samuel Abels</name>
6
+ </developer>
7
+ <content_rating type="oars-1.1" />
8
+ <url type="homepage">https://rayforge.org</url>
9
+ <url type="bugtracker">https://github.com/barebaric/rayforge/issues</url>
10
+ <url type="vcs-browser">https://github.com/barebaric/rayforge</url>
11
+
12
+ <name>Rayforge</name>
13
+ <summary>A desktop application for laser cutting and engraving</summary>
14
+
15
+ <categories>
16
+ <category>Utility</category>
17
+ <category>Engineering</category>
18
+ </categories>
19
+
20
+ <metadata_license>MIT</metadata_license>
21
+ <project_license>MIT</project_license>
22
+
23
+ <description>
24
+ <p>
25
+ Rayforge is a desktop application for laser cutting and engraving.
26
+ It provides an intuitive interface to create and manage laser
27
+ cutting projects.
28
+ Rayforge support communicating with GRBL based laser cutters.
29
+ Rayforge supports importing SVG, DXF, PDF, and PNGs, and provides
30
+ advanced features such as multi step jobs, automatic path
31
+ optimization, interpolation based on laser dot size, and much more.
32
+ </p>
33
+ </description>
34
+
35
+ <launchable type="desktop-id">org.rayforge.rayforge.desktop</launchable>
36
+
37
+ <provides>
38
+ <mediatype>application/x-rayforge-project</mediatype>
39
+ <mediatype>application/x-rayforge-sketch</mediatype>
40
+ <mediatype>application/x-ruida</mediatype>
41
+ <mediatype>image/png</mediatype>
42
+ <mediatype>image/bmp</mediatype>
43
+ <mediatype>image/jpeg</mediatype>
44
+ <mediatype>image/svg+xml</mediatype>
45
+ <mediatype>image/vnd.dxf</mediatype>
46
+ </provides>
47
+
48
+ <recommends>
49
+ <control>keyboard</control>
50
+ <control>pointing</control>
51
+ <display_length compare="ge">768</display_length>
52
+ </recommends>
53
+
54
+ <icon type="remote">https://raw.githubusercontent.com/barebaric/rayforge/refs/heads/main/rayforge/resources/icons/org.rayforge.rayforge.svg</icon>
55
+
56
+ <branding>
57
+ <color type="primary" scheme_preference="light">#efb0a1</color>
58
+ <color type="primary" scheme_preference="dark">#373f43</color>
59
+ </branding>
60
+
61
+ <screenshots>
62
+ <screenshot type="default">
63
+ <caption>The main window of Rayforge.</caption>
64
+ <image type="source" width="2522" height="1772">https://raw.githubusercontent.com/barebaric/rayforge/main/website/static/screenshots/main-standard.png</image>
65
+ </screenshot>
66
+ </screenshots>
67
+
68
+ <releases>
69
+ <release version="1.4" date="2026-03-29">
70
+ <description>
71
+ <p>Rotary Axis Support, PDF Layer Import, and Camera Calibration</p>
72
+ <p>Major Changes:</p>
73
+ <ul>
74
+ <li>Full rotary axis support with 3D visualization</li>
75
+ <li>PDF direct vector import with layer support</li>
76
+ <li>Camera de-distortion with Charuco calibration wizard</li>
77
+ <li>Sketcher: ellipse tool replacing circle tool</li>
78
+ </ul>
79
+ <p>Rotary Axis:</p>
80
+ <ul>
81
+ <li>Full 3D visualization for rotary mode</li>
82
+ <li>Support for multiple rotary modules</li>
83
+ <li>Configurable rotary mode per layer</li>
84
+ <li>Rotary icon displayed on rotary layers</li>
85
+ </ul>
86
+ <p>PDF Improvements:</p>
87
+ <ul>
88
+ <li>Direct vector import for PDF files</li>
89
+ <li>PDF importer now supports layers</li>
90
+ <li>Split PDF based workpieces into layers</li>
91
+ </ul>
92
+ <p>Camera Calibration:</p>
93
+ <ul>
94
+ <li>Improved five factor de-distortion algorithm</li>
95
+ <li>Charuco card based calibration wizard</li>
96
+ <li>Guided calibration setup process</li>
97
+ </ul>
98
+ <p>Sketcher Improvements:</p>
99
+ <ul>
100
+ <li>Ellipse tool replaces circle tool for more flexibility</li>
101
+ <li>Many tools automatically constrain geometry during creation</li>
102
+ <li>Magnetic snap now works while creating geometry</li>
103
+ <li>Replaced snap to grid with smarter magnetic snap</li>
104
+ <li>Equality constraint now works on ellipses</li>
105
+ </ul>
106
+ <p>Frame Feature:</p>
107
+ <ul>
108
+ <li>Configure frame speed in laser head settings</li>
109
+ <li>Corner dwell time setting for framing</li>
110
+ <li>Repeat count setting for framing</li>
111
+ </ul>
112
+ <p>Post-Processors:</p>
113
+ <ul>
114
+ <li>New merge lines post-processor to avoid double cutting</li>
115
+ </ul>
116
+ <p>UI Improvements:</p>
117
+ <ul>
118
+ <li>More compact left panel layout with add buttons in group headers</li>
119
+ <li>G-code viewer moved into the bottom panel</li>
120
+ <li>3D canvas performance improvements</li>
121
+ </ul>
122
+ <p>Other Improvements:</p>
123
+ <ul>
124
+ <li>Machine profile for Acmer S1 added</li>
125
+ <li>GRBL buffer size tracking improved</li>
126
+ <li>Dialects are now isolated copies (templates)</li>
127
+ <li>Dialects support separate laser on command for focusing</li>
128
+ <li>Texture dimension limit prevents memory exhaustion</li>
129
+ </ul>
130
+ <p>Fixed:</p>
131
+ <ul>
132
+ <li>Material test producer bugs (issues #181 and #182)</li>
133
+ <li>GRBL position reporting for machines with only X and Y axes (#179)</li>
134
+ <li>Sketcher: Distance constraint shadowing the line</li>
135
+ <li>Texture renderer memory exhaustion on large images</li>
136
+ <li>Race condition in worker initialization</li>
137
+ </ul>
138
+ </description>
139
+ </release>
140
+ <release version="1.3.2" date="2026-03-24">
141
+ <description>
142
+ <p>Bug fix release</p>
143
+ <ul>
144
+ <li>Raster step settings now display angle numerically</li>
145
+ <li>Fixed import issues on Windows</li>
146
+ <li>Unknown G-code dialects now fall back to Grbl</li>
147
+ <li>Fixed duplicate error notifications from the driver</li>
148
+ </ul>
149
+ </description>
150
+ </release>
151
+ <release version="1.3.1" date="2026-03-24">
152
+ <description>
153
+ <p>Bug fix release</p>
154
+ <ul>
155
+ <li>Fixed icon sizing issues on systems with Gtk 4.21</li>
156
+ <li>Fixed Windows and macOS build issues</li>
157
+ <li>Fixed conflicting menu shortcuts in the sketcher</li>
158
+ </ul>
159
+ </description>
160
+ </release>
161
+ <release version="1.3" date="2026-03-23">
162
+ <description>
163
+ <p>Bezier Curves in Sketcher and Modular Architecture</p>
164
+ <p>Major Changes:</p>
165
+ <ul>
166
+ <li>Full bezier curve support in the parametric sketcher</li>
167
+ <li>Sketcher moved to an optional add-on</li>
168
+ <li>New unified path tool combining lines and curves</li>
169
+ <li>More compact G-code output</li>
170
+ </ul>
171
+ <p>Sketcher Improvements:</p>
172
+ <ul>
173
+ <li>Intuitive bezier editing with drag handles</li>
174
+ <li>Connect curves to existing geometry</li>
175
+ <li>Smooth or symmetric endpoints for connected paths</li>
176
+ <li>Straighten tool to convert beziers to lines</li>
177
+ <li>Grid tool for visual reference</li>
178
+ <li>Show/hide construction geometry and constraints</li>
179
+ <li>Hold Shift to constrain movement to axis</li>
180
+ <li>Conflicting constraints shown in panel</li>
181
+ </ul>
182
+ <p>G-code Improvements:</p>
183
+ <ul>
184
+ <li>Unchanged coordinates now omitted for smaller files</li>
185
+ <li>G-code viewer shows line count and byte size</li>
186
+ <li>Raster operation gains sample interval and power levels settings</li>
187
+ </ul>
188
+ <p>Fixed:</p>
189
+ <ul>
190
+ <li>Most icons not displayed on systems with Gtk &gt; 4.21</li>
191
+ <li>Fillet and chamfer tools not working correctly</li>
192
+ <li>Texture encoder drawing spaced dots instead of lines</li>
193
+ <li>Loading project files with unknown assets</li>
194
+ </ul>
195
+ </description>
196
+ </release>
197
+ <release version="1.2.1" date="2026-03-19">
198
+ <description>
199
+ <p>Bug fix release</p>
200
+ <p>New Features:</p>
201
+ <ul>
202
+ <li>Buttons to move to center, bottom/left and top/right of workpiece</li>
203
+ <li>Support for setting a "tab power"</li>
204
+ <li>Sketcher: allow entering dimensions while adding geometry</li>
205
+ </ul>
206
+ <p>Improvements:</p>
207
+ <ul>
208
+ <li>Better button layout in the control panel</li>
209
+ <li>Sketcher: circle now uses diameter constraint consistently</li>
210
+ <li>Laser dot now always drawn on top, not obscured by workpieces</li>
211
+ </ul>
212
+ <p>Fixed:</p>
213
+ <ul>
214
+ <li>Builtin addon yaml files not included in .snap</li>
215
+ <li>Imprecise tab location while dragging the tab handle</li>
216
+ <li>Tabs not working on beziers</li>
217
+ </ul>
218
+ </description>
219
+ </release>
220
+ <release version="1.2" date="2026-03-18">
221
+ <description>
222
+ <p>Addon System Rewrite and AI Workpiece Generation</p>
223
+ <p>Major Changes:</p>
224
+ <ul>
225
+ <li>AI workpiece generation</li>
226
+ <li>Complete addon system rewrite and refactoring</li>
227
+ <li>Built-in addons: laser-essentials, core materials, post-processors, layout</li>
228
+ <li>Path optimizer now also optimizes inter-workpiece travel</li>
229
+ <li>Stock is now a document-level concept - no more stock per layer</li>
230
+ </ul>
231
+ <p>New Features:</p>
232
+ <ul>
233
+ <li>Camera image enhancement with temporal noise reduction</li>
234
+ <li>Fisheye lens distortion correction</li>
235
+ <li>Zoom, pan and keyboard navigation in camera alignment dialog</li>
236
+ <li>Tons of new materials in core materials addon</li>
237
+ <li>Mach4 G-code dialect</li>
238
+ <li>Post-processor: crop-to-stock</li>
239
+ <li>Click canvas to set zero feature</li>
240
+ <li>Support for configuring cut/raster colors per laser</li>
241
+ <li>Support for duplicating stock and non-rectangular stock</li>
242
+ <li>Convert workpiece to stock (right-click menu)</li>
243
+ <li>Machine profile for OMTech K40+</li>
244
+ <li>Navigation and zoom icons for UI controls</li>
245
+ </ul>
246
+ <p>Sketcher Improvements:</p>
247
+ <ul>
248
+ <li>Live preview for line tool</li>
249
+ <li>Dimension display while adding geometry</li>
250
+ <li>Snap-to-grid on Ctrl press</li>
251
+ <li>Hover highlighting for entities and constraints</li>
252
+ <li>Toolbar shows currently available shortcuts</li>
253
+ <li>Shift+Double click selects connected geometry</li>
254
+ <li>Arc radius can be changed while adding second endpoint</li>
255
+ <li>Selection preserved when creating lines, arcs, or circles</li>
256
+ </ul>
257
+ <p>Other Improvements:</p>
258
+ <ul>
259
+ <li>Imported items and stock aligned with WCS origin by default</li>
260
+ <li>Improved camera selection dialog (left/right indicators, keyboard support)</li>
261
+ <li>Sketcher symmetry constraint click order aligns with FreeCAD</li>
262
+ <li>Maximum laser G-code power increased to 100.000</li>
263
+ <li>Context lazy loads most services for better performance</li>
264
+ <li>RAYFORGE_DISABLE_3D environment variable</li>
265
+ </ul>
266
+ <p>Fixed:</p>
267
+ <ul>
268
+ <li>Undoing text box left entries in history manager stack</li>
269
+ <li>Y axis drawn on wrong side of canvas</li>
270
+ <li>Auto layout for rotated stock</li>
271
+ <li>SVG exporter stacking multiple workpieces on top of each other</li>
272
+ <li>Text color in Sketcher while editing</li>
273
+ <li>Default laser assignment when project references non-existent laser</li>
274
+ <li>Text box rotating while typing on Windows</li>
275
+ <li>Addon handling issues on Windows</li>
276
+ <li>macOS app menu window narrowed to MainWindow</li>
277
+ <li>macOS app menu actions</li>
278
+ </ul>
279
+ </description>
280
+ </release>
281
+ <release version="1.1.2" date="2026-02-28">
282
+ <description>
283
+ <p>Bug fix release</p>
284
+ <ul>
285
+ <li>Fixed text box rotating while typing in sketcher</li>
286
+ <li>Fixed assets cannot be deleted after loading from a project file</li>
287
+ <li>Fixed empty sketches showing as black squares after loading from project</li>
288
+ <li>Maybe: Fixed pie menu not opening in correct location on Windows</li>
289
+ </ul>
290
+ </description>
291
+ </release>
292
+ <release version="1.1.1" date="2026-02-27">
293
+ <description>
294
+ <p>Bug fix release</p>
295
+ <ul>
296
+ <li>Fixed screenshot link in appstream causing Flatpak build to fail</li>
297
+ </ul>
298
+ </description>
299
+ </release>
300
+ <release version="1.1" date="2026-02-27">
301
+ <description>
302
+ <p>Pipeline Rewrite and Unified Raster Operations</p>
303
+ <p>Version 1.1 brings a complete backend rewrite and unified raster
304
+ operations:</p>
305
+ <p>Major Changes:</p>
306
+ <ul>
307
+ <li>Complete data pipeline backend rewrite with improved
308
+ performance and memory management</li>
309
+ <li>Unified raster operations - old "raster", "depth", and
310
+ "dither" operations merged into one</li>
311
+ <li>New G-code console replacing the log view with a fully
312
+ featured terminal</li>
313
+ <li>SVG and DXF export support for documents and selected
314
+ objects</li>
315
+ <li>Angle constraints now available in the sketcher</li>
316
+ <li>New "Raster (Dither)" operation with configurable
317
+ algorithms</li>
318
+ <li>Built-in G-code dialect supporting dynamic power mode</li>
319
+ <li>Configurable axis extents, work surface, and soft limits
320
+ per machine</li>
321
+ </ul>
322
+ <p>Improvements:</p>
323
+ <ul>
324
+ <li>Auto thresholding for Variable Power and Multipass raster
325
+ modes</li>
326
+ <li>Histogram in depth engraver for easier threshold
327
+ setting</li>
328
+ <li>Symbolic visualization of raster direction</li>
329
+ <li>Configurable line distance in all raster operations</li>
330
+ <li>Machine selector moved to window header</li>
331
+ <li>Workpiece properties now show WCS coordinates</li>
332
+ <li>Imported images placed at reference origin by default</li>
333
+ <li>Ukrainian translation added</li>
334
+ <li>Material files now support translations</li>
335
+ <li>New --config CLI argument for custom config path</li>
336
+ <li>Optional anonymous usage statistics (opt-in)</li>
337
+ <li>Re-assigned Alt key bindings to avoid clashing with
338
+ main menu actions</li>
339
+ <li>Improved contour offset algorithm for intersecting
340
+ geometry</li>
341
+ </ul>
342
+ <p>Fixed:</p>
343
+ <ul>
344
+ <li>Multiple memory leaks in the data pipeline</li>
345
+ <li>Race conditions in worker pool and pipeline</li>
346
+ <li>Camera device scanning crash on Windows</li>
347
+ <li>Various macOS-specific issues</li>
348
+ <li>Rasterizer angle distortion</li>
349
+ <li>Unresponsive serial port handling</li>
350
+ <li>Simulation preview strokes constant across zoom levels</li>
351
+ <li>Speed in Jog dialog correctly converted to base units</li>
352
+ <li>Icons not appearing in snap on non-GNOME environments</li>
353
+ <li>GRBL connection handshake timeout with backoff retry</li>
354
+ </ul>
355
+ </description>
356
+ </release>
357
+ <release version="1.0.1" date="2026-02-01">
358
+ <description>
359
+ <p>Bug fix release</p>
360
+ <ul>
361
+ <li>Fixed some strings not being translatable</li>
362
+ <li>Reformatted the 1.0 release notes to not trip the Flatpak build up</li>
363
+ </ul>
364
+ </description>
365
+ </release>
366
+ <release version="1.0" date="2026-02-01">
367
+ <description>
368
+ <p>It's Rayforge's Birthday Release!</p>
369
+ <p>Version 1.0 brings some exciting features and enhancements to the
370
+ Rayforge experience:</p>
371
+ <p>Major Additions:</p>
372
+ <ul>
373
+ <li>Full project save/load support</li>
374
+ <li>Sketcher now supports text, with advanced options</li>
375
+ <li>Jog dialog and log view have been merged into a new bottom
376
+ panel</li>
377
+ <li>Aspect ratio constraints now available in the sketcher</li>
378
+ <li>Engraving steps can now be inverted</li>
379
+ <li>Raster engraver gains support for setting engraving angle in
380
+ degrees</li>
381
+ <li>Recent files menu added for easier access to your last
382
+ projects</li>
383
+ <li>Installers for all platforms now register .ryp (project) and
384
+ .rfs (sketch) file extensions</li>
385
+ </ul>
386
+ <p>Changes:</p>
387
+ <ul>
388
+ <li>CLI update: `--direct-vector` renamed to `--vector`; added
389
+ `--trace` to enforce trace mode (vector import is now default)</li>
390
+ <li>Import errors are now collected and shown in the import
391
+ dialog</li>
392
+ <li>Importers rewritten for better testability and stability</li>
393
+ <li>Sketcher solver now biases points towards their previous
394
+ position, improving dragging stability</li>
395
+ <li>Simulation mode keyboard shortcut changed to F11 to avoid
396
+ conflict with "Save as..."</li>
397
+ <li>Improved G-code view and control panel state retention across
398
+ sessions</li>
399
+ <li>Precision of power sliders and display digits has been
400
+ increased</li>
401
+ <li>Import dialog now displays number of vectors per layer</li>
402
+ <li>Error message added when attempting to delete a dialect in
403
+ use</li>
404
+ <li>Chinese translations added to improve localization</li>
405
+ </ul>
406
+ <p>Fixed:</p>
407
+ <ul>
408
+ <li>Traceback when adding a constraint in the sketcher
409
+ (Windows only)</li>
410
+ <li>Potential memory leak and stale operations display</li>
411
+ <li>Improved multi-layer DXF import handling</li>
412
+ <li>Numerous alignment bugs in importers</li>
413
+ <li>Traceback when using invert switch in the import dialog</li>
414
+ <li>Sketches not centered on the surface after import</li>
415
+ </ul>
416
+ <p>Documentation:</p>
417
+ <ul>
418
+ <li>Updated importer developer documentation</li>
419
+ </ul>
420
+ </description>
421
+ </release>
422
+ <release version="0.28.4" date="2026-01-22">
423
+ <description>
424
+ <p>Bug fix release</p>
425
+ <ul>
426
+ <li>Fixed traceback when dialect contained deprecated attributes</li>
427
+ <li>Fixed debian package missing asyncudp dependency</li>
428
+ </ul>
429
+ </description>
430
+ </release>
431
+ <release version="0.28.3" date="2026-01-18">
432
+ <description>
433
+ <p>Bug fix release</p>
434
+ <ul>
435
+ <li>Added option to enable/disable WCS injection in G-code dialect</li>
436
+ <li>Fixed depth engraver not respecting master power setting</li>
437
+ <li>Fixed traceback when using invert image in import dialog</li>
438
+ </ul>
439
+ </description>
440
+ </release>
441
+ <release version="0.28.2" date="2026-01-17">
442
+ <description>
443
+ <p>Bug fix release</p>
444
+ <ul>
445
+ <li>Fixed test that depended on specific version string</li>
446
+ </ul>
447
+ </description>
448
+ </release>
449
+ <release version="0.28.1" date="2026-01-17">
450
+ <description>
451
+ <p>Bug fix release</p>
452
+ <ul>
453
+ <li>Fixed invalid ampersand in appstream XML</li>
454
+ </ul>
455
+ </description>
456
+ </release>
457
+ <release version="0.28" date="2026-01-17">
458
+ <description>
459
+ <p>Work Coordinate Systems, True Arcs, and a New Package Manager</p>
460
+ <ul>
461
+ <li>Full support for Work Coordinate Systems (WCS) G54-G59</li>
462
+ <li>True arc support with superior geometry handling</li>
463
+ <li>New Package Manager for extensibility</li>
464
+ <li>New sketcher tools: Rectangle, Fillet, and Chamfer</li>
465
+ <li>Optimized G-code output and improved GRBL driver</li>
466
+ <li>Always-active Cancel button and improved UI</li>
467
+ <li>Numerous bug fixes and performance improvements</li>
468
+ </ul>
469
+ </description>
470
+ </release>
471
+ <release version="0.27.1" date="2025-01-03">
472
+ <description>
473
+ <p>Maintenance release with performance improvements</p>
474
+ <ul>
475
+ <li>Major performance boost for SVG imports</li>
476
+ <li>Fixed invalid clipping paths in SVG files</li>
477
+ <li>Restored sketcher fill toggling</li>
478
+ <li>Theme-aware sketcher line colors</li>
479
+ <li>Corrected laser dot position</li>
480
+ </ul>
481
+ </description>
482
+ </release>
483
+ <release version="0.27" date="2025-01-02">
484
+ <description>
485
+ <p>Enhanced Sketching, Machine Control &amp; UI Refinements</p>
486
+ <ul>
487
+ <li>Expressions and parameters in parametric sketcher</li>
488
+ <li>Filled shapes support in sketcher</li>
489
+ <li>Improved constraint visualization and drag-select</li>
490
+ <li>Robust GRBL serial driver with better recovery</li>
491
+ <li>Variable substitutions in G-code</li>
492
+ <li>Flexible machine origins and negative axis support</li>
493
+ <li>Icon refresh and redesigned machine settings dialog</li>
494
+ <li>Dark mode improvements and streamlined settings</li>
495
+ </ul>
496
+ </description>
497
+ </release>
498
+ <release version="0.26" date="2025-11-30">
499
+ <description>
500
+ <p>Parametric 2D Sketcher &amp; Major Performance Upgrades</p>
501
+ <ul>
502
+ <li>Parametric 2D sketcher with constraint system</li>
503
+ <li>Import/export sketches with parametric constraints</li>
504
+ <li>Significantly reduced memory usage</li>
505
+ <li>Faster operations with complex vector files</li>
506
+ <li>Fixed 3D view and G-code mirroring with Y-down machines</li>
507
+ <li>Improved Smoothieware driver compatibility</li>
508
+ <li>Added Makera Carvera Air machine profile</li>
509
+ </ul>
510
+ </description>
511
+ </release>
512
+ <release version="0.25" date="2025-11-22">
513
+ <description>
514
+ <p>New Import Experience &amp; Object Management</p>
515
+ <ul>
516
+ <li>Interactive import dialog with tracing controls</li>
517
+ <li>Split workpiece command for separating assets</li>
518
+ <li>Custom G-code dialects support</li>
519
+ <li>Inner edges first in contour operations</li>
520
+ <li>Improved UI responsiveness with debouncing</li>
521
+ <li>Fixed power display bug and grouping visuals</li>
522
+ </ul>
523
+ </description>
524
+ </release>
525
+ <release version="0.22" date="2025-09-20">
526
+ <description>
527
+ <p>This is the initial release.</p>
528
+ </description>
529
+ </release>
530
+ </releases>
531
+ </component>