- finished adding in Paint Tool the usage of an external object to set the extent of th area painted. For simple shapes (single Polygon) the shape can be anything, for the rest will be a convex hull of the reference object

- modified NCC tool so for simple objects (single Polygon) the external object used as reference can have any shape, for the other types of objects the copper cleared area will be the convex hull of the reference object
- modified the strings of the app wherever they contained the char seq <b> </b> so it is not included in the translated string
This commit is contained in:
Marius Stanciu
2019-08-18 14:17:46 +03:00
parent 762d949461
commit 36586aecce
10 changed files with 132 additions and 79 deletions

View File

@@ -9,6 +9,7 @@
from FlatCAMTool import FlatCAMTool
from copy import copy, deepcopy
from ObjectCollection import *
from shapely.geometry import base
import gettext
import FlatCAMTranslation as fcTranslate
@@ -238,19 +239,27 @@ class ToolPaint(FlatCAMTool, Gerber):
selectlabel.setToolTip(
_("How to select the polygons to paint.<BR>"
"Options:<BR>"
"- <B>Single</B>: left mouse click on the polygon to be painted.<BR>"
"- <B>Area</B>: left mouse click to start selection of the area to be painted.<BR>"
"- <B>All</B>: paint all polygons.<BR>"
"- <B>Ref</B>: paint an area described by an external reference object.")
"- <B>Single Polygons</B>: left mouse click on the polygon to be painted.<BR>"
"- <B>Area Selection</B>: left mouse click to start selection of the area to be painted.<BR>"
"- <B>All Polygons</B>: paint all polygons.<BR>"
"- <B>Reference Object</B>: paint an area described by an external reference object.")
)
grid3.addWidget(selectlabel, 7, 0)
# grid3 = QtWidgets.QGridLayout()
self.selectmethod_combo = RadioSet([
{"label": _("Single"), "value": "single"},
{"label": _("Area"), "value": "area"},
{"label": _("All"), "value": "all"},
{"label": _("Ref."), "value": "ref"}
])
{"label": _("Single Polygon"), "value": "single"},
{"label": _("Area Selection"), "value": "area"},
{"label": _("All Polygons"), "value": "all"},
{"label": _("Reference Object"), "value": "ref"}
], orientation='vertical', stretch=False)
self.selectmethod_combo.setToolTip(
_("How to select the polygons to paint.<BR>"
"Options:<BR>"
"- <B>Single Polygons</B>: left mouse click on the polygon to be painted.<BR>"
"- <B>Area Selection</B>: left mouse click to start selection of the area to be painted.<BR>"
"- <B>All Polygons</B>: paint all polygons.<BR>"
"- <B>Reference Object</B>: paint an area described by an external reference object.")
)
grid3.addWidget(self.selectmethod_combo, 7, 1)
grid4 = QtWidgets.QGridLayout()
@@ -950,6 +959,38 @@ class ToolPaint(FlatCAMTool, Gerber):
self.app.plotcanvas.vis_connect('mouse_press', on_mouse_press)
self.app.plotcanvas.vis_connect('mouse_move', on_mouse_move)
elif select_method == 'ref':
self.bound_obj_name = self.box_combo.currentText()
# Get source object.
try:
self.bound_obj = self.app.collection.get_by_name(self.bound_obj_name)
except Exception as e:
self.app.inform.emit(_("[ERROR_NOTCL] Could not retrieve object: %s") % self.obj_name)
return "Could not retrieve object: %s" % self.obj_name
geo = self.bound_obj.solid_geometry
try:
if isinstance(geo, MultiPolygon):
env_obj = geo.convex_hull
elif (isinstance(geo, MultiPolygon) and len(geo) == 1) or \
(isinstance(geo, list) and len(geo) == 1) and isinstance(geo[0], Polygon):
env_obj = cascaded_union(self.bound_obj.solid_geometry)
else:
env_obj = cascaded_union(self.bound_obj.solid_geometry)
env_obj = env_obj.convex_hull
sel_rect = env_obj.buffer(distance=0.0000001, join_style=base.JOIN_STYLE.mitre)
except Exception as e:
log.debug("ToolPaint.on_paint_button_click() --> %s" % str(e))
self.app.inform.emit(_("[ERROR_NOTCL] No object available."))
return
self.paint_poly_area(obj=self.paint_obj,
sel_obj=sel_rect,
outname=o_name,
overlap=overlap,
connect=connect,
contour=contour)
def paint_poly(self, obj, inside_pt, tooldia, overlap, outname=None, connect=True, contour=True):
"""
Paints a polygon selected by clicking on its interior.