Revit地铁围护桩自动生成算法

  • 新闻动态 2020-08-21 分享新闻到:
<返回列表

目前,市场上存在一些快速建模插件,但由于不同专业领域构件的差别较大,针对某一专业的插件很难适用于其他专业。因此,有必要基于不同领域做有针对性的插件。本文基于Revit的二次开发,研究地铁围护桩自动生成算法,实现地铁围护桩的快速布置。

基于Revit平台研究地铁围护桩自动生成算法,提高Revit的建模效率。分析地铁围护桩分布规律,利用C#语言,通过识别CAD底图以及软件交互界面获得桩定位线和布置参数,计算得到桩中心点坐标,实现地铁围护桩的自动生成。通过测试分析,运用本算法自动生成的地铁围护桩能够满足工程要求并且极大地提高了建模效率。应用结果表明,基于Revit的二次开发可以弥补相关BIM软件专业性不强的问题,有助于推动BIM技术在我国的应用和发展。

开发准备

下图为地铁围护桩布置图(局部),可以看出,桩的数量较多且沿桩定位线等间距分布,Revit建模过程中,可以通过 “复制”、“移动”、“阵列”等功能来实现围护桩的建模,但效率较低。因此,本文通过分析地铁围护桩分布规律,基于Revit进行二次开发,实现围护桩的快速建模。

Revit地铁围护桩自动生成算法

 

地铁围护桩布置图(局部)

桩族的创建

利用函数NewFamilyInstance(XYZ location,FamilySymbolsymbol,Level level, StructuralTypestructuralType) 创建桩族实例模型,其中,location为族实例放置点坐标,symbol为族类型,level为标高,structuralType 为结构类型。由此可见,桩自动生成的关键是计算桩定位点坐标,下文将重点介绍。

对话框窗口与Revit数据的交互

利用窗口(Form类) 及一些控件:文本框(TextBox)、组合框(ComboBox)、按钮(Button)等,按下述方法实现Revit数据与窗口的交互。

窗口类中定义UIDocument、FamilySymbol等字段,重载窗口类的构造函数。这样,窗口对象即可读写Revit当前文档数据,外部命令接口也可获得窗口的数据。部分代码如下:

public partial class ModelForm : System.Win-dows.Forms.Form

{

private UIDocument m_uidoc;

public FamilySymbol m_symbol;

public ModelForm(UIDocument uidoc)

{

InitializeComponent();

m_uidoc = uidoc;// 窗口对象中保存

UIDocument

}

……

}

在外部命令接口的Execute函数中创建窗口对象,获得窗口的数据。部分代码如下:

UIDocument uidoc = commandData.

Application.ActiveUIDocument;

Model Formform=new ModelForm(uidoc);

form.ShowDialog();

if(form.DialogResult==DialogResult.OK)

{

FamilySymbol pileSymbol = form.m_symbol; //获得窗口选择的族类型

}

根据地铁围护桩排布规律以及构造参数要求,设置下图所示的对话框窗口与Revit进行数据交互,获取生成桩的参数。

Revit地铁围护桩自动生成算法

 

生成桩程序窗口

生成桩

Revit可以读取CAD文件并且CAD工程图纸绘制的过程中会将不同的构件分图层表示。因此,可以通过相关算法识别以“链接CAD”的方式链接进Revit中的CAD图纸,获得定位线并对其排序;判断定位线走向,将其修正为沿顺时针方向的有向线段;将顺时针方向的桩定位线向外偏移桩直径的一半并延长,使其相交,即得到围护桩布置中心线;以围护桩布置中心线为基线,计算出每根桩中心点并生成桩。

桩定位线排序

模型线(对应ModelLine类)的GeometryCurve属性是Line类型对象,表示直线的信息(起点、终点等)。将选中的模型线的直线信息存于链表lineList中,对lineList中储存的元素进行排序,使其成为连续有向的“多段线”,即第i+1个元素起点与第i个元素终点重合(i=1,2…)。实现的方法为:(1)定义新链表newList,取出lineList第1 个元素L1添加到newList,找到终点与L1起点重合的元素,将其添加到newList头部,循环找到L1前面的直线;(2)找到起点与L1终点重合的元素,将其添加到newList尾部,循环找到L1后面的直线;(3)最终得到的newList即为排序后的定位线。

判定并修正桩定位线走向

将桩定位线向外偏移得到桩中心线的前提是桩定位线是沿顺时针方向的有向线段,如下图a所示。对于有向多段线,取直线Li,其起点坐标为(x 起, y 起),终点坐标为(x 终,y 终)。例如,将Li与x轴以及直线x=xa、x=xb围成的四边形面积记为A(i可为负),则Ai=1/2(x 终i–x 起i)•(y 终i+ y 起i)。将所有定位线对应的Ai叠加,记为ΣAi,i=1,2,…,4。若ΣAi>0,则定位线为顺时针,若ΣAi<0,则判定其为逆时针。以下图a为例,为在第1象限的顺时针有向4段线,L1的起点坐标为(xa, yb),终点坐标为(xb, yb),则:A1=1/2(xb–xa) • (yb+yb)= yb(xb–xa)>0,同理,A2=A4=0,A3=1/2(xa–xb) • (ya+ya)=ya(xa–xb)<0,ΣAi=yb(xb–xa)+ya(xa–xb)>0,满足判定条件;下图b显示为逆时针有向4段线,ΣAi<0,满足该判定条件。对于任意多边形n,以上算法均适用,该判定条件均能满足。

Revit地铁围护桩自动生成算法

 

获取桩中心线

将桩定位线向外偏移桩直径的一半即可得到桩中心线。如下图a所示,L1、L2、Li、Ln为沿顺时针方向的桩定位线。

●将每一根直线如Li沿逆时针方向旋转90°,即得到a→i

●将Li沿着a→偏移桩直径的一半得到图示的有向线段M1、M2、Mi、Mn,即为部分桩中心线

●通过方程组求两相邻直线的交点,如下图b所示的P1、P2、Pi、Pn,按顺序连接上述交点即得到完整的桩中心线P1P2PiPn

Revit地铁围护桩自动生成算法

 

桩中心线

计算桩中心点坐标并生成桩

在得到桩中心线后,对于其中每条长度为L的线段,从起点开始按间距d(交互界面输入参数:桩间距)生成桩中心点,若L/d为整数,则得到L/d个桩中心点,桩间距相等;若L/d不为整数,则得到的桩中心点的个数为(L+d)/d的整数部分,最后一个中心点平分剩余长度。通过上述方法便可获取桩中心线对应的桩中心点坐标。将上述桩中心点坐标逐个传递到桩生成函数NewFamilyInstance,即可生成所有桩。

测试

算法测试

针对本文所述算法,利用Visual Studio 2015开发工具以及C#语言,基于.NET平台编写程序。

Revit地铁围护桩自动生成算法

 

程序流程图

程序测试

在Revit2018环境下运行上述程序,导入工程图纸进行测试,生成地铁围护桩效果图。

Revit地铁围护桩自动生成算法

 

测试效果图

通过与Revit 传统建模方式对比发现,利用本程序自动生成桩建模速度较快,准确性高,能够满足工程需求。

分享新闻到:

更多阅读

返回全部新闻
扫描二维码分享到微信
确 认
  • 商务合作
  • 手机:18616252258
  • 座机:021-56670510
  • Q Q:153359780点击交谈
  • 地址:上海市宝山区长江南路180号A303,A306室

友情链接: sage 源浩网

Copyright © 2014-2020 上海垂杨信息科技有限公司 版权所有 沪ICP备17008714号

扫描二维码关注我们:垂杨科技
确 认