请选择 进入手机版 | 继续访问电脑版

[Python] 将RhinoPython代码修改为GHpython代码的简易教学

[复制链接]
84254 Jorin 发表于 2014-2-21 18:12:08 楼主
本帖最后由 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

1.jpg
我们需要的是curve_id,所以删除一个参数,修改剩下一个参数的名称为curve_id,并从外部为curve_id输入一条曲线
修改后的应该是这样:

2.png
第三步,查错,并删除不能在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]
最终效果如图:
4.jpg
为了讲解方法,我们修改中间牺牲了颜色变化的特性,现在大家了解方法以后,可以做一个练习,把颜色也输出出来,做成如下结果:
5.png

评分

参与人数 2技术 +4 收起 理由
Jessesn + 2 赞一个!
深蓝Ansen + 2 赞一个!

查看全部评分

关于大陆地区Rhino原厂培训中心
470942035 发表于 2014-2-23 13:53:58
2
严重不懂,
筑梦NARUTO 发表于 2015-4-18 13:45:48
3
本帖最后由 筑梦NARUTO 于 2015-4-18 14:33 编辑

写了两种方法交个作业。就不发源码了。给别人思考空间
QQ图片20150418132213.jpg
QQ图片20150418132239.jpg
806331126 发表于 2015-11-30 20:33:58
4
新手想请教一下,怎么写才能直接让颜色与Shader相连不发生错误或者怎么写直接生成gh接受的材质,怎么让IronPython.Runtime.List的原始的列表显示出来
4.jpg
3.png
2.jpg
1.jpg
筑梦NARUTO 发表于 2015-12-2 10:39:16
5
806331126 发表于 2015-11-30 20:33
新手想请教一下,怎么写才能直接让颜色与Shader相连不发生错误或者怎么写直接生成gh接受的材质,怎么让Iron ...

已经解决,http://bbs.rhino3d.asia/forum.php?mod=viewthread&tid=26853
您需要登录后才可以回帖 登录 | 注册成为会员

本版积分规则