From 4127b302b1ce2079df6af5745db11c9e86d182e4 Mon Sep 17 00:00:00 2001 From: AndyEveritt Date: Tue, 18 Aug 2020 17:41:21 +0100 Subject: [PATCH 1/5] order non planar better when no planar --- src/ASMBL_parser.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/ASMBL_parser.py b/src/ASMBL_parser.py index 7c94b6f..0bcdd6e 100644 --- a/src/ASMBL_parser.py +++ b/src/ASMBL_parser.py @@ -219,6 +219,25 @@ def split_cam_operations(self, gcode_sub): def assign_cam_layer_height(self, cam_layer, later_cam_layers, layer_overlap): """ Calculate the additive layer height that should be printed to before the CAM layer happens """ + if not cam_layer.planar: + cam_layer_height = cam_layer.cutting_height + later_additive = [layer for layer in self.gcode_add_layers[:-1] + if layer.layer_height > cam_layer_height] + + if layer_overlap == 0: + cam_layer.layer_height = cam_layer_height + + elif len(later_additive) == 0: + cam_layer.layer_height = cam_layer_height + + elif len(later_additive) >= layer_overlap: + cam_layer.layer_height = later_additive[layer_overlap - 1].layer_height + + else: + cam_layer.layer_height = later_additive[-1].layer_height + + return + if len(later_cam_layers) > 0: next_cam_layer_height = min([layer.cutting_height for layer in later_cam_layers]) later_additive = [layer for layer in self.gcode_add_layers[:-1] From 4298477b3e1070d12cc08814024243edae0ba17a Mon Sep 17 00:00:00 2001 From: AndyEveritt Date: Wed, 19 Aug 2020 11:16:58 +0100 Subject: [PATCH 2/5] simplified & improved cam layer height assignment * separates planar from non planar * still not optimal but currently best compromise --- src/ASMBL_parser.py | 63 ++++++++++++--------------------------------- 1 file changed, 17 insertions(+), 46 deletions(-) diff --git a/src/ASMBL_parser.py b/src/ASMBL_parser.py index 0bcdd6e..e45e138 100644 --- a/src/ASMBL_parser.py +++ b/src/ASMBL_parser.py @@ -219,60 +219,31 @@ def split_cam_operations(self, gcode_sub): def assign_cam_layer_height(self, cam_layer, later_cam_layers, layer_overlap): """ Calculate the additive layer height that should be printed to before the CAM layer happens """ - if not cam_layer.planar: - cam_layer_height = cam_layer.cutting_height - later_additive = [layer for layer in self.gcode_add_layers[:-1] - if layer.layer_height > cam_layer_height] + later_planar_layers = [layer for layer in later_cam_layers if layer.planar] - if layer_overlap == 0: - cam_layer.layer_height = cam_layer_height - - elif len(later_additive) == 0: - cam_layer.layer_height = cam_layer_height - - elif len(later_additive) >= layer_overlap: - cam_layer.layer_height = later_additive[layer_overlap - 1].layer_height - - else: - cam_layer.layer_height = later_additive[-1].layer_height - - return - - if len(later_cam_layers) > 0: - next_cam_layer_height = min([layer.cutting_height for layer in later_cam_layers]) - later_additive = [layer for layer in self.gcode_add_layers[:-1] - if layer.layer_height > next_cam_layer_height] - - if layer_overlap == 0: - cam_layer.layer_height = next_cam_layer_height - - elif len(later_additive) == 0: - cam_layer.layer_height = next_cam_layer_height - - elif len(later_additive) >= layer_overlap: - cam_layer.layer_height = later_additive[layer_overlap - 1].layer_height - - else: - cam_layer.layer_height = later_additive[-1].layer_height + if (not cam_layer.planar) or (len(later_planar_layers) == 0): + cutting_height = cam_layer.cutting_height + else: + cutting_height = min([layer.cutting_height for layer in later_planar_layers]) - else: # no later ops - later_additive = [layer for layer in self.gcode_add_layers[:-1] - if layer.layer_height > cam_layer.cutting_height] + later_additive = [layer for layer in self.gcode_add_layers[:-1] + if layer.layer_height > cutting_height] - if len(later_additive) == 0: # no further printing - # add 10 since it is unlikely that the printed layer height will exceed 10 mm - # but still want to place cutting after a print at the same height - cam_layer.layer_height = cam_layer.cutting_height + 10 + if (layer_overlap == 0) or (len(later_additive) == 0): + cam_layer_height = cutting_height - elif len(later_additive) >= layer_overlap: - cam_layer.layer_height = later_additive[layer_overlap - 1].layer_height + elif len(later_additive) >= layer_overlap: + cam_layer_height = later_additive[layer_overlap - 1].layer_height - else: - cam_layer.layer_height = later_additive[-1].layer_height + else: + cam_layer_height = later_additive[-1].layer_height - if cam_layer.layer_height == inf: + if cam_layer_height == inf: raise ValueError("CAM op height can't be 'inf'") + cam_layer.layer_height = cam_layer_height + return + def order_cam_operations_by_layer(self, operations): """ Takes a list of cam operations and calculates the layer that they should be executed """ unordered_cam_layers = [] From e9570fa68d103a684dfe8bcc9e197e7ec78ae48f Mon Sep 17 00:00:00 2001 From: AndyEveritt Date: Thu, 10 Sep 2020 15:13:31 +0100 Subject: [PATCH 3/5] add make file --- Makefile | 2 ++ src/operations.py | 12 ------------ 2 files changed, 2 insertions(+), 12 deletions(-) create mode 100644 Makefile delete mode 100644 src/operations.py diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..9e543fb --- /dev/null +++ b/Makefile @@ -0,0 +1,2 @@ +make-exe: + pyinstaller main.py --onefile --name ASMBL \ No newline at end of file diff --git a/src/operations.py b/src/operations.py deleted file mode 100644 index 8b128a1..0000000 --- a/src/operations.py +++ /dev/null @@ -1,12 +0,0 @@ -class Operations: - category = { - 'planar': [ - 'adaptive2d', - 'contour2d', - 'contour_new' - ], - 'non_planar': [ - 'parallel_new', - 'radial_new', - ] - } From 6b567a530a10258577f9870a726dcb905a96ca0b Mon Sep 17 00:00:00 2001 From: AndyEveritt Date: Thu, 10 Sep 2020 16:31:25 +0100 Subject: [PATCH 4/5] update makefile --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 9e543fb..74a8f70 100644 --- a/Makefile +++ b/Makefile @@ -1,2 +1,2 @@ -make-exe: - pyinstaller main.py --onefile --name ASMBL \ No newline at end of file +exe: + pyinstaller main.py --onefile --name ASMBL-dev \ No newline at end of file From 8620ba868557272934a2b6693d69376c5b5e84f1 Mon Sep 17 00:00:00 2001 From: AndyEveritt Date: Tue, 29 Sep 2020 11:29:38 +0100 Subject: [PATCH 5/5] open folders in mac --- src/fusion_api/Handlers.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/fusion_api/Handlers.py b/src/fusion_api/Handlers.py index d381f72..ec2fad0 100644 --- a/src/fusion_api/Handlers.py +++ b/src/fusion_api/Handlers.py @@ -4,6 +4,8 @@ import traceback import time import os +import sys +import subprocess from ..ASMBL_parser import Parser @@ -391,10 +393,11 @@ def notify(self, args): outputFolder = os.path.expanduser('~/Asmbl/output/') asmbl_parser.create_output_file(asmbl_parser.merged_gcode_script, outputFolder) - if (os.name == 'posix'): - os.system('open "%s"' % outputFolder) - elif (os.name == 'nt'): + if sys.platform == 'win32': os.startfile(outputFolder) + else: + opener = 'open' if sys.platform == 'darwin' else 'xdg-open' + subprocess.call([opener, outputFolder]) except: ui.messageBox('Failed combing gcode files:\n{}'.format(traceback.format_exc())) return @@ -484,9 +487,10 @@ def notify(self, args): ui.messageBox('Failed posting toolpaths:\n{}'.format(traceback.format_exc())) return - if (os.name == 'posix'): - os.system('open "%s"' % output_folder) - elif (os.name == 'nt'): + if sys.platform == 'win32': os.startfile(output_folder) + else: + opener = 'open' if sys.platform == 'darwin' else 'xdg-open' + subprocess.call([opener, output_folder]) ui.messageBox('Milling Setup Post Processing Complete.\nFile saved in \'{}\''.format(output_folder))