如何使用python开发Revit|PyRevit开发第一步:获取Revit文档Document

1.安装PythonShell插件

在这里插入图片描述

PythonShell 2018 插件下载

交流QQ群: 17075104

新建项目后,运行功能Python Shell,
在弹出的窗口中复制或输入以下引用代码模块:

# -*- coding:utf-8 -*-
# @Time      : 2021-01-01
# @Author    : ZedMoster1@gmail.com

from Autodesk.Revit.UI import *
from Autodesk.Revit.DB import *
import Autodesk
import math
import os
import re
import sys

import clr
from System import Array

clr.AddReference('RevitAPI')
clr.AddReference('RevitAPIUI')
clr.AddReference("System")

doc = __revit__.ActiveUIDocument.Document
uidoc = __revit__.ActiveUIDocument
uiapp = __revit__.Application

在上次命令行输入 doc 即可获取当前项目文档 Document
在这里插入图片描述


2.通过Dynamo节点

image

右键在搜索窗口中输入 python script 选择节点,
双击节点后弹出输入脚本窗口,复制或输入一下引用代码模块:

# -*- coding:utf-8 -*-
# @Time      : 2021-01-01
# @Author    : ZedMoster1@gmail.com

import sys
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
clr.AddReference('RevitAPIUI')
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
from Autodesk.Revit.UI import *
clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.Elements)
clr.ImportExtensions(Revit.GeometryConversion)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

# 默认参数
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application
uidoc = uiapp.ActiveUIDocument
doc = DocumentManager.Instance.CurrentDBDocument

# 输出
OUT = doc

点击完成编辑后,运行节点即可查看当前所在项目的Document


至此我们已经学会两种通过python获取Revit文档的方法,
接下来就是了解后续文档数据的过程.

### 使用 Python APIRevit 中实现柱子开洞功能 为了在 Revit 中通过 Python 实现柱子开洞的功能,可以利用 `pyrevit` 或者 `RevitPythonShell (RPS)` 这样的工具来编写脚本。下面是一个简单的例子,展示如何创建一个函数用于在指定位置对选定的柱执行开洞操作。 #### 准备工作 确保已经安装并配置好了支持环境,比如 pyRevit 或 RPS,并熟悉基本的 Revit API 调用方式[^1]。 #### 获取柱对象 首先需要获取到要处理的目标柱实例: ```python from Autodesk.Revit.DB import FilteredElementCollector, BuiltInCategory def get_columns(doc): """检索文档中的所有柱""" collector = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_StructuralColumns) columns = list(collector.ToElements()) return columns ``` #### 定义开洞方法 定义一个名为 `cut_column_at_point` 的函数,在给定的位置切割柱体: ```python from Autodesk.Revit.DB import XYZ, Transaction, ElementId def cut_column_at_point(column, point_location, doc): """ 对于传入的具体柱实例,在特定坐标处实施开孔动作 参数: column: 需要做切口处理的柱实体 point_location: 切割点的空间直角坐标系表示形式(XYZ 类型) doc: 当前项目文件句柄 """ with Transaction(doc, "Cut Column") as t: t.Start() void_form = VoidForm.CreateAtPoint( document=doc, location=point_location, host_element_id=column.Id) # 提交事务变更 t.Commit() return True ``` 注意这里假设存在一个叫做 `VoidForm` 的类能够完成实际物理形态上的修改行为;然而实际上该类可能不存在于标准库内,因此这一步骤取决于具体版本的支持情况以及是否有第三方扩展提供了相应的能力[^2]。 #### 执行流程 最后组合上述两部分逻辑形成完整的自动化过程: ```python if __name__ == '__main__': from rpw.ui.forms import SelectFromList, Alert app = __revit__.Application doc = __revit__.ActiveUIDocument.Document selected_column = SelectFromList('Select a column to modify', {str(c): c for c in get_columns(doc)}) if not selected_column: Alert("No column was chosen.") exit(0) try: cutting_position = XYZ(0, 0, 5) # 假设高度为Z轴方向上距离地面五米的地方进行打孔 success = cut_column_at_point(selected_column, cutting_position, doc) message = f"Operation {'succeeded' if success else 'failed'}!" print(message) except Exception as e: print(f"An error occurred during operation:\n{e}") ``` 这段代码展示了怎样交互式地让用户挑选想要编辑的对象,并尝试在其顶部中心偏移一定量的位置制造开口效果。当然这里的参数设置非常简化,真实应用场景下还需要考虑更多因素如输入验证、异常捕获等[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值