有没有人和我一样,想要自己写一些小功能来用(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有 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下载压缩包(地址)单击右侧中部的绿色按钮
更新:
- 如果安装的时候是自动安装,可再次运行安装文件覆盖安装
- 手动从GitHub安装的话,到
release
文件夹下运行upgrade.bat
- 使用GitKraken下载安装的话,可进入GitKraken软件更新,关于GitKraken如何使用请查看相关文档,在此不表。
- 在pyRevit中点击
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命令文件夹组成:
- 每个命令文件夹中必须包含使用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-----