- fixed drawing of selection box when dragging mouse on screen and the selection shape drawing on the selected objects
- fixed the moving drawing shape in Tool Move in legacy graphic engine - fixed moving geometry in Tool Measurement in legacy graphic engine
This commit is contained in:
parent
bc6dc3decf
commit
399b0b45c6
@ -2474,6 +2474,11 @@ class App(QtCore.QObject):
|
|||||||
self.isHovering = False
|
self.isHovering = False
|
||||||
self.notHovering = True
|
self.notHovering = True
|
||||||
|
|
||||||
|
# Event signals disconnect id holders
|
||||||
|
self.mp = None
|
||||||
|
self.mm = None
|
||||||
|
self.mr = None
|
||||||
|
|
||||||
# when True, the app has to return from any thread
|
# when True, the app has to return from any thread
|
||||||
self.abort_flag = False
|
self.abort_flag = False
|
||||||
|
|
||||||
@ -7688,16 +7693,14 @@ class App(QtCore.QObject):
|
|||||||
# Update cursor
|
# Update cursor
|
||||||
self.app_cursor.set_data(np.asarray([(pos[0], pos[1])]),
|
self.app_cursor.set_data(np.asarray([(pos[0], pos[1])]),
|
||||||
symbol='++', edge_color='black', size=20)
|
symbol='++', edge_color='black', size=20)
|
||||||
else:
|
|
||||||
self.app_cursor.set_data(event, (pos[0], pos[1]))
|
|
||||||
else:
|
else:
|
||||||
pos = (pos_canvas[0], pos_canvas[1])
|
pos = (pos_canvas[0], pos_canvas[1])
|
||||||
|
|
||||||
self.ui.position_label.setText(" <b>X</b>: %.4f "
|
self.ui.position_label.setText(" <b>X</b>: %.4f "
|
||||||
"<b>Y</b>: %.4f" % (pos[0], pos[1]))
|
"<b>Y</b>: %.4f" % (pos[0], pos[1]))
|
||||||
|
|
||||||
dx = pos[0] - self.rel_point1[0]
|
dx = pos[0] - float(self.rel_point1[0])
|
||||||
dy = pos[1] - self.rel_point1[1]
|
dy = pos[1] - float(self.rel_point1[1])
|
||||||
self.ui.rel_position_label.setText("<b>Dx</b>: %.4f <b>Dy</b>: "
|
self.ui.rel_position_label.setText("<b>Dx</b>: %.4f <b>Dy</b>: "
|
||||||
"%.4f " % (dx, dy))
|
"%.4f " % (dx, dy))
|
||||||
self.mouse = [pos[0], pos[1]]
|
self.mouse = [pos[0], pos[1]]
|
||||||
@ -7707,11 +7710,13 @@ class App(QtCore.QObject):
|
|||||||
self.delete_selection_shape()
|
self.delete_selection_shape()
|
||||||
if dx < 0:
|
if dx < 0:
|
||||||
self.draw_moving_selection_shape(self.pos, pos, color=self.defaults['global_alt_sel_line'],
|
self.draw_moving_selection_shape(self.pos, pos, color=self.defaults['global_alt_sel_line'],
|
||||||
face_color=self.defaults['global_alt_sel_fill'])
|
face_color=self.defaults['global_alt_sel_fill'])
|
||||||
self.selection_type = False
|
self.selection_type = False
|
||||||
else:
|
elif dx > 0:
|
||||||
self.draw_moving_selection_shape(self.pos, pos)
|
self.draw_moving_selection_shape(self.pos, pos)
|
||||||
self.selection_type = True
|
self.selection_type = True
|
||||||
|
else:
|
||||||
|
self.selection_type = None
|
||||||
|
|
||||||
# hover effect - enabled in Preferences -> General -> GUI Settings
|
# hover effect - enabled in Preferences -> General -> GUI Settings
|
||||||
if self.defaults['global_hover']:
|
if self.defaults['global_hover']:
|
||||||
@ -7878,6 +7883,7 @@ class App(QtCore.QObject):
|
|||||||
# add objects to the objects_under_the_click list only if the object is plotted
|
# add objects to the objects_under_the_click list only if the object is plotted
|
||||||
# (active and not disabled)
|
# (active and not disabled)
|
||||||
objects_under_the_click_list.append(obj.options['name'])
|
objects_under_the_click_list.append(obj.options['name'])
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# If there is no element in the overlapped objects list then make everyone inactive
|
# If there is no element in the overlapped objects list then make everyone inactive
|
||||||
# because we selected "nothing"
|
# because we selected "nothing"
|
||||||
@ -8041,17 +8047,27 @@ class App(QtCore.QObject):
|
|||||||
hover_rect = hover_rect.buffer(-0.00393)
|
hover_rect = hover_rect.buffer(-0.00393)
|
||||||
hover_rect = hover_rect.buffer(0.00787)
|
hover_rect = hover_rect.buffer(0.00787)
|
||||||
|
|
||||||
|
# if color:
|
||||||
|
# face = Color(color)
|
||||||
|
# face.alpha = 0.2
|
||||||
|
# outline = Color(color, alpha=0.8)
|
||||||
|
# else:
|
||||||
|
# face = Color(self.defaults['global_sel_fill'])
|
||||||
|
# face.alpha = 0.2
|
||||||
|
# outline = self.defaults['global_sel_line']
|
||||||
|
|
||||||
if color:
|
if color:
|
||||||
face = Color(color)
|
face = color[:-2] + str(hex(int(0.2 * 255)))[2:]
|
||||||
face.alpha = 0.2
|
outline = color[:-2] + str(hex(int(0.8 * 255)))[2:]
|
||||||
outline = Color(color, alpha=0.8)
|
|
||||||
else:
|
else:
|
||||||
face = Color(self.defaults['global_sel_fill'])
|
face = self.defaults['global_sel_fill'][:-2] + str(hex(int(0.2 * 255)))[2:]
|
||||||
face.alpha = 0.2
|
|
||||||
outline = self.defaults['global_sel_line']
|
outline = self.defaults['global_sel_line']
|
||||||
|
|
||||||
self.hover_shapes.add(hover_rect, color=outline, face_color=face, update=True, layer=0, tolerance=None)
|
self.hover_shapes.add(hover_rect, color=outline, face_color=face, update=True, layer=0, tolerance=None)
|
||||||
|
|
||||||
|
if self.is_legacy is True:
|
||||||
|
self.hover_shapes.redraw()
|
||||||
|
|
||||||
def delete_selection_shape(self):
|
def delete_selection_shape(self):
|
||||||
self.move_tool.sel_shapes.clear()
|
self.move_tool.sel_shapes.clear()
|
||||||
self.move_tool.sel_shapes.redraw()
|
self.move_tool.sel_shapes.redraw()
|
||||||
@ -8076,12 +8092,19 @@ class App(QtCore.QObject):
|
|||||||
sel_rect = sel_rect.buffer(-0.00393)
|
sel_rect = sel_rect.buffer(-0.00393)
|
||||||
sel_rect = sel_rect.buffer(0.00787)
|
sel_rect = sel_rect.buffer(0.00787)
|
||||||
|
|
||||||
|
# if color:
|
||||||
|
# face = Color(color, alpha=0.2)
|
||||||
|
# outline = Color(color, alpha=0.8)
|
||||||
|
# else:
|
||||||
|
# face = Color(self.defaults['global_sel_fill'], alpha=0.2)
|
||||||
|
# outline = Color(self.defaults['global_sel_line'], alpha=0.8)
|
||||||
|
|
||||||
if color:
|
if color:
|
||||||
face = Color(color, alpha=0.2)
|
face = color[:-2] + str(hex(int(0.2 * 255)))[2:]
|
||||||
outline = Color(color, alpha=0.8)
|
outline = color[:-2] + str(hex(int(0.8 * 255)))[2:]
|
||||||
else:
|
else:
|
||||||
face = Color(self.defaults['global_sel_fill'], alpha=0.2)
|
face = self.defaults['global_sel_fill'][:-2] + str(hex(int(0.2 * 255)))[2:]
|
||||||
outline = Color(self.defaults['global_sel_line'], alpha=0.8)
|
outline = self.defaults['global_sel_line'][:-2] + str(hex(int(0.8 * 255)))[2:]
|
||||||
|
|
||||||
self.sel_objects_list.append(self.move_tool.sel_shapes.add(sel_rect,
|
self.sel_objects_list.append(self.move_tool.sel_shapes.add(sel_rect,
|
||||||
color=outline,
|
color=outline,
|
||||||
@ -8089,6 +8112,8 @@ class App(QtCore.QObject):
|
|||||||
update=True,
|
update=True,
|
||||||
layer=0,
|
layer=0,
|
||||||
tolerance=None))
|
tolerance=None))
|
||||||
|
if self.is_legacy is True:
|
||||||
|
self.move_tool.sel_shapes.redraw()
|
||||||
|
|
||||||
def draw_moving_selection_shape(self, old_coords, coords, **kwargs):
|
def draw_moving_selection_shape(self, old_coords, coords, **kwargs):
|
||||||
"""
|
"""
|
||||||
@ -8121,10 +8146,15 @@ class App(QtCore.QObject):
|
|||||||
pt4 = (x0, y1)
|
pt4 = (x0, y1)
|
||||||
sel_rect = Polygon([pt1, pt2, pt3, pt4])
|
sel_rect = Polygon([pt1, pt2, pt3, pt4])
|
||||||
|
|
||||||
color_t = Color(face_color)
|
# color_t = Color(face_color)
|
||||||
color_t.alpha = face_alpha
|
# color_t.alpha = face_alpha
|
||||||
|
|
||||||
|
color_t = face_color[:-2] + str(hex(int(face_alpha * 255)))[2:]
|
||||||
|
|
||||||
self.move_tool.sel_shapes.add(sel_rect, color=color, face_color=color_t, update=True,
|
self.move_tool.sel_shapes.add(sel_rect, color=color, face_color=color_t, update=True,
|
||||||
layer=0, tolerance=None)
|
layer=0, tolerance=None)
|
||||||
|
if self.is_legacy is True:
|
||||||
|
self.move_tool.sel_shapes.redraw()
|
||||||
|
|
||||||
def on_file_new_click(self):
|
def on_file_new_click(self):
|
||||||
if self.collection.get_list() and self.should_we_save:
|
if self.collection.get_list() and self.should_we_save:
|
||||||
|
@ -18,6 +18,9 @@ CAD program, and create G-Code for Isolation routing.
|
|||||||
- in legacy graphic engine fixed the travel vs cut lines in CNCJob objects
|
- in legacy graphic engine fixed the travel vs cut lines in CNCJob objects
|
||||||
- final fix for key shortcuts with modifier in legacy graphic engine
|
- final fix for key shortcuts with modifier in legacy graphic engine
|
||||||
- refactored some of the code in the legacy graphic engine
|
- refactored some of the code in the legacy graphic engine
|
||||||
|
- fixed drawing of selection box when dragging mouse on screen and the selection shape drawing on the selected objects
|
||||||
|
- fixed the moving drawing shape in Tool Move in legacy graphic engine
|
||||||
|
- fixed moving geometry in Tool Measurement in legacy graphic engine
|
||||||
|
|
||||||
20.09.2019
|
20.09.2019
|
||||||
|
|
||||||
|
@ -2088,6 +2088,11 @@ class FlatCAMExcEditor(QtCore.QObject):
|
|||||||
def entry2option(option, entry):
|
def entry2option(option, entry):
|
||||||
self.options[option] = float(entry.text())
|
self.options[option] = float(entry.text())
|
||||||
|
|
||||||
|
# Event signals disconnect id holders
|
||||||
|
self.mp = None
|
||||||
|
self.mm = None
|
||||||
|
self.mr = None
|
||||||
|
|
||||||
# store the status of the editor so the Delete at object level will not work until the edit is finished
|
# store the status of the editor so the Delete at object level will not work until the edit is finished
|
||||||
self.editor_active = False
|
self.editor_active = False
|
||||||
log.debug("Initialization of the FlatCAM Excellon Editor is finished ...")
|
log.debug("Initialization of the FlatCAM Excellon Editor is finished ...")
|
||||||
@ -3307,9 +3312,6 @@ class FlatCAMExcEditor(QtCore.QObject):
|
|||||||
|
|
||||||
if self.app.grid_status() == True:
|
if self.app.grid_status() == True:
|
||||||
self.pos = self.app.geo_editor.snap(self.pos[0], self.pos[1])
|
self.pos = self.app.geo_editor.snap(self.pos[0], self.pos[1])
|
||||||
# Update cursor
|
|
||||||
self.app.app_cursor.set_data(np.asarray([(self.pos[0], self.pos[1])]), symbol='++', edge_color='black',
|
|
||||||
size=20)
|
|
||||||
else:
|
else:
|
||||||
self.pos = (self.pos[0], self.pos[1])
|
self.pos = (self.pos[0], self.pos[1])
|
||||||
|
|
||||||
|
@ -3169,6 +3169,11 @@ class FlatCAMGeoEditor(QtCore.QObject):
|
|||||||
|
|
||||||
self.transform_complete.connect(self.on_transform_complete)
|
self.transform_complete.connect(self.on_transform_complete)
|
||||||
|
|
||||||
|
# Event signals disconnect id holders
|
||||||
|
self.mp = None
|
||||||
|
self.mm = None
|
||||||
|
self.mr = None
|
||||||
|
|
||||||
# store the status of the editor so the Delete at object level will not work until the edit is finished
|
# store the status of the editor so the Delete at object level will not work until the edit is finished
|
||||||
self.editor_active = False
|
self.editor_active = False
|
||||||
log.debug("Initialization of the FlatCAM Geometry Editor is finished ...")
|
log.debug("Initialization of the FlatCAM Geometry Editor is finished ...")
|
||||||
@ -3326,6 +3331,7 @@ class FlatCAMGeoEditor(QtCore.QObject):
|
|||||||
self.app.plotcanvas.graph_event_disconnect('mouse_release', self.app.on_mouse_click_release_over_plot)
|
self.app.plotcanvas.graph_event_disconnect('mouse_release', self.app.on_mouse_click_release_over_plot)
|
||||||
self.app.plotcanvas.graph_event_disconnect('mouse_double_click', self.app.on_double_click_over_plot)
|
self.app.plotcanvas.graph_event_disconnect('mouse_double_click', self.app.on_double_click_over_plot)
|
||||||
else:
|
else:
|
||||||
|
|
||||||
self.app.plotcanvas.graph_event_disconnect(self.app.mp)
|
self.app.plotcanvas.graph_event_disconnect(self.app.mp)
|
||||||
self.app.plotcanvas.graph_event_disconnect(self.app.mm)
|
self.app.plotcanvas.graph_event_disconnect(self.app.mm)
|
||||||
self.app.plotcanvas.graph_event_disconnect(self.app.mr)
|
self.app.plotcanvas.graph_event_disconnect(self.app.mr)
|
||||||
@ -3652,9 +3658,6 @@ class FlatCAMGeoEditor(QtCore.QObject):
|
|||||||
|
|
||||||
if self.app.grid_status() == True:
|
if self.app.grid_status() == True:
|
||||||
self.pos = self.app.geo_editor.snap(self.pos[0], self.pos[1])
|
self.pos = self.app.geo_editor.snap(self.pos[0], self.pos[1])
|
||||||
# Update cursor
|
|
||||||
self.app.app_cursor.set_data(np.asarray([(self.pos[0], self.pos[1])]), symbol='++', edge_color='black',
|
|
||||||
size=20)
|
|
||||||
else:
|
else:
|
||||||
self.pos = (self.pos[0], self.pos[1])
|
self.pos = (self.pos[0], self.pos[1])
|
||||||
|
|
||||||
|
@ -2833,6 +2833,11 @@ class FlatCAMGrbEditor(QtCore.QObject):
|
|||||||
|
|
||||||
self.app.pool_recreated.connect(self.pool_recreated)
|
self.app.pool_recreated.connect(self.pool_recreated)
|
||||||
|
|
||||||
|
# Event signals disconnect id holders
|
||||||
|
self.mp = None
|
||||||
|
self.mm = None
|
||||||
|
self.mr = None
|
||||||
|
|
||||||
# Remove from scene
|
# Remove from scene
|
||||||
self.shapes.enabled = False
|
self.shapes.enabled = False
|
||||||
self.tool_shape.enabled = False
|
self.tool_shape.enabled = False
|
||||||
@ -4154,9 +4159,6 @@ class FlatCAMGrbEditor(QtCore.QObject):
|
|||||||
|
|
||||||
if self.app.grid_status() == True:
|
if self.app.grid_status() == True:
|
||||||
self.pos = self.app.geo_editor.snap(self.pos[0], self.pos[1])
|
self.pos = self.app.geo_editor.snap(self.pos[0], self.pos[1])
|
||||||
# Update cursor
|
|
||||||
self.app.app_cursor.set_data(np.asarray([(self.pos[0], self.pos[1])]), symbol='++', edge_color='black',
|
|
||||||
size=20)
|
|
||||||
else:
|
else:
|
||||||
self.pos = (self.pos[0], self.pos[1])
|
self.pos = (self.pos[0], self.pos[1])
|
||||||
|
|
||||||
|
@ -715,8 +715,13 @@ class ShapeCollectionLegacy():
|
|||||||
def add(self, shape=None, color=None, face_color=None, alpha=None, visible=True,
|
def add(self, shape=None, color=None, face_color=None, alpha=None, visible=True,
|
||||||
update=False, layer=1, tolerance=0.01, obj=None, gcode_parsed=None, tool_tolerance=None, tooldia=None):
|
update=False, layer=1, tolerance=0.01, obj=None, gcode_parsed=None, tool_tolerance=None, tooldia=None):
|
||||||
|
|
||||||
|
|
||||||
self._color = color[:-2] if color is not None else None
|
self._color = color[:-2] if color is not None else None
|
||||||
self._face_color = face_color[:-2] if face_color is not None else None
|
self._face_color = face_color[:-2] if face_color is not None else None
|
||||||
|
self._alpha = int(face_color[-2:], 16) / 255 if face_color is not None else 0.75
|
||||||
|
if alpha is not None:
|
||||||
|
self._alpha = alpha
|
||||||
|
|
||||||
self._visible = visible
|
self._visible = visible
|
||||||
self._update = update
|
self._update = update
|
||||||
|
|
||||||
@ -726,12 +731,16 @@ class ShapeCollectionLegacy():
|
|||||||
self._tool_tolerance = tool_tolerance
|
self._tool_tolerance = tool_tolerance
|
||||||
self._tooldia = tooldia
|
self._tooldia = tooldia
|
||||||
|
|
||||||
|
# if self._update:
|
||||||
|
# self.clear()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
for sh in shape:
|
for sh in shape:
|
||||||
self.shape_id += 1
|
self.shape_id += 1
|
||||||
self.shape_dict.update({
|
self.shape_dict.update({
|
||||||
'color': self._color,
|
'color': self._color,
|
||||||
'face_color': self._face_color,
|
'face_color': self._face_color,
|
||||||
|
'alpha': self._alpha,
|
||||||
'shape': sh
|
'shape': sh
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -743,6 +752,7 @@ class ShapeCollectionLegacy():
|
|||||||
self.shape_dict.update({
|
self.shape_dict.update({
|
||||||
'color': self._color,
|
'color': self._color,
|
||||||
'face_color': self._face_color,
|
'face_color': self._face_color,
|
||||||
|
'alpha': self._alpha,
|
||||||
'shape': shape
|
'shape': shape
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -764,15 +774,19 @@ class ShapeCollectionLegacy():
|
|||||||
|
|
||||||
def redraw(self):
|
def redraw(self):
|
||||||
path_num = 0
|
path_num = 0
|
||||||
|
try:
|
||||||
|
obj_type = self.obj.kind
|
||||||
|
except AttributeError:
|
||||||
|
obj_type = 'utility'
|
||||||
if self._visible:
|
if self._visible:
|
||||||
for element in self._shapes:
|
for element in self._shapes:
|
||||||
if self.obj.kind == 'excellon':
|
if obj_type == 'excellon':
|
||||||
# Plot excellon (All polygons?)
|
# Plot excellon (All polygons?)
|
||||||
if self.obj.options["solid"]:
|
if self.obj.options["solid"]:
|
||||||
patch = PolygonPatch(self._shapes[element]['shape'],
|
patch = PolygonPatch(self._shapes[element]['shape'],
|
||||||
facecolor="#C40000",
|
facecolor="#C40000",
|
||||||
edgecolor="#750000",
|
edgecolor="#750000",
|
||||||
alpha=0.75,
|
alpha=self._shapes[element]['alpha'],
|
||||||
zorder=3)
|
zorder=3)
|
||||||
self.axes.add_patch(patch)
|
self.axes.add_patch(patch)
|
||||||
else:
|
else:
|
||||||
@ -781,7 +795,7 @@ class ShapeCollectionLegacy():
|
|||||||
for ints in self._shapes[element]['shape'].interiors:
|
for ints in self._shapes[element]['shape'].interiors:
|
||||||
x, y = ints.coords.xy
|
x, y = ints.coords.xy
|
||||||
self.axes.plot(x, y, 'o-')
|
self.axes.plot(x, y, 'o-')
|
||||||
elif self.obj.kind == 'geometry':
|
elif obj_type== 'geometry':
|
||||||
if type(self._shapes[element]['shape']) == Polygon:
|
if type(self._shapes[element]['shape']) == Polygon:
|
||||||
x, y = self._shapes[element]['shape'].exterior.coords.xy
|
x, y = self._shapes[element]['shape'].exterior.coords.xy
|
||||||
self.axes.plot(x, y, self._shapes[element]['color'], linestyle='-')
|
self.axes.plot(x, y, self._shapes[element]['color'], linestyle='-')
|
||||||
@ -792,7 +806,7 @@ class ShapeCollectionLegacy():
|
|||||||
x, y = element.coords.xy
|
x, y = element.coords.xy
|
||||||
self.axes.plot(x, y, self._shapes[element]['color'], marker='-')
|
self.axes.plot(x, y, self._shapes[element]['color'], marker='-')
|
||||||
return
|
return
|
||||||
elif self.obj.kind == 'gerber':
|
elif obj_type == 'gerber':
|
||||||
if self.obj.options["multicolored"]:
|
if self.obj.options["multicolored"]:
|
||||||
linespec = '-'
|
linespec = '-'
|
||||||
else:
|
else:
|
||||||
@ -803,7 +817,7 @@ class ShapeCollectionLegacy():
|
|||||||
patch = PolygonPatch(self._shapes[element]['shape'],
|
patch = PolygonPatch(self._shapes[element]['shape'],
|
||||||
facecolor=self._shapes[element]['face_color'],
|
facecolor=self._shapes[element]['face_color'],
|
||||||
edgecolor=self._shapes[element]['color'],
|
edgecolor=self._shapes[element]['color'],
|
||||||
alpha=0.75,
|
alpha=self._shapes[element]['alpha'],
|
||||||
zorder=2)
|
zorder=2)
|
||||||
self.axes.add_patch(patch)
|
self.axes.add_patch(patch)
|
||||||
except AssertionError:
|
except AssertionError:
|
||||||
@ -815,7 +829,7 @@ class ShapeCollectionLegacy():
|
|||||||
for ints in self._shapes[element]['shape'].interiors:
|
for ints in self._shapes[element]['shape'].interiors:
|
||||||
x, y = ints.coords.xy
|
x, y = ints.coords.xy
|
||||||
self.axes.plot(x, y, linespec)
|
self.axes.plot(x, y, linespec)
|
||||||
elif self.obj.kind == 'cncjob':
|
elif obj_type == 'cncjob':
|
||||||
|
|
||||||
if self._shapes[element]['face_color'] is None:
|
if self._shapes[element]['face_color'] is None:
|
||||||
linespec = '--'
|
linespec = '--'
|
||||||
@ -828,16 +842,39 @@ class ShapeCollectionLegacy():
|
|||||||
path_num += 1
|
path_num += 1
|
||||||
if isinstance(self._shapes[element]['shape'], Polygon):
|
if isinstance(self._shapes[element]['shape'], Polygon):
|
||||||
self.axes.annotate(str(path_num), xy=self._shapes[element]['shape'].exterior.coords[0],
|
self.axes.annotate(str(path_num), xy=self._shapes[element]['shape'].exterior.coords[0],
|
||||||
xycoords='data')
|
xycoords='data', fontsize=20)
|
||||||
else:
|
else:
|
||||||
self.axes.annotate(str(path_num), xy=self._shapes[element]['shape'].coords[0],
|
self.axes.annotate(str(path_num), xy=self._shapes[element]['shape'].coords[0],
|
||||||
xycoords='data')
|
xycoords='data', fontsize=20)
|
||||||
|
|
||||||
patch = PolygonPatch(self._shapes[element]['shape'],
|
patch = PolygonPatch(self._shapes[element]['shape'],
|
||||||
facecolor=self._shapes[element]['face_color'],
|
facecolor=self._shapes[element]['face_color'],
|
||||||
edgecolor=self._shapes[element]['color'],
|
edgecolor=self._shapes[element]['color'],
|
||||||
alpha=0.75, zorder=2)
|
alpha=self._shapes[element]['alpha'], zorder=2)
|
||||||
self.axes.add_patch(patch)
|
self.axes.add_patch(patch)
|
||||||
|
elif obj_type == 'utility':
|
||||||
|
# not a FlatCAM object, must be utility
|
||||||
|
if self._shapes[element]['face_color']:
|
||||||
|
try:
|
||||||
|
patch = PolygonPatch(self._shapes[element]['shape'],
|
||||||
|
facecolor=self._shapes[element]['face_color'],
|
||||||
|
edgecolor=self._shapes[element]['color'],
|
||||||
|
alpha=self._shapes[element]['alpha'],
|
||||||
|
zorder=2)
|
||||||
|
self.axes.add_patch(patch)
|
||||||
|
except AssertionError:
|
||||||
|
FlatCAMApp.App.log.warning("A geometry component was not a polygon:")
|
||||||
|
FlatCAMApp.App.log.warning(str(element))
|
||||||
|
else:
|
||||||
|
if isinstance(self._shapes[element]['shape'], Polygon):
|
||||||
|
x, y = self._shapes[element]['shape'].exterior.xy
|
||||||
|
self.axes.plot(x, y, self._shapes[element]['color'], linestyle='-')
|
||||||
|
for ints in self._shapes[element]['shape'].interiors:
|
||||||
|
x, y = ints.coords.xy
|
||||||
|
self.axes.plot(x, y, self._shapes[element]['color'], linestyle='-')
|
||||||
|
else:
|
||||||
|
x, y = self._shapes[element]['shape'].coords.xy
|
||||||
|
self.axes.plot(x, y, self._shapes[element]['color'], linestyle='-')
|
||||||
|
|
||||||
self.app.plotcanvas.auto_adjust_axes()
|
self.app.plotcanvas.auto_adjust_axes()
|
||||||
|
|
||||||
|
@ -310,8 +310,7 @@ class Measurement(FlatCAMTool):
|
|||||||
if len(self.points) == 1:
|
if len(self.points) == 1:
|
||||||
self.start_entry.set_value("(%.4f, %.4f)" % pos)
|
self.start_entry.set_value("(%.4f, %.4f)" % pos)
|
||||||
self.app.inform.emit(_("MEASURING: Click on the Destination point ..."))
|
self.app.inform.emit(_("MEASURING: Click on the Destination point ..."))
|
||||||
|
elif len(self.points) == 2:
|
||||||
if len(self.points) == 2:
|
|
||||||
dx = self.points[1][0] - self.points[0][0]
|
dx = self.points[1][0] - self.points[0][0]
|
||||||
dy = self.points[1][1] - self.points[0][1]
|
dy = self.points[1][1] - self.points[0][1]
|
||||||
d = sqrt(dx ** 2 + dy ** 2)
|
d = sqrt(dx ** 2 + dy ** 2)
|
||||||
@ -323,8 +322,8 @@ class Measurement(FlatCAMTool):
|
|||||||
self.distance_x_entry.set_value('%.4f' % abs(dx))
|
self.distance_x_entry.set_value('%.4f' % abs(dx))
|
||||||
self.distance_y_entry.set_value('%.4f' % abs(dy))
|
self.distance_y_entry.set_value('%.4f' % abs(dy))
|
||||||
self.total_distance_entry.set_value('%.4f' % abs(d))
|
self.total_distance_entry.set_value('%.4f' % abs(d))
|
||||||
self.app.ui.rel_position_label.setText("<b>Dx</b>: %.4f <b>Dy</b>: "
|
self.app.ui.rel_position_label.setText("<b>Dx</b>: {0:.4f} <b>Dy</b>: "
|
||||||
"%.4f " % (pos[0], pos[1]))
|
"{0:.4f} ".format(pos[0], pos[1]))
|
||||||
self.deactivate_measure_tool()
|
self.deactivate_measure_tool()
|
||||||
|
|
||||||
def on_mouse_move_meas(self, event):
|
def on_mouse_move_meas(self, event):
|
||||||
@ -334,39 +333,57 @@ class Measurement(FlatCAMTool):
|
|||||||
else:
|
else:
|
||||||
event_pos = (event.xdata, event.ydata)
|
event_pos = (event.xdata, event.ydata)
|
||||||
|
|
||||||
pos_canvas = self.app.plotcanvas.translate_coords(event_pos)
|
try:
|
||||||
|
x = float(event_pos[0])
|
||||||
|
y = float(event_pos[1])
|
||||||
|
except TypeError:
|
||||||
|
return
|
||||||
|
|
||||||
|
pos_canvas = self.app.plotcanvas.translate_coords((x, y))
|
||||||
|
|
||||||
if self.app.grid_status() == True:
|
if self.app.grid_status() == True:
|
||||||
pos = self.app.geo_editor.snap(pos_canvas[0], pos_canvas[1])
|
pos = self.app.geo_editor.snap(pos_canvas[0], pos_canvas[1])
|
||||||
# Update cursor
|
if self.app.is_legacy is False:
|
||||||
self.app.app_cursor.set_data(np.asarray([(pos[0], pos[1])]),
|
# Update cursor
|
||||||
symbol='++', edge_color='black', size=20)
|
self.app.app_cursor.set_data(np.asarray([(pos[0], pos[1])]),
|
||||||
|
symbol='++', edge_color='black', size=20)
|
||||||
else:
|
else:
|
||||||
pos = (pos_canvas[0], pos_canvas[1])
|
pos = (pos_canvas[0], pos_canvas[1])
|
||||||
|
|
||||||
|
self.app.ui.position_label.setText(" <b>X</b>: {0:.4f} "
|
||||||
|
"<b>Y</b>: {0:.4f}".format(pos[0], pos[1]))
|
||||||
|
|
||||||
if self.rel_point1 is not None:
|
if self.rel_point1 is not None:
|
||||||
dx = pos[0] - self.rel_point1[0]
|
dx = pos[0] - float(self.rel_point1[0])
|
||||||
dy = pos[1] - self.rel_point1[1]
|
dy = pos[1] - float(self.rel_point1[1])
|
||||||
else:
|
else:
|
||||||
dx = pos[0]
|
dx = pos[0]
|
||||||
dy = pos[1]
|
dy = pos[1]
|
||||||
|
|
||||||
self.app.ui.position_label.setText(" <b>X</b>: %.4f "
|
self.app.ui.rel_position_label.setText("<b>Dx</b>: {0:.4f} <b>Dy</b>: "
|
||||||
"<b>Y</b>: %.4f" % (pos[0], pos[1]))
|
"{0:.4f} ".format(dx, dy))
|
||||||
self.app.ui.rel_position_label.setText("<b>Dx</b>: %.4f <b>Dy</b>: "
|
|
||||||
"%.4f " % (dx, dy))
|
|
||||||
# update utility geometry
|
# update utility geometry
|
||||||
|
|
||||||
if len(self.points) == 1:
|
if len(self.points) == 1:
|
||||||
self.utility_geometry(pos=pos)
|
self.utility_geometry(pos=pos)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
log.debug("Measurement.on_mouse_move_meas() --> %s" % str(e))
|
||||||
self.app.ui.position_label.setText("")
|
self.app.ui.position_label.setText("")
|
||||||
self.app.ui.rel_position_label.setText("")
|
self.app.ui.rel_position_label.setText("")
|
||||||
|
|
||||||
def utility_geometry(self, pos):
|
def utility_geometry(self, pos):
|
||||||
# first delete old shape
|
# first delete old shape
|
||||||
self.delete_shape()
|
self.delete_shape()
|
||||||
|
|
||||||
# second draw the new shape of the utility geometry
|
# second draw the new shape of the utility geometry
|
||||||
self.meas_line = LineString([pos, self.points[0]])
|
meas_line = LineString([pos, self.points[0]])
|
||||||
self.sel_shapes.add(self.meas_line, color='black', update=True, layer=0, tolerance=None)
|
|
||||||
|
color = '#00000000'
|
||||||
|
self.sel_shapes.add(meas_line, color=color, update=True, layer=0, tolerance=None)
|
||||||
|
|
||||||
|
if self.app.is_legacy is True:
|
||||||
|
self.sel_shapes.redraw()
|
||||||
|
|
||||||
def delete_shape(self):
|
def delete_shape(self):
|
||||||
self.sel_shapes.clear()
|
self.sel_shapes.clear()
|
||||||
|
@ -212,7 +212,14 @@ class ToolMove(FlatCAMTool):
|
|||||||
event_pos = event.pos
|
event_pos = event.pos
|
||||||
else:
|
else:
|
||||||
event_pos = (event.xdata, event.ydata)
|
event_pos = (event.xdata, event.ydata)
|
||||||
pos_canvas = self.app.plotcanvas.translate_coords(event_pos)
|
|
||||||
|
try:
|
||||||
|
x = float(event_pos[0])
|
||||||
|
y = float(event_pos[1])
|
||||||
|
except TypeError:
|
||||||
|
return
|
||||||
|
|
||||||
|
pos_canvas = self.app.plotcanvas.translate_coords((x, y))
|
||||||
|
|
||||||
# if GRID is active we need to get the snapped positions
|
# if GRID is active we need to get the snapped positions
|
||||||
if self.app.grid_status() == True:
|
if self.app.grid_status() == True:
|
||||||
@ -270,8 +277,12 @@ class ToolMove(FlatCAMTool):
|
|||||||
p2 = (xmaximal, yminimal)
|
p2 = (xmaximal, yminimal)
|
||||||
p3 = (xmaximal, ymaximal)
|
p3 = (xmaximal, ymaximal)
|
||||||
p4 = (xminimal, ymaximal)
|
p4 = (xminimal, ymaximal)
|
||||||
|
|
||||||
self.old_coords = [p1, p2, p3, p4]
|
self.old_coords = [p1, p2, p3, p4]
|
||||||
self.draw_shape(self.old_coords)
|
self.draw_shape(Polygon(self.old_coords))
|
||||||
|
|
||||||
|
if self.app.is_legacy is True:
|
||||||
|
self.sel_shapes.redraw()
|
||||||
|
|
||||||
def update_sel_bbox(self, pos):
|
def update_sel_bbox(self, pos):
|
||||||
self.delete_shape()
|
self.delete_shape()
|
||||||
@ -280,24 +291,30 @@ class ToolMove(FlatCAMTool):
|
|||||||
pt2 = (self.old_coords[1][0] + pos[0], self.old_coords[1][1] + pos[1])
|
pt2 = (self.old_coords[1][0] + pos[0], self.old_coords[1][1] + pos[1])
|
||||||
pt3 = (self.old_coords[2][0] + pos[0], self.old_coords[2][1] + pos[1])
|
pt3 = (self.old_coords[2][0] + pos[0], self.old_coords[2][1] + pos[1])
|
||||||
pt4 = (self.old_coords[3][0] + pos[0], self.old_coords[3][1] + pos[1])
|
pt4 = (self.old_coords[3][0] + pos[0], self.old_coords[3][1] + pos[1])
|
||||||
|
self.draw_shape(Polygon([pt1, pt2, pt3, pt4]))
|
||||||
|
|
||||||
self.draw_shape([pt1, pt2, pt3, pt4])
|
if self.app.is_legacy is True:
|
||||||
|
self.sel_shapes.redraw()
|
||||||
|
|
||||||
def delete_shape(self):
|
def delete_shape(self):
|
||||||
self.sel_shapes.clear()
|
self.sel_shapes.clear()
|
||||||
self.sel_shapes.redraw()
|
self.sel_shapes.redraw()
|
||||||
|
|
||||||
def draw_shape(self, coords):
|
def draw_shape(self, shape):
|
||||||
self.sel_rect = Polygon(coords)
|
|
||||||
if self.app.ui.general_defaults_form.general_app_group.units_radio.get_value().upper() == 'MM':
|
|
||||||
self.sel_rect = self.sel_rect.buffer(-0.1)
|
|
||||||
self.sel_rect = self.sel_rect.buffer(0.2)
|
|
||||||
else:
|
|
||||||
self.sel_rect = self.sel_rect.buffer(-0.00393)
|
|
||||||
self.sel_rect = self.sel_rect.buffer(0.00787)
|
|
||||||
|
|
||||||
blue_t = Color('blue')
|
if self.app.ui.general_defaults_form.general_app_group.units_radio.get_value().upper() == 'MM':
|
||||||
blue_t.alpha = 0.2
|
proc_shape = shape.buffer(-0.1)
|
||||||
self.sel_shapes.add(self.sel_rect, color='blue', face_color=blue_t, update=True, layer=0, tolerance=None)
|
proc_shape = proc_shape.buffer(0.2)
|
||||||
|
else:
|
||||||
|
proc_shape = shape.buffer(-0.00393)
|
||||||
|
proc_shape = proc_shape.buffer(0.00787)
|
||||||
|
|
||||||
|
# face = Color('blue')
|
||||||
|
# face.alpha = 0.2
|
||||||
|
|
||||||
|
face = '#0000FFAF' + str(hex(int(0.2 * 255)))[2:]
|
||||||
|
outline = '#0000FFAF'
|
||||||
|
|
||||||
|
self.sel_shapes.add(proc_shape, color=outline, face_color=face, update=True, layer=0, tolerance=None)
|
||||||
|
|
||||||
# end of file
|
# end of file
|
||||||
|
Loading…
Reference in New Issue
Block a user