Untitled

 avatar
unknown
plain_text
4 years ago
2.8 kB
4
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 = allQuads
Editor is loading...