Untitled
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...