美文网首页
pyRevit系列教程1

pyRevit系列教程1

作者: 壹匹白马 | 来源:发表于2017-08-24 15:13 被阅读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.安装,更新,卸载

    安装:

    • 自动安装:

      • 下载安装包(地址
      • 双击安装包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中还有一些高级的工具类型:

    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-----

    相关文章

      网友评论

          本文标题:pyRevit系列教程1

          本文链接:https://www.haomeiwen.com/subject/tkredxtx.html