- PEP8 cleanup of the Geo Editor

This commit is contained in:
Marius Stanciu 2019-05-22 15:37:07 +03:00 committed by Marius
parent cffcbb2410
commit f400294027
3 changed files with 222 additions and 235 deletions

View File

@ -95,7 +95,7 @@ class App(QtCore.QObject):
# Version
version = 8.917
version_date = "2019/05/18"
version_date = "2019/05/22"
beta = True
# current date now

View File

@ -12,6 +12,7 @@ CAD program, and create G-Code for Isolation routing.
22.05.2019
- Geo Editor - added a new editor tool, Eraser
- PEP8 cleanup of the Geo Editor
21.05.2019

View File

@ -33,9 +33,9 @@ from flatcamParsers.ParseFont import *
# from vispy.io import read_png
import gettext
import FlatCAMTranslation as fcTranslate
import builtins
fcTranslate.apply_language('strings')
import builtins
if '_' not in builtins.__dict__:
_ = gettext.gettext
@ -414,7 +414,7 @@ class PaintOptionsTool(FlatCAMTool):
self.app = app
self.fcdraw = fcdraw
## Title
# Title
title_label = QtWidgets.QLabel("%s" % ('Editor ' + self.toolName))
title_label.setStyleSheet("""
QLabel
@ -502,8 +502,7 @@ class PaintOptionsTool(FlatCAMTool):
self.paintcontour_cb = FCCheckBox()
grid.addWidget(self.paintcontour_cb, 5, 1)
## Buttons
# Buttons
hlay = QtWidgets.QHBoxLayout()
self.layout.addLayout(hlay)
hlay.addStretch()
@ -512,7 +511,7 @@ class PaintOptionsTool(FlatCAMTool):
self.layout.addStretch()
## Signals
# Signals
self.paint_button.clicked.connect(self.on_paint)
self.set_tool_ui()
@ -528,7 +527,7 @@ class PaintOptionsTool(FlatCAMTool):
self.app.ui.notebook.setTabText(2, _("Paint Tool"))
def set_tool_ui(self):
## Init GUI
# Init GUI
if self.app.defaults["tools_painttooldia"]:
self.painttooldia_entry.set_value(self.app.defaults["tools_painttooldia"])
else:
@ -654,11 +653,11 @@ class TransformEditorTool(FlatCAMTool):
self.empty_label4.setFixedWidth(70)
self.transform_lay.addWidget(self.empty_label)
## Rotate Title
# Rotate Title
rotate_title_label = QtWidgets.QLabel("<font size=3><b>%s</b></font>" % self.rotateName)
self.transform_lay.addWidget(rotate_title_label)
## Layout
# Layout
form_layout = QtWidgets.QFormLayout()
self.transform_lay.addLayout(form_layout)
form_child = QtWidgets.QHBoxLayout()
@ -692,11 +691,11 @@ class TransformEditorTool(FlatCAMTool):
self.transform_lay.addWidget(self.empty_label1)
## Skew Title
# Skew Title
skew_title_label = QtWidgets.QLabel("<font size=3><b>%s</b></font>" % self.skewName)
self.transform_lay.addWidget(skew_title_label)
## Form Layout
# Form Layout
form1_layout = QtWidgets.QFormLayout()
self.transform_lay.addLayout(form1_layout)
form1_child_1 = QtWidgets.QHBoxLayout()
@ -749,11 +748,11 @@ class TransformEditorTool(FlatCAMTool):
self.transform_lay.addWidget(self.empty_label2)
## Scale Title
# Scale Title
scale_title_label = QtWidgets.QLabel("<font size=3><b>%s</b></font>" % self.scaleName)
self.transform_lay.addWidget(scale_title_label)
## Form Layout
# Form Layout
form2_layout = QtWidgets.QFormLayout()
self.transform_lay.addLayout(form2_layout)
form2_child_1 = QtWidgets.QHBoxLayout()
@ -823,11 +822,11 @@ class TransformEditorTool(FlatCAMTool):
self.transform_lay.addWidget(self.empty_label3)
## Offset Title
# Offset Title
offset_title_label = QtWidgets.QLabel("<font size=3><b>%s</b></font>" % self.offsetName)
self.transform_lay.addWidget(offset_title_label)
## Form Layout
# Form Layout
form3_layout = QtWidgets.QFormLayout()
self.transform_lay.addLayout(form3_layout)
form3_child_1 = QtWidgets.QHBoxLayout()
@ -880,11 +879,11 @@ class TransformEditorTool(FlatCAMTool):
self.transform_lay.addWidget(self.empty_label4)
## Flip Title
# Flip Title
flip_title_label = QtWidgets.QLabel("<font size=3><b>%s</b></font>" % self.flipName)
self.transform_lay.addWidget(flip_title_label)
## Form Layout
# Form Layout
form4_layout = QtWidgets.QFormLayout()
form4_child_hlay = QtWidgets.QHBoxLayout()
self.transform_lay.addLayout(form4_child_hlay)
@ -957,7 +956,7 @@ class TransformEditorTool(FlatCAMTool):
self.transform_lay.addStretch()
## Signals
# Signals
self.rotate_button.clicked.connect(self.on_rotate)
self.skewx_button.clicked.connect(self.on_skewx)
self.skewy_button.clicked.connect(self.on_skewy)
@ -994,7 +993,7 @@ class TransformEditorTool(FlatCAMTool):
FlatCAMTool.install(self, icon, separator, shortcut='ALT+T', **kwargs)
def set_tool_ui(self):
## Initialize form
# Initialize form
if self.app.defaults["tools_transform_rotate"]:
self.rotate_entry.set_value(self.app.defaults["tools_transform_rotate"])
else:
@ -1458,15 +1457,6 @@ class TransformEditorTool(FlatCAMTool):
else:
with self.app.proc_container.new(_("Applying Offset")):
try:
# first get a bounding box to fit all
for sha in shape_list:
xmin, ymin, xmax, ymax = sha.bounds()
xminlist.append(xmin)
yminlist.append(ymin)
# get the minimum x,y and maximum x,y for all objects selected
xminimal = min(xminlist)
yminimal = min(yminlist)
self.app.progress.emit(20)
for sha in shape_list:
@ -1476,10 +1466,6 @@ class TransformEditorTool(FlatCAMTool):
sha.offset((0, num))
self.draw_app.replot()
# self.draw_app.add_shape(DrawToolShape(sha.geo))
#
# self.draw_app.transform_complete.emit()
self.app.inform.emit(_('[success] Offset on the %s axis done ...') % str(axis))
self.app.progress.emit(100)
@ -1599,19 +1585,19 @@ class DrawToolShape(object):
"""
pts = []
## Iterable: descend into each item.
# Iterable: descend into each item.
try:
for subo in o:
pts += DrawToolShape.get_pts(subo)
## Non-iterable
# Non-iterable
except TypeError:
if o is not None:
## DrawToolShape: descend into .geo.
# DrawToolShape: descend into .geo.
if isinstance(o, DrawToolShape):
pts += DrawToolShape.get_pts(o.geo)
## Descend into .exerior and .interiors
# Descend into .exerior and .interiors
elif type(o) == Polygon:
pts += DrawToolShape.get_pts(o.exterior)
for i in o.interiors:
@ -1619,7 +1605,7 @@ class DrawToolShape(object):
elif type(o) == MultiLineString:
for line in o:
pts += DrawToolShape.get_pts(line)
## Has .coords: list them.
# Has .coords: list them.
else:
if DrawToolShape.tolerance is not None:
pts += list(o.simplify(DrawToolShape.tolerance).coords)
@ -1645,14 +1631,14 @@ class DrawToolShape(object):
"""
# fixed issue of getting bounds only for one level lists of objects
# now it can get bounds for nested lists of objects
def bounds_rec(shape):
if type(shape) is list:
def bounds_rec(shape_el):
if type(shape_el) is list:
minx = Inf
miny = Inf
maxx = -Inf
maxy = -Inf
for k in shape:
for k in shape_el:
minx_, miny_, maxx_, maxy_ = bounds_rec(k)
minx = min(minx, minx_)
miny = min(miny, miny_)
@ -1661,7 +1647,7 @@ class DrawToolShape(object):
return minx, miny, maxx, maxy
else:
# it's a Shapely object, return it's bounds
return shape.bounds
return shape_el.bounds
bounds_coords = bounds_rec(self.geo)
return bounds_coords
@ -1681,14 +1667,14 @@ class DrawToolShape(object):
px, py = point
xscale, yscale = {"X": (1.0, -1.0), "Y": (-1.0, 1.0)}[axis]
def mirror_geom(shape):
if type(shape) is list:
def mirror_geom(shape_el):
if type(shape_el) is list:
new_obj = []
for g in shape:
for g in shape_el:
new_obj.append(mirror_geom(g))
return new_obj
else:
return affinity.scale(shape, xscale, yscale, origin=(px,py))
return affinity.scale(shape_el, xscale, yscale, origin=(px, py))
try:
self.geo = mirror_geom(self.geo)
@ -1714,14 +1700,14 @@ class DrawToolShape(object):
px, py = point
def rotate_geom(shape):
if type(shape) is list:
def rotate_geom(shape_el):
if type(shape_el) is list:
new_obj = []
for g in shape:
for g in shape_el:
new_obj.append(rotate_geom(g))
return new_obj
else:
return affinity.rotate(shape, angle, origin=(px, py))
return affinity.rotate(shape_el, angle, origin=(px, py))
try:
self.geo = rotate_geom(self.geo)
@ -1745,14 +1731,14 @@ class DrawToolShape(object):
"""
px, py = point
def skew_geom(shape):
if type(shape) is list:
def skew_geom(shape_el):
if type(shape_el) is list:
new_obj = []
for g in shape:
for g in shape_el:
new_obj.append(skew_geom(g))
return new_obj
else:
return affinity.skew(shape, angle_x, angle_y, origin=(px, py))
return affinity.skew(shape_el, angle_x, angle_y, origin=(px, py))
try:
self.geo = skew_geom(self.geo)
@ -2992,7 +2978,7 @@ class FlatCAMGeoEditor(QtCore.QObject):
self.shapes.enabled = False
self.tool_shape.enabled = False
## List of selected shapes.
# List of selected shapes.
self.selected = []
self.flat_geo = []
@ -3258,7 +3244,7 @@ class FlatCAMGeoEditor(QtCore.QObject):
self.fcgeometry.visible = True
def connect_canvas_event_handlers(self):
## Canvas events
# Canvas events
# first connect to new, then disconnect the old handlers
# don't ask why but if there is nothing connected I've seen issues
@ -3288,7 +3274,6 @@ class FlatCAMGeoEditor(QtCore.QObject):
self.app.ui.draw_cut.triggered.connect(self.cutpath)
self.app.ui.draw_move.triggered.connect(self.on_move)
def disconnect_canvas_event_handlers(self):
# we restore the key and mouse control to FlatCAMApp method
# first connect to new, then disconnect the old handlers
@ -3366,8 +3351,7 @@ class FlatCAMGeoEditor(QtCore.QObject):
"Shape object has empty geometry (None)"
assert (isinstance(shape.geo, list) and len(shape.geo) > 0) or \
not isinstance(shape.geo, list), \
"Shape objects has empty geometry ([])"
not isinstance(shape.geo, list), "Shape objects has empty geometry ([])"
if isinstance(shape, DrawToolUtilityShape):
self.utility.append(shape)
@ -3407,6 +3391,7 @@ class FlatCAMGeoEditor(QtCore.QObject):
into the editor.
:param fcgeometry: FlatCAMGeometry
:param multigeo_tool: a tool for the case of multigeo
:return: None
"""
assert isinstance(fcgeometry, Geometry), \
@ -3444,9 +3429,8 @@ class FlatCAMGeoEditor(QtCore.QObject):
self.replot()
# start with GRID toolbar activated
if self.app.ui.grid_snap_btn.isChecked() == False:
if self.app.ui.grid_snap_btn.isChecked() is False:
self.app.ui.grid_snap_btn.trigger()
def on_buffer_tool(self):
@ -3535,7 +3519,7 @@ class FlatCAMGeoEditor(QtCore.QObject):
if self.active_tool is not None and event.button is 1:
# Dispatch event to active_tool
msg = self.active_tool.click(self.snap(self.pos[0], self.pos[1]))
self.active_tool.click(self.snap(self.pos[0], self.pos[1]))
# If it is a shape generating tool
if isinstance(self.active_tool, FCShapeTool) and self.active_tool.complete:
@ -3700,7 +3684,7 @@ class FlatCAMGeoEditor(QtCore.QObject):
elif isinstance(self.active_tool, FCSelect):
# Dispatch event to active_tool
# msg = self.active_tool.click(self.snap(event.xdata, event.ydata))
msg = self.active_tool.click_release((self.pos[0], self.pos[1]))
self.active_tool.click_release((self.pos[0], self.pos[1]))
# self.app.inform.emit(msg)
self.replot()
except Exception as e:
@ -3713,15 +3697,14 @@ class FlatCAMGeoEditor(QtCore.QObject):
:param start_pos: mouse position when the selection LMB click was done
:param end_pos: mouse position when the left mouse button is released
:param sel_type: if True it's a left to right selection (enclosure), if False it's a 'touch' selection
:type Bool
:return:
"""
poly_selection = Polygon([start_pos, (end_pos[0], start_pos[1]), end_pos, (start_pos[0], end_pos[1])])
self.app.delete_selection_shape()
for obj in self.storage.get_objects():
if (sel_type is True and poly_selection.contains(obj.geo)) or \
(sel_type is False and poly_selection.intersects(obj.geo)):
if (sel_type is True and poly_selection.contains(obj.geo)) or (sel_type is False and
poly_selection.intersects(obj.geo)):
if self.key == self.app.defaults["global_mselect_key"]:
if obj in self.selected:
self.selected.remove(obj)
@ -3844,14 +3827,14 @@ class FlatCAMGeoEditor(QtCore.QObject):
for geo in geometry:
plot_elements += self.plot_shape(geometry=geo, color=color, linewidth=linewidth)
## Non-iterable
# Non-iterable
except TypeError:
## DrawToolShape
# DrawToolShape
if isinstance(geometry, DrawToolShape):
plot_elements += self.plot_shape(geometry=geometry.geo, color=color, linewidth=linewidth)
## Polygon: Descend into exterior and each interior.
# Polygon: Descend into exterior and each interior.
if type(geometry) == Polygon:
plot_elements += self.plot_shape(geometry=geometry.exterior, color=color, linewidth=linewidth)
plot_elements += self.plot_shape(geometry=geometry.interiors, color=color, linewidth=linewidth)
@ -3912,7 +3895,7 @@ class FlatCAMGeoEditor(QtCore.QObject):
@staticmethod
def make_storage():
## Shape storage.
# Shape storage.
storage = FlatCAMRTreeStorage()
storage.get_points = DrawToolShape.get_pts
@ -4048,23 +4031,24 @@ class FlatCAMGeoEditor(QtCore.QObject):
:return: None
"""
shapes = self.get_selected()
geo_shapes = self.get_selected()
try:
results = shapes[0].geo
results = geo_shapes[0].geo
except Exception as e:
log.debug("FlatCAMGeoEditor.intersection() --> %s" % str(e))
self.app.inform.emit(_("[WARNING_NOTCL] A selection of at least 2 geo items is required to do Intersection."))
self.app.inform.emit(
_("[WARNING_NOTCL] A selection of at least 2 geo items is required to do Intersection."))
self.select_tool('select')
return
for shape in shapes[1:]:
results = results.intersection(shape.geo)
for shape_el in geo_shapes[1:]:
results = results.intersection(shape_el.geo)
# Delete originals.
for_deletion = [s for s in self.get_selected()]
for shape in for_deletion:
self.delete_shape(shape)
for shape_el in for_deletion:
self.delete_shape(shape_el)
# Selected geometry is now gone!
self.selected = []
@ -4080,30 +4064,31 @@ class FlatCAMGeoEditor(QtCore.QObject):
:return: None
"""
shapes = self.get_selected()
geo_shapes = self.get_selected()
results = []
intact = []
try:
intersector = shapes[0].geo
intersector = geo_shapes[0].geo
except Exception as e:
log.debug("FlatCAMGeoEditor.intersection() --> %s" % str(e))
self.app.inform.emit(_("[WARNING_NOTCL] A selection of at least 2 geo items is required to do Intersection."))
self.app.inform.emit(
_("[WARNING_NOTCL] A selection of at least 2 geo items is required to do Intersection."))
self.select_tool('select')
return
for shape in shapes[1:]:
if intersector.intersects(shape.geo):
results.append(intersector.intersection(shape.geo))
for shape_el in geo_shapes[1:]:
if intersector.intersects(shape_el.geo):
results.append(intersector.intersection(shape_el.geo))
else:
intact.append(shape)
intact.append(shape_el)
if len(results) != 0:
# Delete originals.
for_deletion = [s for s in self.get_selected()]
for shape in for_deletion:
if shape not in intact:
self.delete_shape(shape)
for shape_el in for_deletion:
if shape_el not in intact:
self.delete_shape(shape_el)
for geo in results:
self.add_shape(DrawToolShape(geo))
@ -4158,8 +4143,8 @@ class FlatCAMGeoEditor(QtCore.QObject):
try:
for linestring in target.geo:
self.add_shape(DrawToolShape(linestring.difference(toolgeo)))
except:
self.app.log.warning("Current LinearString does not intersect the target")
except Exception as e:
self.app.log.warning("Current LinearString does not intersect the target. %s" % str(e))
else:
self.app.log.warning("Not implemented. Object type: %s" % str(type(target.geo)))
return
@ -4172,7 +4157,8 @@ class FlatCAMGeoEditor(QtCore.QObject):
if buf_distance < 0:
self.app.inform.emit(
_( "[ERROR_NOTCL] Negative buffer value is not accepted. Use Buffer interior to generate an 'inside' shape"))
_("[ERROR_NOTCL] Negative buffer value is not accepted. "
"Use Buffer interior to generate an 'inside' shape"))
# deselect everything
self.selected = []
@ -4412,13 +4398,13 @@ class FlatCAMGeoEditor(QtCore.QObject):
if reset:
self.flat_geo = []
## If iterable, expand recursively.
# If iterable, expand recursively.
try:
for geo in geometry:
if geo is not None:
recurse(geometry=geo, reset=False)
for geo_el in geometry:
if geo_el is not None:
recurse(geometry=geo_el, reset=False)
## Not iterable, do the actual indexing and add.
# Not iterable, do the actual indexing and add.
except TypeError:
self.flat_geo.append(geometry)