最近因為工作需要,入坑Dynamo。

與建築師背景的Dynamo使用者不同,我的關注點更多在二次開發方面,而不是如何用它來搞一些奇異的造型。

Dynamo相當於對RevitAPI又進行了一次封裝,同直接用.net做二次開發相比,最大的好處是不用(也不能)在人機界面上耗費太多的精力,連一連各種節點就好,可以把注意力更多地放到邏輯關係處理上。

當然,如果碰到某些額外的要求,比如掛接某種資料庫、壓縮解壓等等,靠Dynamo現成的節點就不行了。在.net裏,我們可以通過引用第三方甚至是自己封裝的動態鏈接庫來解決,非常方便。那麼在Dynamo裏呢?

最近手頭有幾個項目就遇到這個問題。稍稍研究了一下,就發現Dynamo引用第三方動態鏈接庫完全沒有問題。

大家都知道Dynamo裏有個Python Script節點,可以用Python語句編程。其實這個節點不是真正的Python,而是IronPython之類的東西。也就是說,只是個Python語法的翻譯器,底層還是.net。至於為什麼不直接用C#,我估計是因為在國外非計算機專業背景的人羣中Python的普及率最高的緣故吧,GH用的也是Python。

弄清楚這點就好辦了。方法大致有以下三種。

第一種,把要引用的dll拷貝到Dynamo目錄裏,直接在Python Script裏AddReference之後再import。這種方法以前有不少人提到過,最簡單,但也最low。往Dynamo目錄裏胡亂塞一些dll,最後只會把你的工作搞到一團糟。

比較好的是把這些dll分門別類地放到特定的目錄下再引用。比如我自己封裝一個叫myMEP的dll,面裏有個模塊叫myMEP.basic,模塊裏有個方法叫superfab,我可以把把它放到D:DynamoDevself目錄下,那麼接下來可以用到下面兩種方法。

第二種,添加路徑。在Python Script裏這麼寫:

import clr(如果前面寫過了就不用重複)

import sys

sys.path.append(r』 D:DynamoDevself』)

clr. AddReferenceToFile(「myMEP.dll」)(注意是AddReferenceToFile不是AddReference)

from myMEP.basic import *

superfab()

第三種,指定程序集。在Python Script裏這麼寫:

import clr(如果前面寫過了就不用重複)

import System(這個是.net的模塊注意首字母大寫)

mymep = System.Reflection.Assembly.LoadFrom(r』 D:DynamoDevself myMEP.dll』)

clr. AddReference(mymep)

from myMEP.basic import *

superfab()

有空再研究一下在Dynamo裏引用Python第三方模塊。


推薦閱讀:
相關文章