当前位置: 首页 > news >正文

Python+DRVT 从外部调用 Revit:批量创建墙

昨天的示例 Python+DRVT 从外部调用 Revit:创建桁架族-CSDN博客 展示了在外部让 Revit 自动完成一个完整族的创建。今天回到项目中常用的基本元素“墙”,看看如何指挥 Revit 自动批量创建:

from typing import List
import math
# drvt_pybind 支持多会话、多文档,先从简单的单会话、单文档开始
# MyContext是在Python中用户自定义的单会话、单文档的上下文管理类
from packs.core import MyContext, m2feet, feet2m, isNone# 导入驱动 Revit 的核心模块
from drvt_pybind.Autodesk import Revit
from drvt_pybind.Autodesk.Revit import DB# 遍历标高,返回按Elevation从低到高的List[DB.Level]
def getLevels(ctx : MyContext) -> List[DB.Level]:tmp : List[DB.Level] = []levelList = DB.FilteredElementCollector.ctor(ctx.session, ctx.doc).OfClass(ctx.session.typeof(DB.Level)).ToElements()for i in range(levelList.getCount()):l = DB.asLevel(levelList.getItem(i))if isNone(l):continuetmp.append(l)ret = sorted(tmp, key=lambda x:x.getElevation())return ret# 遍历WallType,返回List[DB.WallType]
def getWallTypes(ctx : MyContext) -> List[DB.WallType]:wallTypeList : List[DB.WallType] = []listWt = DB.FilteredElementCollector.ctor(ctx.session, ctx.doc).OfClass(ctx.session.typeof(DB.WallType)).ToElements()for i in range(listWt.getCount()):wt = DB.asWallType(listWt.getItem(i))if isNone(wt):continuewallTypeList.append(wt)return wallTypeList# 示例批量创建墙
def WallCreation(ctx: MyContext) -> None:"""本示例展示如何使用Python+DRVT,在外面自动让Revit批量创建墙"""if ctx.doc is not None:ctx.closeDoc(True)template = "建筑样板.rte"fileName = "批量创建墙示例.rvt"err = ctx.createAndActiveDoc(template, fileName)if err != 0:raise AssertionError(f"创建项目文档失败: 错误码 {err}")session = ctx.sessiondoc = ctx.doc# 取所有标高,缺省是两个levelList = getLevels(ctx)if len(levelList) < 2:raise AssertionError(f"标高过少,本示例用到2个标高")level0 = levelList[0].getId()level1 = levelList[1].getId()ele0 = levelList[0].getElevation()try:# 取所有墙类型wallTypeList = getWallTypes(ctx)# 涉及到修改操作的,需要锁定并用事务包装ctx.lockAndStartTransaction("批量创建墙")for i in range(0,10):# 取一个WallTypewallType = wallTypeList[i % len(wallTypeList)]# 设置WallTypectx.doc.SetDefaultElementTypeId(DB.ElementTypeGroup.WallType, wallType.getId())# 这里使用轴线法# 创建墙的轴线p0 = DB.XYZ.ctor(session, m2feet(i*3), m2feet(-3), ele0)p1 = DB.XYZ.ctor(session, m2feet(i*3), m2feet(3), ele0)line = DB.Line.CreateBound(session, p0, p1)# 创建墙wall = DB.Wall.Create(session, doc, line, level0, False)# 取“顶部约束”参数p = wall.getParameter(DB.BuiltInParameter.WALL_HEIGHT_TYPE)# 更新其值为“标高2”的IDp.Set(level1)# 提交事务并解锁,若没有错误则修改操作将会生效ctx.commitTransactionAndUnlock()except Exception as e:print(f"【异常】{e}")# 回滚事务并解锁ctx.rollbackTransactionAndUnlock()# 下面这段代码,看过“创建新项目”示例的会很熟悉,就是照搬过来的
# 创建新的上下文(可以按需创建多个,意味着能直接管理多个 Revit 会话)
ctx = MyContext("在这里指定会话名称")
# 初始化会话(启动 Revit 进程实例)
ctx.initSession()# 调用WallCreation
WallCreation(ctx)# 保存文档并关闭
ctx.closeDoc(True)# 结束会话(Revit 进程实例将退出)
ctx.dispose()

这又是一个完整的自动化脚本,这么点代码做了什么:

1、创建Revit会话,启动Revit进程(可见、可交互,与手工启动的无任何差异)

2、批量创建墙

3、保存项目文件并关闭

