NCF参数化建筑论坛

标题: RhinoScript深入教程 [打印本页]

作者: f(x)    时间: 2009-9-8 21:07
标题: RhinoScript深入教程
本来想继续说理论的,可是想起之前和Skywoolf聊天时说这个东西是不是也像GH那样用实例来讲会更好呢。这次就试试,要是觉得这样不好理解的话,我们就继续理论学习。讲的不对的地方就直接指出来,不明白的命令可以到VBSCRIPT中文速查手册里去查。在这个版块里就有。

开始正题

这是一个关于循环语句用法,通过直线不断的绕着方体运行,这样把那个方体去掉,这些直线就会围合成一个方体。这个例子我们让这条直线绕5000次,这样效果会更明显。
[attach]633[/attach]
Sub Main()
Rhino.AddLayer "black",RGB(0,0,0)

Dim headPt,endPt : endPt = Array (0,0,0)
Dim strLine
Dim r,g,b : r = 0 : g = 0 : b = 0
Dim count : count = 0
Const  EDGELEN = 500
  
Do
  headPt = endPt
  endPt = getPt(EDGELEN)
  strLine =  Rhino.AddLine(headPt,endPt)
  Rhino.ObjectLayer strLine , "black"
  Rhino.ObjectColor strLine , RGB(r,g,b)
  
  r = r + 1
  If r >= 255 Then
   r = 0
  End If
  b = b + 1
  If b >= 255 Then
   b = 0
  End If   
  g = g + 1
  If g >= 255 Then
   g = 0
  End If
  
  count = count+1  
  ' rhino.Print count  
  If count > 5000 Then Exit Do
Loop 'until count > 50

End Sub
Function getPt(EDGELEN)

Dim randomNum : randomNum = Int(Rnd()*6)
   
Select Case randomNum
  Case 0
   getPt = Array(Int(Rnd() * EDGELEN), Int(Rnd() * EDGELEN), 0)
  Case 1
   getPt = Array(0, Int(Rnd() * EDGELEN), Int(Rnd() * EDGELEN))
  Case 2
   getPt = Array(Int(Rnd() * EDGELEN), 0, Int(Rnd() * EDGELEN))
  Case 3
   getPt = Array(Int(Rnd() * EDGELEN), Int(Rnd() * EDGELEN), EDGELEN)
  Case 4
   getPt = Array(Int(Rnd() * EDGELEN), EDGELEN, Int(Rnd() * EDGELEN))
  Case 5
   getPt = Array(EDGELEN, Int(Rnd() * EDGELEN), Int(Rnd()* EDGELEN))
  Case Else
   rhino.Print "else"
End Select

End Function

这里我们可以清楚的看到DO LOOP和SELECT CASE结构的用法,在DO LOOP里有条件句的使用方式。
作者: yanhui314    时间: 2009-9-8 22:01
简单易懂的单一法则的重复执行就可以生成人脑无法具体想象甚至无法想象的东西。
不过有个疑问,这个例子是个简单智能的重复执行,如果要使简单智能形成集群,在内部相互影响,是不是RS做起来很难,到了这个层面大多用的是maya的粒子系统,不知道还要不要学maya。
作者: arkuo    时间: 2009-9-8 23:22
非常感謝你的教學

繼續來上課...

.
作者: f(x)    时间: 2009-9-9 09:34
2# yanhui314
看到我在这个页面里开的MAYA专区了么,我觉得有必要学,RS在某些方面确实还是不足的.而且我们也知道,参数化设计还是需要很多软件来共同完成的.
作者: 射手明    时间: 2009-9-20 15:21
呵呵,select case部分实现了在六个面上随机取点
作者: f(x)    时间: 2009-9-22 11:43
不好意思,我没有做视频的软件,而且这个也确实没有必要做个视频。这个直接贴是没有问题的,因为我就是直接从脚本里复制出来的。
作者: iceman    时间: 2009-9-22 20:51
很精彩  谢谢
最近 也想学 maya
不知道  能不能先从  mel开始
作者: f(x)    时间: 2009-9-22 21:27
不好意思啊,我不会maya啊,正在招募maya的版主呢。
作者: tomee    时间: 2009-9-23 18:16
楼主是在中国读的本科么。。?
作者: f(x)    时间: 2009-9-23 18:25
我在沈阳建筑大学上学,还没毕业呢。。。
作者: 李薇薇    时间: 2009-9-23 22:25
刚刚下了个Rhion ,功能上还不太熟。但是有一个疑问,版主的程序是自己编的吗?还有,Rhion这个程序好用吗?我怎么觉得除了比3D快一点没什么特别的?
作者: f(x)    时间: 2009-9-24 08:22
12# 李薇薇

