From 8e75d108debf4a25a97e643b865900d8cbba078a Mon Sep 17 00:00:00 2001 From: vilemnovak Date: Wed, 25 May 2016 11:25:41 +0200 Subject: [PATCH] speedup Parent child distance finding probably by several orders. This speeds up greatly finding of parent/child in pockets, outlinefill, and probably more. Pockets with many independent shapes were ultra-slow, not really measurable, now should be usable.... --- scripts/addons/cam/chunk.py | 33 +++++++++++++++++++++++++-------- scripts/addons/cam/pattern.py | 25 ++++++++++++++++--------- scripts/addons/cam/ui.py | 2 +- scripts/addons/cam/utils.py | 9 ++++++--- 4 files changed, 48 insertions(+), 21 deletions(-) diff --git a/scripts/addons/cam/chunk.py b/scripts/addons/cam/chunk.py index e5aaa4f3..d073332f 100644 --- a/scripts/addons/cam/chunk.py +++ b/scripts/addons/cam/chunk.py @@ -607,7 +607,7 @@ def parentChildPoly(parents,children,o): if parent.poly.contains(sgeometry.Point(child.poly.boundary.coords[0])): parent.children.append(child) child.parents.append(parent) - + def parentChildDist(parents, children,o, distance= None): #parenting based on x,y distance between chunks #hierarchy works like this: - children get milled first. @@ -617,23 +617,40 @@ def parentChildDist(parents, children,o, distance= None): dlim=dlim*2 else: dlim = distance + #print('distance') + #print(len(children),len(parents)) + #i=0 + #simplification greatly speeds up the distance finding algorithms. + for child in children: + child.simppoly=child.poly.simplify(0.0003) + for parent in parents: + parent.simppoly=parent.poly.simplify(0.0003) for child in children: for parent in parents: + #print(i) + #i+=1 isrelation=False if parent!=child: - for v in child.points: - for v1 in parent.points: - - if dist2d(v,v1)1:# sorting help so that upper layers go first always for i in range(0,len(layers)-1): parents=[] @@ -2407,8 +2407,9 @@ def strategy_pocket( o ): nchunks=limitChunks(nchunks,o) chunksFromCurve.extend(nchunks) + print(i) parentChildDist(lastchunks,nchunks,o) - + #print('parented') lastchunks=nchunks @@ -2852,6 +2853,7 @@ def getPath3axis(context, operation): if o.strategy=='OUTLINEFILL': getOperationSilhouete(o) pathSamples=getPathPattern(o) + pathSamples = sortChunks(pathSamples,o) #chunksToMesh(pathSamples,o)#for testing pattern script #return if o.strategy=='BLOCK' or o.strategy=='SPIRAL' or o.strategy=='CIRCLES' or o.strategy=='OUTLINEFILL': @@ -2868,7 +2870,8 @@ def getPath3axis(context, operation): chunks=chunksCoherency(chunks) print('coherency check') - if ((o.strategy=='PARALLEL' or o.strategy=='CROSS') or o.strategy=='PENCIL'):# and not o.parallel_step_back: + if ((o.strategy=='PARALLEL' or o.strategy=='CROSS') or o.strategy=='PENCIL'):# or o.strategy =='OUTLINEFILL'):# and not o.parallel_step_back: + print('sorting') chunks=sortChunks(chunks,o) if o.ramp: for ch in chunks: