APP下载

岩土工程BIM建模与仿真计算一体化的程序实现

2018-11-09姚翔川郑俊杰章荣军赖汉江

土木工程与管理学报 2018年5期
关键词:角点二次开发实例

姚翔川, 郑俊杰, 章荣军, 赖汉江

(华中科技大学 土木工程与力学学院, 湖北 武汉 430074)

随着经济和城市建设的快速发展,越来越多的工程项目要求工程设计具备可视化、3D模拟化和可出图等特点,将信息技术应用于建设工程全生命期,通过网络交换信息并且科学利用信息,从而避免形成信息孤岛。

BIM(Building Information Modeling)技术通过构建工程中各类构件的3D模型,并赋予模型相应构件的信息参数,以智能3D模型模拟工程项目信息[1]。Autodesk Revit作为目前使用最为广泛的BIM软件,能较好地满足现代工程设计要求,可提供各类构件的大量信息参数,同时满足工程中所需的出图要求和明细表要求等[2]。目前,基于Revit软件的四维可视化软件(如Navisworks)也较为成熟,能满足工程项目阶段化的可视化要求。因此,目前许多结构分析软件(如PKPM,YJK,Midas等),均开发出与Revit的数据转换接口[3]。已有的基于Revit的数据转换接口中,邓原雪等[4]基于IFC(Industry Foundation Classes)文件建立了Revit模型与SAP2000模型的数据转换;张剑涛等[5]对于IFC文件与PKPM软件之间的转换进行了讨论。

目前,BIM技术已成为桥梁结构设计的硬性要求之一,并在越来越多的桥梁结构工程设计中得到应用。然而,在岩土工程领域,至今还停留在传统的CAD图纸阶段,将BIM技术与岩土工程相结合的案例鲜有报道。但是,将BIM建模与岩土工程计算分析相结合,实现工程施工可视化实景建模与工程计算一体化,以保障重大基础设施工程的施工安全,这将是土木工程学科未来的发展趋势。

1 现有建模方法及不足

现有与Revit有较为成熟的数据转化接口的软件,普遍都是结构分析软件,也多采用IFC标准进行信息交换。岩土工程中运用较多的分析软件ANSYS与Revit拥有不同的文件类型,不能直接进行数据交换。同时,现有的Revit建模所包含的材料参数中没有岩土材料中常见参数,这些差异使得在针对岩土材料进行在建立建筑信息模型和分析计算之间产生了障碍,岩土材料的受力变形特性分析也受到限制。

现有的ANSYS与Revit的接口非常有限,部分转换程序是以IFC文件作为中间桥梁来实现[6],这种方法存在较多冗余信息,并且在赋予材料参数时较为困难,每次录入模型需要进行修改,适用性较差。同时,Revit中提供的Revit API(Application Programming Interface)能够实现对Revit功能的自定义,可根据不同需求对Revit功能进行拓展和补充,并推出了相应的二次开发教程[7]。方海龙等[8]采用Revit API编写插件,从而将Revit中各类信息转化为ANSYS可读的命令流,以此实现Revit和ANSYS之间的转换。需要说明的是,方海龙等所采用的Revit版本较为原始,开发环境为Microsoft Visual Studio 2012以及Microsoft. NEF Framework 4.5。然而,最新的Revit版本已经不再支持Visual Studio 2012,并且在二次开发教程中的程序也有许多命令流被替换,不能用于最新的Revit二次开发。同时,现有的Revit与ANSYS二次开发的接口只能满足长方体之间的转换[9],其方法是遍历内置构件角点坐标,利用它们的相互关系进行排序,并根据角点坐标进行长方体构件的重组。由于该方法是根据构件“左下-右上”对角点空间坐标并且利用其角点坐标进行切分,切分结束后获得一系列几何形状简单的立方块,对于各种复杂和异形的结构不能进行有效的转换。同时,现有的二次开发的接口中,所需要的材质信息(包括密度、泊松比、孔隙率等)均从材质库中获取[10],尽管这些数据也是ANSYS建模时的必要信息,但材质库中有许多冗余信息(如填充图案,外观颜色等)在ANSYS建模中并不需要;同时,在材质库中缺少岩土材料所需的一些常见参数(如土的黏聚力与内摩擦角等),因此有很多参数需要设计人员自己定义并赋值。

