pyRevit系列教程1

2017-08-24  本文已影响0人  壹匹白马

有没有人和我一样,想要自己写一些小功能来用(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

接下来我会就以下几点来讲解:

  1. 安装,更新,卸载
  2. 自带工具使用
  3. pyRevit工具的组成
  4. 添加自己的工具

1.安装,更新,卸载

安装:


更新:


卸载

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中的工具图标,即可打开当前工具的路径。

想要添加自己的工具,分为两步:

编写工具

一个工具包的文件夹层级应为下面这样:


文件层级

一个命令或者工具所在文件夹是以以下格式命名:命令名称.命令类型
像下面这样:

工具命名
最常见的类型就是.pushbutton
工具包文件夹的组成

工具包文件夹可包含不同类型的工具文件夹,但以下几个是通用的:

下面是一个_layout文件示例:

PushButton A
PushButton B
PullDown A
---
PullDown B
Stack3 A
>>>
PushButton C
PullDown C

其中---表示创建分割线,你也可以使用超过三个的-
>>>表示在次符号后所有的工均隐藏,即点击面板名称右侧下拉小三角才会显示。当然也可以使用超过三个的>

.pushbutton文件夹的组成

Match命令文件夹组成:


MATH组成
类型 可包含类型
.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中还有一些高级的工具类型:

  1. .smartbutton-它也包含script.py,其中需定义一个固定名称的函数__selfinit__,该函数定义的作用是:在启动的时候,先自动执行此函数,让此按钮进行初始化一些条件(比如根据状态设置图标)__selfinit__函数运行成功必须返回True失败必须返回False,如果返回False或者该函数运行出错,那么pyRevit则不会创建此按钮。
  2. .linkbutton-它可以调用其他插件的功能,需要在script.py定义两个参数:
__assembly__ = '插件名'
__commandclass__ = '该命令的Class名'

比如调用RevitPythonShell的命令:

__assembly__ = 'RevitPythonShell'
__commandclass__ = 'IronPythonConsoleCommand'

编写小工具示例:

下面我们将通过一个简单的小工具来演示如何编写并添加到Revit中。该工具可以复制选择元素的族类型。效果如下图:


  1. 组织好文件夹结构。这里我使用的是.pulldown文件夹结构如下:F:\壹匹BIM工具包\WH.extension\WhiteHorse.tab\管理.panel\族.pulldown,在此文件夹下新建子文件夹复制类型.pushbutton,若想显示图标则需要放入一个icon.png文件,大小建议为32X32
  2. 复制类型.pushbutton内新建一个script.py并放置图标文件,名称为icon.png大小32X32
  3. 编写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-----

上一篇 下一篇

猜你喜欢

热点阅读