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系列教程1_第1张图片
pyRevit

pyRevit有 youtube频道,作者录了一系列关于pyRevit的使用教程,包含pyRevit中带的所有工具的使用方法,以及其他一些基础知识,正在持续更新中,我之前已经把目前有的所有视频下载下来并共享了,我会持续关注并下载,有兴趣的同学可以进 壹匹BIM 的群下载: 580176296


如何使用pyRevit

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

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

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更新
    pyRevit系列教程1_第2张图片
    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按钮添加路径。
      pyRevit系列教程1_第3张图片
      文件夹
  • 按指定格式组织文件夹及编写脚本。

编写工具

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


pyRevit系列教程1_第4张图片
文件层级
  • 标签名称.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中还有一些高级的工具类型:

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

比如调用RevitPythonShell的命令:

__assembly__ = 'RevitPythonShell'
__commandclass__ = 'IronPythonConsoleCommand'

编写小工具示例:

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


pyRevit系列教程1_第5张图片
  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-----

你可能感兴趣的:(pyRevit系列教程1)