在采用ANSYS软件对岩土工程模型进行计算时,因土体参数的非线性容易出现计算不收敛等问题。因此,许多研究人员都采用ANSYS软件,对复杂的工程地质体进行建模并划分网格后,通过数据转化的方法将其导入FLAC3D中进行计算分析。利用ANSYS建模并划分网格,再通过FLAC3D进行模拟分析已成为了岩土工程数值模拟的常态。

基于上述缺陷,本文提出了一种对于复杂和异形构件的模型转换方法,通过自下而上的方法从点、线、面、体逐步生成复杂模型。该方法能够有效地将Revit中较为复杂的结构模型转换为可在ANSYS中分析计算的模型,并且能获取设计人员在Revit中自定义的材料参数,再通过FLAC3D进行计算分析。最后,基于一个工程实例,对本文所提出的模型转换程序的可行性进行了验证。

2 BIM建模与仿真计算一体化的程序实现

2.1 程序开发环境和流程

本文中二次开发采用C#语言,便于在Microsoft Virsual Studio中进行实时调试。由于近几年推出的Revit中无法使用Microsoft Visual Studio 2012作为开发环境,许多二次开发教程和论文中的程序均已被淘汰。因此,本文采用较新的Revit 2015作为二次开发主体,开发环境为Microsoft Visual Studio 2015,目标框架为Microsoft.NET Framework 4.5.2。

Revit二次开发流程如图1所示。首先,对当前视图中所有实例进行遍历,对不同实例进行分类和编号;然后,获取每个实例的几何信息和类型属性,其中可以包括设计人员自定义的一些参数和注释说明,并根据平面的不同获取该平面上的角点,根据角点构成平面,再将所有平面拼接形成实体;最后,将构造的实体和类型属性结合形成具有完整信息的实例,并按ANSYS APDL语言格式生成TXT文件输出。

图1 接口程序流程

2.2 核心算法主要步骤

(1)在Visual Studio 2015中创建类库工程,并添加引用Revit API.dll,Revit APIUI.dll,System. Windows.Forms,设置Copy Local的属性为False。

(2)对命名空间进行引用,主要是对Autodesk.Revit的相关命名空间进行引用,使得二次开发拥有不同的功能,一般二次开发会添加以下几种命名空间:

using Autodesk.Revit.UI;using Autodesk.Revit.DB;using System.Windows.Forms;using Autodesk.Revit.UI.Selection;using Autodesk.Revit.ApplicationServices;……。

(3)在Revit 2011之后的版本中控制命令模式只支持一种模式,即手动模式。因此,在进行编辑二次开发的主要命令之前要确定相应的命令属性代码,如:[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]

[Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]

[Autodesk.Revit.Attributes.Journaling(Autodesk.Revit.Attributes.JournalingMode.NoCommandData)]

(4)遍历当前视图中所有族实例和改族实例下包含的类型参数,包括系统族和自建族。

foreach (GeometryObject geomobj in geomElement)

{

GeometryInstance geomInstance = geomobj as GeometryInstance;

Transform instTransform = geomInstance.Transform;

}

foreach (Parameter item in familySymbolParameterList)

{

FilteredElementCollector collectorFamily = new FilteredElementCollector(doc);

collectorFamily.OfClass(typeof(FamilyInstance));

}

(5)遍历当前非空族实例每个平面,并获取平面上的角点坐标。

if (item.Definition.Name == "说明" && item.AsString()!=null)

{

foreach (GeometryObject instobj in geomInstance.SymbolGeometry)

{

Solid solid = instobj as Solid;

if (solid == null || solid.Faces.Size == 0 || solid.Edges.Size == 0)

{

continue;

}}

//遍历实体上每个面

foreach (Face face in solid.Faces)

{

int i0 = i;

Mesh mesh = face.Triangulate();

//获得每个面上点的坐标

foreach (XYZ ii in mesh.Vertices)

{

XYZ point = ii;

XYZ transformedPoint = instTransform.OfPoint(point);

if (transformedPoint.ToString() != null)

{

sb.Append("k,");

sb.Append(i + ",");

sb.Append(transformedPoint.X.ToString() + ",");

sb.Append(transformedPoint.Y.ToString() + ",");

sb.Append(transformedPoint.Z.ToString());

i++;

sb.Append(" ");

continue;

}}}

(6)将上述得到的角点连接成基础面,将实体所有的面组合成体,并消除重叠点。

//将上面得到的点连接起来,形成基础的面。

sb.Append("A,");

for (int a = i0; a < i; a++)

{

sb.Append(a + ",");

}

m++;

sb.Append(" ");

}

//消除重叠关键点,并将面组合成体

sb.Append("nummrg,kp");

