Untitled
unknown
plain_text
5 years ago
2.8 kB
7
Indexable
import Rhino as rc
import rhinoscriptsyntax as rs
import random
def splitQuad(quad,edgeValues):
# Get edges and vertices
segs = quad.GetSegments()
# Calculate orientation
if segs[0].Length > segs[1].Length:
edgeStart = 0
else:
edgeStart = 1
# Make new vertex list
if edgeStart == 0:
faceVts = [(segs[3].To,segs[3].From),]
elif edgeStart == 1:
faceVts = [(segs[0].To,segs[0].From),]
else:
print "edgeStart must be 0 or 1"
# Add splits to vertex list
for v in sorted(edgeValues):
pt0 = segs[edgeStart].PointAt(v)
pt1 = segs[edgeStart+2].PointAt(1-v)
faceVts.append((pt0,pt1))
# Add last vertices
faceVts.append((segs[edgeStart+1].From,segs[edgeStart+1].To))
# Make new split quads
newQuads = []
for i in range(len(faceVts)-1):
vts = (faceVts[i][0],faceVts[i][1],faceVts[i+1][1],faceVts[i+1][0],faceVts[i][0])
plc = rc.Geometry.Polyline(vts)
newQuads.append(plc)
return newQuads
allQuads = [Rectangle,]
whileQuads = [Rectangle,]
for i in range(Levels):
tempQuads = []
for j in range(len(whileQuads)):
seg = whileQuads[j].GetSegments()
for l in range(4):
if seg[l % 4][0][0] < seg[(l + 2) % 4][0][0] and seg[l % 4][0][1] < seg[(l + 2) % 4][0][1]:
segdown = seg[l%4]
segtop = seg[(l+2)%4]
break
params = []
print str(segdown[0][0])+"__"+str(segdown[0][1])+"__"+str(segtop[0][0])+"__"+str(segtop[0][1])
for k in range(len(points)):
if (len(params) == MaxSplits):
break
if (segdown[0][0] < points[k][0]) and (segtop[0][0] > points[k][0]) and (segdown[0][1] < points[k][1]) and (segtop[0][1] > points[k][1]):
if ((segtop[0][0] - segdown[0][0]) >= (segtop[0][1] - segdown[0][1])):
if (segdown.To[0] >= segdown[0][0]):
position = (points[k][0] - segdown[0][0]) / (segtop[0][0] - segdown[0][0])
else:
position = (segtop[0][0] - points[k][0]) / (segtop[0][0] - segdown[0][0])
else:
if (segtop.From[1] >= segtop[0][1]):
position = (points[k][1] - segdown[0][1]) / (segtop[0][1] - segdown[0][1])
else:
position = (segtop[0][1] - points[k][1]) / (segtop[0][1] - segdown[0][1])
if((position < MinParam) or (position > MaxParam)):
continue
params.append(position)
if (len(params) < MinSplits):
continue
newQuad = splitQuad(whileQuads[j],params)
tempQuads.extend(newQuad)
allQuads.extend(newQuad)
whileQuads = []
whileQuads.extend(tempQuads)
SplitRectangles = allQuadsEditor is loading...