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