Activity indicator as context manager when opening files. Opening gerber from File->Open Gerber launches open_gerber in thread.
This commit is contained in:
131
FlatCAMApp.py
131
FlatCAMApp.py
@@ -1393,13 +1393,11 @@ class App(QtCore.QObject):
|
|||||||
# TODO: Improve the serialization methods and remove this fix.
|
# TODO: Improve the serialization methods and remove this fix.
|
||||||
filename = str(filename)
|
filename = str(filename)
|
||||||
|
|
||||||
self.open_gerber(filename)
|
if str(filename) == "":
|
||||||
|
self.inform.emit("Open cancelled.")
|
||||||
# if str(filename) == "":
|
else:
|
||||||
# self.inform.emit("Open cancelled.")
|
self.worker_task.emit({'fcn': self.open_gerber,
|
||||||
# else:
|
'params': [filename]})
|
||||||
# self.worker_task.emit({'fcn': self.open_gerber,
|
|
||||||
# 'params': [filename]})
|
|
||||||
|
|
||||||
def on_fileopenexcellon(self):
|
def on_fileopenexcellon(self):
|
||||||
"""
|
"""
|
||||||
@@ -1584,40 +1582,24 @@ class App(QtCore.QObject):
|
|||||||
|
|
||||||
App.log.debug("open_gerber()")
|
App.log.debug("open_gerber()")
|
||||||
|
|
||||||
proc = self.proc_container.new("Opening Gerber")
|
with self.proc_container.new("Opening Gerber") as proc:
|
||||||
log.debug("sys.getrefcount(proc) == %d" % sys.getrefcount(proc))
|
|
||||||
self.progress.emit(10)
|
|
||||||
|
|
||||||
|
self.progress.emit(10)
|
||||||
|
|
||||||
|
# Object name
|
||||||
|
name = outname or filename.split('/')[-1].split('\\')[-1]
|
||||||
|
|
||||||
# Object name
|
### Object creation ###
|
||||||
name = outname or filename.split('/')[-1].split('\\')[-1]
|
self.new_object("gerber", name, obj_init)
|
||||||
|
|
||||||
self.new_object("gerber", name, obj_init)
|
# Register recent file
|
||||||
|
self.file_opened.emit("gerber", filename)
|
||||||
|
|
||||||
# New object creation and file processing
|
self.progress.emit(100)
|
||||||
# try:
|
#proc.done()
|
||||||
# self.new_object("gerber", name, obj_init)
|
|
||||||
# except:
|
|
||||||
# e = sys.exc_info()
|
|
||||||
# print "ERROR:", e[0]
|
|
||||||
# traceback.print_exc()
|
|
||||||
# self.message_dialog("Failed to create Gerber Object",
|
|
||||||
# "Attempting to create a FlatCAM Gerber Object from " +
|
|
||||||
# "Gerber file failed during processing:\n" +
|
|
||||||
# str(e[0]) + " " + str(e[1]), kind="error")
|
|
||||||
# GLib.timeout_add_seconds(1, lambda: self.set_progress_bar(0.0, "Idle"))
|
|
||||||
# self.collection.delete_active()
|
|
||||||
# return
|
|
||||||
|
|
||||||
# Register recent file
|
# GUI feedback
|
||||||
self.file_opened.emit("gerber", filename)
|
self.inform.emit("Opened: " + filename)
|
||||||
|
|
||||||
self.progress.emit(100)
|
|
||||||
#proc.done()
|
|
||||||
|
|
||||||
# GUI feedback
|
|
||||||
self.inform.emit("Opened: " + filename)
|
|
||||||
|
|
||||||
def open_excellon(self, filename, outname=None):
|
def open_excellon(self, filename, outname=None):
|
||||||
"""
|
"""
|
||||||
@@ -1631,11 +1613,11 @@ class App(QtCore.QObject):
|
|||||||
|
|
||||||
App.log.debug("open_excellon()")
|
App.log.debug("open_excellon()")
|
||||||
|
|
||||||
self.progress.emit(10)
|
#self.progress.emit(10)
|
||||||
|
|
||||||
# How the object should be initialized
|
# How the object should be initialized
|
||||||
def obj_init(excellon_obj, app_obj):
|
def obj_init(excellon_obj, app_obj):
|
||||||
self.progress.emit(20)
|
#self.progress.emit(20)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
excellon_obj.parse_file(filename)
|
excellon_obj.parse_file(filename)
|
||||||
@@ -1651,32 +1633,21 @@ class App(QtCore.QObject):
|
|||||||
self.progress.emit(0)
|
self.progress.emit(0)
|
||||||
raise e
|
raise e
|
||||||
|
|
||||||
self.progress.emit(70)
|
#self.progress.emit(70)
|
||||||
|
|
||||||
# Object name
|
with self.proc_container.new("Opening Excellon."):
|
||||||
name = outname or filename.split('/')[-1].split('\\')[-1]
|
|
||||||
|
|
||||||
self.new_object("excellon", name, obj_init)
|
# Object name
|
||||||
# New object creation and file processing
|
name = outname or filename.split('/')[-1].split('\\')[-1]
|
||||||
# try:
|
|
||||||
# self.new_object("excellon", name, obj_init)
|
|
||||||
# except:
|
|
||||||
# e = sys.exc_info()
|
|
||||||
# App.log.error(str(e))
|
|
||||||
# self.message_dialog("Failed to create Excellon Object",
|
|
||||||
# "Attempting to create a FlatCAM Excellon Object from " +
|
|
||||||
# "Excellon file failed during processing:\n" +
|
|
||||||
# str(e[0]) + " " + str(e[1]), kind="error")
|
|
||||||
# self.progress.emit(0)
|
|
||||||
# self.collection.delete_active()
|
|
||||||
# return
|
|
||||||
|
|
||||||
# Register recent file
|
self.new_object("excellon", name, obj_init)
|
||||||
self.file_opened.emit("excellon", filename)
|
|
||||||
|
|
||||||
# GUI feedback
|
# Register recent file
|
||||||
self.inform.emit("Opened: " + filename)
|
self.file_opened.emit("excellon", filename)
|
||||||
self.progress.emit(100)
|
|
||||||
|
# GUI feedback
|
||||||
|
self.inform.emit("Opened: " + filename)
|
||||||
|
#self.progress.emit(100)
|
||||||
|
|
||||||
def open_gcode(self, filename, outname=None):
|
def open_gcode(self, filename, outname=None):
|
||||||
"""
|
"""
|
||||||
@@ -1715,29 +1686,31 @@ class App(QtCore.QObject):
|
|||||||
self.progress.emit(60)
|
self.progress.emit(60)
|
||||||
job_obj.create_geometry()
|
job_obj.create_geometry()
|
||||||
|
|
||||||
# Object name
|
with self.proc_container.new("Opening G-Code."):
|
||||||
name = outname or filename.split('/')[-1].split('\\')[-1]
|
|
||||||
|
|
||||||
# New object creation and file processing
|
# Object name
|
||||||
try:
|
name = outname or filename.split('/')[-1].split('\\')[-1]
|
||||||
self.new_object("cncjob", name, obj_init)
|
|
||||||
except:
|
|
||||||
e = sys.exc_info()
|
|
||||||
App.log.error(str(e))
|
|
||||||
self.message_dialog("Failed to create CNCJob Object",
|
|
||||||
"Attempting to create a FlatCAM CNCJob Object from " +
|
|
||||||
"G-Code file failed during processing:\n" +
|
|
||||||
str(e[0]) + " " + str(e[1]), kind="error")
|
|
||||||
self.progress.emit(0)
|
|
||||||
self.collection.delete_active()
|
|
||||||
return
|
|
||||||
|
|
||||||
# Register recent file
|
# New object creation and file processing
|
||||||
self.file_opened.emit("cncjob", filename)
|
try:
|
||||||
|
self.new_object("cncjob", name, obj_init)
|
||||||
|
except Exception as e:
|
||||||
|
# e = sys.exc_info()
|
||||||
|
App.log.error(str(e))
|
||||||
|
self.message_dialog("Failed to create CNCJob Object",
|
||||||
|
"Attempting to create a FlatCAM CNCJob Object from " +
|
||||||
|
"G-Code file failed during processing:\n" +
|
||||||
|
str(e[0]) + " " + str(e[1]), kind="error")
|
||||||
|
self.progress.emit(0)
|
||||||
|
self.collection.delete_active()
|
||||||
|
raise e
|
||||||
|
|
||||||
# GUI feedback
|
# Register recent file
|
||||||
self.inform.emit("Opened: " + filename)
|
self.file_opened.emit("cncjob", filename)
|
||||||
self.progress.emit(100)
|
|
||||||
|
# GUI feedback
|
||||||
|
self.inform.emit("Opened: " + filename)
|
||||||
|
self.progress.emit(100)
|
||||||
|
|
||||||
def open_project(self, filename):
|
def open_project(self, filename):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -2,6 +2,17 @@ from FlatCAMGUI import FlatCAMActivityView
|
|||||||
from PyQt4 import QtCore
|
from PyQt4 import QtCore
|
||||||
import weakref
|
import weakref
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
log = logging.getLogger('base2')
|
||||||
|
log.setLevel(logging.DEBUG)
|
||||||
|
#log.setLevel(logging.WARNING)
|
||||||
|
#log.setLevel(logging.INFO)
|
||||||
|
formatter = logging.Formatter('[%(levelname)s] %(message)s')
|
||||||
|
handler = logging.StreamHandler()
|
||||||
|
handler.setFormatter(formatter)
|
||||||
|
log.addHandler(handler)
|
||||||
|
|
||||||
|
|
||||||
class FCProcess(object):
|
class FCProcess(object):
|
||||||
|
|
||||||
@@ -13,9 +24,6 @@ class FCProcess(object):
|
|||||||
self.status = "Active"
|
self.status = "Active"
|
||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
# print "#######################"
|
|
||||||
# print "# FCProcess.__del__() #"
|
|
||||||
# print "#######################"
|
|
||||||
self.done()
|
self.done()
|
||||||
|
|
||||||
def __enter__(self):
|
def __enter__(self):
|
||||||
@@ -23,15 +31,14 @@ class FCProcess(object):
|
|||||||
|
|
||||||
def __exit__(self, exc_type, exc_val, exc_tb):
|
def __exit__(self, exc_type, exc_val, exc_tb):
|
||||||
if exc_type is not None:
|
if exc_type is not None:
|
||||||
print "Abnormal termination of process!"
|
log.error("Abnormal termination of process!")
|
||||||
print exc_type
|
log.error(exc_type)
|
||||||
print exc_val
|
log.error(exc_val)
|
||||||
print exc_tb
|
log.error(exc_tb)
|
||||||
|
|
||||||
self.done()
|
self.done()
|
||||||
|
|
||||||
def done(self):
|
def done(self):
|
||||||
# print "FCProcess.done()"
|
|
||||||
for fcn in self.callbacks["done"]:
|
for fcn in self.callbacks["done"]:
|
||||||
fcn(self)
|
fcn(self)
|
||||||
|
|
||||||
@@ -113,21 +120,18 @@ class FCVisibleProcessContainer(QtCore.QObject, FCProcessContainer):
|
|||||||
self.something_changed.connect(self.update_view)
|
self.something_changed.connect(self.update_view)
|
||||||
|
|
||||||
def on_done(self, proc):
|
def on_done(self, proc):
|
||||||
print "FCVisibleProcessContainer.on_done()"
|
log.debug("FCVisibleProcessContainer.on_done()")
|
||||||
super(FCVisibleProcessContainer, self).on_done(proc)
|
super(FCVisibleProcessContainer, self).on_done(proc)
|
||||||
|
|
||||||
#self.update_view()
|
|
||||||
self.something_changed.emit()
|
self.something_changed.emit()
|
||||||
|
|
||||||
def on_change(self, proc):
|
def on_change(self, proc):
|
||||||
print "FCVisibleProcessContainer.on_change()"
|
log.debug("FCVisibleProcessContainer.on_change()")
|
||||||
super(FCVisibleProcessContainer, self).on_change(proc)
|
super(FCVisibleProcessContainer, self).on_change(proc)
|
||||||
|
|
||||||
#self.update_view()
|
|
||||||
self.something_changed.emit()
|
self.something_changed.emit()
|
||||||
|
|
||||||
def update_view(self):
|
def update_view(self):
|
||||||
# print "FCVisibleProcessContainer.update_view()"
|
|
||||||
if len(self.procs) == 0:
|
if len(self.procs) == 0:
|
||||||
self.view.set_idle()
|
self.view.set_idle()
|
||||||
|
|
||||||
|
|||||||
@@ -1929,10 +1929,12 @@ class Gerber (Geometry):
|
|||||||
|
|
||||||
# --- Apply buffer ---
|
# --- Apply buffer ---
|
||||||
log.warn("Joining %d polygons." % len(poly_buffer))
|
log.warn("Joining %d polygons." % len(poly_buffer))
|
||||||
|
new_poly = cascaded_union(poly_buffer)
|
||||||
|
new_poly = new_poly.buffer(0)
|
||||||
if current_polarity == 'D':
|
if current_polarity == 'D':
|
||||||
self.solid_geometry = self.solid_geometry.union(cascaded_union(poly_buffer))
|
self.solid_geometry = self.solid_geometry.union(new_poly)
|
||||||
else:
|
else:
|
||||||
self.solid_geometry = self.solid_geometry.difference(cascaded_union(poly_buffer))
|
self.solid_geometry = self.solid_geometry.difference(new_poly)
|
||||||
|
|
||||||
except Exception, err:
|
except Exception, err:
|
||||||
#print traceback.format_exc()
|
#print traceback.format_exc()
|
||||||
|
|||||||
Reference in New Issue
Block a user