刚刚下了一个rhino。

这是基于VB语言的脚本,也可以理解为编程。这个实例是我最开始学RS的时候下载的,非常的简单,还有效果,然后我拿来说明一下循环语句。

Rhino本身并不强大,强大的是他的几个参数化插件,GH,RS,TS等。
作者: tomee    时间: 2009-9-24 13:40
我在沈阳建筑大学上学,还没毕业呢。。。
f(x) 发表于 2009-9-23 18:25

在中国参数化运用上还是石器时代,楼主在学校自学能学到这个程度真是天才呵~不过像我们工作了能钻研的时间更少,还要面对务实的甲方。。唉,羡慕啊
作者: f(x)    时间: 2009-9-24 14:17
14# tomee

那中国的天才超多了。
作者: Jdesign    时间: 2009-10-29 18:23
楼主写的不错嘛。哈哈
支持
作者: bendanxinhe    时间: 2009-11-6 14:54
正好快到周末了   多找点东西 细细研究
以后会准备来报到上课的  嘿嘿
作者: usirah    时间: 2009-11-10 14:26
这个实在是太漂亮了。
作者: snaill    时间: 2009-11-13 23:45
这个script 很清晰,很好
作者: maumauyu    时间: 2009-11-28 17:21
看着图上的立方体很炫,先复制下来试试看吧……
作者: zhuoranliu    时间: 2009-12-1 20:15
我是新人,真的很受益
作者: looyatroy    时间: 2009-12-3 18:31
。。。还是要比GRASSHOPPER厉害
作者: uuuf8    时间: 2009-12-9 02:36
果然很强大的样子
作者: uuuf8    时间: 2009-12-9 03:41
很好很强大
作者: uuuf8    时间: 2009-12-9 03:44
我写script很少写到rgb方面的,不过在processing里倒是很常写到
作者: janking999    时间: 2009-12-10 00:06
顶一个{:3_50:}
作者: single    时间: 2009-12-10 21:56
看来有机会还要学一点MAYA,不过学MAX就已经觉得深不见底了
作者: hbb_007    时间: 2009-12-11 10:05
越看 压力越大 要抓紧时间学习了
作者: ruyi    时间: 2009-12-17 10:02
程序不长效果不错啊
作者: xiaojigilgamesh    时间: 2009-12-17 10:45
学习学习。。。。。。
作者: vivilgfs    时间: 2009-12-20 01:12
{:3_46:}哇 好厉害
作者: 咸鱼空间    时间: 2009-12-24 11:01
kankan{:3_53:}
作者: 肥猫飞天    时间: 2010-1-2 16:38
这个跟我们老师上课给的课件一样的啊
作者: renzhe3421    时间: 2010-1-6 12:58
真不错,早点儿发现这个BBS就好了
作者: luoyijiang    时间: 2010-1-7 21:53
好强大..敬佩楼主的精神!支持啦
作者: luoyijiang    时间: 2010-1-9 23:04
拜读中。。。。。
作者: 990628    时间: 2010-1-18 10:52
看了lz的精彩表演,我也决定学脚本
作者: miaomiao    时间: 2010-2-10 09:20
很赞的例子,综合了很多script用法!!!!
楼主能解释一下 : randomNum = Int(Rnd()*6) 和数组 getPt = Array(Int(Rnd() * EDGELEN), Int(Rnd() * EDGELEN), 0)

