宋 杰, 张亚栋, 王孟进, 张锦华, 范俊余
(解放军理工大学 国防工程学院, 江苏 南京 210007)
Revit与ANSYS结构模型转换接口研究
宋杰,张亚栋,王孟进,张锦华,范俊余
(解放军理工大学国防工程学院, 江苏南京210007)
摘要:复杂荷载作用下结构的精细化数值分析是结构和抗爆工程研究领域的重要趋势。Revit作为一款功能强大的结构建模软件,其中包含大量建筑物的物理和功能特性信息,是结构分析非常需要的,但通用大型结构分析软件如ANSYS通常都不具备直接获取这些信息的能力。本文提出了基于运用Revit及Revit API技术的模型转换方法,在Visual Studio 2012平台上用C#语言进行二次开发,获取结构分析建模软件所需的几何参数、弹性模量、密度、泊松比等数据,并对复杂的几何模型进行了切分处理,把提取的数据整理成ANSYS APDL命令流格式,从而实现了Revit模型到ANSYS分析模型的直接转换,体现出两者的优势互补和转换的快速高效。最后,在模型转换的基础上进行网格划分,给出一个工程转换实例进行验证,在ANSYS中查看各项数据参数,数据信息内容符合分析计算要求,验证了模型转换程序的正确性和实用性。
关键词:Revit;ANSYS;模型转换;二次开发
经济的快速发展促进了建筑物的大幅度增加和更新换代,各种复杂和异形建筑不断涌现[1],这就给建筑建模和分析工作带来了挑战。为了快速和精细化地实现以上功能,必须借助于强大的有限元分析软件。
ANSYS具有较强的有限元分析功能,在土木工程等诸多领域有着广泛应用。ANSYS软件包括前处理模块(PREP7)、分析计算模块(SOLUTION)和后处理模块(POST1和POST26)三个模块[2],其自带建模功能相较于其强大的结构分析功能逊色不少[3],尤其是对异形和复杂建筑,做到精细化建模则较为繁琐和复杂,需要花费大量的时间和精力,很大程度上制约和限制了该软件的使用。对于结构分析人员来说,如何快速有效建立结构的精细化分析模型,是一个长期探讨的问题。
BIM(Building Information Modeling)是指建筑信息模型,通过建立建筑工程各个构件的虚拟模型,并将构件的各种信息数据与模型相关联,从而通过数字信息仿真来模拟建筑物真实信息。Autodesk Revit作为应用广泛的三维BIM建模软件,为设计师和工程师在建筑领域的设计和施工提供了优秀平台,其数字化模型集成的信息量非常丰富,包括大量的几何信息和非几何信息,支持建筑项目所需的整体设计、出图和明细表等,均能以完整数据库的信息表现出来[4],且这些数据允许用户通过二次开发提取使用[5]。Revit能在较快时间内、最大限度地对建筑物实体及各个细部结构进行还原,为工程分析向精细化发展提供了可能。
目前,许多流行的结构设计软件如ETABS、Robot、PKPM、YJK以及SAP2000等均开发有与Revit之间的数据转换接口[6]。这些程序多基于工程设计目的考虑,在模型转换过程中对结构细节往往做了许多假设简化,将实体构件转化为结构单元,使得转换后的模型不适合通用目的和精细化的分析需要。同时,众多转换程序基于IFC中间格式实现[7,8],冗余信息太多而转换效率低下。然而,作为主流分析软件的ANSYS与Revit各自拥有不同的文件存储方式和数据格式,不能直接进行数据交换共享。为此,本文研究提出了一种快速的结构模型转换方法,利用该方法可以直接从Revit结构模型生成ANSYS分析所需的物理模型,并能最大程度地保留结构的各种构造细节,极大方便了后续分析工作。
1开发目标与思路
1.1ANSYS建模及模型转换分析
ANSYS软件有多种建模方法,传统的方式即在GUI中通过创建“关键点→线→面→体→节点→单元”的“自下而上”的实体建模方式,费时费力,对复杂模型处理难度大,灵活性差。这种方式也可以通过ANSYS参数化设计语言APDL编写的文本文件,以命令流的形式完成,但也存在着创建大型模型时查错困难等问题[9]。
由于ANSYS在结构分析领域举足轻重的地位,许多CAD软件如Pro/E、Inventor、UG等均提供了与ANSYS之间的模型转换接口[3,10,11],同时ANSYS还具有通过标准数据格式如ACIS、IGES等输入几何模型的功能,使得ANSYS针对复杂结构的建模能力得到增强。虽然Revit软件也可以输出ACIS格式的模型,如图1所示。但是这个结构实体只是一个整体闭合的几何体,导入ANSYS做结构分析时不能直接进行单元网格划分,需要手工切割成形状相对简单的几何体,并作必要的修补,否则不能划分高质量的网格,也难以进行精细的结构描述。同时,通过ACIS导入的模型不能体现各个构件的独立性,需要手工指定各个构件的材料信息,模型切分和材料赋值的工作量依然很大。另外,这种转换方式容易出现几何数据的丢失和转换不彻底的情况,效果往往并不理想。本文针对复杂结构建模及后续修补工作的不便,直接通过二次开发得到适合ANSYS划分网格的构件切分块体,不需要后续手工调整,一次性生成符合ANSYS精细网格划分要求的模型。
1.2Revit到ANSYS模型转换开发思路
Revit模型包含的数据量很大,其中包括结构分析所需的构件ID、空间位置、几何尺寸(长、宽、高)和材质信息(弹性模量、密度、泊松比)等[12]。这些数据也是ANSYS结构建模的必要信息,可以通过API编程直接读取出来。本文开发思路是,先借助Revit API将上述数据读取出来,通过几何切分算法将具有复杂几何关系的模型切分成具有规则形状的几何体,再用ANSYS 参数化设计语言APDL以命令流形式写成文体文件,在ANSYS中读入该文件即可生成所需的分析模型。
本文方法可一次性完成模型的转换,避免手工操作中可能的重复及人为错误。
1.3开发工具及模式
Revit系列软件提供了可以扩展产品功能的应用程序编程接口——Revit API,包括访问文档中对象API、用户选择交互API、文档级别事件API、对象过滤API和族创建API等,功能十分丰富。Revit API包含在两个接口组件文件RevitAPI.dll和RevitAPIUI.dll中,支持在.NET环境中进行开发,兼容的.NET语言包括Visual Basic.NET、C#和C++/CLI。
本文开发使用C#语言。该语言继承和结合了C、C++和VB的优点,可以快速地编写各种基于MICROSOFT.NET平台的应用程序,便于在Microsoft Visual Studio中进行跟踪调试,是.NET开发的首选语言。本文开发环境为Microsoft Visual Studio 2012及Microsoft.NET Framework 4.5。
Revit二次开发支持两种模式,分别为外部命令方式(External Command)和外部应用方式(External Application)。其中外部应用方式具有添加菜单和工具条或其它初始化命令的功能,在启动和关闭Revit.exe时自动执行,与Revit原菜单融为一体,操作方便,本文选择该方式进行开发。
2程序实现
2.1程序开发流程
程序开发流程如图2所示,首先对模型中所有图元进行寻找和过滤,判断族类型并分类收集存储,通过遍历判断出不同材料信息的族实例并进行编号,然后获取构件的角点坐标,利用它们之间的相互关系进行切分。具体方法是:先利用与柱相交的主、次梁对柱进行切分,再利用与板相交的柱对板进行切分,用板的厚度切分相交的梁和柱,最后再用次梁来切分主梁,切分过程中保留构件的材料信息,完成整个模型的切分工作。切分结束后获得一系列几何形状简单的立方块,将其按ANSYS APDL语言格式生成文件输出。
图2 接口程序算法流程
2.2算法要点
根据算法流程图,在Visual Studio平台上利用C#语言中丰富的数组表达式、函数、流程控制等数据表达结构完成开发目的。本文开发需求包括四个方面:一是获取图元的材质信息,包括构件的杨氏模量、泊松比、密度等材料特性;二是获取图元的几何信息,即构件“左下-右上”对角点空间坐标;三是对相交的构件利用其角点坐标进行判断切分;四是通过构件的角点坐标确定出所需求几何块体的空间坐标,并按照ANSYS APDL语言格式进行排列,输出到指定文档。其核心代码介绍如下:
(1)遍历模型梁、板、柱、墙,各自获取它们的集合。
Filtered Element Collector collector1 = new Filtered Element Collector(doc); //创建一个过滤收集器
Element Category Filter filter1 = new Element Category Filter(Built In Category.OST_Walls); //通过过滤获取所有墙类型
I List
Filtered Element Collector[]collectors={collector1, collector2, collector3, collector4,...,}; //对所有构件类型进行过滤
//对所有构件类型进行遍历
foreach (Filtered Element Collectorele Collector in collectors)
{
}
(2)遍历各个构件的材质信息,获取它们的杨氏模量、泊松比和密度。
//遍历所有构件材质信息集合
foreach (Element elem in eleCollector)
{
inti = -1;
Element Pick = elem;
MaterialSet pw = Pick.Materials;
}
//遍历获取一类构件材质信息,并把它定义为图元属性集
foreach (Material m in pw)
{
Property Set Elementstructual Asset = doc.Get Element(m.Structural AssetId) as Property Set Element;
}
//对构件材质信息进行判断并提取
if (structural Asset != null)
{
int number = -1;
double temp0 = structural Asset.Get Structural Asset().Young Modulus.X / 304800;
double temp1 = structural Asset.Get Structural Asset().Poisson Ratio.X;
double temp2 = structural Asset.Get Structural Asset().Density * 16.02;
}
对王家会站1992—2016年中水期流量实测流量资料进行统计分析。水位流量关系相关性比较散乱,单值化处理后的关系性也较差,见图5。主要原因为中水期流量较小,影响流量变化的控制因素不如高水时稳定。通过对资料的分析,选取了近六年即2011—2016年的实测资料进行单值化处理,相关性比较好,见图6。
//在所有已经识别的材质中寻找当前材质的编号。如果没找到,赋予一个新的编号。
for (int k = 0; k < total; k++)
{
if (Math.Abs(temp0 - para Data Wall[k, 0]) < 0.001 &&
Math.Abs(temp1 - para Data Wall[k, 1]) < 0.001 &&
Math.Abs(temp2 - para Data Wall[k, 2]) < 0.001)
{
break;
}
} //没找到
if (number == -1)
{
total = total + 1;
i = total - 1;
para Data Wall[i, 0] = temp0;
para Data Wall[i, 1] = temp1;
para Data Wall[i, 2] = temp2;
}
(3)遍历构件角点坐标,利用它们的相互关系进行排序。
//为切分板而确定柱的位置
if (((cxmin { Acxmin= cxmin; Acymin=cymin; Acxmax=cxmax; Acymax=cymax; } (4)按照ANSYS所需要的格式输出内容。 //输出所有的材质信息 for (int k = 1; k <= total; k++) { string s = "
" + "MP" + "," + "EX" + "," + k + "," + Convert.To String(para Data Wall[k - 1, 0]) + "
" + "MP" + "," + "PRXY" + "," + k + "," + Convert.To String(para Data Wall[k - 1, 1]) + "
" + "MP" + "," + "Dens" + "," + k + "," + Convert.To String(para Data Wall[k - 1, 2]) + "
"; } //找到了材质的编号,输出角点坐标 if (number >= 0) { number = number + 1; double Wall Start Point1 = Pick.get_Bounding Box(doc.Active View).Min.X; ......; string wabs = Convert.To String(Wall Start Point1 * 304.8) + ...+...; } 按上述算法编写程序并进行编译,按Revit规定的路径存放生成的接口类库文件,启动Revit,程序自动调入该库文件,生成Revit To Ansys菜单以及其中的ANSYS按钮,如下图3所示。 图3 Revit主窗口 3算例分析 针对某建筑模型,将Revit到ANSYS的转换过程进行了演示。结果显示,本文开发的接口程序和算法准确可靠地实现了模型之间的转换。 首先,在Revit程序中点击Revit To Ansys菜单下ANSYS按钮,生成APDL命令流文件,如图4所示。该模型包含梁、板、柱构件75个,模型转换在3秒内完成,导入ANSYS生成分析模型用时5秒,程序效率高。 图4 目标文件数据 将图4中的目标文件按照“柱→梁→板”依次导入到ANSYS中,获取模型的效果图(图5~7)。导入时可以根据需要选取其中的部分构件,这样就使目标文件中的数据具有可控性和灵活性。 图5 某建筑模型“柱”展示效果 图6 某建筑模型“柱→梁”展示效果 图8 是上述模型经切分后的情况。由图9可以看出,柱在X、Y方向上分别被主、次梁切分,板在X、Y方向上分别被和它相交的柱切分,柱在Z方向上分别被主、次梁和板切分,主梁在Z方向上分别被次梁和板切分,次梁在Z方向上被板切分。切分后的模型由简单的六面体构成,非常适合ANSYS划分网格。 图9、图10分别是模型网格划分和结构在重力作用下的变形云图。可以看到,整个结构模型划分的有限元网格非常规整,质量很高。重力作用下结构的位移场保持连续,在构件连接处没有突变,表明模型转换过程中保持了构件之间连接的完整,模型的切分和转换正确。 图8 某建筑模型构件切分细部展示效果 图9 某建筑模型网格划分细部展示效果 图10 某建筑变形云图 4结论 本文使用C#编程语言与Revit API接口技术,将Revit结构模型切分成适合ANSYS结构分析的几何块体,实现了Revit模型到ANSYS分析模型的转换,给出了详细的接口程序设计流程和算法要点,开发了实用的模型转换接口程序。算例表明,该程序可以完整地将Revit结构模型的几何信息及物理信息可靠地传递到ANSYS中,能够保证结构细节的完整表达。 所开发的接口程序,从Revit模型中提取信息到导入ANSYS软件生成目标模型,整个过程无需人工干预,大大减少在ANSYS中直接建模花费的时间,在转换效率上有很大的优势,具有很好的实用价值。 Revit模型中存储了大量信息,通过二次开发可以分别提取转化为多种格式。本文算法具有通用性,可供其他接口开发人员参考。 参考文献 [1]周拥军, 赵文光. 建筑结构多元化[J]. 华中科技大学学报(城市科学版), 2007, 24(3): 74-77. [2]邢艳洪. 基于 ANSYS二次开发的电梯参数化有限元分析系统 [D]. 沈阳: 东北大学, 2006. [3]张尔文, 孙友松, 周先辉. UG 与 ANSYS 模型数据转换的方式及实例分析[J]. 机械制造与自动化, 2007, 36(2): 90-91. [4]徐迪. 基于 Revit 的建筑结构辅助建模系统开发[J]. 土木建筑工程信息技术, 2012, (3): 71-77. [5]姜剑峰. BIM 技术在建筑方案设计中的应用研究——以青岛理工大学黄岛校区图书馆方案设计为例[D]. 青岛: 青岛理工大学, 2012. [6]李艳妮. 基于BIM的建筑结构模型的研究[D]. 西安: 西安建筑科技大学, 2012. [7]张建平, 张洋, 张新. 基于IFC的BIM三维几何建模及模型转换[J]. 土木建筑工程信息技术, 2009, (1): 40-46. [8]李犁, 邓雪原. 基于IFC标准BIM数据库的构建与应用[J]. 四川建筑科学研究, 2013, (3): 296-301. [9]张涛. ANSYS APDL参数化有限元分析技术及其应用实例[M]. 北京: 中国水利水电出版社, 2013. [10]孙莹. Pro/E与ANSYS10.0之间的数据转换和连接[J]. 一重技术, 2007, (3): 86-87. [11]王洪海. UG到ANSYS有限元模型的转换[C]//第二届中国CAE工程分析技术年会论文集. 2006: 22-26. [12]董立坤, 王徽. PKPM与ETABS结构模型数据转换接口的实现[J]. 土木建筑工程信息技术, 2012, 4(3): 45-51. Research of Model Exchange Interface Between Revit and ANSYS SONGJie,ZHANGYa-dong,WANGMeng-jin,ZHANGJin-hua,FANJun-yu (School of Defense Engineering, PLA University of Science and Technology, Nanjing 210007, China) Abstract:The structure of fine numerical analysis under complicated load is an important trend in the research field of engineering structure and anti-explosion. As a powerful structural modeling software, Revit contains a large number of physical and functional characteristics of the building information, which is very necessary towards structural analysis. The general large structural analysis software, such as ANSYS, however, usually does not have the ability to directly obtain the information. It is put forward the technology of model transformation based on Revit and Revit API in this paper. Through the secondary development by using C# language on the platform of visual studio 2012, we obtained the structure analysis data of geometric parameters, elastic modulus, density, Poisson's ratio for the modeling, then extracted and divided them into command stream format of ANSYS APDL. Consequently, it has been realized the direct conversion of Revit structure model to the ANSYS program, reflecting both of the complementary advantages and the conversion of fast and efficient. In the end, grid division is carried out on the basis of model transformation. A project conversion instance is given by. Subsequently, the data parameters are viewed in ANSYS and met the requirements of analysis and calculation. The correctness and practicability of the model conversion program are verified. Key words:Revit; ANSYS; model transformation; secondary development 中图分类号:TU375; TP312 文献标识码:A 文章编号:2095-0985(2016)01-0079-06 基金项目:国家自然科学基金(51021001) 作者简介:宋杰(1988-),男,甘肃天水人,硕士研究生,研究方向为防灾减灾工程及防护工程(Email:songjie2005@126.com) 收稿日期:2015-06-28修回日期: 2015-09-28