Difference between revisions of "workshop01G3:Codefarm"
From CECO
(2 intermediate revisions by 2 users not shown) | |||
Line 5: | Line 5: | ||
<div style="float:left; width: 160px; height 30px; border: 1px solid #aaa; margin-right:10px; " align="center">[[workshop01G3:Group|'''Group 3''']]</div> | <div style="float:left; width: 160px; height 30px; border: 1px solid #aaa; margin-right:10px; " align="center">[[workshop01G3:Group|'''Group 3''']]</div> | ||
− | <div style="float:left; width: 160px; height 30px; border: 1px solid #aaa; margin-right:10px;" align="center">[[workshop01G3: | + | <div style="float:left; width: 160px; height 30px; border: 1px solid #aaa; margin-right:10px;" align="center">[[workshop01G3:Past Experiments|'''Past Experiments''']]</div> |
− | <div style="float:left; width: 160px; height 30px; border: 1px solid #aaa; margin-right:10px;" align="center">[[workshop01G3: | + | <div style="float:left; width: 160px; height 30px; border: 1px solid #aaa; margin-right:10px;" align="center">[[workshop01G3:Present to Future|'''Present to Future''']]</div> |
<div style="float:left; width: 160px; height 30px; border: 1px solid #aaa; margin-right:10px;" align="center">[[workshop01G3:Codefarm|'''Code Farm''']]</div> | <div style="float:left; width: 160px; height 30px; border: 1px solid #aaa; margin-right:10px;" align="center">[[workshop01G3:Codefarm|'''Code Farm''']]</div> | ||
Line 14: | Line 14: | ||
[[workshop01G3:References|'''References''']]</div> | [[workshop01G3:References|'''References''']]</div> | ||
</div><br> | </div><br> | ||
+ | |||
+ | ==Python BranchingStructure_parametric== | ||
+ | <syntaxhighlight lang="python"> | ||
+ | import rhinoscriptsyntax as rs | ||
+ | import random | ||
+ | import scriptcontext | ||
+ | # define a function called drawbranch | ||
+ | # the integer c in the function with a format drawbranch(a,b,c), actually, drawbranch(4,line,4) | ||
+ | # m is a parameter to avoid having to manually change | ||
+ | def drawbranch(x,line,m): | ||
+ | #introduce possibility to use 'escape' key to avoid computer crash | ||
+ | scriptcontext.escape_test() | ||
+ | #define a condition to exit from funtion drawbranch, essentially increasing the i | ||
+ | if x==0: | ||
+ | return | ||
+ | else: | ||
+ | for i in range (0,m): | ||
+ | # get start and end points of a starting curve, first curve that will be drawn | ||
+ | endpt=rs.CurveEndPoint(line) | ||
+ | srtpt=rs.CurveStartPoint(line) | ||
+ | #create a vector between the endpoint and the startpoint of the initial curve | ||
+ | vect=rs.VectorCreate(endpt,srtpt) | ||
+ | #get 3 random integer which will be used as a degree of rotation for the initial | ||
+ | curve,these vectors will draw the branch | ||
+ | rnd=random.randint(-35,35) | ||
+ | rnd1=random.randint(-15,15) | ||
+ | rnd2=random.randint(-5,15) | ||
+ | #3D-rotate the vector with values got from random | ||
+ | vect=rs.VectorRotate(vect,rnd,[rnd1,rnd2,1]) | ||
+ | #add a point at the end of the 3D vector | ||
+ | ptadd=rs.PointAdd (endpt,vect) | ||
+ | #add a line between the endPoint of the vector and the newly added point | ||
+ | line=rs.AddLine (endpt,ptadd) | ||
+ | #INSIDE THE FOR-LOOP, WRITE A CONDITION FOR ADDING POINTS, BUT ONLY AT THE END OF THE LAST BRANCH | ||
+ | #IF YOU PROVIDE A LOW NUMBER OF ITERATIONS, IT WILL BECOME RECOGNISEABLE THAT THE CONDITION FOR DRAWING THE LAST BRANCH OF EVERY ITERATION | ||
+ | #IS WHEN X==1 AND I==THE END OF THE PROVIDED RANGE(m)-1 | ||
+ | if x==1 and i==m-1: | ||
+ | #if condition is met, add points at the end of the branch | ||
+ | e=rs.AddPoint(ptadd) | ||
+ | endPoints.append(e) | ||
+ | #calling the function THIS IS WHEN THE ACTUAL BRANCH IS DRAWN | ||
+ | drawbranch(x-1,line,m) | ||
+ | #make a list to store endPoints | ||
+ | endPoints=[] | ||
+ | #provide starting line for the future tree | ||
+ | line=rs.AddLine([0,0,0],[0,0,20]) | ||
+ | #calling the function for the chosen values | ||
+ | drawbranch(4,line,3) | ||
+ | #icluding a random seed for variation | ||
+ | rndseed=random.seed(5) | ||
+ | #adding a layer endPoints | ||
+ | rs.AddLayer("endPoints") | ||
+ | #adding PolyLine between points in endPoints | ||
+ | for pt in endPoints: | ||
+ | rs.ObjectLayer(pt,"endPoints") | ||
+ | rs.AddPolyline(endPoints, None) | ||
+ | |||
+ | </syntaxhighlight> |
Latest revision as of 14:30, 4 October 2013
Python BranchingStructure_parametric
import rhinoscriptsyntax as rs import random import scriptcontext # define a function called drawbranch # the integer c in the function with a format drawbranch(a,b,c), actually, drawbranch(4,line,4) # m is a parameter to avoid having to manually change def drawbranch(x,line,m): #introduce possibility to use 'escape' key to avoid computer crash scriptcontext.escape_test() #define a condition to exit from funtion drawbranch, essentially increasing the i if x==0: return else: for i in range (0,m): # get start and end points of a starting curve, first curve that will be drawn endpt=rs.CurveEndPoint(line) srtpt=rs.CurveStartPoint(line) #create a vector between the endpoint and the startpoint of the initial curve vect=rs.VectorCreate(endpt,srtpt) #get 3 random integer which will be used as a degree of rotation for the initial curve,these vectors will draw the branch rnd=random.randint(-35,35) rnd1=random.randint(-15,15) rnd2=random.randint(-5,15) #3D-rotate the vector with values got from random vect=rs.VectorRotate(vect,rnd,[rnd1,rnd2,1]) #add a point at the end of the 3D vector ptadd=rs.PointAdd (endpt,vect) #add a line between the endPoint of the vector and the newly added point line=rs.AddLine (endpt,ptadd) #INSIDE THE FOR-LOOP, WRITE A CONDITION FOR ADDING POINTS, BUT ONLY AT THE END OF THE LAST BRANCH #IF YOU PROVIDE A LOW NUMBER OF ITERATIONS, IT WILL BECOME RECOGNISEABLE THAT THE CONDITION FOR DRAWING THE LAST BRANCH OF EVERY ITERATION #IS WHEN X==1 AND I==THE END OF THE PROVIDED RANGE(m)-1 if x==1 and i==m-1: #if condition is met, add points at the end of the branch e=rs.AddPoint(ptadd) endPoints.append(e) #calling the function THIS IS WHEN THE ACTUAL BRANCH IS DRAWN drawbranch(x-1,line,m) #make a list to store endPoints endPoints=[] #provide starting line for the future tree line=rs.AddLine([0,0,0],[0,0,20]) #calling the function for the chosen values drawbranch(4,line,3) #icluding a random seed for variation rndseed=random.seed(5) #adding a layer endPoints rs.AddLayer("endPoints") #adding PolyLine between points in endPoints for pt in endPoints: rs.ObjectLayer(pt,"endPoints") rs.AddPolyline(endPoints, None)