Intergraph Smart® 3D二次开发实现管道模型智能移动的研究
2022-02-14华陆工程科技有限责任公司刘晓辉余萌
■ 华陆工程科技有限责任公司 刘晓辉 余萌
Smart 3D作为海克斯康SmartPlant®Enterprise系列产品的重要组成部分,能够提供流程工厂设计所需的几乎所有三维设计功能。Smart 3D以数据为核心技术,强大的规则和关系型架构、定制的自动化功能和多专业模型复用方法,使其能够执行更大、更复杂的项目,实现集成设计和过程管理。Smart 3D以SQL Server或Oracle为项目数据平台,所有的模型数据都以对象的形式存放在项目数据库中,在充分利用数据库强大功能的同时,也保证了数据格式的通用性。
采用智能三维设计软件Smart 3D进行模型设计,不但能够提高工程设计效率,而且能够保证设计质量,加快工程建设速度。多专业在统一的平台上进行协同设计,做到专业间数据集成,保证数据的一致性。Smart 3D软件由此已成为石油、化工、造船行业主流的三维设计软件。
1.用户痛点描述
在管道三维设计过程中,设计人员经常要根据设计条件的变更,对已建模的管线布置进行调整,有时需要对管系中局部对象进行移动。例如,将图1所示的阀组的布置整体往东移动300mm,或者将图2所示装置内管廊某根管道向南移动150mm。
图1 阀组整体向东移动300mm
图2 管廊某根主管及分支整体向南移动150mm
类似的修改或移动,在三维设计过程中出现的较为频繁。凡是具有PDS应用经验的设计人员很容易就会联想到,在PDS中有一个Move Pipe Run的功能,可以一键实现上述模型的修改需求。然而,想要在Smart 3D软件中实现这一操作,却是一件令人唏嘘的难事。
Smart 3D软件中所有管道对象之间都存在关联关系,管系在调整过程中,不仅主管系自身要发生移动,根据其移动的方向,所连接的支管部分部件也要随其发生移动。如果对象选择不慎,局部的移动可能会导致相关管线的倾斜或错位,正所谓牵一发而动全身。使用软件提供的默认方式进行移动时,用户不仅要选中主管系的相关部件,根据移动方向不同,分支管道的相关部件也需要一并选中,这样才可能实现用户希望达到的移动效果,而这些部件的选取过程只能通过手动选择来完成。
Smart 3D虽然提供了便捷的对象框选功能,但化工装置中往往空间受限,一个空间里存在多个管系的部件,这时如果使用框选功能就很容易框选到其他非必要的部件,或者没框选到需要的部件,需要再次去逐个手工点击选择相关的部件,这一过程极其繁琐,且容易出现遗漏。
鉴于此,我们考虑是否可以在Smart 3D中,通过二次开发实现类似PDS中Move Pipe Run的功能,即根据模型修改的规则,让软件智能选取到需要移动的所有管道部件,并按照设计人员设定的方向和距离实现模型移动。
2.Move Pipe Run功能实现
2.1 逻辑初步构思
以图3为例,假设我们要对某段管系偏移一个向量 的距离,那么这个管系在向量 法平面α内所有的特征部件Feature应该通过一定的关系被找到并选中。可以让用户在所要移动的方向上任意选中一个直管段,然后根据用户输入的移动方向,程序根据内部设置的规则智能选择整个管系中需要移动的特征部件,再根据用户输入的偏移距离,自动进行整体移动(图4)。
图3 平面整体移动
图4 相关部件同时移动
2.2 难点分析
装置内管线走向变化多端且可能存在复杂的多分支管线,如何去构思一个严谨的逻辑,使程序可以自动且精确地选中所有需要移动的部件,是一个难题。如果直接对管系α平面内所有的特征部件都移动,单靠每个部件的位置属性去判断其是否移动,肯定是有问题的,如管廊上含有π弯的管道就不适用这种情况(图5)。
图5 装置外管廊
Smart 3D有强大的关系型数据库结构做支撑,对于一定范围内的对象,我们都可以通过关系去一级一级地找到它们。经过多次分析研究,我们决定从选中部件出发,通过关系逐个递推式查找管系中的每一个部件,并根据条件去判断其是否需要被移动。
2.3 关于程序界面设计
为了最大程度地方便用户快捷修改,我们对程序界面也做了简化处理,用户只需输入一个偏移距离,然后再点击相关的方向按钮,即可完成操作。命令执行过程中只执行一次Commit操作,如果命令执行完没有达到用户预期的效果,可以直接执行Undo命令,撤销本次操作。
2.4 程序具体逻辑图
上述逻辑的核心在于遍历所有特征部件的一个递归函数,在实际项目中,主管系可能连接了多个分支管道,其数量和连接形式不定,要想遍历完整个管系的每一个部件,仅靠一般的循环遍历无法完成,递归函数可以在此处巧妙地解决这个问题。
通过图6的逻辑,我们可以利用程序快速地查找到管系中需要移动的特征部件,并使用ClientServiceProvider.SelectSet.SelectedObjects.Add()命令选中这些对象。然后,对选中对象进行遍历偏移,修改每个特征部件的位置属性,即可在Smart 3D中实现Move Pipe Run的功能(图7)。
图6 程序逻辑图
图7 效果展示
2.5 程序开发过程中遇到的一些问题
2.5.1 关于Pipe Straight Feature的移动
在开发过程中,我们发现,对于管系中的Pipe StraightFeature不能去直接改变其Location属性。Pipe Straight Feature属于非特征部件,只需移动其他的特征部件Feature,Pipe Straight Feature的位置会随其一起移动。
2.5.2 关于管系中存在偏心大小头的情况
假如管系中存在偏心大小头且偏心方向垂直于要移动的面,由于偏心大小头两端的Position.Z(假设是向上或向下偏移)属性不一致,会导致递归函数在查找到此处时中断查找,但在此处是需要继续向下查找的。对此,解决办法:在递归函数中加入一个简单的判断,遍历过程中如果Part的名字中包含“Eccentric”字符,则认为此处是一个偏心大小头,继续向下查找,并更新相关的参考坐标数值。
2.5.3 关于管系中存在End Feature的情况
在开发过程中,我们发现,在移动过程中如果移动部件的某一端存在End Feature,需要将End Feature一并选中,如果不选择管系End Feature,移动后End Feature端的位置不会移动,从而导致管段发生倾斜。我们可以通过写一个简单的Get End Feature()函数来解决这个问题,每次遍历管系部件的过程中将其带入Get End Feature()函数来判断其是否连接了End Feature,如果连接,则将此End Feature一并添加到选中对象集合中。
3.总结
Move Pipe Run功能目前已在华陆公司多个项目中使用,受到了设计人员的一致好评,用户原本需要两到三分钟完成的事情,现在只需要几秒钟就可以完成,有效提高了设计人员的工作效率和工作质量,并提升了用户的软件使用体验。
工欲善其事,必先利其器。Smart 3D软件是一款优秀的工业智能三维设计软件,其架构非常严谨,并预留了大量可供二次开发的接口,且支持多语言的开发环境。工程公司在使用过程中如何利用好这个开放的平台,根据自己公司需求去定制开发需要的功能,帮助设计人员提高设计效率,还需要更多专业工程师结合实际工作不断进行深入的钻研尝试。