NCF参数化建筑论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 27882|回复: 18
打印 上一主题 下一主题

[在线求助] 问一个关于evaluatecurve的问题

[复制链接]
跳转到指定楼层
1m
发表于 2011-12-17 16:44:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
经过不懈努力,终于看完了101的上篇,虽然好多东西还不是很懂,不过也算是把面向过程看完了。怀着激动的心情开始看下篇,刚开始就遇到了问题。希望高手们能解答一下。下面上代码:
Call main()
Sub main()
Dim strcurveid
strcurveid=rhino.GetObject("select a curve to sample",4,True,True)
If isnull(strcurveid) Then Exit Sub
Dim t
Call rhino.EnableRedraw(False)
For t=0.0 To 1.0 Step 0.002
  Call addpointatr1parameter(strcurveid,t)
Next
Call rhino.EnableRedraw(True)
End Sub



Function addpointatr1parameter(strcurveid,dblunitparameter)
addpointatr1parameter=Null
Dim crvdomain
crvdomain=rhino.CurveDomain(strcurveid)
If isnull(crvdomain) Then Exit Function
Dim dblr1param
dblr1param=crvdomain(0)+dblunitparameter*(crvdomain(1)-crvdomain(0))
Dim arrr3point
arrr3point=rhino.EvaluateCurve(strcurveid,dblr1param)
If Not isarray(arrr3point) Then Exit Function
Dim strpointid
strpointid=rhino.AddPoint(arrr3point)
Call rhino.ObjectColor(strpointid,parametercolour(dblunitparameter))
addpointatr1parameter=strpointid
End Function



Function parametercolour(dblparam)
Dim redcomponent
redcomponent=255*dblparam
If(redcomponent<0) Then redcomponent=0
If(redcomponent>255) Then redcomponent=255

parametercolour=rgb(redcomponent,0,255-redcomponent)
End Function

这个代码运行起来没有问题,基本逻辑我也懂,但是在一个细节的地方我不是很懂,就是在第二部分Function addpointatr1parameter(strcurveid,dblunitparameter)的dblr1param=crvdomain(0)+dblunitparameter*(crvdomain(1)-crvdomain(0))这一行代码。我知道下面的rhino.evaluatecurve的返回值是一系列点,而这个添加点的方法应该和grasshopper一样,就是根据曲线上的t值来添加,所以evaluatecurve需要的是一个曲线,就是strcurveid和一系列t值,就是dblr1param。但是上面的代码,dblr1param=crvdomain(0)+dblunitparameter*(crvdomain(1)-crvdomain(0))这里的crvdomain(0)和后面的加法是用来干什么的呢,希望高手能给指点一下。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
2m
 楼主| 发表于 2011-12-17 17:05:37 | 只看该作者
补充一个问题。最后的parametercolour=rgb(redcomponent,0,255,-redcomponent)这个函数是什么意思啊,返回值是颜色,但是参数都是什么呢,我查了帮助文件没有提到这个啊。是vb的函数么?
3m
发表于 2011-12-17 17:40:41 | 只看该作者
不懂编程的我们悲催啊。。
4m
 楼主| 发表于 2011-12-17 18:46:49 | 只看该作者
头像很犀利啊。像阿拉伯的少女。。。 3# s.k.
5m
 楼主| 发表于 2011-12-18 12:17:58 | 只看该作者
上来看了一眼,还是没人理啊,是问题太白痴还是表述不清楚啊。求各位大神帮忙啊。
6m
发表于 2011-12-18 13:55:11 | 只看该作者
懂脚本的人不多的
7m
发表于 2011-12-18 23:06:53 | 只看该作者
LZ,你编程学了多久呢?我进入学习,大概要好久才能有个基本了解呢?
8m
 楼主| 发表于 2011-12-18 23:07:08 | 只看该作者
经过的一番努力,基本已经弄懂了哈。。。
6# V.Y
9m
 楼主| 发表于 2011-12-19 17:50:15 | 只看该作者
大三刚开学的时候学了2个星期,后来忙起来了,就不学了。最近又学了有一个多星期了吧,不过期末了又忙了。。。 7# JiangLi.arch
10m
发表于 2011-12-20 18:00:22 | 只看该作者
2# ninesuns 是VB里的函数,参数是三个0-255的数字,返回一个整形数据
11m
发表于 2011-12-20 18:04:35 | 只看该作者
1# ninesuns 因为曲线默认的参数范围也就是楼主说的t值的范围不是从0到1,而是从crvdomain(0)到crvdomain(1),所以要用dblr1param=crvdomain(0)+dblunitparameter*(crvdomain(1)-crvdomain(0))来转化一下
12m
发表于 2011-12-21 22:28:15 | 只看该作者
木有看懂~谁来解释一下·
13m
 楼主| 发表于 2011-12-22 21:55:14 | 只看该作者
我学了大概一个月吧。加起来,刚开始真的是什么都不知道,现在还好,知道门路了。知道脚本在写些什么,就是有些关键的函数有的时候看不懂。
7# JiangLi.arch
14m
 楼主| 发表于 2011-12-22 21:57:21 | 只看该作者
恩恩,这个rhino。curvedomain()返回的只是一个范围,我试了我那条曲线是0 to 2,而换一条是0 to 别的什么数,所以用这个来转化成0 to 1,就好像gh里的reparameterize的功能是一样的。
11# wenchongyun
15m
 楼主| 发表于 2011-12-22 21:57:43 | 只看该作者
整形数据是什么意思
10# wenchongyun
16m
发表于 2011-12-23 00:45:31 | 只看该作者
对RS很崩溃
17m
发表于 2011-12-23 18:46:22 | 只看该作者
RS比起RH有什么优势呢?很想知道啊
18m
发表于 2011-12-29 02:08:37 | 只看该作者
因為你調用了crvdomain = rhino.curveDomain()這個method,所以他的回傳值Array
The domain of the curve if successful.如果成功將會回傳此線段的最大值與最小值
而crvdomain(0)的意思是指你所輸入的線段最小的值。也就可以想像成曲線起點的意思。
dblr1param=crvdomain(0)+dblunitparameter*(crvdomain(1)-crvdomain(0))
後面再加上dblunitparameter*(crvdomain(1)-crvdomain(0))意思是把最大值減去最小值全部的範圍作成百分比後再根據曲線起點來改變點的位子。
19m
发表于 2018-4-12 20:29:35 | 只看该作者
evaluate curve的点怎么反过来选,把线颠倒也不行

小黑屋|手机版|NCF参数化建筑论坛 ( 浙ICP备2020044100号-2 )    辽公网安备21021102000973号

GMT+8, 2024-11-22 22:29 , Processed in 0.066656 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表