python和revit_pyRevit系列教程1
有沒有人和我一樣,想要自己寫一些小功能來用(zhuang)用(bi),但苦于C#太難學(xué)了,不得不作罷。
話說感受過Python的美好,怎么能忍受C#的大括號!畢竟
人生苦短,我用Python!
好吧,我承認(rèn)是我智商不夠才學(xué)不好C#的~
那么,問題來了,如果想要強(qiáng)行zhuangbi怎么辦?記得以前給大家推薦過一款可以在Revit中使用Python寫代碼的東西叫RevitPythonShell 今天再推薦一款叫pyRevit的插件。姑娘的室內(nèi)BIM公眾號之前介紹過,并且介紹了pyRevit中的一個(gè)小工具的使用:創(chuàng)建填充圖案。點(diǎn)我查看!
什么是pyRevit
pyRevit is an IronPython script library for Revit. However, it is not really written as an example library. It is a working set of tools fully written in IronPython that explores the power of scripting for Revit and also adds some cool functionality.
有人會說,上面一串英文是什么鬼,那是pyRevit作者介紹pyRevit的一段,翻譯過來大致是說:
pyRevit 是為Revit寫的IronPython腳本庫。然而它并不僅僅是作為一個(gè)示例的庫。同時(shí)他還包含一系列完全使用IronPython寫的工具,使用這些工具可以發(fā)掘在Revit中編寫腳本的力量,同時(shí)pyRevit還添加了一些很酷的功能。
點(diǎn)我查看pyRevit博客
使用它你可以編寫自己的小插件并加入到pyRevit中,這樣pyRevit會自動為你的工具添加按鈕還有圖標(biāo)到Revit工具欄中,像下圖這樣,當(dāng)然你得按照pyRevit要求的格式。
pyRevit
pyRevit有youtube頻道,作者錄了一系列關(guān)于pyRevit的使用教程,包含pyRevit中帶的所有工具的使用方法,以及其他一些基礎(chǔ)知識,正在持續(xù)更新中,我之前已經(jīng)把目前有的所有視頻下載下來并共享了,我會持續(xù)關(guān)注并下載,有興趣的同學(xué)可以進(jìn) 壹匹BIM 的群下載:580176296
如何使用pyRevit
接下來我會就以下幾點(diǎn)來講解:
安裝,更新,卸載
自帶工具使用
pyRevit工具的組成
添加自己的工具
1.安裝,更新,卸載
安裝:
自動安裝:
下載安裝包(地址)
雙擊安裝包pyRevitSetup.exe,程序會自動下載所需文件,并自動添加到Revit中,重啟Revit即可看到。
因?yàn)樽詣影惭b是在線安裝,實(shí)際上安裝包只是一個(gè)下載器,由于眾所周知的原因, 下載速度會很慢,只要耐心等待即可
手動安裝:
到github下載壓縮包(地址)單擊右側(cè)中部的綠色按鈕Clone or download然后點(diǎn)擊Download ZIP將壓縮包下載到本地電腦
然后解壓進(jìn)入release文件夾右鍵install_addin.bat文件以管理員身份運(yùn)行
還有一種下載的方式,首先下載GitKraken
安裝完GitKraken后運(yùn)行,選擇File>Clone Repo在彈出窗口單擊右側(cè)Browse按鈕選擇要克隆的文件夾地址(也就是你要下載存放的文件夾),URL填入https://github.com/eirannejad/pyRevit
單擊Clone the repo!
安裝同上面方法
更新:
如果安裝的時(shí)候是自動安裝,可再次運(yùn)行安裝文件覆蓋安裝
手動從GitHub安裝的話,到release文件夾下運(yùn)行upgrade.bat
使用GitKraken下載安裝的話,可進(jìn)入GitKraken軟件更新,關(guān)于GitKraken如何使用請查看相關(guān)文檔,在此不表。
在pyRevit中點(diǎn)擊Update更新
update
卸載
像其他軟件一樣卸載,進(jìn)入控制面板操作
進(jìn)入release文件夾下運(yùn)行uninstall_addin.bat
3.pyRevit工具的組成
一個(gè)pyRevit工具的是由Python模塊和自定義代碼組成
Python模塊分為普通的IronPython模塊和和Revit相關(guān)的模塊,普通的IronPython模塊存放在pylib文件夾內(nèi),Revit相關(guān)模塊存放在pyrevitlib下,比如我之前推薦過的RevirPythonWrapper現(xiàn)在也是pyRevit的內(nèi)置模塊,它也在這個(gè)文件夾下。當(dāng)然你也可以把你想用的模塊添加到這兩個(gè)文件夾下。
自定義代碼是指你自己寫的python腳本,按照一定格式組織起來的一個(gè)文件夾,通過它pyRevit可以自動為你在Revit中生成按鈕,點(diǎn)擊按鈕就會執(zhí)行你寫的代碼。
4.添加自己的工具
每個(gè)pyRevit小工具是一個(gè)固定格式的文件夾,包含.py代碼文件和一個(gè)icon.png圖標(biāo)文件組成。
你可以通過查看pyRevit自帶的工具來學(xué)習(xí)如何寫自己的工具,自帶的工具在pyRevit安裝路徑下的extensions文件夾下,或者你可以通過在Revit中按住shift然后鼠標(biāo)左鍵點(diǎn)擊任意一個(gè)pyRevit中的工具圖標(biāo),即可打開當(dāng)前工具的路徑。
想要添加自己的工具,分為兩步:
建立工具包文件夾,并添加到pyRevit中,盡量放到其他路徑而不是放在pyRevit文件夾中。
切換到pyRevit面板下
單擊最左側(cè)pyRevit在彈出的面板點(diǎn)擊Settings
在Custom user extension folders下單擊Add folder按鈕添加路徑。
文件夾
按指定格式組織文件夾及編寫腳本。
編寫工具
一個(gè)工具包的文件夾層級應(yīng)為下面這樣:
文件層級
標(biāo)簽名稱.tab,此為標(biāo)簽文件夾,標(biāo)簽名稱為Revit中顯示的標(biāo)簽名稱。此文件夾下可包含多個(gè).panel文件夾。如上圖的pyRevit.tab
面板名稱.panel,此為面板文件夾,面板名稱為下方顯示的面板名稱。如上圖的Drawing Set.panel
工具包名稱.工具包類型,此為最后一個(gè)層級目錄,pyRevit會將此轉(zhuǎn)換為包含一組工具的按鈕顯示,工具包類型有pulldown,.splitbutton,.splitpushbutton,.splitpushbutton等。如上圖的Print.pulldown
工具名稱.工具類型,此為工具的核心,即此工具的核心代碼所在的文件夾,如上圖的Print Linked Sheets.pushbutton
一個(gè)命令或者工具所在文件夾是以以下格式命名:命令名稱.命令類型
像下面這樣:
工具命名
最常見的類型就是.pushbutton
工具包文件夾的組成
工具包文件夾可包含不同類型的工具文件夾,但以下幾個(gè)是通用的:
icon.png,圖標(biāo)文件,顯示在Revit中的圖標(biāo)。
lib,改包內(nèi)所有工具可使用的Python模塊文件夾,我們之前說過模塊可以放到pyRevit中的一些文件夾,這里也可以放到此文件夾中,只需要新建一個(gè)lib子文件夾即可。
_layout,這是個(gè)文本文件,在里面可定義該組工具在Revit中的顯示順序。
下面是一個(gè)_layout文件示例:
PushButton A
PushButton B
PullDown A
---
PullDown B
Stack3 A
>>>
PushButton C
PullDown C
其中---表示創(chuàng)建分割線,你也可以使用超過三個(gè)的-。
>>>表示在次符號后所有的工均隱藏,即點(diǎn)擊面板名稱右側(cè)下拉小三角才會顯示。當(dāng)然也可以使用超過三個(gè)的>
.pushbutton文件夾的組成
Match命令文件夾組成:
MATH組成
每個(gè)命令文件夾中必須包含使用Python或者C#編寫的腳本或叫代碼文件。
script.py或者script.cs,這是用Python編寫或者C#的腳本,也就是你的工具核心代碼,當(dāng)單擊Revit中圖標(biāo)后將會執(zhí)行此文件中的代碼。
icon.png,此為圖標(biāo)文件,顯示在Revit中,無此文件則不顯示圖標(biāo)。
config.py,此為設(shè)置文件,當(dāng)按住shift點(diǎn)擊按鈕后會運(yùn)行此文件,如果有此文件,則pyRevit會在相應(yīng)的按鈕邊顯示大黑點(diǎn),具體可查看pyRevit中帶的Match工具。
lib,此為Python模塊所在的文件夾,只有當(dāng)前工具可訪問。
類型
可包含類型
.tab
.panel
.panel
除了.panel和.tab
.pulldown
僅工具類型,如.pushbutton
.splitbutton
僅工具類型,如.pushbutton
.splitpushbutton
僅工具類型,如.pushbutton
.stack2
工具、.pulldown,.splitbutton,.splitpushbutton
.stack3
同上
下面是pyRevit的所有文件夾類型:
類型
可包含類型
.tab
.panel
.panel
除了.panel和.tab
.pulldown
僅工具類型,如.pushbutton
.splitbutton
僅工具類型,如.pushbutton
.splitpushbutton
僅工具類型,如.pushbutton
.stack2
工具、.pulldown,.splitbutton,.splitpushbutton
.stack3
同上
pyRevit中還有一些高級的工具類型:
.smartbutton-它也包含script.py,其中需定義一個(gè)固定名稱的函數(shù)__selfinit__,該函數(shù)定義的作用是:在啟動的時(shí)候,先自動執(zhí)行此函數(shù),讓此按鈕進(jìn)行初始化一些條件(比如根據(jù)狀態(tài)設(shè)置圖標(biāo))__selfinit__函數(shù)運(yùn)行成功必須返回True失敗必須返回False,如果返回False或者該函數(shù)運(yùn)行出錯,那么pyRevit則不會創(chuàng)建此按鈕。
.linkbutton-它可以調(diào)用其他插件的功能,需要在script.py定義兩個(gè)參數(shù):
__assembly__ = '插件名'
__commandclass__ = '該命令的Class名'
比如調(diào)用RevitPythonShell的命令:
__assembly__ = 'RevitPythonShell'
__commandclass__ = 'IronPythonConsoleCommand'
編寫小工具示例:
下面我們將通過一個(gè)簡單的小工具來演示如何編寫并添加到Revit中。該工具可以復(fù)制選擇元素的族類型。效果如下圖:
組織好文件夾結(jié)構(gòu)。這里我使用的是.pulldown文件夾結(jié)構(gòu)如下:F:\壹匹BIM工具包\WH.extension\WhiteHorse.tab\管理.panel\族.pulldown,在此文件夾下新建子文件夾復(fù)制類型.pushbutton,若想顯示圖標(biāo)則需要放入一個(gè)icon.png文件,大小建議為32X32
復(fù)制類型.pushbutton內(nèi)新建一個(gè)script.py并放置圖標(biāo)文件,名稱為icon.png大小32X32
編寫script.py內(nèi)的代碼,本例的代碼如下:
# coding:utf-8
# __doc__的作用是顯示工具說明
__doc__ = '復(fù)制選定元素的類型'
# __author__是作者
__author__ = '白馬'
# 從RevitPythonWrapper導(dǎo)入需要的模塊
from rpw import db, revit, ui, DB
# 定義一個(gè)函數(shù)
def copy(element):
pre_name = element.Name
type_id = element.GetTypeId()
name = ui.forms.TextInput("壹匹BIM", pre_name+'-副本', "請輸入名稱:")
with db.Transaction('復(fù)制類型') as t:
DB.ElementType.Duplicate(revit.doc.GetElement(type_id),name)
# 如果在Revit中預(yù)先選擇了元素則獲取選擇的元素
element = ui.Selection().elements
# 判斷是否選擇了元素
if element:
# 如果選擇的元素為一個(gè),則執(zhí)行復(fù)制操作,否則警告
if len(element) == 1:
copy(element[0])
else:
ui.forms.Alert("只可選擇一個(gè)元素","警告")
else:# 如果沒選擇元素則讓用戶選擇
picker = ui.Pick()
try:
ui.forms.Alert("接下來請選擇元素","提示")
element = picker.pick_element("選擇要復(fù)制類型的元素").get_element()
copy(element)
except:# 如果用戶未選擇元素則彈窗警告
ui.forms.Alert("未選擇元素","警告")
還差最后一步,到pyRevit中點(diǎn)擊左側(cè)的Reload按鈕,然后就會在Revit中看到你的工具了,是不是很簡單。
-----END-----
總結(jié)
以上是生活随笔為你收集整理的python和revit_pyRevit系列教程1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用dft的定义计算dft的matlab
- 下一篇: [4G+5G专题-145]: 一体化小基