From 23b20ba716a77284eb5523e33c0ef22869462a9f Mon Sep 17 00:00:00 2001 From: jpcaram Date: Fri, 6 Feb 2015 16:10:15 -0500 Subject: [PATCH] Added intersection tool to Drawing Tool. --- FlatCAMApp.py | 2 +- FlatCAMDraw.py | 28 +++++++++++++++ FlatCAMProcess.py | 7 ++-- share/intersection16.png | Bin 0 -> 487 bytes share/intersection24.png | Bin 0 -> 569 bytes share/intersection32.png | Bin 0 -> 659 bytes tests/destructor_test.py | 34 ++++++++++++++++++ .../toollist_minimization_profile1.py | 6 ++++ 8 files changed, 74 insertions(+), 3 deletions(-) create mode 100644 share/intersection16.png create mode 100644 share/intersection24.png create mode 100644 share/intersection32.png create mode 100644 tests/destructor_test.py create mode 100644 tests/toolpath_optimization_profiling/toollist_minimization_profile1.py 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 0000000000000000000000000000000000000000..e6298995576192a72d94accfca32998c03e06b87 GIT binary patch literal 487 zcmV7m(dYDAO@&pprksMTsOu?d6_QzCi@OP1xSWm)I3379!ityYi1bIY=>nOTnn zwA<}t-}es&gTcjoKHsm`>&q_~d!Bd4%$H%{7C@He`+PpH<#IWtP$-~ODhU9XOeRvJ z(KwAtx&D0N^;zo~o)wtJS(9qC)_; zzXA-yK)>I|Xfy%Pr_*_@R4Qki z-fu-FkR%D2OeW~l>9n8CX5GL1!E>+IO9>&i4#ag`m5APA0k&=G`P)k8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10k%m*K~zYI?UgZ$8bK7tf6sLaSqa))lOl_xu@dC44kzd*2&A$J z1OitCv`b^Xx*Xs>`t2GNY0CU8#pe6Jb2B2 z-v9mPF*A&4t+~la-DvlJ0+7B=k>fZ|fTOrNt@XQBtMw)^Kx_R1_z0ZtDZ2;Mf#d){ zMC4_&*?jf8f^N6_3}|20W6wZD3bWZPH5!c$MdZoeMx&uj)1=*QlTN3pR;%e!sRV%U``EUS0 z7lxq#DwRrwi2;^nop_%2e6?B~#CXrP+wDmlK>q*9w+{FQF*TJ)8iJKh00000NkvXX Hu0mjfks$Y< literal 0 HcmV?d00001 diff --git a/share/intersection32.png b/share/intersection32.png new file mode 100644 index 0000000000000000000000000000000000000000..0e3077f6f71b9be9230f3f48ea3d208d7cb0130e GIT binary patch literal 659 zcmV;E0&M+>P)e?3CF6F=u zfp+T9v5PeM11uB~A`XIEM?sEG*8ibyf^m`}i1uQjLrHsb4$0HyavsdmvPV^WWui`J11OiEcr?UjITwFNA^s z7r-l3RZlkH1QUUXo&q=n@Ht?}5rF3ao&dN$z=eLOs`@5~qps_ZE&zP>e+?mH>|-{Y z-E&>{NYk|b6>jGM-V%}T&;1^D)u8ZYz>75-SI`?dhvG0!KG&h1o0CKq;^7%Z*<1tLr z-0C|TjoxXR_9;l-zyQf)68(N3)9KXLZWsmzg8?kddf#rh0~Hqn003E*AILx06SaI>-E6-?oQdZeX{^WbRtR8Gt)F#&}59UQvhE@0Ji=UR;$%R t&iS4Iz%Nx*&u$FhUnuk;yaNaw;16R2sNhyAEoA@z002ovPDHLkV1fk=7Igps literal 0 HcmV?d00001 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() +