diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 3858ee4b..5f9dbff7 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -1579,7 +1579,7 @@ class App(QtCore.QObject): app_obj.progress.emit(0) self.log.error(str(e)) raise - return + #return # Further parsing self.progress.emit(70) # TODO: Note the mixture of self and app_obj used here diff --git a/FlatCAMDraw.py b/FlatCAMDraw.py index 7051c70b..620a402e 100644 --- a/FlatCAMDraw.py +++ b/FlatCAMDraw.py @@ -546,6 +546,7 @@ class FlatCAMDraw(QtCore.QObject): self.add_polygon_btn = self.drawing_toolbar.addAction(QtGui.QIcon('share/polygon32.png'), 'Add Polygon') self.add_path_btn = self.drawing_toolbar.addAction(QtGui.QIcon('share/path32.png'), 'Add Path') self.union_btn = self.drawing_toolbar.addAction(QtGui.QIcon('share/union32.png'), 'Polygon Union') + self.intersection_btn = self.drawing_toolbar.addAction(QtGui.QIcon('share/intersection32.png'), 'Polygon Intersection') self.subtract_btn = self.drawing_toolbar.addAction(QtGui.QIcon('share/subtract32.png'), 'Polygon Subtraction') self.cutpath_btn = self.drawing_toolbar.addAction(QtGui.QIcon('share/cutpath32.png'), 'Cut Path') self.move_btn = self.drawing_toolbar.addAction(QtGui.QIcon('share/move32.png'), "Move Objects 'm'") @@ -581,6 +582,7 @@ class FlatCAMDraw(QtCore.QObject): self.canvas.mpl_connect('key_release_event', self.on_canvas_key_release) self.union_btn.triggered.connect(self.union) + self.intersection_btn.triggered.connect(self.intersection) self.subtract_btn.triggered.connect(self.subtract) self.cutpath_btn.triggered.connect(self.cutpath) self.delete_btn.triggered.connect(self.on_delete_btn) @@ -1185,6 +1187,32 @@ class FlatCAMDraw(QtCore.QObject): self.replot() + def intersection(self): + """ + Makes intersectino of selected polygons. Original polygons are deleted. + + :return: None + """ + + shapes = self.get_selected() + + results = shapes[0].geo + + for shape in shapes[1:]: + results = results.intersection(shape.geo) + + # Delete originals. + for_deletion = [s for s in self.get_selected()] + for shape in for_deletion: + self.delete_shape(shape) + + # Selected geometry is now gone! + self.selected = [] + + self.add_shape(DrawToolShape(results)) + + self.replot() + def subtract(self): selected = self.get_selected() tools = selected[1:] diff --git a/FlatCAMProcess.py b/FlatCAMProcess.py index 82d71372..eb5059ac 100644 --- a/FlatCAMProcess.py +++ b/FlatCAMProcess.py @@ -12,10 +12,13 @@ class FCProcess(object): self.descr = descr def __del__(self): + # print "#######################" + # print "# FCProcess.__del__() #" + # print "#######################" self.done() def done(self): - print "FCProcess.done()" + # print "FCProcess.done()" for fcn in self.callbacks["done"]: fcn(self) @@ -108,7 +111,7 @@ class FCVisibleProcessContainer(QtCore.QObject, FCProcessContainer): self.something_changed.emit() def update_view(self): - print "FCVisibleProcessContainer.update_view()" + # print "FCVisibleProcessContainer.update_view()" if len(self.procs) == 0: self.view.set_idle() diff --git a/share/intersection16.png b/share/intersection16.png new file mode 100644 index 00000000..e6298995 Binary files /dev/null and b/share/intersection16.png differ diff --git a/share/intersection24.png b/share/intersection24.png new file mode 100644 index 00000000..a756e97c Binary files /dev/null and b/share/intersection24.png differ diff --git a/share/intersection32.png b/share/intersection32.png new file mode 100644 index 00000000..0e3077f6 Binary files /dev/null and b/share/intersection32.png differ diff --git a/tests/destructor_test.py b/tests/destructor_test.py new file mode 100644 index 00000000..8d7fa791 --- /dev/null +++ b/tests/destructor_test.py @@ -0,0 +1,34 @@ +from time import sleep +from PyQt4 import QtCore +from FlatCAMWorker import Worker + +class MyObj(): + + def __init__(self): + pass + + def __del__(self): + print "##### Distroyed ######" + + +def parse(): + o = MyObj() + raise Exception("Intentional Exception") + + +if __name__ == "__main__": + qo = QtCore.QObject + worker = Worker(qo) + thr1 = QtCore.QThread() + worker.moveToThread(thr1) + qo.connect(thr1, QtCore.SIGNAL("started()"), worker.run) + thr1.start() + + while True: + try: + parse() + print "Parse returned." + except Exception: + pass + sleep(5) + print "Competed successfully." \ No newline at end of file diff --git a/tests/toolpath_optimization_profiling/toollist_minimization_profile1.py b/tests/toolpath_optimization_profiling/toollist_minimization_profile1.py new file mode 100644 index 00000000..cfddc5d3 --- /dev/null +++ b/tests/toolpath_optimization_profiling/toollist_minimization_profile1.py @@ -0,0 +1,6 @@ +import cProfile +import pstats +from camlib import * + +g = Geometry() +