python开发grasshopper插件_Rhino_Grasshopper_Python 开发的正确姿势
微信公眾號: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 开发的正确姿势的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mybatis学习(52):扩展结果的展
- 下一篇: error while loading