fix + medial axis work

now also 2-point lines get processed correctly for various operations.
medial axis actually produces g-code, but still highly un-tuned.
pull/25/head
vilemnovak 2015-12-24 15:19:23 +01:00
rodzic cb18e89077
commit ca8dc95750
2 zmienionych plików z 33 dodań i 17 usunięć

Wyświetl plik

@ -549,7 +549,7 @@ def limitChunks(chunks,o, force=False):#TODO: this should at least add point on
elif sampled:
nch.points.append(s)
prevsampled=sampled
if len(nch.points)>1 and closed and ch.closed and ch.points[0]==ch.points[1]:
if len(nch.points)>2 and closed and ch.closed and ch.points[0]==ch.points[1]:
nch.closed=True
elif ch.closed and nch!=nch1 and len(nch.points)>1 and nch.points[-1]==nch1.points[0]:#here adds beginning of closed chunk to the end, if the chunks were split during limiting
nch.points.extend(nch1.points)
@ -891,19 +891,23 @@ def shapelyToChunks(p,zlevel):#
i=0
for s in seq:
#progress(p[i])
if len(s)>2:
if len(s)>1:
chunk=camPathChunk([])
chunk.poly=spolygon.Polygon(s)#this should maybe be LineString? but for sorting, we need polygon inside functions.
if len(s)==2:
sgeometry.LineString(s)
else:
chunk.poly=spolygon.Polygon(s)#this should maybe be LineString? but for sorting, we need polygon inside functions.
for v in s:
#progress (v)
if len(v)>2:
#print(v)
if p.has_z:
chunk.points.append((v[0],v[1],v[2]))
else:
chunk.points.append((v[0],v[1],zlevel))
chunk.points.append((chunk.points[0][0],chunk.points[0][1],chunk.points[0][2]))#last point =first point
chunk.closed=True
#chunk.points.append((chunk.points[0][0],chunk.points[0][1],chunk.points[0][2]))#last point =first point
if chunk.points[0]==chunk.points[-1] and len(s)>2:
chunk.closed=True
chunks.append(chunk)
i+=1
chunks.reverse()#this is for smaller shapes first.

Wyświetl plik

@ -3057,14 +3057,15 @@ def getPath3axis(context, operation):
from cam.voronoi import Site, computeVoronoiDiagram
chunksFromCurve=[]
chunks=[]
gpoly=spolygon.Polygon()
for ob in o.objects:
polys=getOperationSilhouete(o)
mpoly = sgeometry.asMultiPolygon(polys)
for poly in polys:
chunks=shapelyToChunks(poly,-1)
chunks = chunksRefine(chunks,o)
schunks=shapelyToChunks(poly,-1)
schunks = chunksRefine(schunks,o)
'''
chunksFromCurve.extend(polyToChunks(p,-1))
@ -3084,7 +3085,7 @@ def getPath3axis(context, operation):
points.append(pt)#(pt[0], pt[1]), pt[2])
'''
verts=[]
for ch in chunks:
for ch in schunks:
for pt in ch.points:
#pvoro = Site(pt[0], pt[1])
verts.append(pt)#(pt[0], pt[1]), pt[2])
@ -3112,7 +3113,7 @@ def getPath3axis(context, operation):
pts, edgesIdx = computeVoronoiDiagram(vertsPts, xbuff, ybuff, polygonsOutput=False, formatOutput=True)
#
pts=[[pt[0], pt[1], zPosition] for pt in pts]
#pts=[[pt[0], pt[1], zPosition] for pt in pts]
newIdx=0
vertr=[]
filteredPts=[]
@ -3122,23 +3123,33 @@ def getPath3axis(context, operation):
vertr.append((True,-1))
else:
vertr.append((False,newIdx))
filteredPts.append(p)
z=-mpoly.boundary.distance(sgeometry.Point(p))
#print(mpoly.distance(sgeometry.Point(0,0)))
#if(z!=0):print(z)
filteredPts.append((p[0],p[1],z))
newIdx+=1
print('filter edges')
filteredEdgs=[]
ledges=[]
for e in edgesIdx:
do=True
p1=pts[e[0]]
p2=pts[e[1]]
#print(p1,p2,len(vertr))
if vertr[e[0]][0]:
if vertr[e[0]][0]: # exclude edges with allready excluded points
do=False
elif vertr[e[1]][0]:
do=False
if do:
filteredEdgs.append(((vertr[e[0]][1],vertr[e[1]][1])))
ledges.append(sgeometry.LineString((filteredPts[vertr[e[0]][1]],filteredPts[vertr[e[1]][1]])))
#print(ledges[-1].has_z)
lines = shapely.ops.linemerge(ledges)
#shapelyToCurve('test',lines,0)
chunks.extend( shapelyToChunks(lines,0))
#segments=[]
#processEdges=filteredEdgs.copy()
@ -3147,7 +3158,7 @@ def getPath3axis(context, operation):
#while len(filteredEdgs)>0:
#Create new mesh structure
'''
print("Create mesh...")
voronoiDiagram = bpy.data.meshes.new("VoronoiDiagram") #create a new mesh
@ -3165,10 +3176,11 @@ def getPath3axis(context, operation):
bpy.context.scene.objects.link(voronoiObj) #Link object to scene
bpy.context.scene.objects.active = voronoiObj
voronoiObj.select = True
'''
#bpy.ops.object.convert(target='CURVE')
bpy.ops.object.join()
chunksToMesh(chunks, o )
#bpy.ops.object.join()
''''
pt_list = []
x_max = obj[0][0]