sb.Append(" ");

sb.Append("va,");

for (int a = m0; a < m; a++)

{

sb.Append(a + ",");

}

(7)对上述得到的体赋予其对应的材料参数,包括用户自定义的材料参数。

foreach (Parameter item2 in familySymbolParameterList)

{

if (item2.Definition.Name == "黏聚力")

{

sb.Append("tbdata,1," + item2.AsValueString() + item2.AsString() + ",,");

sb.Append(" ");

}

if (item2.Definition.Name == "内摩擦角")

{

sb.Append("tbdata,1,," + item2.AsValueString() + item2.AsString() + ",");

sb.Append(" ");

}

if (item2.Definition.Name == "膨胀角")

{

sb.Append("tbdata,1,,,"+item2.AsValueString() + item2.AsString());

sb.Append(" ");}}

根据以上程序在Visual Studio中进行编译,并在Revit的附加模块外部工具中调用生成的dll程序,以生成ANSYS可读的命令流形式,如图2所示。

图2 自动生成的ANSYS命令流

3 实例分析

图3为Revit到ANSYS转换过程的实例演示。首先,如图3a所示,在Revit中建立一个基坑模型,模型中包括水泥土桩、地连墙与钢支撑,以及后期需要开挖的土体等。其中,土体材料参数部分添加了原Revit中所没有的黏聚力和内摩擦角等参数(如图3b所示),以满足后续ANSYS计算。然后,将该模型导入至ANSYS中,并根据不同的材料分组(如图3c所示)。在模型导入时,可根据设计人员的不同需求选取其中部分构件进行建模,从而简化模型,降低分析计算难度并减少建模时间。同时,考虑到后续要对Revit模型进行开挖模拟,图3中所建的ANSYS模型为施工前土体模型,而未构建水泥土桩、地连墙与钢支撑等模型。

图3 Revit模型导入ANSYS效果

图4是基坑模型在ANSYS中经过切分后的效果展示。由于存在不规则实体,因此部分采用四面体进行自动切割,而规则部分采用块体切割,所有网格连续且相互关联。

图4 网格划分细部展示效果

在利用Revit建立ANSYS模型后,将其导入FLAC3D中进行分析计算。图5是在FLAC3D中数值模型在重力作用下的应力云图。从图中可以看出,在重力作用下,数值模型的应力场沿深度方向的变化是连续的,与实际情况相符。

图5 基坑开挖前应力云图

图6为开挖支护后的应力云图。图中显示,模型在开挖支护后的应力场合理连续,证明了根据Revit模型生成的命令流可以模拟施工过程,并可导入其他计算软件进一步操作,将Revit的建筑信息模型、ANSYS的建模划分网格与FLAC3D的强大分析计算功能结合起来。

图6 基坑开挖支护后应力云图

图7为开挖后地表沉降与实际工程监测数据的对比分析,可以看出数值模拟数据与实测数据拟合较好,反映了计算模型的合理性,也证明了接口程序的正确性。

图7 基坑开挖支护后地表沉降与实测数据对比

4 结 语

本文通过Revit API接口技术,运用C#语言读取复杂的Revit实体模型并在ANSYS中生成,并成功分析计算,实现了Revit模型到ANSYS模型的全自动转换,对接口程序的思路及算法都进行了详细的阐述。

算例证明了在模型转换过程当中切分和转换的正确性,能将实体的细节特征表现完整。该程序可以允许设计人员自定义参数并用于ANSYS建模中,同时可以选取部分结构进行建模,简化计算难度,提高分析效率。该模型还可以导入FLAC3D等分析计算软件进行进一步的模拟计算。

本文的工作只是对Revit与ANSYS对接的初步尝试,还有许多方面值得深入研究。本文所建立的Revit到ANSYS的模型转换只针对棱柱棱锥等只含有平面的实体,对含有曲面的建模还需要进一步研究;同时,ANSYS的计算结果也暂时无法直接反馈到Revit结构模型中进行同步修改。

猜你喜欢

角点二次开发实例
多支撑区域模式化融合角点检测算法仿真
角点检测技术综述①
西门子Operate高级编程的旋转坐标系二次开发
基于灰度差预处理的改进Harris角点检测算法
浅谈Mastercam后处理器的二次开发
基于FAST角点检测算法上对Y型与X型角点的检测
西门子Easy Screen对倒棱机床界面二次开发
ANSYS Workbench二次开发在汽车稳定杆CAE分析中的应用
完形填空Ⅱ
完形填空Ⅰ