1、第 15 卷 第 3 期2023 年 6 月Vol.15 No.3Jun.2023引言随着经济与科技的发展,世界各个行业正在迅猛发展,自动化与工业化水平得到了显著提升,建筑工程行业也开始从传统构建时代,向装配式、工业化和自动化时代过渡,建筑产业会随着社会节奏加快而不断优化项目整个生命周期,节约设备与人力成本,提高工作效率成为了业内人员努力的方向1。与此同时,一类把参数信息与建筑结合在一起的理念便孕育而生:建筑信息模型(Building Information Modeling,BIM)。BIM 特征在于利用数字化技术,使建筑项目的设计、施工、运营、后期维护以及拆除的信息集成,贯穿了项目始终,受
2、到行业内广泛认可2-4。其中,Revit 作为实现 BIM 技术理念的集成软件,拥有“所见即所得”的特点,且软件本身就为研究者提供了后台 API 命令,为参数化生成模型等功能的开发打下了良好的基础5。研究者基于 Revit 软件,针对钢结构或钢筋混凝土建筑、桥体以及多面体等结构类型进行不同方式的参数化研究。其中文献 5 初步提供了点-线-面的参数化建模路线;文献 6 优化了表达模型的数据结构,设计出查重元素的算法,减少事务变更次数,提高了效率;文献 7 则提供了创建族库的新思路。木结构作为我国传统建筑结构类型,在环境优美的度假村庄以及国家重点名胜古迹等地方都占据着结构种类中的领导地位8。随着新
3、时代人们越来越倡导绿色环保、温暖舒适等居住要求,木结构深受建筑设计师的青睐。在木屋结构方面,文献 9 初步利用 API 接口设计了木屋模型分析系统,是以机械加工的角度对木结构孔槽加工相关数据的准确性进行了优化,方便用户提取木屋模型数据。文献 10-11 提供了利用 RevitAPI 与Dynamo 插件结合来完成建模的方法,并高效解决了墙面切割处理等问题。综上可以看出关于木屋表面与模型数据处理等细节方面已有许多建树,但较少提及木屋结构的参数化自动建模部分。在木屋结构的建模过程中,繁杂的开孔、凹槽构造以及如何对应材质信息是其独有的特点,也是研究者们进行探究的重点。在 Revit 中手动创建属于孔
4、槽的空心族,再创建族实例生成对应的凹槽,这增加了用户的手动操作时间,效率较低,此过程并没有实现自动化建模。本文将利用 RevitAPI 命令与 C#编程技术进行交互5,6,以三角形木屋顶为例,精确到螺栓、圆钉等细基于 Revit 的木屋顶参数化设计与开发王子茹 于超王子茹 于超(大连理工大学 建设工程学部,大连 116024)【摘 要】【摘 要】在利用 BIM 技术进行设计时,木结构与其他类型建筑相比,具有大量的孔槽与衔接部位需要作精细化处理。为实现木结构建筑设计时的参数化建模工作,解决大量孔洞与凹槽建模、材质信息设置、操作流程繁杂等系列难题,本文基于 Revit 提供的 API 程序命令与外
5、部 C#编程技术进行交互,并设计程序代码来接收或运用数据,避开了手动绘制模型、依赖第三方插件进行模型处理等低效率方法,为木结构设计工作提供了凹槽与孔洞等复杂构造的自动建模、参数变量的接收与运用、材质自动匹配、模拟分布建模可视化过程等自动化思路,逐步实现了木屋顶构造部分的参数化建模工作。同时,本文依据规范设计了相关算法,设计了部分程序参数的取值,通过工程实例证明了程序的可执行性。【中图分类号】【中图分类号】TU17 【文献标识码】【文献标识码】A 【文章编号】【文章编号】1674-7461(2023)03-0046-07【DOI】【DOI】10.16670/11-5823/tu.2023.03.
6、08【基金项目】国家自然科学基金项目(编号:ZX20170267)【第一作者】王子茹(1955-),女,教授,博士,博士生导师,主要研究方向:工程图学、结构工程及水文水资源。【通信作者】于超(1995-),男,硕士研究生,主要研究方向:土木工程 CAD 可视化分析。47基于 Revit 的木屋顶参数化设计与开发小部件,根据操作者需要的参数,完成孔槽构造的自动生成工作,自动匹配模型材质信息。通过设计编写后台代码生成 UI 窗口程序插件,令生成的模型分步演示,最终在软件中详细呈现三角形方木屋顶模型,真正实现参数化木屋顶自动建模功能。1 开发流程设计针对 Revit 的参数化设计方法可以概括为三种:
7、研究人员可以利用 Revit 自带的内置开发模块,通过Module_Startup,Module_Shutdown 方法,进行各种软件建模操作的编译,运行宏脚本执行其命令。第二种便是用户通过第三方的 Grasshopper 工具与 Dynamo-Revit 功能相链接,对操作命令进行可视化编译。最后一种方法是基于 Visual Studio 平台,利用编程语言进行更细致的参数化程序开发。1.1 开发平台与框架本文研究是以 Visual Studio Community 2019 作为开发平台,通过选用.NET Framework4.6作为目标框架,以自动生成绑定重定向替代程序集统一,进行模型参
8、数化设计程序编译工作。1.2 RevitAPI 与开发语言Revit 建模软件面向用户提供了丰富的 API 命令,开发者可以通过 API 中集成的控制命令,直接创建、修改或删除模型元素,实现预期的功能12。本文基于 RevitAPI2018 版本以及 C#语言进行开发,过程中主要以元素为单位进行展开。图 1 列出了RevitAPI 中族与族类别、族实例的基本继承关系。元素 族 元素类别实例 族类型族实例图 1 元素继承关系1.3 开发工具(1)Revit Lookup TablesRevit Lookup Tables 方便用户直接查看选定元素的各项属性,包括 ID、原点、法向向量、族、族类别
9、等隐藏信息。(2)Revit 2018 SDKSDK 文档中包含了每一部分 API 代码,针对不同编程语言的程序案例与说明,方便开发人员进一步理解并合理使用 API。本文运用 Revit 2018.2 SDK 版本进行开发。1.4 功能代码编写通过设计 UI 互动窗体使程序获取木屋模型自定义参数,针对一般形状模型以其关键点确定各个连接线段,并利用元素集合组成模型轮廓。根据特定的空间向量方向对模型构件进行拉伸生成工作。对于特殊形态的组成部分,便利用代码实现旋转、放样等手段来加以合成。特殊凹槽、孔槽等部位利用空心与实体模型的剪切关系进行创造。材质纹理等模型信息通过收集元素、筛选过滤、赋予属性的方法
10、予以实现。1.5 包装程序插件本文利用程序生成的 addin 文件与 Revit 外部应用接口相配合来进行插件功能的实现。2 木屋顶 Revit 参数化建模木屋顶由屋面、木屋架、椽条与必要的水平横向支撑组成,其中椽条与水平横向支撑的构造相对简单,而木屋架的结构构造复杂多样,存在各种挖孔、锚固、连接和加固措施,下面将以三角形木屋架的参数化建模为主,详细阐述实现自动化建模过程。2.1 尺寸数据控制对木屋顶实现参数化自动建模,首先需要确定各项关键性数据。本文依据木结构设计手册、木结构设计标准:GB50005-2017的要求设计相关程序代码,对木结构屋顶尺寸与构造进行了有效计算与控制,其中包括屋面长度
11、、屋架榀数、屋架高度等重要信息13,14。在宏观结构尺寸设计方面,控制三角形木屋架跨度不超过 18m、限制高跨比 1/4、以及桁架间距不宜大于 6m 等规范要求。从构件连接部位设计中,两两螺栓的最小间距根据木材的纹理方向进行设置,不可小于规定的数额,以防止其产生应力集中现象。假设螺栓直径为 d,顺纹对齐排列与错行排列的最小间距分别为7d 与 10d,端距 7d。横纹时分别为 3.5d 与 2.5d,端距3d。通过在 Visual Studio 中设计 Winform 窗体应用,并在程序中创建窗体对象,呈现窗体,使用户可以在之后的插件中直接输入这些参数,初始输入的参数属于 string 类型,利
12、用 Convert.ToDouble 方法使程序接收用户输入,关闭窗口,如图 2 所示。48图 2 设计木屋参数 UI 窗体界面初始时,用户输入的参数与最终生成模型的尺寸存在偏差,本文经过测试,为了使参数与模型尺寸拥有整数倍的比例,在程序中将每一项数值换算一致,并考虑到模型生成后的比例太小,不足以直接观察模型细节,本文经过测试,将生成木屋顶的模型整体横纵方向比例增加到 2 倍。需要注意的是,窗体应用设计中拥有填写功能的textBox 控件,其 Modifiers 属性需要设为 Public,否则程序将接受不到用户输入的参数。2.2 基本单元建模木屋顶的结构构造相对复杂,细分为螺栓、暗销、长圆钉
13、、棱条、附木、枕木、木夹板、垫板、垫块、上弦、下弦与屋面等部分,如图 3 所示。图 3 木屋顶组成构件为了优化模型生成后呈现的效果,对以上基本单元部分进行细节化控制,其中上下弦、附木和枕木等相对规则物体,首先建立每个关键点的坐标,之后利用 line 中的 CreateBound 方法进行两点间的连线工作,并把线段包裹在 Curvearrarray 的序列中,利用NewExtrusion 方法,在由点到线,由线到体的同时,选定平面拉伸完成。如图 4 所示,垫块这类变截面模型生成过程需要使用 FamilyCreate 中的 NewBlend 方法,通过创建上下两端截面轮廓,沿特定的路径对其进行放样
14、融合。此方法的具体设计架构如图 5 所示。图 4 程序自动化生成的垫块模型图 5 变截面构件模型程序设计架构对于暗销与长圆钉模型,由于其不规则的形状限制,建模时无法对其进行拉伸与融合操作.这里对这些构件使用 NewRevolution 方法,编辑线段轮廓,通过与轮廓的旋转轴 Axis 对其旋转一定角度生成。需要注意的是,旋转所需的轮廓与拉伸融合都要求必须闭合且旋转轴与轮廓线段必须在同一平面上。为了方便操作,分别在项目文件中新建暗销与长圆钉的类,并在类中写入返回值为 Revolution 类型的方法,最后在屋架类中声明变量进行接收,把轮廓关键点中的两点连线当作旋转轴,使线段轮廓围绕轴旋转 360
15、生成模型。2.3 孔槽自动化处理木屋顶与其他材料的屋顶相比,突出的不同点在于其为了保证结构稳定性与构造要求,存在数量繁多的凹槽与孔洞。以螺栓帽和腹杆两端凹槽为例,首先按照参数将49基于 Revit 的木屋顶参数化设计与开发原拉伸体生成出来,之后通过计算,在螺栓与螺栓帽、腹杆与上下弦的接触位置分别进行空心建模操作,把NewExtrusion 方法中的 IsSolid 属性填为 false,表示创建的模型属于剪切体,最后通过创建合并元素集合,把空心部分与螺栓帽、上下弦收集到集合里,进行实体与空心模型的连接,即生成凹槽与孔洞,下面为部分代码。图 6 为具体程序设计流程,生成后的凹槽模型效果如图 7
16、图 9 所示。图 6 自动化生成凹槽孔洞程序设计流程图 7 自动化生成垫块凹槽模型图图 8 程序生成螺栓帽孔洞模型图 腹杆 图 9 程序生成上弦杆凹槽模型展示图2.4 元素编辑图 10 为此次参数化建模过程中涉及到的编辑命令汇总,由于木屋顶的对称性以及重复的构件种类繁多,于是涉及到了很多 Revit.DB 命名空间下ElementTransformUtils 类中的编辑元素命令,每一种命令都需要提供元素的 ID 才能实现预期的操作。其中移动、复制与镜像命令输入的坐标变量,是相对原实例 id 的坐标,并且这些命令都有独自对应的批量操作方法,把需要编辑的元素 ID 打包成集合,利用ICollect
17、ion 收集器进行统一操作。方法 变量类型 作用 MoveElement Documment,ElementId,XYZ 移动元素 CopyElement Documment,ElementId,XYZ 复制元素 MirrorElement Documment,ElementId,XYZ 镜像元素 RotateElement Document,ElementId,Line,double 旋转元素 图 10 编辑命令汇总2.5 材质纹理传统手动设置项目中的模型材质,需要对构件的每一族类别分别进行设置,且遇到特殊实例需要个别调整,使人工操作时间大大增加。此次研究目标材质是固定的木材材料和螺栓、圆钉
18、和暗销等其他金属构件。为了使木材模型与其他构件在可视化方面区别开来,本文设计出了完成自动设置模型材质的系列方法,下面为实现方法过程的关键代码。图 11 为实现方法过程的设计流程与思路。图 11 自动匹配材质信息程序设计流程图通过上述流程,用户可以通过winform弹窗,在“木50材材质”后面填写需要设置的材质类型,之后程序会自动通过材质浏览器搜索输入过的材质名称,完成模型材质设置。2.6 误报信息处理由于通过代码自动生成模型的过程中存在复杂的细节处理与精细坐标比对等工作,在调试代码运行成果时,Revit 会默认识别出距离极近的两个线段或模型边缘并没有重合,并误报“图元稍微偏离了轴”警告,严重影
19、响程序代码的可执行性与用户界面观感。为了解决这一问题,本文设计并编写了继承IFailuresPreprocessor 预处理程序接口的 FailureSolution类,遍 历 并 接 收 错 误 信 息 并 建 立 if 语 句,当GetDescriptionText 描述文字接收到“图元稍微偏离了轴”的警告文字,即可禁止消息框的出现。同时,针对此程序继续编写与之对应的 FailedHandler 方法,通过定义相应的处理器,并在代码中输入构筑体名称参数来实现此方法,最终消除误报弹窗。2.7 制作插件编辑后台 API 代码文件成功后,在 Revit 中利用外部应用接口进行插件功能的实现。本文
20、通过重建一个项目,其中的类继承 Autodesk.Revit.UI 命名空间IExternalApplication 的接口,利用 OnStartup 函数进行插件模块的生成。接下来,需要把编辑好的 addin 文件放入对应版本的文件目录中,指引 Revit 通过 Assembly路径识别 GUID 识别码,寻找外部应用接口 dll 项目文件,再重新打开 Revit 应用程序。如插件没有设置签名,则点击“总是载入”,完成制作。3 参数化设计实例3.1 实例建模本文选取某地方一座红松方木屋顶为建模实例。其屋顶 24m 长,八榀屋架,每一屋架 12m 宽、3m 高,其中输入的数据以毫米为单位。在程
21、序接口代码方面,建模时生成每一屋架的左半边,再通过程序代码中的 MirrorElements 实例方法对其进行镜像,生成完整的单一屋架模型。需要注意的是,镜像后发现右半模型中的原空心剪切情况已不复存在,于是需要在程序中的空心模型进行镜像与连接的循环操作,巩固右半部分的模型凹槽效果,图 13图 14 为程序生成的单一木屋架模型线框透析图与渲染图。图 13 木屋架线框透析图图 14 木屋架仿真渲染图创建公制轮廓竖梃族,设计出瓦片轮廓,并将族载入项目中,利用拉伸屋顶命令初步建造屋顶顶板,并把其属性改为玻璃斜窗,利于后期铺垫瓦片。将玻璃斜窗属性中的网络 1 内部类型以及边界 1、2 类型设置为载入的瓦
22、片竖梃族,并设计好间距距离与布局,模拟生成木屋顶瓦片效果图,如图 15 所示。图 15 木屋顶瓦片模型图在Revit插件操作方面,新建族文件,打开“木屋顶”模块,点击插件,如图 16 所示,根据用户输入的屋顶长度 Distan 与榀数在程序中建立 for 循环,实现对应数量的屋架排列、棱条以及椽条。在对应的榀数上添加51基于 Revit 的木屋顶参数化设计与开发横向支撑、与屋面,方木屋顶建模完成,如图 17 为最终木屋顶 3D 图。图 16 参数化木屋架部分构件模型图 17 生成木屋顶模型3.2 实例分析该实例建模时,以木屋顶为重点组成部位,宏观上呈现了包含木屋跨度、宽度、屋顶木屋架榀数与分布
23、、上下弦杆和拉杆尺寸等结构,精确到上弦与下弦端部连接处、上下弦木夹板螺栓锚固排列数量与方式、垫块和暗销的固定、檩条与三角木的搭接等部分,如图 18 图 19 所示。图 18 暗销连接处 图 19 弦杆连接处生成后的整体模型呈现完整,且本身拥有衔接木屋墙体的檩条与螺栓,满足尺寸要求的下方主体结构可直接与模型连接,该模型并无缺件情况。由于部分静态方法的循环执行,使下弦中间垫板部分在原位置处重复生成,不可避免的产生了多件情况,但经过程序后期的材质自动匹配功能,赋予重复垫板模型同样的材质信息后,对模型外观的表现无影响。4 结论本文基于木屋顶的结构特点,通过 winform 窗口收集 UI 过程中输入的
24、设计参数,利用 RevitAPI 与 C#编程技术设计程序,简化了木屋顶建模的设计思路,实现木屋顶参数化自动建模过程,研究结果表明:(1)在设计并完成木结构房屋的控制参数窗口之后,需要更改 textBox 控件信息中 Modifiers 属性的公开性,以保证输入后的参数能够在程序项目的类中共享。木屋模型的控制参数众多,当设计接收数据的窗体较多时,可利用 DialogResult 等方法使其先后连续自动出现;(2)区别于 Revit 软件手动绘制或剪切生成木屋凹槽孔洞结构的做法,通过 C#编程技术与 RevitAPI配合生成相应空心实体,根据接收的自定义参数数据,再运用元素连接的方式自动形成所需
25、位置的凹槽构造模型,提升了坐标点位的精准度,也有效提高了木结构房屋的建模效率;(3)根据设计者在窗体中输入的木材或金属材质名称,可以运用构件过滤器在材质浏览器中遍历材质类型,通过 if 语句判别内部名称并匹配,自动将木材材质附着于对应的模型构件上,大幅度减少手动操作时的重复性工作;(4)通过 FailureSolution 类与 FailedHandler 方法的搜索信息与数据处理等功能,可以设计程序代码辨识误报信息内容来自动阻止消息窗体的弹出,避免其影响自动建模时的连贯性与交互观感。本文运用 API 命令与外部编程语言编写了大量功能性程序方法,这有利于设计者摆脱人工绘制大量重复性工作,提高了
26、木结构房屋设计的工作效率,希望在木结构建筑的建模与施工进度可视化研究方面,可以给予一定的参考与思路。参考文献 参考文献1 邓朗妮,周峥,叶轩,等.基于建筑信息模型的装配52式构件深化设计流程 J/OL.桂林理工大学学报:1-92020-12-16.http:/ 李恒,郭红领,黄霆,等.BIM 在建设项目中应用模式研究 J.工程管理学报,2010,24(5):525-529.3 陈训.建设工程全寿命信息管理(BLM)思想和应用的研究 D.上海:同济大学,2006.4 ABDELAZIZ NAAMANE,ABDELAZIZ BOUKARA.A Brief Introduction to Build
27、ing Information Modeling(BIM)and its interoperability with TRNSYSJ.Renewable Energy and Sustainable Development,2015,1(1):126-130.5 马佰钰.基于 Revit 斜拉桥参数化设计及施工过程模拟的研究 D.大连:大连理工大学,2017.6 李畅,王子茹.基于 Revit 二次开发的多面体参数化建模 J.土木建筑工程信息技术,2020,12(01):110-116.7 胡新元.基于 BIM 的单层工业厂房设计 D.大连:大连理工大学,2018.8 胡婧羽,朱剑刚.木结构健
28、康建筑特性解析 J.建设科技,2020,21(418):130-133.9 薛雷,杨林,张良.基于 Revit 的木屋模型 CAD/CAM系统设计与开发J.机械工程与自动化,2019,6(6):91-93.10 郭颖恺,张颖璐,朱一辛.基于 Revit 软件及 Dynamo 可视化编程实现轻型木结构框架体系快速建模 J.林业机械与木工设备,2018,46(08):18-24.11 邱营.基于 Revit 实现木屋结构的参数化建模及数据提取 D.沈阳:沈阳工业大学,2020.12 Autodesk Asia Pte Ltd.Autodesk Revit 二次开发基础教程 M.上海:同济大学出版社
29、,2015.13 木结构设计手册编辑委员会.木结构设计手册(第三版)M.北京:中国建筑工业出版社,2005.14 木结构设计标准:GB50005-2017 S.北京:中国建筑工业出版社,20Parametric Design and Development of Wood Roof Based on RevitParametric Design and Development of Wood Roof Based on RevitWang Ziru,Yu Chao(Dalian University of Technology,Faculty of Infrastructure Enginee
30、ring,Dalian 116024,China)Abstract:Wood structure has a number of holes and slots and connecting parts needed to be refined compared with other types of buildings when using BIM Technology for design.The paper aims to achieve the parametric modeling of wood structure building design,and encounter a s
31、eries of challenges such as modeling a large number of hole and groove,setting material information,and processing complicated operation,etc.Based on the API program commands provided by Revit interacting with external C#programming technology,this paper designs program code to receive or use data t
32、o avoid the manual drawing of model and data.Whats more,relying on the third-party plug-ins for model processing and other inefficient methods,the paper realizes automation for the wood structure design,which include the automatic modeling of complex structures such as grooves and holes,the receivin
33、g and application of parameter variables,the automatic matching of materials,and the simulation of distributed modeling visualization process,etc.From all the work above,the paper gradually manages the parametric modeling of the wood roof structure.Meanwhile,this paper designs the relevant algorithm according to the specification and the values of some program parameters,which further provides a practical case to prove the programs executable.Key Words:Revit;Parametric;Wooden Roof;Automatic Modeling