标题 | Revit二次开发在钢管混凝土拱桥建模中的应用 |
范文 | 江神文 摘 要: 针对大跨度钢管混凝土拱桥变高度空间桁架主拱,利用Revit平台提出基于上下弦杆节点坐标的建模方法,以族為基础,阐述了模型建立的关键技术,并基于.NET平台,结合Revit API提出了主拱圈建模的二次开发技术,解决了Revit本身无法通过输入三维坐标点方式生成钢管构件的难点,大大提高了主拱圈的建模效率,保证了模型的准确性。 关键词: 钢管拱; Revit; 二次开发; 快速建模 1 引言 从传统二维CAD设计向三维参数化设计转型中,结构专业遇到了较大的阻碍,效率问题是其中重要问题之一。Revit平台提供的结构模型是非常有效的参数化信息载体,其三维设计方法与传统二维绘图方式从根本上发生了转变,结构设计效率问题严重降低了结构设计人员的热情[1]。基于BIM技术的结构设计只需要建立一个模型,不同的阶段无需重复建模,而是将各自的设计信息通过工作集的方法高度集成在同一个模型中,开展协同设计[2]。大跨度钢管混凝土拱桥目前在西南地区跨越峡谷建设越来越多,其拱肋通常采用空间桁架形式,杆件复杂且多,采用以往的二维平面制图,只需要将各个节点坐标导入到CAD中进行点到线。但在Revit平台建模中,确定一个点坐标需要三个互相垂直的平面,主桁架的节点如果都通过这种方式来确定,不但严重影响了建模的效率,而且平面之间的相对位置错误不易检查。为了解决上述问题,借助Revit API(Application Programming Interface)二次开发技术,针对钢管主拱桁架的特点,开发通用插件,具有重要意义。 2 主拱圈参数化建模 在Revit软件中,搭建模型的步骤为:选择族样板—>创建族—>添加族参数—>项目文件中载入族。主拱作为钢管拱的最基本受力结构,建模的目标不仅是能生成可视化的三维信息模型,还要方便生成分析模型,以供分析软件进行调用。采用“公制结构框架—梁和支撑”生成基于两点的钢管族,在项目文档中通过API定制插件生成主拱圈模型 2.1 钢管构件生成 主拱圈拱肋主要构件承重构件均采用钢管,钢管的型号包括φ1360×35、φ900×24、φ600×20等等。直径和壁厚作为钢管构件的共同属性,可以采用“公制结构框架—梁和支撑”样板文件定义钢管族,添加直径d(mm)和壁厚t(mm)两个参数值。为了方便快捷添加众多钢管型号,可以编制和钢管族同名的TXT文件放在同一文件目录下,TXT格式如图 2所示,在项目文件中可以完成一次性载入所有型号的钢管构件。 选取某计算跨径450m钢管混凝土拱桥主拱圈采用等宽变高度空间桁架结构,断面高度从拱顶8m变化到拱脚14m,单片拱肋宽度4m。针对桁架式主拱圈的特殊性,利用Revit API二次开发技术定制插件,一键搭建拱圈模型。 2.2 快速建模 钢管族在项目生成杆件实例,需要给出起终点位置坐标,首先我们通过主拱圈设计图先获取主拱圈上下弦杆的节点坐标,保存成.xls格式文件,一般以拱脚中心作为主拱圈的原点,纵桥向为x轴,横桥向为y轴,竖向为z轴。类Command从IExternalCommand派生,在该类中定义两个动态数组m_beamMaps和m_level分别用来存储当前活动文档中的族类型(SymbolMap类) 和标高(LevelMap类)。 交互窗体CreateBeaml类基于System.Windows.Forms.Form实例化,在窗体除添加Label控件外,需添加4个ComboBox组合框控件和两个dataGridView控件。其中ComboBox组合框用来确认所使用的杆件类型,dataGridView用来导入.xls格式的上下弦杆坐标。Execute()函数运行的主体代码为: m_revit = commandData.Application; Transaction tran = new Transaction(m_revit.ActiveUIDocument.Document, “CurvedBeam”); tran.Start(); bool initializeOK = Initialize();if (!initializeOK){return Autodesk.Revit.UI.Result.Failed;} CreateBeam displayForm = new CreateBeam(this);displayForm.ShowDialog(); tran.Commit(); 因为插件执行需要对文档进行更改,所以创建事务“CurvedBeam”,第一步执行初始化函数Initialize(),为窗体ComboBox组合框插件准备数据。初始化函数需要用到元素逻辑过滤器(LogicalOrFilter)筛选出当前文档中的框架族和标高,其核心代码如下: ElementClassFilter levelFilter =new ElementClassFilter(typeof(Level)); //过滤标高 ElementClassFilter famFilter =new ElementClassFilter(typeof(Family)); //过滤族 LogicalOrFilter orFilter = new LogicalOrFilter(levelFilter, famFilter); //逻辑或集合 FilteredElementCollector collector = new FilteredElementCollector(doc); //元素收集器 FilteredElementIterator i = collector.WherePasses(orFilter).GetElementIterator(); //过滤出元素 |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。