微信公众号: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

安装完成后,打开VSCode,新建文件,保存为 youFileName.py 这样的文件(.py文件),然后导入各个模块

1import Rhino

2import rhinoscriptsyntax as rs # Not Succeed

逐个调用,发现部分支持,其他几个主要使用的没法使用,在两台电脑多次测试未果。突然想起之前使用code-listener(也是一种文章核心问题的解决方式,个人不喜欢,大家可自行测试选择)时配置过路径,方式应该类似,经过不断测试,有了以下结果:

在GhPython中输入:

1import sys

2print sys.path

结果如下:

结果和自己的配置有关,和图中不一致很正常,关键的是紫色框中的那条'C:\\Users\\Dell\\AppData\\Roaming\\McNeel\\Rhinoceros\\6.0\\Plug-ins\\IronPython (814d908a-e25c-493d-97e9-ee3861957f49)\\settings\\lib'

选择复制所有,VSCode中新建文件并粘贴,将和紫色框中类似那条单独复制

在VSCode界面 Ctrl+, 打开设置界面,搜索栏输入extra paths

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

注意要放在双引号中,路径层级间通过双反斜杠\\分隔开,然后保存,关闭并重启VSCode然后新建一个.py文件,即可步入编码高速路,效果如下:

使用方式

一般有两种使用方式:GH中调用三个电池:Path-Read File(Total File)-GHPython(右键-show "code input parameter),通过gh中三个组件的组合完成,在外部编辑实时传输,GH中编辑需要先断开组件连接,会破坏连接传输关系。对于用多个ghpython电池的情况,需要在vscode建一个工程文件夹,同时管理编辑多个py文件,每个py文件都对应一个path-readfile-ghpython的组合。

以下是上面示例中的Grasshopper文件,代码见文末:

将需求代码编写为模块,放在ironpython查询路径上C:\\Users\\Dell\\AppData\\Roaming\\McNeel\\Rhinoceros\\6.0\\scripts,导入模块,配置要交互的输入端即可。对于代码修改的实时查看,模块一般只在第一次调入时运行,实时编写调试可通过reload解决。

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 min\max:最大最小半径

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)

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

微信公众号

个人微信微信公众号:XrayStudio

关注可了解更多的分享内容, 问题或建议,请公众号留言

python开发grasshopper插件_Rhino_Grasshopper_Python 开发的正确姿势相关推荐

  1. JEECG 引领J2EE新开发模式插件式开发 - 公开课2013-12-12

    JEECG 插件式开发公开课 公开课主题:插件式开发 课程时间   :2013-12-12  20:00-22:00 演讲人 :       张代浩(scott-JEECG作者) 公开课内容: 讲解由 ...

  2. python开发grasshopper插件_在Rhino/Grasshopper中使用Python

    一些基本的信息可以在官方网站(http://wiki.mcneel.com/developer/python)找到. 让人遗憾的是,目前还没有方便有效的方法可以在Rhino/Grasshopper中使 ...

  3. python开发grasshopper插件_【SEG出品】Grasshopper插件讲解.doc

    标准实用 文案大全 TOC \o "1-1" \h \u HYPERLINK \l _Toc26671 [SEG出品]GH插件界面讲解之File PAGEREF _Toc26671 ...

  4. 利用Python构建时间序列模型解决实际问题的正确姿势

    要本着应用到实际工作中目的去学时间序列分析,才能深入浅出的学会,不要纠结于理论,只听我的,我有信心说明白. 本章内容 趋势分析 序列分解 序列预测 序列分解 统计学基础铺垫 划分 时间序列按照季节性划 ...

  5. Java bho插件_VC++开发BHO插件——定制你的浏览器  作者 陆其明

    关键字 BHO Browser COM ATL 网址过滤 原作者姓名 陆其明 文章原始出处 http://hqtech.nease.net 读者评分 18 评分次数 4 正文 在Windows操作系统 ...

  6. 学习 Java 的正确姿势

    2019独角兽企业重金招聘Python工程师标准>>> 关于学习 Java 的正确姿势,以下几点是网上看到的,觉得和我的想法差不多,于是分享一下.可能和时下有些人的想法大相径庭,但是 ...

  7. 【ArcGIS遇上Python】使用add-in向导开发ArcGIS插件(1):add-in工具介绍及安装

    文章目录 addin介绍 addin开发方式 Python Add-In开发 addin下载 addin安装 基于ArcObject/ArcGIS Engine的Add-In开发 addin介绍 Ar ...

  8. pythonarcgis插件_【直播】基于Python开发ArcGIS插件:Python Add-in丨城市数据派

    原标题:[直播]基于Python开发ArcGIS插件:Python Add-in丨城市数据派 Add-in是什么? Add-in(加载项)是一种自定义项(例如工具栏上的工具集合),Add-in可以插入 ...

  9. Python为什么要使用包管理、插件化开发?

    一.包管理 1.为什么使用包管理 目的是为了便于共享.为了更多项目调用使用,或者共享给别人,就需要打包,目的是为了复用. Pypi(Python Package Index)公共的模块存储中心.htt ...

  10. python调用按键精灵插件_开发中IDE的选择?如何在VsCode上配置CC++,Java,Python环境...

    前言 工欲善其事必先利其器,这也是老生常谈的事情了.在做日常开发中,让我感受到一个顺手的开发工具的重要性.截至目前对于不同语言自己也使用过很多开发工具,有一些简单的编辑器例如:notepad++.Ed ...

最新文章

  1. [转]面向GPU的多LOD因子的大规模场景可视化策略
  2. 汇编语言--微机CPU的指令系统(五)(字符串操作指令)
  3. Eclipse Git 克隆项目的时候出现Internal error; consult Eclipse error log
  4. oracle dbms_profiler,Oracle数据库中使用DBMS_PROFILER进行调优
  5. highcharts动态获取数据生成图表问题
  6. vm15 安装 mac虚拟机的过程 转载的
  7. Taro+react开发(57) 图片引入
  8. python绘制饼状图图例_使用matplotlib的所有饼图的通用图例
  9. vue element container布局
  10. yum安装软件提示Another app is currently holding the yum lock
  11. html文件变成巨大,巨大的JavaScript HTML5 blob(从大ArrayBuffers)在客户端构建一个巨大的文件...
  12. laravel 判断字符串包含_laravel 字符串函数
  13. python day1 5:23
  14. 分享一些软件工具~截图工具
  15. 计算机网络基础中职期中,中职计算机网络基础期中试卷
  16. PS:教会你改【背景图颜色】
  17. 为什么提倡面向接口编程
  18. uchome 2.0 存在持久XSS漏洞
  19. 【算法】03 SCE-UA算法C++实现
  20. 传奇攻城期间禁止玩家下地图打怪的脚本写法

热门文章

  1. SQL岗位30个面试题,SQL面试问题及答案
  2. linux (centos 8.1)生产环境基于9台物理机 安装 opentstack ussuri集群以及集成ceph (已转gitee)
  3. unity使用BMFont制作位图字体
  4. php ip地址管理系统,phpIPAM – 免费开源的IP地址管理工具,重量级
  5. 下docfetcher先下Java,DocFetcher ── 以 JAVA 编写的开源桌面本地文件全文搜索工具...
  6. [TLSR8266] 1、搭建tlsr8266编译框架在win服务器中
  7. IDEA格式化SQL代码
  8. GB28181协议——摄像机语音对讲
  9. matlab导出prn文件怎么打开,prn文件介绍及打印方法
  10. 金橙子激光打标机的二次开发(C#)