grasshopper for rhino 6下载_Rhino_Grasshopper_Python 开发的正确姿势

8019a6c855610facaf53e345e1374449.png
微信公众号: XrayStudio
关注可了解更多的分享内容, 问题或建议,请公众号留言

版权申明

本文首发自微信公共账号:XrayStudio;

无需授权即可转载,可保留版权声明;

转载时请务必注明作者。


什么是正确方式?

初次接触Grasshopper 和 GhPython(Grasshopper中的python电池) 都给我难以名状的惊喜,随着使用的深入和了解的更多,就开始发现很多局限和不足。比如,在编辑器编写程序时括号得每个敲出来,无法自动补全编写不便,查看代码得打开Rhino_GH使用麻烦,函数不能跨电池调用复用性差等。

我的配置中使用VSCode(一款开源免费的轻量级代码编辑器)外部编辑器编写python代码,使用pythonstubs实现GHPytho函数查找并自动补全,这样就可以解决之前提到的和未提到的几乎所有编程问题。

简单概括在VSCode中编写GhPython的优点:

  • 可读性强
  • 易于管理
  • 方便查看
  • 复用性强

姿态优美的方式便是正解。

环境配置

  • Windows10
  • Rhino6
  • VSCode
  • Python3
  • pythonstubs
    以上为我的配置,win7以上系统+Rhino5以上版本预计也可以;
    Mac系统下没测试,应该类似。

具体步骤:

  • Rhino安装不详述,希望支持正版;
  • VSCode安装:浏览器搜索 ---> 官网下载最新版 ---> 一路下一步即可;
  • pythonstubs安装:
  • WinKey (键盘左下四个方块) + r ,输入cmd 后回车,打开终端;
  • 输入安装的命令回车安装,一般只输入第一条,第二条自动完成,两个都输入也没问题.
    1pip install Rhino-stubs
    2pip install Grasshopper-stubs
  • 安装完成后会显示成功安装的提示,由于我已经安装,显示already satisfied

c4e7244be58beb72a9e676cfc37efcb3.png
  • 安装完成后,打开VSCode,新建文件,保存为 youFileName.py 这样的文件(.py文件),然后导入各个模块
    1import Rhino
    2import rhinoscriptsyntax as rs # Not Succeed
    逐个调用,发现部分支持,其他几个主要使用的没法使用,在两台电脑多次测试未果。突然想起之前使用code-listener(也是一种文章核心问题的解决方式,个人不喜欢,大家可自行测试选择)时配置过路径,方式应该类似,经过不断测试,有了以下结果:
    在GhPython中输入:
    1import sys
    2print sys.path
    结果如下:

8b4f577fe9bc84bc3f07afec0168dec2.png
  • 结果和自己的配置有关,和图中不一致很正常,关键的是紫色框中的那条'C:UsersDellAppDataRoamingMcNeelRhinoceros6.0Plug-insIronPython (814d908a-e25c-493d-97e9-ee3861957f49)settingslib'
  • 选择复制所有,VSCode中新建文件并粘贴,将和紫色框中类似那条单独复制
  • 在VSCode界面 Ctrl+, 打开设置界面,搜索栏输入extra paths

5a1a940e13bdb638a551261f25f5580e.png


点击下方的 Edit in settings.json, 把之前复制的那句粘贴在大括号中:

bc258dc25f6834aed43055ba539ba6c5.png


注意要放在双引号中,路径层级间通过双反斜杠分隔开,然后保存,关闭并重启VSCode

  • 然后新建一个.py文件,即可步入编码高速路,效果如下:

e1f3d142a6b7e0800dfad1465bec8e83.png

使用方式

一般有两种使用方式:

  • GH中调用三个电池:Path-Read File(Total File)-GHPython(右键-show "code input parameter),通过gh中三个组件的组合完成,在外部编辑实时传输,GH中编辑需要先断开组件连接,会破坏连接传输关系。对于用多个ghpython电池的情况,需要在vscode建一个工程文件夹,同时管理编辑多个py文件,每个py文件都对应一个path-readfile-ghpython的组合。
    以下是上面示例中的Grasshopper文件,代码见文末:

05456ff4fa622030b050b79341911eef.png
  • 将需求代码编写为模块,放在ironpython查询路径上C:UsersDellAppDataRoamingMcNeelRhinoceros6.0scripts,导入模块,配置要交互的输入端即可。对于代码修改的实时查看,模块一般只在第一次调入时运行,实时编写调试可通过reload解决。</p>
    1import testmodule_name
    2
    3# 重载模块
    4reload(testmodule_name)
    5
    6# 调用模块函数
    7a = testmodule_name.fun(args)

GhPython是一个针对GH的IronPython接口,IronPython是基于.NET框架的python编程语言的开源实现,匹配的python版本是python2.7,电脑安装python3或python2都可以,因为运行的还是在Ironpython中,但编写的时候得遵循python2的编码规则。

python2.x版本的py文件一般默认的是ASCII码,如果文件里有中文,运行时会出现乱码,注释是中文也不行。因此,需要把文件编码类型改为utf-8的类型,输入# -*- coding:utf-8 -*-之后会把文件编码强制转换为utf-8, RhinoPython有这个问题,GhPython貌似默认是utf-8支持,GhPython中可不写。

GH中的ghpython电池在之前的rhino版本中没有,需要从food4rhino单独下载安装,后来GH将其收编进来成为自身组件,如同Rhino把GH收编一样。美中不足的是在外部编辑器中无法调用ghpythonlib(Grasshopper中的电池模块),只能在Grasshopper的界面环境中才可以使用,由于底层架构的不同,外部调用的实现有些难度,在国外论坛看到相关讨论,希望尽快实现。

关于GhPython使用的其他技巧见后续分享。

示例代码:

 1# -*- coding:UTF-8 -*-
 2
 3import rhinoscriptsyntax as rs
 4import random
 5
 6
 7def mySpheres(min, max, width=60, nums=20):
 8    '''
 9    定义一个生成随机球体的函数
10    minmax:最大最小半径
11    width: 球体范围
12    nums: 球体数量
13    '''
14    random.seed(seed)
15    xCoord = [random.randint(0, width) for _ in range(nums)]
16    yCoord = [random.randint(0, width) for _ in range(nums)]
17    zCoord = [random.randint(0, width) for _ in range(nums)]
18    radius = [random.uniform(min, max) for _ in range(nums)]
19
20    spheres = []
21
22    for i in range(nums):
23        pt = rs.AddPoint(xCoord[i], yCoord[i], zCoord[i])
24        sphere = rs.AddSphere(pt, radius[i])
25        spheres.append(sphere)
26
27    return spheres
28
29spheres = mySpheres(min, max)

感谢关注,与你一起进步。

8cafb8f9e9cffd1cc46108dcc5681d66.png

微信公众号

7e052c0be74192a6a13f8be2717f1abb.png

个人微信

微信公众号: XrayStudio
关注可了解更多的分享内容, 问题或建议,请公众号留言
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值