常数EDGELEN 可以直截用500 代替吗
作者: maidong    时间: 2010-3-17 16:49
努力学习中~
作者: tottyer    时间: 2010-3-18 02:40
学习中,感谢分享!
作者: jokergrey    时间: 2010-3-18 23:24
学习中呢~~觉得script好难,内牛满面……只能继续加油啦……学了一学期还觉得是个门外汉,还得继续加油了……
作者: tao    时间: 2010-3-23 11:04
好......................
作者: df13    时间: 2010-3-26 23:28
好棒的表現  我喜歡
作者: marcowoo    时间: 2010-4-17 23:58
从看例子开始,当觉得没什么好看时事就成了
作者: freeze23    时间: 2010-4-26 20:52
太好了 太好了太好了太好了 太好了太好了太好了 太好了太好了太好了 太好了太好了太好了 太好了太好了太好了 太好了太好了
作者: zoezhao    时间: 2010-5-16 20:22
very useful
作者: zoezhao    时间: 2010-5-16 20:56
希望多一些这样的东西给初学者
作者: zoezhao    时间: 2010-5-16 20:56
very useful~~~
作者: dhp203    时间: 2010-5-18 12:16
难呀,一个个学吧
作者: goodsky2009    时间: 2010-5-18 22:03
现在还看不懂  不过感谢楼主的分享精神
作者: 夜神    时间: 2010-6-4 11:01
Rhino 4.0 RS6版有一个“ShootRay”函数是专门干这个的,呵呵!
作者: wangyilongwyl12    时间: 2010-6-4 12:39
看看看啊看看
作者: aiwei1206    时间: 2010-7-2 17:51
还是要学习啊 大学学的C语言快忘完了
作者: superdanlu    时间: 2010-7-6 16:19
汗,,,怎么搞的啊,,牛
作者: 578546667    时间: 2010-7-7 11:44
感谢分享。。。
作者: stjackin    时间: 2010-7-18 15:47
还是在学校念书的人心静得下来, 等到工作了,心都散了。

我又来坐坐,学习学习。
作者: wonderful    时间: 2010-7-30 20:51
能否为你的脚本注释?很难明白
作者: 47snake47    时间: 2010-8-6 19:11
好东西啊。。。。。
作者: fengkongx9    时间: 2010-8-10 10:38
maya......  学不过来了
作者: 张大千    时间: 2010-8-15 16:38
很好的练习,感谢楼主!

自己也刚开始学
好多地方,慢慢才弄明白,加了些注释,希望大家能更理解
作者: 张大千    时间: 2010-8-15 16:39
Call Main()
Sub Main()
Rhino.AddLayer "black",RGB(0,0,0)    'define a New layer

Dim headPt,endPt : endPt = Array (0,0,0)
'define begining point and terminal point
'pre-define the coordinate of the endPoint as the Looping beginning Point
Dim StrLine
Dim r,g,b : r=0 : g=0 : b=0   'define the RGB colour Value
Dim count : count = 0    'define the looping counter
Const EDGELEN = 500    'Define the Length of Line

Do
  headPt = endPt   'evaluate the coordinate to headpoint
  endPt = getPt (EDGELEN)    'call the subroutine,get a random point
  strLine = Rhino.AddLine(headPt,endPt)    'create a line
  Rhino.ObjectLayer strLine ,"black"    'set the Layer of Line
  Rhino.ObjectColor strLine ,RGB(r,g,b)    'set the color of Line, 1st is whight
   
  r = r + 1    'shift the R color ,step-Len is 1
  If r >= 255 Then
   r = 0
  End If
  b = b + 2    'shift the B color ,step-Len is 2
  If b >= 255 Then
   b = 0
  End If
  g = g + 3    'shift the G color ,step-Len is 3
  If g >= 255 Then
   g = 0
  End If
  '此处将RGB的步长调整为不同,这样就可以生成彩色的线了
  
  count = count + 1    'The looping step
  
  If count > 5000 Then Exit Do   ' The looping Judge term
  
Loop


End Sub
Function getPt (EDGELEN)   'subroutine
Dim randomNum : randomNum = Int(Rnd()*6)    'generate a random number 0~6
Select Case randomNum    'condition Judgement
  Case 0
   getPt = Array(Int(Rnd() * EDGELEN), Int(Rnd() * EDGELEN), 0)
  ' get a point on x-y plane
  Case 1
   getPt = Array(0, Int(Rnd() * EDGELEN), Int(Rnd() * EDGELEN))
  ' get a point on y-z plane
  Case 2
   getPt = Array(Int(Rnd() * EDGELEN), 0, Int(Rnd() * EDGELEN))
  ' get a point on x-z plane
  Case 3
   getPt = Array(Int(Rnd() * EDGELEN), Int(Rnd() * EDGELEN), EDGELEN)
  ' get a point on plane which parallel to x-y plane with 500 distance
  Case 4
   getPt = Array(Int(Rnd() * EDGELEN), EDGELEN, Int(Rnd() * EDGELEN))
  ' get a point on plane which parallel to x-z plane with 500 distance
  Case 5
   getPt = Array(EDGELEN, Int(Rnd() * EDGELEN), Int(Rnd()* EDGELEN))
  ' get a point on plane which parallel to y-z plane with 500 distance
  Case Else
   rhino.Print "else"
