diff --git a/.gitignore b/.gitignore index 7d46f40..ce33b51 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ *.pyc .idea/ -tests/tmp/ \ No newline at end of file +tests/tmp/ +build/ \ No newline at end of file diff --git a/FlatCAMApp.py b/FlatCAMApp.py index e7c0006..a0c3139 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -146,7 +146,9 @@ class App(QtCore.QObject): self.app_home = os.path.dirname(os.path.realpath(__file__)) App.log.debug("Application path is " + self.app_home) App.log.debug("Started in " + os.getcwd()) - os.chdir(self.app_home) + + if sys.platform != 'win32': + os.chdir(self.app_home) #################### ## Initialize GUI ## diff --git a/FlatCAMObj.py b/FlatCAMObj.py index 4b597de..0854f3c 100644 --- a/FlatCAMObj.py +++ b/FlatCAMObj.py @@ -446,43 +446,60 @@ class FlatCAMGerber(FlatCAMObj, Gerber): if type(empty) is Polygon: empty = MultiPolygon([empty]) - # Already cleared area - cleared = MultiPolygon() + # Main procedure + def clear_non_copper(): - # Geometry object creating callback - def geo_init(geo_obj, app_obj): - geo_obj.options["cnctooldia"] = tool - geo_obj.solid_geometry = [] - for p in area.geoms: - try: - cp = self.clear_polygon(p, tool, over) - geo_obj.solid_geometry.append(list(cp.get_objects())) - except: - FlatCAMApp.App.log.warning("Polygon is ommited") + # Already cleared area + cleared = MultiPolygon() - # Generate toolpaths for each tool - offset = sum(tools) - for tool in tools: - # Get remaining tools offset - offset -= tool + # Geometry object creating callback + def geo_init(geo_obj, app_obj): + geo_obj.options["cnctooldia"] = tool + geo_obj.solid_geometry = [] + for p in area.geoms: + try: + cp = self.clear_polygon(p, tool, over) + geo_obj.solid_geometry.append(list(cp.get_objects())) + except: + FlatCAMApp.App.log.warning("Polygon is ommited") - # Area to clear - area = empty.buffer(-offset).difference(cleared) + # Generate area for each tool + offset = sum(tools) + for tool in tools: + # Get remaining tools offset + offset -= tool - # Transform area to MultiPolygon - if type(area) is Polygon: - area = MultiPolygon([area]) + # Area to clear + area = empty.buffer(-offset).difference(cleared) - # Check if area not empty - if len(area.geoms) > 0: - # Overall cleared area - cleared = empty.buffer(-offset * (1 + over)).buffer(-tool / 2).buffer(tool / 2) + # Transform area to MultiPolygon + if type(area) is Polygon: + area = MultiPolygon([area]) - # Create geometry object - name = self.options["name"] + "_ncc_" + repr(tool) + "D" - self.app.new_object("geometry", name, geo_init) - else: - return + # Check if area not empty + if len(area.geoms) > 0: + # Overall cleared area + cleared = empty.buffer(-offset * (1 + over)).buffer(-tool / 2).buffer(tool / 2) + + # Create geometry object + name = self.options["name"] + "_ncc_" + repr(tool) + "D" + self.app.new_object("geometry", name, geo_init) + else: + return + + # Do job in background + proc = self.app.proc_container.new("Clearing non-copper areas.") + + def job_thread(app_obj): + try: + clear_non_copper() + except Exception as e: + proc.done() + raise e + proc.done() + + self.app.inform.emit("Clear non-copper areas started ...") + self.app.worker_task.emit({'fcn': job_thread, 'params': [self.app]}) def follow(self, outname=None): """