本帖最后由 Jorin 于 2014-2-22 00:16 编辑
以该同学的的代码为例
http://bbs.rhino3d.asia/thread-23768-1-1.html
第一步,把RhinoPython的交互函数去掉
此例中直接把第20行(让用户选取曲线的语句)删除。修改完以后的main函数如下:
[mw_shl_code=python,true]def main():
global t
t = 0
while t <= 1:
dividecurve(curve_id,t)
t += 0.002[/mw_shl_code]
那么curve_id这个参数从哪里来呢?
第二步,修改GHpython元件的输入参数
默认情况下,GHpython元件的两个输入参数是x和y,输出参数是a
我们需要的是curve_id,所以删除一个参数,修改剩下一个参数的名称为curve_id,并从外部为curve_id输入一条曲线
修改后的应该是这样:
第三步,查错,并删除不能在GH中使用的函数
此例中删除第17行line = rs.ObjectColor(line,getcolor(parameter))为直线设置颜色的函数。
GH用自身的颜色显示方式覆盖了Rhino场景中的颜色显示方式,这个函数不能直接使用,之后可以通过GH显示颜色的原件去做。为了方便讲解修改代码的要点,我们直接删除此行和getcolor函数。
第四步,添加输出参数
不论GHpython中添加了多少物件,但只要不在原件的输出端做输出,都不会显示出来。
不同的代码,输出参数的设置方法不同,但只要记住上面这点,就很好设置了。
此例代码中产生了很多直线,我们要输出这些直线,就需要添加一个列表,来记录这些直线。
我们在main()函数中添加一个列表line,while循环每循环一次,line列表中就增加一条直线。
但是dividecurve函数并没有返回值,所以还需要把dividecurve函数中的line返回。
但此时main函数中的line列表同样是局部变量,不能直接用于输出,所以我们返回main函数中的line列表。
在执行main函数后,输出main函数的返回值,所以我们让输出参数a=main()
至此,整个代码修改过程完毕:[mw_shl_code=python,true]import rhinoscriptsyntax as rs
def dividecurve(curve_id,parameter):
domain = rs.CurveDomain(curve_id)
t_curve = domain[0] + (domain[1] - domain[0])*parameter
point = rs.EvaluateCurve(curve_id,t_curve)
if point:
line = rs.AddLine(point,[0,0,0])
return line
def main():
line=[]
global t
t = 0
while t <= 1:
line.append(dividecurve(curve_id,t))
t += 0.002
return line
a=main()[/mw_shl_code]
最终效果如图:
为了讲解方法,我们修改中间牺牲了颜色变化的特性,现在大家了解方法以后,可以做一个练习,把颜色也输出出来,做成如下结果:
|