diff --git a/CHANGELOG.md b/CHANGELOG.md index cd57f3e2..344b066d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ CHANGELOG for FlatCAM beta - Cutout Plugin - improved the functionality in Manual mode: depending on the state of the Shape parameter different types of cutout manual geometry is generated - fixed a bug in the Editors when trying to launch the Editor without an object selected +- Markers Plugin - fixed issue when adding existing markers to an external Geometry object 31.10.2021 diff --git a/appPlugins/ToolMarkers.py b/appPlugins/ToolMarkers.py index f47c7e45..ce866788 100644 --- a/appPlugins/ToolMarkers.py +++ b/appPlugins/ToolMarkers.py @@ -662,9 +662,11 @@ class ToolMarkers(AppTool): tool_found = tool break - geo_buff_list = [] if tool_found: - new_tools[tool_found]['solid_geometry'] += marker_geometry + if isinstance(new_tools[tool_found]['solid_geometry'], list): + new_tools[tool_found]['solid_geometry'] += marker_geometry + else: + new_tools[tool_found]['solid_geometry'] = [new_tools[tool_found]['solid_geometry'], marker_geometry] else: obj_tools = list(new_tools.keys()) if obj_tools: @@ -696,23 +698,13 @@ class ToolMarkers(AppTool): s_list = [] if new_geo_obj.solid_geometry: - if isinstance(new_geo_obj.solid_geometry, MultiPolygon): - work_geo = new_geo_obj.solid_geometry.geoms - else: - work_geo = new_geo_obj.solid_geometry - try: - for poly in work_geo: - s_list.append(poly) - except TypeError: - s_list.append(work_geo) - - geo_buff_list = flatten_shapely_geometry(geo_buff_list) + s_list = flatten_shapely_geometry(new_geo_obj.solid_geometry) try: - for poly in geo_buff_list + marker_geometry: - s_list.append(poly) + for g_el in marker_geometry: + s_list.append(g_el) except TypeError: - s_list.append(geo_buff_list) + s_list.append(marker_geometry) def initialize(geo_obj, app_obj): geo_obj.options = LoudDict() @@ -722,11 +714,11 @@ class ToolMarkers(AppTool): # Propagate options geo_obj.options["tools_mill_tooldia"] = app_obj.defaults["tools_mill_tooldia"] - geo_obj.solid_geometry = flatten_shapely_geometry(unary_union(s_list)) + geo_obj.solid_geometry = flatten_shapely_geometry(s_list) - geo_obj.multitool = False - geo_obj.multigeo = False - geo_obj.tools = new_tools + geo_obj.multitool = True + geo_obj.multigeo = True + geo_obj.tools = deepcopy(new_tools) ret = self.app.app_obj.new_object('geometry', outname, initialize, plot=True, autoselected=False) diff --git a/camlib.py b/camlib.py index 5cb43534..a5742a20 100644 --- a/camlib.py +++ b/camlib.py @@ -8219,14 +8219,12 @@ def flatten_shapely_geometry(geometry): """ flat_list = [] try: - if isinstance(geometry, (MultiLineString, MultiPolygon, MultiPoint)): - for geo in geometry.geoms: - flat_list.append(geo) - else: - for geo_el in geometry: - flat_list += flatten_shapely_geometry(geo_el) + work_geo = geometry.geoms if isinstance(geometry, (MultiLineString, MultiPolygon, MultiPoint)) else geometry + for geo in work_geo: + flat_list += flatten_shapely_geometry(geo) except TypeError: - flat_list.append(geometry) + if geometry and not geometry.is_empty: + flat_list.append(geometry) return flat_list