- in Tools: Paint, NCC and Copper Fill, when using the Area Selection, now the selected aras will stay drawn as markers until the user click RMB
- in legacy2D graphic engine, adding an utility geometry no longer draw the older ones, overwriting them
This commit is contained in:
parent
f9ad83ba29
commit
b994ee9639
|
@ -2748,6 +2748,14 @@ class App(QtCore.QObject):
|
||||||
# this holds a widget that is installed in the Plot Area when View Source option is used
|
# this holds a widget that is installed in the Plot Area when View Source option is used
|
||||||
self.source_editor_tab = None
|
self.source_editor_tab = None
|
||||||
|
|
||||||
|
# Storage for shapes, storage that can be used by FlatCAm tools for utility geometry
|
||||||
|
# VisPy visuals
|
||||||
|
if self.is_legacy is False:
|
||||||
|
self.tool_shapes = ShapeCollection(parent=self.plotcanvas.view.scene, layers=1)
|
||||||
|
else:
|
||||||
|
from flatcamGUI.PlotCanvasLegacy import ShapeCollectionLegacy
|
||||||
|
self.tool_shapes = ShapeCollectionLegacy(obj=self, app=self, name="tool")
|
||||||
|
|
||||||
# ###############################################################################
|
# ###############################################################################
|
||||||
# ############# Save defaults to factory_defaults.FlatConfig file ###############
|
# ############# Save defaults to factory_defaults.FlatConfig file ###############
|
||||||
# ############# It's done only once after install ###############
|
# ############# It's done only once after install ###############
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
from PyQt5 import QtGui, QtCore, QtWidgets, QtWidgets
|
from PyQt5 import QtGui, QtCore, QtWidgets, QtWidgets
|
||||||
from PyQt5.QtCore import Qt
|
from PyQt5.QtCore import Qt
|
||||||
|
|
||||||
|
from shapely.geometry import Polygon
|
||||||
|
|
||||||
|
|
||||||
class FlatCAMTool(QtWidgets.QWidget):
|
class FlatCAMTool(QtWidgets.QWidget):
|
||||||
|
|
||||||
|
@ -90,3 +92,49 @@ class FlatCAMTool(QtWidgets.QWidget):
|
||||||
self.app.ui.tool_scroll_area.widget().setObjectName(self.toolName)
|
self.app.ui.tool_scroll_area.widget().setObjectName(self.toolName)
|
||||||
|
|
||||||
self.show()
|
self.show()
|
||||||
|
|
||||||
|
def draw_tool_selection_shape(self, old_coords, coords, **kwargs):
|
||||||
|
"""
|
||||||
|
|
||||||
|
:param old_coords: old coordinates
|
||||||
|
:param coords: new coordinates
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
|
||||||
|
if 'color' in kwargs:
|
||||||
|
color = kwargs['color']
|
||||||
|
else:
|
||||||
|
color = self.app.defaults['global_sel_line']
|
||||||
|
|
||||||
|
if 'face_color' in kwargs:
|
||||||
|
face_color = kwargs['face_color']
|
||||||
|
else:
|
||||||
|
face_color = self.app.defaults['global_sel_fill']
|
||||||
|
|
||||||
|
if 'face_alpha' in kwargs:
|
||||||
|
face_alpha = kwargs['face_alpha']
|
||||||
|
else:
|
||||||
|
face_alpha = 0.3
|
||||||
|
|
||||||
|
x0, y0 = old_coords
|
||||||
|
x1, y1 = coords
|
||||||
|
|
||||||
|
pt1 = (x0, y0)
|
||||||
|
pt2 = (x1, y0)
|
||||||
|
pt3 = (x1, y1)
|
||||||
|
pt4 = (x0, y1)
|
||||||
|
sel_rect = Polygon([pt1, pt2, pt3, pt4])
|
||||||
|
|
||||||
|
# color_t = Color(face_color)
|
||||||
|
# color_t.alpha = face_alpha
|
||||||
|
|
||||||
|
color_t = face_color[:-2] + str(hex(int(face_alpha * 255)))[2:]
|
||||||
|
|
||||||
|
self.app.tool_shapes.add(sel_rect, color=color, face_color=color_t, update=True,
|
||||||
|
layer=0, tolerance=None)
|
||||||
|
if self.app.is_legacy is True:
|
||||||
|
self.app.tool_shapes.redraw()
|
||||||
|
|
||||||
|
def delete_tool_selection_shape(self):
|
||||||
|
self.app.tool_shapes.clear()
|
||||||
|
self.app.tool_shapes.redraw()
|
||||||
|
|
|
@ -9,6 +9,11 @@ CAD program, and create G-Code for Isolation routing.
|
||||||
|
|
||||||
=================================================
|
=================================================
|
||||||
|
|
||||||
|
28.10.2019
|
||||||
|
|
||||||
|
- in Tools: Paint, NCC and Copper Fill, when using the Area Selection, now the selected aras will stay drawn as markers until the user click RMB
|
||||||
|
- in legacy2D graphic engine, adding an utility geometry no longer draw the older ones, overwriting them
|
||||||
|
|
||||||
27.10.2019
|
27.10.2019
|
||||||
|
|
||||||
- Copper Fill Tool: some PEP8 corrections
|
- Copper Fill Tool: some PEP8 corrections
|
||||||
|
@ -53,7 +58,7 @@ CAD program, and create G-Code for Isolation routing.
|
||||||
- working on the Calibrate Excellon Tool
|
- working on the Calibrate Excellon Tool
|
||||||
- finished the GUI layout for the Calibrate Excellon Tool
|
- finished the GUI layout for the Calibrate Excellon Tool
|
||||||
- start working on QRCode Tool - not working yet
|
- start working on QRCode Tool - not working yet
|
||||||
- start working on QRCode Tool - searching for alternatives
|
- start working on QRCode Tool - searching for alternativess
|
||||||
|
|
||||||
21.10.2019
|
21.10.2019
|
||||||
|
|
||||||
|
|
|
@ -272,8 +272,6 @@ class PlotCanvasLegacy(QtCore.QObject):
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# self.double_click.disconnect(cid)
|
|
||||||
|
|
||||||
self.canvas.mpl_disconnect(cid)
|
self.canvas.mpl_disconnect(cid)
|
||||||
|
|
||||||
def on_new_screen(self):
|
def on_new_screen(self):
|
||||||
|
@ -936,6 +934,7 @@ class ShapeCollectionLegacy:
|
||||||
|
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
|
|
||||||
path_num = 0
|
path_num = 0
|
||||||
local_shapes = deepcopy(self._shapes)
|
local_shapes = deepcopy(self._shapes)
|
||||||
|
|
||||||
|
@ -945,6 +944,10 @@ class ShapeCollectionLegacy:
|
||||||
obj_type = 'utility'
|
obj_type = 'utility'
|
||||||
|
|
||||||
if self._visible:
|
if self._visible:
|
||||||
|
# if we don't use this then when adding each new shape, the old ones will be added again, too
|
||||||
|
if obj_type == 'utility':
|
||||||
|
self.axes.patches.clear()
|
||||||
|
|
||||||
for element in local_shapes:
|
for element in local_shapes:
|
||||||
if obj_type == 'excellon':
|
if obj_type == 'excellon':
|
||||||
# Plot excellon (All polygons?)
|
# Plot excellon (All polygons?)
|
||||||
|
@ -1040,6 +1043,7 @@ class ShapeCollectionLegacy:
|
||||||
edgecolor=local_shapes[element]['color'],
|
edgecolor=local_shapes[element]['color'],
|
||||||
alpha=local_shapes[element]['alpha'],
|
alpha=local_shapes[element]['alpha'],
|
||||||
zorder=2)
|
zorder=2)
|
||||||
|
|
||||||
self.axes.add_patch(patch)
|
self.axes.add_patch(patch)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.debug("ShapeCollectionLegacy.redraw() --> %s" % str(e))
|
log.debug("ShapeCollectionLegacy.redraw() --> %s" % str(e))
|
||||||
|
|
|
@ -373,6 +373,7 @@ class ToolCopperFill(FlatCAMTool):
|
||||||
self.cursor_pos = self.app.geo_editor.snap(event_pos[0], event_pos[1])
|
self.cursor_pos = self.app.geo_editor.snap(event_pos[0], event_pos[1])
|
||||||
else:
|
else:
|
||||||
self.app.inform.emit(_("Zone added. Click to start adding next zone or right click to finish."))
|
self.app.inform.emit(_("Zone added. Click to start adding next zone or right click to finish."))
|
||||||
|
self.app.delete_selection_shape()
|
||||||
|
|
||||||
if self.app.grid_status() is True:
|
if self.app.grid_status() is True:
|
||||||
curr_pos = self.app.geo_editor.snap(event_pos[0], event_pos[1])
|
curr_pos = self.app.geo_editor.snap(event_pos[0], event_pos[1])
|
||||||
|
@ -386,15 +387,20 @@ class ToolCopperFill(FlatCAMTool):
|
||||||
pt3 = (x1, y1)
|
pt3 = (x1, y1)
|
||||||
pt4 = (x0, y1)
|
pt4 = (x0, y1)
|
||||||
|
|
||||||
self.sel_rect.append(Polygon([pt1, pt2, pt3, pt4]))
|
new_rectangle = Polygon([pt1, pt2, pt3, pt4])
|
||||||
|
self.sel_rect.append(new_rectangle)
|
||||||
|
|
||||||
|
# add a temporary shape on canvas
|
||||||
|
self.draw_tool_selection_shape(old_coords=(x0, y0), coords=(x1, y1))
|
||||||
self.first_click = False
|
self.first_click = False
|
||||||
return
|
return
|
||||||
|
|
||||||
elif event.button == right_button and self.mouse_is_dragging is False:
|
elif event.button == right_button and self.mouse_is_dragging is False:
|
||||||
self.app.delete_selection_shape()
|
|
||||||
self.area_method = False
|
self.area_method = False
|
||||||
self.first_click = False
|
self.first_click = False
|
||||||
|
|
||||||
|
self.delete_tool_selection_shape()
|
||||||
|
|
||||||
if self.app.is_legacy is False:
|
if self.app.is_legacy is False:
|
||||||
self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release)
|
self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release)
|
||||||
self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move)
|
self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move)
|
||||||
|
|
|
@ -1241,6 +1241,7 @@ class NonCopperClear(FlatCAMTool, Gerber):
|
||||||
self.cursor_pos = self.app.geo_editor.snap(event_pos[0], event_pos[1])
|
self.cursor_pos = self.app.geo_editor.snap(event_pos[0], event_pos[1])
|
||||||
else:
|
else:
|
||||||
self.app.inform.emit(_("Zone added. Click to start adding next zone or right click to finish."))
|
self.app.inform.emit(_("Zone added. Click to start adding next zone or right click to finish."))
|
||||||
|
self.app.delete_selection_shape()
|
||||||
|
|
||||||
if self.app.grid_status() == True:
|
if self.app.grid_status() == True:
|
||||||
curr_pos = self.app.geo_editor.snap(event_pos[0], event_pos[1])
|
curr_pos = self.app.geo_editor.snap(event_pos[0], event_pos[1])
|
||||||
|
@ -1254,15 +1255,20 @@ class NonCopperClear(FlatCAMTool, Gerber):
|
||||||
pt3 = (x1, y1)
|
pt3 = (x1, y1)
|
||||||
pt4 = (x0, y1)
|
pt4 = (x0, y1)
|
||||||
|
|
||||||
self.sel_rect.append(Polygon([pt1, pt2, pt3, pt4]))
|
new_rectangle = Polygon([pt1, pt2, pt3, pt4])
|
||||||
|
self.sel_rect.append(new_rectangle)
|
||||||
|
|
||||||
|
# add a temporary shape on canvas
|
||||||
|
self.draw_tool_selection_shape(old_coords=(x0, y0), coords=(x1, y1))
|
||||||
|
|
||||||
self.first_click = False
|
self.first_click = False
|
||||||
return
|
return
|
||||||
|
|
||||||
elif event.button == right_button and self.mouse_is_dragging == False:
|
elif event.button == right_button and self.mouse_is_dragging == False:
|
||||||
self.app.delete_selection_shape()
|
|
||||||
|
|
||||||
self.first_click = False
|
self.first_click = False
|
||||||
|
|
||||||
|
self.delete_tool_selection_shape()
|
||||||
|
|
||||||
if self.app.is_legacy is False:
|
if self.app.is_legacy is False:
|
||||||
self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release)
|
self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release)
|
||||||
self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move)
|
self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move)
|
||||||
|
|
|
@ -1122,6 +1122,7 @@ class ToolPaint(FlatCAMTool, Gerber):
|
||||||
self.cursor_pos = self.app.geo_editor.snap(self.cursor_pos[0], self.cursor_pos[1])
|
self.cursor_pos = self.app.geo_editor.snap(self.cursor_pos[0], self.cursor_pos[1])
|
||||||
else:
|
else:
|
||||||
self.app.inform.emit(_("Zone added. Click to start adding next zone or right click to finish."))
|
self.app.inform.emit(_("Zone added. Click to start adding next zone or right click to finish."))
|
||||||
|
self.app.delete_selection_shape()
|
||||||
|
|
||||||
curr_pos = self.app.plotcanvas.translate_coords(event_pos)
|
curr_pos = self.app.plotcanvas.translate_coords(event_pos)
|
||||||
if self.app.grid_status() == True:
|
if self.app.grid_status() == True:
|
||||||
|
@ -1133,15 +1134,21 @@ class ToolPaint(FlatCAMTool, Gerber):
|
||||||
pt2 = (x1, y0)
|
pt2 = (x1, y0)
|
||||||
pt3 = (x1, y1)
|
pt3 = (x1, y1)
|
||||||
pt4 = (x0, y1)
|
pt4 = (x0, y1)
|
||||||
self.sel_rect.append(Polygon([pt1, pt2, pt3, pt4]))
|
|
||||||
|
new_rectangle = Polygon([pt1, pt2, pt3, pt4])
|
||||||
|
self.sel_rect.append(new_rectangle)
|
||||||
|
|
||||||
|
# add a temporary shape on canvas
|
||||||
|
self.draw_tool_selection_shape(old_coords=(x0, y0), coords=(x1, y1))
|
||||||
|
|
||||||
self.first_click = False
|
self.first_click = False
|
||||||
return
|
return
|
||||||
|
|
||||||
elif event.button == right_button and self.mouse_is_dragging is False:
|
elif event.button == right_button and self.mouse_is_dragging is False:
|
||||||
self.app.delete_selection_shape()
|
|
||||||
|
|
||||||
self.first_click = False
|
self.first_click = False
|
||||||
|
|
||||||
|
self.delete_tool_selection_shape()
|
||||||
|
|
||||||
if self.app.is_legacy is False:
|
if self.app.is_legacy is False:
|
||||||
self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release)
|
self.app.plotcanvas.graph_event_disconnect('mouse_release', self.on_mouse_release)
|
||||||
self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move)
|
self.app.plotcanvas.graph_event_disconnect('mouse_move', self.on_mouse_move)
|
||||||
|
|
Loading…
Reference in New Issue