2010. 9. 3. 19:45

RhinoScript 뭔지 모르지만 예문

  1. 'RandRail.rvb  
  2. 'Marius Watz, http://workshop.evolutionzone.com  
  3.   
  4. Option Explicit  
  5.   
  6. Sub Main  
  7.     Dim doRender : doRender=1  
  8.     Dim num : num=100  
  9.     Dim pt, curve(100)  
  10.   
  11.     Call rhino.enableRedraw(False)  
  12.     Rhino.Print "--------------------------"  
  13.   
  14.     ' delete any existing objects  
  15.     Dim oldScene:oldScene=Rhino.AllObjects()  
  16.     If isArray(oldScene) Then  
  17.         Rhino.DeleteObjects Rhino.AllObjects()  
  18.         Rhino.DeleteObjects Rhino.LightObjects()  
  19.     End If  
  20.   
  21.     ' Set up scene  
  22.     Dim light  
  23.     light=Rhino.AddPointLight (Array(0,-200,0))  
  24.     light=Rhino.AddPointLight (Array(-100,-100,0))  
  25.   
  26.     Rhino.RenderColor 1, RGB(50,50,50)  
  27.     Rhino.RenderResolution Array(1200,900)  
  28.     Rhino.RenderAntialias 2  
  29.   
  30.     ' Create random curves  
  31.     Dim cp(3),mult, i  
  32.     For i=0 To num  
  33.         mult=random(0.75,1.25)  
  34.         cp(0)=Array(0,0,0)  
  35.         If Rnd>0.5 Then  
  36.             cp(1)=Array(0,random(30,50),0)  
  37.         Else  
  38.             cp(1)=Array(0,random(-30,20),0)  
  39.         End If  
  40.         If Rnd>0.5 Then  
  41.             cp(2)=Array(random(-50,50)*mult,random(30,50),random(-50,50)*mult)  
  42.         Else  
  43.             cp(2)=Array(random(-50,50)*mult,random(-30,20),random(-50,50)*mult)  
  44.         End If  
  45.         cp(3)=Array(random(-50,50)*mult,random(-50,50),random(-50,50)*mult)  
  46.         curve(i)=Rhino.AddCurve(cp)  
  47.         '       Rhino.AddSphere cp(2), dblRadius  
  48.     Next  
  49.   
  50.     ' Create random rounded profile  
  51.     Dim numRot : numRot=Int(random(7,18))  
  52.     Dim j, rndCurve(10),profPt(),deg,offs  
  53.     ReDim profPt(numRot)  
  54.   
  55.     For j=0 To Ubound(rndCurve)  
  56.         For i=0 To numRot  
  57.             deg=(2*Rhino.Pi/numRot)*i  
  58.             offs=random(5,7)*0.2  
  59.             If i Mod 2=0 Then  
  60.                 offs=random(7,12)*0.2  
  61.             End If  
  62.   
  63.             profPt(i)=Array(Cos(deg)*offs, 0 ,Sin(deg)*offs)  
  64.         Next  
  65.         rndCurve(j)=Rhino.AddCurve(profPt)  
  66.     Next  
  67.   
  68.     ' Create random RailRefSrf and ExtrudeCurve surfaces  
  69.     Dim railAxis(1)  
  70.     railAxis(0)=Array(0,0,0)  
  71.     railAxis(1)=Array(0,1,0)  
  72.   
  73.     Dim srf,profCurve  
  74.     For i=0 To num  
  75.         profCurve=rndCurve(Int(random(0,Ubound(rndCurve))))  
  76.         srf=Rhino.AddRailRevSrf(curve(i),profCurve,railAxis)  
  77.         applyRndMaterial(srf)  
  78.         '       srf=Rhino.ExtrudeCurve(profCurve,curve(i))  
  79.         '       applyRndMaterial(srf)  
  80.     Next  
  81.   
  82.     If doRender=1 Then  
  83.         renderView()  
  84.     End If  
  85.   
  86.     Call rhino.enableRedraw(True)  
  87.   
  88. End Sub  
  89.   
  90. ' Set random materials  
  91. Function applyRndMaterial(obj)  
  92.     Dim prob,col,material  
  93.   
  94.     material=Rhino.AddMaterialToObject (obj)  
  95.   
  96.     ' Coloring: Pink, Orange  
  97.     prob=random(0,100)  
  98.     If prob<30 Then  
  99.         Rhino.MaterialColor material, RGB(255, 0, Int(random(100,150)))  
  100.     ElseIf prob<90 Then  
  101.         Rhino.MaterialColor material, RGB(255, Int(random(100,254)),0)  
  102.     Else  
  103.         Rhino.MaterialColor material, RGB(255, 255, 255)  
  104.     End If  
  105. End Function  
  106.   
  107. Function random(min,max)  
  108.     random=Rnd*(max-min)+min  
  109. End Function  
  110.   
  111. ' Render current viewport  
  112. Function renderView()  
  113.     Dim view,filename  
  114.   
  115.     view = Rhino.CurrentView  
  116.     Rhino.Command "_-Render"  
  117.     filename=getRenderFileName("RandRail")  
  118.     Dim cmd : cmd="_-SaveRenderWindowAs " & Chr(34) & filename & Chr(34)  
  119.     Rhino.Command cmd  
  120. End Function  
  121.   
  122. ' Get auto-incremented filename  
  123. Function getRenderFileName(scriptName)  
  124.     Dim index,done, doc, file, temp,imgNum  
  125.   
  126.     done=-1  
  127.     index=0  
  128.     Do While done=-1  
  129.         doc=Rhino.WorkingFolder & "\" & scriptName & padStr(scriptName,index) & ".png" 
  130.         file=Rhino.FindFile(doc) 
  131.         If IsNull(file)=True Then 
  132.             done=1 
  133.         Else 
  134.             index=index+1 
  135.         End If 
  136.     Loop 
  137.  
  138.     getRenderFileName=doc 
  139. End Function 
  140.  
  141. Function padStr(prefix,val) 
  142.     Dim l : l=Len(val) 
  143.     If l<1 Then 
  144.         padStr="000" & val 
  145.     ElseIf l<2 Then 
  146.         padStr="00" & val 
  147.     ElseIf l<3 Then 
  148.         padStr="0" & val  
  149.     Else  
  150.         padStr="" & val  
  151.     End If  
  152. End Function      
  153.   
  154. Main