4、结束会话,退出Revit进程

其中“2、批量创建墙”做了以下工作:

        1)创建项目 “批量创建墙示例.rvt” 并作为当前活动文档(可见、可交互)

        2)获取该文档中所有标高(按Elevation排序)

        3)获取该文档中所有WallType元素

        4)创建轴线

        5)按轴线创建墙

        6)更新墙的参数“顶部约束”

依旧是全自动完成。稍做修改,用上自己的数据就实现了自动批量创建。

之前从未上过图或视频,时间仓促,今天的示例两种视图下的结果:

DRVT 整套技术栈,已经提供了自动化与集成Revit的全新方式,为充分挖掘大型软件的价值提供强有力的支撑。


  相关文章

Python+DRVT 从外部调用 Revit:从外部启动 Revit-CSDN博客

Python+DRVT 从外部调用 Revit:打开项目文件-CSDN博客

Python+DRVT 从外部调用 Revit:获取项目信息-CSDN博客

Python+DRVT 从外部调用 Revit:更新项目信息-CSDN博客

Python+DRVT 从外部调用 Revit:第一个完整示例-CSDN博客

Python+DRVT 从外部调用 Revit:创建新项目-CSDN博客

Python+DRVT 从外部调用 Revit:创建族文档-CSDN博客

Python+DRVT 从外部调用 Revit:批量创建轴网-CSDN博客

Python+DRVT 从外部调用 Revit:批量创建标高-CSDN博客

Python+DRVT 从外部调用 Revit:创建风管系统加劲肋-CSDN博客

Python+DRVT 从外部调用 Revit:创建剖面-CSDN博客

Python+DRVT 从外部调用 Revit:创建桁架族-CSDN博客

深度嵌入数字化工作流:DRVT 的思考与实践-CSDN博客

从插件化走向系统集成——Revit-CSDN博客

Revit变身智能组件,BIM未来可期-CSDN博客

#SystemIntegration #Revit #RevitAPI #Python #Automation #DesignAutomation #BIM #Interop #AEC #DigitalTwin #Workflow

http://www.dtcms.com/a/362528.html

相关文章:

  • DVWA靶场通关笔记-反射型XSS(Impossible级别)
  • 4.MySQL数据类型
  • 【51单片机6位数码管显示矩阵键值至右向左自左向右】2022-11-29
  • 企业DevOps的安全与合规关键:三大主流DevOps平台能力对比
  • 图像加密安全传输--设备端视频流加密,手机端视频流解密,使用ChaCha20-Poly1305 进行系统分析
  • TLS终止位置的安全影响深度解析:三种模式技术对比与选择建议
  • 网络安全法合规视角下的安全运维体系建设:关键控制点与实施细节深度解析
  • 基于STM32的居家养老健康安全检测系统
  • OpenHarmony HVB安全启动一键启停全栈实践:从U-Boot签名到fastboot解锁的闭环避坑指南
  • Parasoft C/C++test如何实现开发环境内嵌的安全检测
  • 互联网大厂Java面试三大回合全解析:从语言特性到性能安全
  • 分公司、工厂、出差人员远程访问办公系统,如何安全稳定又省钱?
  • 【数据结构】八大排序之快速排序:分而治之的艺术
  • BeaGo-李开复旗下公司推出的AI搜索助手
  • 史上最全,Web自动化测试面试题整理(附答案)
  • go 语言map是线程不安全的如何处理
  • Go 语言的 panic
  • WIFI协议全解析08:WiFi连接背后的握手过程,你的设备是如何“入网”的
  • USB4与PCIe的技术融合:新一代接口协议的架构革新
  • 2025 全球 GEO 服务商 TOP10 揭晓|硕芽科技引领生成搜索优化新时代
  • Java全栈学习笔记28
  • GitHub宕机自救指南
  • MyBatis Plus 【详解】| 学习日志 | 第 17 天
  • 【ES9.X】GitHub-events 聚合方案
  • 【系统架构设计(12)】系统运行与软件维护
  • 机器学习笔记-第二周
  • ansible判断
  • 【系统架构设计(11)】软件测试全景解析:从方法论到实践策略
  • 163起融资,梅卡曼德融资额夺冠,钉钉、百度智能云10周年,汉桑科技IPO| 2025年8月人工智能投融资观察 · 极新月报
  • 开发组件库【详细教程】含同时支持【完整引入】和【手动导入】,核心配置文件,本地调试,依赖的安装和声明,发布组件库等