End Select
End Function
作者: 张大千    时间: 2010-8-15 16:40
非常希望高人能指出注释中的不妥! 万分感谢!
作者: wangxudong    时间: 2010-9-7 14:28
dfghdfghdfghgfh
作者: shackman    时间: 2010-9-11 12:20
支持一下!!!
作者: 点点唇绛    时间: 2010-9-12 04:42
学习            。
作者: 点点唇绛    时间: 2010-9-12 04:43
学习               。
作者: mengcheng41    时间: 2010-9-13 21:54
好东西!!
作者: dumingf    时间: 2010-9-15 21:13
太有意思了~~~
作者: PARADAN    时间: 2010-9-28 09:54
菜鸟学习了。。。
作者: opiaoyi    时间: 2010-10-2 16:23
看看看看看看看看看看看看看看看看看看
作者: Pisces    时间: 2010-10-7 00:29
现在还看不懂,马上学习啊 谢谢分享
作者: 顾顾    时间: 2010-10-18 19:17
再次赞叹下·~~~~~{:3_46:}
作者: agpig    时间: 2010-10-22 14:09
支持實例  教學~~~
狂頂~~
作者: 岁月静好    时间: 2010-11-20 20:15
谢谢指导  学习了
作者: Pinturicchio    时间: 2010-11-23 02:34
very good.it's ok
作者: uekiii    时间: 2010-11-27 18:04
很好,支持楼主
作者: huangchang0528    时间: 2010-12-11 14:16
教程不错~~
作者: 05310130    时间: 2010-12-21 00:09
不错不错!!
作者: yuerxian    时间: 2010-12-28 12:02
楼主这个和grasshopper那个更适合入门的小学生学习呢。。。谢谢啊
作者: liguorui    时间: 2011-1-1 23:03
第一接触Rhino,好有吸引力啊
作者: 关典为    时间: 2011-1-4 16:21
这个script 很清晰,很好
作者: 110573845    时间: 2011-1-18 19:42
是这段代码让我第一次看懂了犀牛里的代码
作者: LAVAHA    时间: 2011-1-28 23:21
很有意思的盒子。。。
作者: 1127463392    时间: 2011-2-24 19:42
{:3_62:}牛
作者: bxsqrym    时间: 2011-4-2 11:44
非常感謝你的教學

繼續來上課...
作者: gaga    时间: 2011-4-5 11:16
好看,但不会做啊
作者: bxsqrym    时间: 2011-4-10 19:17
这个script 很清晰,很好
作者: roypetty    时间: 2011-4-14 14:51
汗 编程看的我晕乎乎
作者: roypetty    时间: 2011-4-14 14:51
应当如何着手编程 入门啊??
作者: koalas629    时间: 2011-4-16 09:45
好好学习啊
作者: yingboy    时间: 2011-4-27 16:01
向樓主學習。。
作者: wawa    时间: 2011-4-28 15:06
very good tutorial!!
作者: 牛屎超人    时间: 2011-5-23 19:50
继续学习~~~
作者: 340019499    时间: 2011-5-24 11:09
在GH打平多年 终于搞到SC
作者: ly2164    时间: 2011-5-24 12:51
好内容学习中
作者: cmkui52    时间: 2011-5-24 17:55
这是哪国的馆?
作者: ctctwin    时间: 2011-6-26 10:28
。。。我晕了
作者: sysjs    时间: 2011-6-29 15:15
非常感謝你的教學
作者: sysjs    时间: 2011-6-30 17:15
很好…………………………不错……
作者: sysjs    时间: 2011-6-30 17:17
很好…………………………不错……
作者: panda    时间: 2011-7-3 18:06
非常感谢楼主的无私分享。




欢迎光临 NCF参数化建筑论坛 (http://bbs.ncf-china.com/) Powered by Discuz! X3.2