diff --git a/camlib.py b/camlib.py index 2b024f37..962ff74b 100644 --- a/camlib.py +++ b/camlib.py @@ -389,11 +389,11 @@ class Geometry(object): valid cuts. Finalizes by cutting around the inside edge of the polygon. - :param polygon: - :param tooldia: - :param seedpoint: - :param overlap: - :return: + :param polygon: Shapely.geometry.Polygon + :param tooldia: Diameter of the tool + :param seedpoint: Shapely.geometry.Point or None + :param overlap: Tool fraction overlap bewteen passes + :return: List of toolpaths covering polygon. """ # Current buffer radius @@ -3480,13 +3480,21 @@ class FlatCAMRTreeStorage(FlatCAMRTree): self.objects = [] + # Optimization attempt! + self.indexes = {} + def insert(self, obj): self.objects.append(obj) - super(FlatCAMRTreeStorage, self).insert(len(self.objects) - 1, obj) + idx = len(self.objects) - 1 + self.indexes[obj] = idx + super(FlatCAMRTreeStorage, self).insert(idx, obj) + #@profile def remove(self, obj): # Get index in list - objidx = self.objects.index(obj) + # TODO: This is extremely expensive + #objidx = self.objects.index(obj) + objidx = self.indexes[obj] # Remove from list self.objects[objidx] = None diff --git a/tests/toolpath_optimization_profiling/toollift_minimization_line_profile1.py b/tests/toolpath_optimization_profiling/toollift_minimization_line_profile1.py new file mode 100644 index 00000000..c66245bc --- /dev/null +++ b/tests/toolpath_optimization_profiling/toollift_minimization_line_profile1.py @@ -0,0 +1,8 @@ +# Run kernprof -l -v gerber_parsing_line_profile_1.py +import sys +sys.path.append('../../') +from camlib import * +from shapely.geometry import Polygon + +poly = Polygon([(0.0, 0.0), (1.0, 0.0), (1.0, 0.5), (0.0, 0.5)]) +result = Geometry.clear_polygon2(poly, 0.01) diff --git a/tests/toolpath_optimization_profiling/toollift_minimization_profile1.py b/tests/toolpath_optimization_profiling/toollift_minimization_profile1.py new file mode 100644 index 00000000..038e09b3 --- /dev/null +++ b/tests/toolpath_optimization_profiling/toollift_minimization_profile1.py @@ -0,0 +1,11 @@ +import cProfile +import pstats +from camlib import * +from shapely.geometry import Polygon + +poly = Polygon([(0.0, 0.0), (1.0, 0.0), (1.0, 0.5), (0.0, 0.5)]) + +cProfile.run('result = Geometry.clear_polygon2(poly, 0.01)', + 'toollist_minimization_profile', sort='cumtime') +p = pstats.Stats('toollist_minimization_profile') +p.sort_stats('cumulative').print_stats(.1) \ 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 deleted file mode 100644 index cfddc5d3..00000000 --- a/tests/toolpath_optimization_profiling/toollist_minimization_profile1.py +++ /dev/null @@ -1,6 +0,0 @@ -import cProfile -import pstats -from camlib import * - -g = Geometry() -