Another fixed bug introduced to clear_poly() in previous commit. Added process widget.
This commit is contained in:
@@ -218,6 +218,9 @@ class FlatCAMGUI(QtGui.QMainWindow):
|
|||||||
self.progress_bar.setMaximum(100)
|
self.progress_bar.setMaximum(100)
|
||||||
infobar.addWidget(self.progress_bar)
|
infobar.addWidget(self.progress_bar)
|
||||||
|
|
||||||
|
self.activity_view = FlatCAMActivityView()
|
||||||
|
infobar.addWidget(self.activity_view)
|
||||||
|
|
||||||
#############
|
#############
|
||||||
### Icons ###
|
### Icons ###
|
||||||
#############
|
#############
|
||||||
@@ -238,6 +241,35 @@ class FlatCAMGUI(QtGui.QMainWindow):
|
|||||||
QtGui.qApp.quit()
|
QtGui.qApp.quit()
|
||||||
|
|
||||||
|
|
||||||
|
class FlatCAMActivityView(QtGui.QWidget):
|
||||||
|
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
super(FlatCAMActivityView, self).__init__(parent=parent)
|
||||||
|
|
||||||
|
self.icon = QtGui.QLabel(self)
|
||||||
|
self.icon.setGeometry(0, 0, 12, 12)
|
||||||
|
self.movie = QtGui.QMovie("share/717.GIF")
|
||||||
|
self.icon.setMovie(self.movie)
|
||||||
|
#self.movie.start()
|
||||||
|
|
||||||
|
layout = QtGui.QHBoxLayout()
|
||||||
|
layout.setContentsMargins(5, 0, 5, 0)
|
||||||
|
self.setLayout(layout)
|
||||||
|
|
||||||
|
layout.addWidget(self.icon)
|
||||||
|
self.text = QtGui.QLabel(self)
|
||||||
|
self.text.setText("Idle.")
|
||||||
|
|
||||||
|
layout.addWidget(self.text)
|
||||||
|
|
||||||
|
def set_idle(self):
|
||||||
|
self.movie.stop()
|
||||||
|
self.text.setText("Idle.")
|
||||||
|
|
||||||
|
def set_busy(self, msg):
|
||||||
|
self.movie.start()
|
||||||
|
self.text.setText(msg)
|
||||||
|
|
||||||
class FlatCAMInfoBar(QtGui.QWidget):
|
class FlatCAMInfoBar(QtGui.QWidget):
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
|
|||||||
73
FlatCAMProcess.py
Normal file
73
FlatCAMProcess.py
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
from FlatCAMGUI import FlatCAMActivityView
|
||||||
|
|
||||||
|
class FCProcess(object):
|
||||||
|
|
||||||
|
def __init__(self, descr):
|
||||||
|
self.callbacks = {
|
||||||
|
"done": []
|
||||||
|
}
|
||||||
|
self.descr = descr
|
||||||
|
|
||||||
|
def done(self):
|
||||||
|
for fcn in self.callbacks["done"]:
|
||||||
|
fcn(self)
|
||||||
|
|
||||||
|
def connect(self, callback, event="done"):
|
||||||
|
if callback not in self.callbacks[event]:
|
||||||
|
self.callbacks[event].append(callback)
|
||||||
|
|
||||||
|
def disconnect(self, callback, event="done"):
|
||||||
|
try:
|
||||||
|
self.callbacks[event].remove(callback)
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def status_msg(self):
|
||||||
|
return self.descr
|
||||||
|
|
||||||
|
|
||||||
|
class FCProcessContainer(object):
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
|
||||||
|
self.procs = []
|
||||||
|
|
||||||
|
def add(self, proc):
|
||||||
|
|
||||||
|
self.procs.append(proc)
|
||||||
|
|
||||||
|
def new(self, descr):
|
||||||
|
proc = FCProcess(descr)
|
||||||
|
proc.connect(self.on_done, event="done")
|
||||||
|
|
||||||
|
def on_done(self, proc):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def remove(self, proc):
|
||||||
|
|
||||||
|
if proc in self.procs:
|
||||||
|
self.procs.remove(proc)
|
||||||
|
|
||||||
|
|
||||||
|
class FCVisibleProcessContainer(FCProcessContainer):
|
||||||
|
|
||||||
|
def __init__(self, view):
|
||||||
|
assert isinstance(view, FlatCAMActivityView)
|
||||||
|
|
||||||
|
super(FCVisibleProcessContainer, self).__init__()
|
||||||
|
|
||||||
|
self.view = view
|
||||||
|
|
||||||
|
def on_done(self, proc):
|
||||||
|
super(FCVisibleProcessContainer, self).on_done(proc)
|
||||||
|
|
||||||
|
self.update_view()
|
||||||
|
|
||||||
|
def update_view(self):
|
||||||
|
|
||||||
|
if len(self.procs) == 0:
|
||||||
|
self.view.set_idle()
|
||||||
|
elif len(self.procs) == 1:
|
||||||
|
self.view.set_busy(self.procs[0].status_msg())
|
||||||
|
else:
|
||||||
|
self.view.set_busy("%d processes running." % len(self.procs))
|
||||||
20
camlib.py
20
camlib.py
@@ -340,13 +340,25 @@ class Geometry(object):
|
|||||||
geoms = FlatCAMRTreeStorage()
|
geoms = FlatCAMRTreeStorage()
|
||||||
geoms.get_points = get_pts
|
geoms.get_points = get_pts
|
||||||
|
|
||||||
|
# Can only result in a Polygon or MultiPolygon
|
||||||
current = polygon.buffer(-tooldia / 2.0)
|
current = polygon.buffer(-tooldia / 2.0)
|
||||||
|
|
||||||
geoms.insert(current.exterior)
|
# current can be a MultiPolygon
|
||||||
for i in current.interiors:
|
try:
|
||||||
geoms.insert(i)
|
for p in current:
|
||||||
|
geoms.insert(p.exterior)
|
||||||
|
for i in p.interiors:
|
||||||
|
geoms.insert(i)
|
||||||
|
|
||||||
|
# Not a Multipolygon. Must be a Polygon
|
||||||
|
except TypeError:
|
||||||
|
geoms.insert(current.exterior)
|
||||||
|
for i in current.interiors:
|
||||||
|
geoms.insert(i)
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
|
|
||||||
|
# Can only result in a Polygon or MultiPolygon
|
||||||
current = current.buffer(-tooldia * (1 - overlap))
|
current = current.buffer(-tooldia * (1 - overlap))
|
||||||
if current.area > 0:
|
if current.area > 0:
|
||||||
|
|
||||||
@@ -357,7 +369,7 @@ class Geometry(object):
|
|||||||
for i in p.interiors:
|
for i in p.interiors:
|
||||||
geoms.insert(i)
|
geoms.insert(i)
|
||||||
|
|
||||||
# Not a Multipolygon.
|
# Not a Multipolygon. Must be a Polygon
|
||||||
except TypeError:
|
except TypeError:
|
||||||
geoms.insert(current.exterior)
|
geoms.insert(current.exterior)
|
||||||
for i in current.interiors:
|
for i in current.interiors:
|
||||||
|
|||||||
20
sandbox/process_widget.py
Normal file
20
sandbox/process_widget.py
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import sys
|
||||||
|
from PyQt4.QtGui import *
|
||||||
|
|
||||||
|
app = QApplication(sys.argv)
|
||||||
|
|
||||||
|
top = QWidget()
|
||||||
|
halign = QHBoxLayout()
|
||||||
|
top.setLayout(halign)
|
||||||
|
busy_anim = QMovie("../share/busy16.gif")
|
||||||
|
busy_anim.start()
|
||||||
|
busy_anim_label = QLabel()
|
||||||
|
busy_anim_label.setMovie(busy_anim)
|
||||||
|
halign.addWidget(busy_anim_label)
|
||||||
|
|
||||||
|
message_label = QLabel("Processing...")
|
||||||
|
halign.addWidget(message_label)
|
||||||
|
|
||||||
|
top.show()
|
||||||
|
|
||||||
|
sys.exit(app.exec_())
|
||||||
Reference in New Issue
Block a user