From 3bbe1d56e23790c5ec5a7ac63235441357708901 Mon Sep 17 00:00:00 2001 From: Damian Wrobel Date: Mon, 23 Dec 2024 12:44:26 +0100 Subject: [PATCH 1/7] Fix name 'unit_value_to_string' is not defined error Fixes the following error: utilities/operation_utils.py", line 328, in update_chipload o.info.chipload_per_tooth = unit_value_to_string(o.info.chipload, 4) ^^^^^^^^^^^^^^^^^^^^ NameError: name 'unit_value_to_string' is not defined File "utilities/operation_utils.py", line 346, in update_offset_image Signed-off-by: Damian Wrobel --- scripts/addons/cam/utilities/operation_utils.py | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/addons/cam/utilities/operation_utils.py b/scripts/addons/cam/utilities/operation_utils.py index 25172c1f..294ebeba 100644 --- a/scripts/addons/cam/utilities/operation_utils.py +++ b/scripts/addons/cam/utilities/operation_utils.py @@ -12,6 +12,7 @@ import bpy from bpy_extras import object_utils from .simple_utils import get_cache_path +from .simple_utils import unit_value_to_string from ..constants import was_hidden_dict From 0b81f111d792329564dde514dba7f3ac3fe551ae Mon Sep 17 00:00:00 2001 From: Release robot Date: Mon, 23 Dec 2024 18:17:43 +0000 Subject: [PATCH 2/7] Version number --- scripts/addons/cam/blender_manifest.toml | 4 ++-- scripts/addons/cam/version.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/addons/cam/blender_manifest.toml b/scripts/addons/cam/blender_manifest.toml index 398f6e3a..385129fa 100644 --- a/scripts/addons/cam/blender_manifest.toml +++ b/scripts/addons/cam/blender_manifest.toml @@ -1,7 +1,7 @@ -schema_version = "1.0.57" +schema_version = "1.0.58" id = "fabex" -version = "1.0.57" +version = "1.0.58" name = "Fabex CNC (formerly BlenderCAM)" tagline = "G-code Generation Tools" maintainer = "Alain Pelletier and Contributors" diff --git a/scripts/addons/cam/version.py b/scripts/addons/cam/version.py index 3945ec35..b09c3faa 100644 --- a/scripts/addons/cam/version.py +++ b/scripts/addons/cam/version.py @@ -1 +1 @@ -__version__ = (1, 0, 57) +__version__=(1,0,58) \ No newline at end of file From 5d6ac6d5b422ea866b1349d17952ca80f9ce588e Mon Sep 17 00:00:00 2001 From: Damian Wrobel Date: Mon, 23 Dec 2024 22:21:25 +0100 Subject: [PATCH 3/7] Improve "Operation Exceeded..." message Improve "Operation Exceeds Your Machine Limits" message with information on which axes the limit were exceeded plus the value of range and working area. Signed-off-by: Damian Wrobel --- scripts/addons/cam/utilities/bounds_utils.py | 41 ++++++++++++++++---- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/scripts/addons/cam/utilities/bounds_utils.py b/scripts/addons/cam/utilities/bounds_utils.py index 538ba873..394cb844 100644 --- a/scripts/addons/cam/utilities/bounds_utils.py +++ b/scripts/addons/cam/utilities/bounds_utils.py @@ -10,6 +10,7 @@ from .shapely_utils import shapely_to_curve, shapely_to_multipolygon from .simple_utils import ( activate, progress, + unit_value_to_string, ) @@ -242,14 +243,38 @@ def get_bounds(o): o.max.z = o.source_image_offset.z s = bpy.context.scene m = s.cam_machine - # make sure this message only shows once and goes away once fixed - o.info.warnings.replace("Operation Exceeds Your Machine Limits\n", "") - if ( - o.max.x - o.min.x > m.working_area.x - or o.max.y - o.min.y > m.working_area.y - or o.max.z - o.min.z > m.working_area.z - ): - o.info.warnings += "Operation Exceeds Your Machine Limits\n" + + x_delta_range = o.max.x - o.min.x + y_delta_range = o.max.y - o.min.y + z_delta_range = o.max.z - o.min.z + + x_is_exceeded = x_delta_range > m.working_area.x + y_is_exceeded = y_delta_range > m.working_area.y + z_is_exceeded = z_delta_range > m.working_area.z + + if x_is_exceeded or y_is_exceeded or z_is_exceeded: + exceed_msg = "Operation Exceeds Your Machine Limits (range > working area)\n" + + # Do not append more than one such a warning + if exceed_msg not in o.info.warnings: + o.info.warnings += exceed_msg + + if x_is_exceeded: + o.info.warnings += ( + f"Axis X[ range:{unit_value_to_string(x_delta_range)}" + + f", working area:{unit_value_to_string(m.working_area.x)}]\n" + ) + if y_is_exceeded: + o.info.warnings += ( + f"Axis Y[ range:{unit_value_to_string(y_delta_range)}" + + f", working area:{unit_value_to_string(m.working_area.y)}]\n" + ) + if z_is_exceeded: + o.info.warnings += ( + f"Axis Z[ range:{unit_value_to_string(z_delta_range)}" + + f", working area:{unit_value_to_string(m.working_area.z)}]\n" + ) + if not o.info.warnings == "": addon_prefs = bpy.context.preferences.addons["bl_ext.user_default.fabex"].preferences if addon_prefs.show_popups: From a4a74a55130fbc7a716af6db962f453fe0042082 Mon Sep 17 00:00:00 2001 From: Damian Wrobel Date: Mon, 23 Dec 2024 23:54:13 +0100 Subject: [PATCH 4/7] Add "black" configuration Try to achieve consistent formatting results between different 'black' and 'python' versions. Signed-off-by: Damian Wrobel --- .github/workflows/black.yml | 2 +- pyproject.toml | 5 +++ scripts/addons/cam/gcode_import_parser.py | 6 ++-- scripts/addons/cam/parametric.py | 2 +- scripts/addons/cam/ui/pie_menu/pie_chains.py | 6 ++-- .../addons/cam/ui/pie_menu/pie_operation.py | 36 +++++++++---------- scripts/addons/cam/utilities/image_utils.py | 10 +++--- scripts/addons/cam/version.py | 2 +- 8 files changed, 37 insertions(+), 32 deletions(-) create mode 100644 pyproject.toml diff --git a/.github/workflows/black.yml b/.github/workflows/black.yml index e426229f..e419a2b2 100644 --- a/.github/workflows/black.yml +++ b/.github/workflows/black.yml @@ -10,7 +10,7 @@ jobs: uses: rickstaa/action-black@v1 id: action_black with: - black_args: "./scripts/addons/cam --line-length=100" + black_args: "." - name: Create Pull Request if: steps.action_black.outputs.is_formatted == 'true' uses: peter-evans/create-pull-request@v6 diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..9180c588 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,5 @@ +[tool.black] +line-length = 100 +target-version = ['py311'] +include = '\.py' + diff --git a/scripts/addons/cam/gcode_import_parser.py b/scripts/addons/cam/gcode_import_parser.py index 1aef8bda..b931fca9 100644 --- a/scripts/addons/cam/gcode_import_parser.py +++ b/scripts/addons/cam/gcode_import_parser.py @@ -498,9 +498,9 @@ class GcodeModel: extr_idx = int(args["S"]) # e.g. M163 S0 P1 weight = args["P"] # change CMYKW - col[ - extr_idx + 3 - ] = weight # +3 weil ersten 3 stellen RGB sind, need only CMYKW values for extrude + col[extr_idx + 3] = ( + weight # +3 weil ersten 3 stellen RGB sind, need only CMYKW values for extrude + ) self.color = col # take RGB values for seg from last comment (above first M163 statement) diff --git a/scripts/addons/cam/parametric.py b/scripts/addons/cam/parametric.py index 6aeaa6ee..f10bbdec 100644 --- a/scripts/addons/cam/parametric.py +++ b/scripts/addons/cam/parametric.py @@ -87,7 +87,7 @@ def create_parametric_curve( use_cubic: bool = True, iterations: int = 8, resolution_u: int = 10, - **kwargs + **kwargs, ): """ Creates a Blender bezier curve object from a parametric function. diff --git a/scripts/addons/cam/ui/pie_menu/pie_chains.py b/scripts/addons/cam/ui/pie_menu/pie_chains.py index d4936bab..3b9e1fe4 100644 --- a/scripts/addons/cam/ui/pie_menu/pie_chains.py +++ b/scripts/addons/cam/ui/pie_menu/pie_chains.py @@ -24,9 +24,9 @@ class VIEW3D_MT_PIE_Chains(Menu): pie.scale_y = 2 # Left - pie.operator( - "wm.call_panel", text="Operations", icon="MOD_ENVELOPE" - ).name = "FABEX_PT_CAM_OPERATIONS" + pie.operator("wm.call_panel", text="Operations", icon="MOD_ENVELOPE").name = ( + "FABEX_PT_CAM_OPERATIONS" + ) # Right pie.operator("wm.call_panel", text="Chains", icon="LINKED").name = "FABEX_PT_CAM_CHAINS" diff --git a/scripts/addons/cam/ui/pie_menu/pie_operation.py b/scripts/addons/cam/ui/pie_menu/pie_operation.py index 80f3d501..436a10db 100644 --- a/scripts/addons/cam/ui/pie_menu/pie_operation.py +++ b/scripts/addons/cam/ui/pie_menu/pie_operation.py @@ -23,17 +23,17 @@ class VIEW3D_MT_PIE_Operation(Menu): pie.scale_y = 2 # Left - pie.operator( - "wm.call_panel", text="Area", icon="SHADING_BBOX" - ).name = "FABEX_PT_CAM_OPERATION_AREA" + pie.operator("wm.call_panel", text="Area", icon="SHADING_BBOX").name = ( + "FABEX_PT_CAM_OPERATION_AREA" + ) # Right - pie.operator( - "wm.call_panel", text="Optimisation", icon="MODIFIER" - ).name = "FABEX_PT_CAM_OPTIMISATION" + pie.operator("wm.call_panel", text="Optimisation", icon="MODIFIER").name = ( + "FABEX_PT_CAM_OPTIMISATION" + ) # Bottom - pie.operator( - "wm.call_panel", text="Setup", icon="PREFERENCES" - ).name = "FABEX_PT_CAM_OPERATION" + pie.operator("wm.call_panel", text="Setup", icon="PREFERENCES").name = ( + "FABEX_PT_CAM_OPERATION" + ) # Top box = pie.box() @@ -42,19 +42,19 @@ class VIEW3D_MT_PIE_Operation(Menu): box.operator("wm.call_menu_pie", text="", icon="HOME").name = "VIEW3D_MT_PIE_CAM" # Top Left - pie.operator( - "wm.call_panel", text="Movement", icon="ANIM_DATA" - ).name = "FABEX_PT_CAM_MOVEMENT" + pie.operator("wm.call_panel", text="Movement", icon="ANIM_DATA").name = ( + "FABEX_PT_CAM_MOVEMENT" + ) # Top Right pie.operator("wm.call_panel", text="Feedrate", icon="AUTO").name = "FABEX_PT_CAM_FEEDRATE" # Bottom Left - pie.operator( - "wm.call_panel", text="Cutter", icon="OUTLINER_DATA_GP_LAYER" - ).name = "FABEX_PT_CAM_CUTTER" + pie.operator("wm.call_panel", text="Cutter", icon="OUTLINER_DATA_GP_LAYER").name = ( + "FABEX_PT_CAM_CUTTER" + ) # Bottom Right - pie.operator( - "wm.call_panel", text="G-Code Options", icon="EVENT_G" - ).name = "FABEX_PT_CAM_GCODE" + pie.operator("wm.call_panel", text="G-Code Options", icon="EVENT_G").name = ( + "FABEX_PT_CAM_GCODE" + ) diff --git a/scripts/addons/cam/utilities/image_utils.py b/scripts/addons/cam/utilities/image_utils.py index d8fad9e5..fb682308 100644 --- a/scripts/addons/cam/utilities/image_utils.py +++ b/scripts/addons/cam/utilities/image_utils.py @@ -403,11 +403,11 @@ def build_stroke(start, end, cutterArray): samplesz = numpy.round(numpy.linspace(start[2], end[2], strokelength)) for i in range(0, len(strokelength)): - strokeArray[ - samplesx[i] - r : samplesx[i] + r, samplesy[i] - r : samplesy[i] + r - ] = numpy.maximum( - strokeArray[samplesx[i] - r : samplesx[i] + r, samplesy[i] - r : samplesy[i] + r], - cutterArray + samplesz[i], + strokeArray[samplesx[i] - r : samplesx[i] + r, samplesy[i] - r : samplesy[i] + r] = ( + numpy.maximum( + strokeArray[samplesx[i] - r : samplesx[i] + r, samplesy[i] - r : samplesy[i] + r], + cutterArray + samplesz[i], + ) ) return strokeArray diff --git a/scripts/addons/cam/version.py b/scripts/addons/cam/version.py index b09c3faa..08642915 100644 --- a/scripts/addons/cam/version.py +++ b/scripts/addons/cam/version.py @@ -1 +1 @@ -__version__=(1,0,58) \ No newline at end of file +__version__ = (1, 0, 58) From 1357d5dff75e75a40de3c2ba57bafc39f23d65f1 Mon Sep 17 00:00:00 2001 From: pppalain <33393909+pppalain@users.noreply.github.com> Date: Tue, 24 Dec 2024 14:38:02 +0000 Subject: [PATCH 5/7] :art: Format Python code with psf/black --- scripts/addons/cam/gcode_import_parser.py | 6 ++-- scripts/addons/cam/ui/pie_menu/pie_chains.py | 6 ++-- .../addons/cam/ui/pie_menu/pie_operation.py | 36 +++++++++---------- scripts/addons/cam/utilities/image_utils.py | 10 +++--- 4 files changed, 29 insertions(+), 29 deletions(-) diff --git a/scripts/addons/cam/gcode_import_parser.py b/scripts/addons/cam/gcode_import_parser.py index b931fca9..1aef8bda 100644 --- a/scripts/addons/cam/gcode_import_parser.py +++ b/scripts/addons/cam/gcode_import_parser.py @@ -498,9 +498,9 @@ class GcodeModel: extr_idx = int(args["S"]) # e.g. M163 S0 P1 weight = args["P"] # change CMYKW - col[extr_idx + 3] = ( - weight # +3 weil ersten 3 stellen RGB sind, need only CMYKW values for extrude - ) + col[ + extr_idx + 3 + ] = weight # +3 weil ersten 3 stellen RGB sind, need only CMYKW values for extrude self.color = col # take RGB values for seg from last comment (above first M163 statement) diff --git a/scripts/addons/cam/ui/pie_menu/pie_chains.py b/scripts/addons/cam/ui/pie_menu/pie_chains.py index 3b9e1fe4..d4936bab 100644 --- a/scripts/addons/cam/ui/pie_menu/pie_chains.py +++ b/scripts/addons/cam/ui/pie_menu/pie_chains.py @@ -24,9 +24,9 @@ class VIEW3D_MT_PIE_Chains(Menu): pie.scale_y = 2 # Left - pie.operator("wm.call_panel", text="Operations", icon="MOD_ENVELOPE").name = ( - "FABEX_PT_CAM_OPERATIONS" - ) + pie.operator( + "wm.call_panel", text="Operations", icon="MOD_ENVELOPE" + ).name = "FABEX_PT_CAM_OPERATIONS" # Right pie.operator("wm.call_panel", text="Chains", icon="LINKED").name = "FABEX_PT_CAM_CHAINS" diff --git a/scripts/addons/cam/ui/pie_menu/pie_operation.py b/scripts/addons/cam/ui/pie_menu/pie_operation.py index 436a10db..80f3d501 100644 --- a/scripts/addons/cam/ui/pie_menu/pie_operation.py +++ b/scripts/addons/cam/ui/pie_menu/pie_operation.py @@ -23,17 +23,17 @@ class VIEW3D_MT_PIE_Operation(Menu): pie.scale_y = 2 # Left - pie.operator("wm.call_panel", text="Area", icon="SHADING_BBOX").name = ( - "FABEX_PT_CAM_OPERATION_AREA" - ) + pie.operator( + "wm.call_panel", text="Area", icon="SHADING_BBOX" + ).name = "FABEX_PT_CAM_OPERATION_AREA" # Right - pie.operator("wm.call_panel", text="Optimisation", icon="MODIFIER").name = ( - "FABEX_PT_CAM_OPTIMISATION" - ) + pie.operator( + "wm.call_panel", text="Optimisation", icon="MODIFIER" + ).name = "FABEX_PT_CAM_OPTIMISATION" # Bottom - pie.operator("wm.call_panel", text="Setup", icon="PREFERENCES").name = ( - "FABEX_PT_CAM_OPERATION" - ) + pie.operator( + "wm.call_panel", text="Setup", icon="PREFERENCES" + ).name = "FABEX_PT_CAM_OPERATION" # Top box = pie.box() @@ -42,19 +42,19 @@ class VIEW3D_MT_PIE_Operation(Menu): box.operator("wm.call_menu_pie", text="", icon="HOME").name = "VIEW3D_MT_PIE_CAM" # Top Left - pie.operator("wm.call_panel", text="Movement", icon="ANIM_DATA").name = ( - "FABEX_PT_CAM_MOVEMENT" - ) + pie.operator( + "wm.call_panel", text="Movement", icon="ANIM_DATA" + ).name = "FABEX_PT_CAM_MOVEMENT" # Top Right pie.operator("wm.call_panel", text="Feedrate", icon="AUTO").name = "FABEX_PT_CAM_FEEDRATE" # Bottom Left - pie.operator("wm.call_panel", text="Cutter", icon="OUTLINER_DATA_GP_LAYER").name = ( - "FABEX_PT_CAM_CUTTER" - ) + pie.operator( + "wm.call_panel", text="Cutter", icon="OUTLINER_DATA_GP_LAYER" + ).name = "FABEX_PT_CAM_CUTTER" # Bottom Right - pie.operator("wm.call_panel", text="G-Code Options", icon="EVENT_G").name = ( - "FABEX_PT_CAM_GCODE" - ) + pie.operator( + "wm.call_panel", text="G-Code Options", icon="EVENT_G" + ).name = "FABEX_PT_CAM_GCODE" diff --git a/scripts/addons/cam/utilities/image_utils.py b/scripts/addons/cam/utilities/image_utils.py index fb682308..d8fad9e5 100644 --- a/scripts/addons/cam/utilities/image_utils.py +++ b/scripts/addons/cam/utilities/image_utils.py @@ -403,11 +403,11 @@ def build_stroke(start, end, cutterArray): samplesz = numpy.round(numpy.linspace(start[2], end[2], strokelength)) for i in range(0, len(strokelength)): - strokeArray[samplesx[i] - r : samplesx[i] + r, samplesy[i] - r : samplesy[i] + r] = ( - numpy.maximum( - strokeArray[samplesx[i] - r : samplesx[i] + r, samplesy[i] - r : samplesy[i] + r], - cutterArray + samplesz[i], - ) + strokeArray[ + samplesx[i] - r : samplesx[i] + r, samplesy[i] - r : samplesy[i] + r + ] = numpy.maximum( + strokeArray[samplesx[i] - r : samplesx[i] + r, samplesy[i] - r : samplesy[i] + r], + cutterArray + samplesz[i], ) return strokeArray From 71db01b514458d1954dc000cfef95b2a486c8e4c Mon Sep 17 00:00:00 2001 From: Release robot Date: Thu, 26 Dec 2024 19:29:22 +0000 Subject: [PATCH 6/7] Version number --- scripts/addons/cam/blender_manifest.toml | 4 ++-- scripts/addons/cam/version.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/addons/cam/blender_manifest.toml b/scripts/addons/cam/blender_manifest.toml index 385129fa..b6b30efc 100644 --- a/scripts/addons/cam/blender_manifest.toml +++ b/scripts/addons/cam/blender_manifest.toml @@ -1,7 +1,7 @@ -schema_version = "1.0.58" +schema_version = "1.0.59" id = "fabex" -version = "1.0.58" +version = "1.0.59" name = "Fabex CNC (formerly BlenderCAM)" tagline = "G-code Generation Tools" maintainer = "Alain Pelletier and Contributors" diff --git a/scripts/addons/cam/version.py b/scripts/addons/cam/version.py index 08642915..5d54b13f 100644 --- a/scripts/addons/cam/version.py +++ b/scripts/addons/cam/version.py @@ -1 +1 @@ -__version__ = (1, 0, 58) +__version__=(1,0,59) \ No newline at end of file From ba9caeff97f6dc9c589f2eabecce8d0c6851264c Mon Sep 17 00:00:00 2001 From: Release robot Date: Thu, 26 Dec 2024 19:32:36 +0000 Subject: [PATCH 7/7] Version number --- scripts/addons/cam/blender_manifest.toml | 4 ++-- scripts/addons/cam/version.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/addons/cam/blender_manifest.toml b/scripts/addons/cam/blender_manifest.toml index b6b30efc..16efa2c9 100644 --- a/scripts/addons/cam/blender_manifest.toml +++ b/scripts/addons/cam/blender_manifest.toml @@ -1,7 +1,7 @@ -schema_version = "1.0.59" +schema_version = "1.0.60" id = "fabex" -version = "1.0.59" +version = "1.0.60" name = "Fabex CNC (formerly BlenderCAM)" tagline = "G-code Generation Tools" maintainer = "Alain Pelletier and Contributors" diff --git a/scripts/addons/cam/version.py b/scripts/addons/cam/version.py index 5d54b13f..b43200ed 100644 --- a/scripts/addons/cam/version.py +++ b/scripts/addons/cam/version.py @@ -1 +1 @@ -__version__=(1,0,59) \ No newline at end of file +__version__=(1,0,60) \ No newline at end of file