■ 何守旺
Auto CAD Civil 3D中自定义部件的实现方法
■ 何守旺
对Auto CAD Civil 3D中自定义部件技术进行分析,剖析其实现实质,提出.NET语言设计自定义部件的实施步骤,并结合铁路隧道洞口位置选择软件中的自定义部件的具体实践验证该方法的可行性。
Auto CAD Civil 3D;自定义部件;几何单元;逻辑目标;隧道洞口
在Auto CAD Civil 3D中,部件是道路设计的基本构造块,一个部件就是一个A u t o C A D图形对象(AECCSubassembly),是用于定义道路横断面、构建道路等三维模型的重要组成部分。此处的道路是广义道路,实际上指一个具有路线水平几何特性、纵断面垂直几何特性及横断面几何特性的三维带状模型,不仅可以是铁路、公路、城市道路,还可以是地铁、桥梁、隧道、挡土墙、水渠、大坝、管线、护坡、绿化带等。Auto CAD Civil 3D通过工具选项板和工具目录提供了大量预配置部件(如车道、路肩、中间带和边坡),这些部件都是由一些点、连接和造型进行定义,基本能满足使用要求,但在实际工程项目应用中,根据项目特点和要求还需自定义部件。
在Auto CAD Civil 3D中,可以通过以下3种方式实现自定义部件:(1)从多段线创建自定义部件;(2)使用部件编辑器创建部件;(3)使用.NET语言设计部件。一般对于形状固定且不需指定逻辑目标的部件,使用第一种方式就可以很快实现,如渠道、路缘石等;而对于形状动态变化(需参数驱动)的部件,需要后2种方式来设计。部件编辑器(Autodesk Subassembly Composer)是通过可视化的软件界面和图形交互方式创建部件,但此方式的逻辑判断中不支持循环条件,因此经常需要使用.NET语言设计部件。
1.1 部件几何单元和代码
部件有3种几何单元:点(Point)、连接(Link)、造型(Shape),它们分别形成部件的顶点、点之间的一条直线段、连接围成的闭合横断面区域。基于这3种几何单元来生成AutoCAD Civil 3D道路模型的线、曲面和结构体,即沿着中心线进行纵向延伸,“点”形成纵向要素线,“连接”形成纵向带状面,“造型”形成纵向空间带,且每个部件可由任意多个点、连接和造型构成。
需要为几何单元指定代码(即创建有意义的文字名称),用来标识几何单元的工程含义,每个几何单元可以没有代码,也可以有任意多个代码(多个代码之间用逗号分隔)。其中,点代码是要素代码,指定构成部件连接的端点;连接代码是为构成道路部件的每个连接指定的要素代码;造型代码主要用于定义不同材质的填充图案及为材质体积表格提取面积。在构建道路模型时,沿着线路方向,相同代码的几何单元被连接成为连续的构造(没有代码的几何单元不会被连接),点代码、连接代码还直接影响到横断面的标注,因此必须在创建部件前仔细设计代码方案。
1.2 逻辑目标
逻辑目标是某些部件的形体关联到道路外部的对象,逻辑目标分为曲面、宽度或偏移(水平方向),坡度或高度(竖直方向)。对于曲面逻辑目标,仅可使用曲面对象定义该曲面,如道路边坡一定要和曲面相交,那么地形曲面就是边坡部件的逻辑目标。对于水平方向的宽度逻辑目标,可使用路线、多段线、要素线或测量地物对象定义宽度或偏移。类似地,对于垂直方向的高度逻辑目标,可使用纵断面、三维多段线、要素线或测量地物对象来定义。将这3种逻辑目标组合使用就可以进行很多复杂的设计,如在翼墙设计中需要考虑翼墙与端墙的切合,为此要联合应用高度逻辑目标和宽度逻辑目标。为使部件具有较高的灵活性,并能根据外部环境的不同而自动变化,设计时通常使用虚拟目标,只有在建立道路模型时,才需要为每个部件指定要关联的外部对象。
1.3 部件程序模块
在自定义部件的.NET项目中,需要添加C3DStockSubassemblies.dll程序集引用。在这个工程项目中,含有3个关键文件:(1)SATemplate.vb文件。定义了SATemplate类,所有自定义部件都必须定义一个该类的派生类,并在其模块中实现若干个标准函数,SATemplate提供了4个需要重载的函数,GetLogicalNamesImplement函数定义运行时逻辑指定列表,该列表可以在建模模式中创建;GetInputParametersImplement函数定义必须为部件定义的输入参数列表;GetOutputParametersImplement函数定义由部件生成的输出参数列表;DrawImplement读取用户定义的输入参数和逻辑指定,调整部件造型,然后在已有装配中增加点、连接和造型。上列函数都需要传入CorridorState类型的对象,该对象是自定义部件和将要连接装配的点、连线和造型集合的主要接口,提供许多特性和方法,包括当前里程、当前路线和纵断面、当前偏移和高程、图层、颜色、直线样式及线宽。某些特性(如CurrentAlignment特性)本身又提供了多组方法和特性,这些特性还包括若干参数集合,用于收集布尔、长整形、双精度、字符串路线、纵断面、曲面和点等类型参数。(2)CodesSpecific.vb文件。提供CodeType和AllCodes结构,以及全局变量代码,即带有填充信息的AllCodes结构实例。(3)Utilities.vb文件。提供一系列辅助功能函数,如错误处理、计算部件几何,以及附着代码字符和其他任务等。
1.4 二次开发程序中对自定义部件的调用
对自定义部件的管理是以Autodesk工具目录的形式实现,即使用带有.ATC扩展名的XML格式文件定义,定义部件工具目录的内容和组织,描述所有工具目录及目录内的工具。在基于.NET API对AutoCAD Civil 3D进行二次开发的程序中,对部件的调用主要以SubassemblyCollection类的3个成员函数来实现:Add函数实现将多段线实体转换为自定义部件;ImportSubassembly函数根据Autodesk工具目录的.ATC文件及目录内的工具调用自定义部件;ImportStockSubassembly函数实现在.NET形状生成模式下,根据.NET装配名称和.NET类名称调用自定义部件,对用.NET语言设计的部件的调用都用该函数,有时需要结合SubassemblyGenerator类,实现对部件的直接替换。
以.NET为例,在具体实施过程中,一般按照以下步骤自定义部件:(1)规划与分析,对部件几何造型、应用目的及设计操作中如何使用部件进行精心规划与分析;(2)创建设计文档,主要描述部件的附着方式、参数、运行时逻辑指定、行为、代码方案等;(3)编程实现。
根据以上方法和步骤,以翼墙式隧道洞门翼墙为例,在Auto CAD Civil 3D平台上利用.NET API进行铁路隧道洞口位置选择软件自定义部件的定制。
2.1 规划与分析
在翼墙式隧道洞门中,翼墙在正面起到抵抗山体纵向推力、增加洞门抗滑及抗倾覆能力的作用,两侧面保护路堑边坡起挡土墙作用,由墙身、顶水沟、基础组成。设计中需要考虑翼墙高度、厚度、边坡、仰坡、胸坡及排水,与其关联对象有路堑边坡、端墙,随着翼墙高度变化,考虑增加厚度,且需要考虑与端墙的切合,因此逻辑对象包括顶水沟高度、基础高度和定位线偏移。最后为了计算材料,需要将其造型分为外露面、墙身、顶水沟、基础。翼墙装配见图1。
2.2 创建设计文档
翼墙部件的附着点位于隧道内轨顶面与翼墙外侧面交线上。输入参数主要为翼墙高度和厚度、边坡比、胸坡比、仰坡比、基底坡度、基础埋深、顶水沟宽度和深度、外露面厚度、侧水沟深度和宽度。翼墙部件运行时逻辑指定见表1。
翼墙部件基于给定的输入参数值生成翼墙基础和墙身结构的连接,需要考虑部件行为间的差异,主要是随着翼墙高度变化,翼墙厚度变化,且需要考虑与端墙的切合。翼墙部件的点、连接和造型示意见图2、图3。
2.3 编程实现
第一步:新建项目。在项目类型中选择Visual C#语言,然后在模板列表中选择“类库”项目,最后输入项目名称及项目存储位置,完成新建项目。
第二步:添加引用。添加对acdbmgd.dll、acmgd.dll、accoremgd.dll、AecBaseMgd.dll、AeccDbMgd.dll、C3DStockSubassemblies.dll程序集的引用,并把引用的DLL库文件的“复制本地”属性设置为“False”。
第三步:项目属性设置。在项目属性页对话框中,将“应用程序”选项卡中的“目标框架”设置为“.NET Framework 4”,将“调试”选项卡中的“启动外部程序”设置为AutoCAD Civil 3D 2014主程序acad.exe的路径。
第四步:加入命名空间。根据实现功能要求,加入需要的命名空间。
第五步:实现翼墙类。Wing Wall Subassembly类继承于SATemplate基础类,重载Get Logical Names Implement、Get Input Parameters Implement、Draw Implement三个函数,在Draw Implement中,Param Elevation Target Collection、 Param Offset Target Collection、Param Double Collection三个集合实现从对象中获取关联参数(图2中P0与P1点将用这些获取参数计算得到),Point Collection、Link Collection、Shape Collection三个集合实现创建部件的点、连接、造型,并为几何单元定义代码。
第六步:使用部件。通过安装自定义部件或直接在项目中通过API调用来使用部件。
在AutoCAD Civil 3D的应用中,自定义部件是必须掌握的一项技能。探析自定义部件的关键技术,重点分析.NET语言设计部件的方法,并将该方法应用于实际铁路隧道洞口位置选择软件的开发中,取得了很好效果,但该方法对设计人员要求较高。在项目的具体应用中,根据具体情况,将自定义部件的3种方式组合应用不失为一种较佳选择。
[1] 任耀.Auto CAD Civil 3D 2013应用宝典[M].上海:同济大学出版社,2013.
[2] 秦洪现,崔惠岚,孙剑,等.Autodesk系列产品开发培训教程[M].北京:化学工业出版社,2008.
[3] 曾洪飞,卢择临,张帆.Auto CAD VBA&VB.NET开发基础与实例教程[M].北京:中国电力出版社,2013.
[4] 何守旺.基于.NET的Auto CAD Civil 3D二次开发技术及应用[J].铁路技术创新,2014(5):42-44.
[5] 张小英,朱海涛.隧道洞口三维设计系统的应用[J].华东公路,2010(5):78-81.
[6] 易平,骆秀萍.土石坝设计中Auto CAD Civil 3D技术的应用[J].甘肃水利水电技术,2013(11):39-41.
[7] 江宝刚.浅谈Autodesk Civil 3D软件在工程中的应用[J].山西建筑,2008(16):364-365.
何守旺:中铁第一勘察设计院集团有限公司,工程师,陕西 西安,710043
责任编辑 高红义
U459.1;TP39
A
1672-061X(2015)06-0084-03