从地铁的参数化说说参数化的那点事儿

Connor 欧意交易所 2024-06-26 31 0

大型单位在采购BIM软件的时候,都喜欢让厂商们PK一番,其实能上得了牌桌的都是各自领域的霸主,在一起互撕,对此总让人产生关公战秦琼的即视感。为什么会有这种感觉,是因为它们设计之初都是为了不同的目的而研发的,MicroStation侧重于布置,Catia侧重于制造,Revit是个建筑平台。。。凡此种种不同造成了演化路径不同,这就决定了MicroStation更能表示大场景和弱关联的土木工程,但依然能开发出关联程度很高的线性工程软件ORD,也能进行精细的实体建模和曲面建模,但不能与机械领域的设计制造一体化软件相比,此处所说的不能相比,更确切地说是不必比较,在不同的使用场景下,它们都可以将对方摁在地板上摩擦。

Microstation上的参数化是基于尺寸约束的参数化,参数化对象仅在尺寸上产生变化,如果想要更丰富更复杂的控制,不容易做到,但在骨灰级mdl开发高手面前没什么不可能。下图是我们为客户做的地铁工程的一些参数化构件:

三维模型:

从地铁的参数化说说参数化的那点事儿

从地铁的参数化说说参数化的那点事儿

下图是关联的二维图纸,这并不是将三维图像用变换矩阵压平,而是个参数化的二维图形:

从地铁的参数化说说参数化的那点事儿

展开全文

这类构件是辅助进行工程的布置,在进行工程布置的时候,仅仅关心它的位置和与其它对象的接口,精确的物料统计则需要附加更多的信息。

有些构件不局限在低级别的"零件”级,而是提高到了分部分项的工程级别,甚至是多专业综合的级别,是高层级的范型抽象,在可预期的未来,这些工程的项目的设计和施工模型,都像搭建积木一般,下面的参数化构建就体现了“更聚焦”、“多专业”、“综合”和“复用”的构件概念:

从地铁的参数化说说参数化的那点事儿

上面的两个例子来自华创的开发大神的demo,仅仅是体现了我们聚焦特定领域的思考,世界不仅仅需要厂商稳定的平台产品,更需要下沉到细微末端的行业和专业,解决它们的需求。欲获得更多细节交流,请联系我司人员,如果大神不在闭关或在修炼间歇,或许能给你指点迷津。

上面两例,你用大腿都能想明白,涉及较多的mdl开发内容,比如EC和自定义类型等,有些是很高级的开发内容,资源分散,这些知识虽然在大神脑袋里码放得挺整齐,但在现实里没有捋好的资料给你,写书爬格子这事大神肯定不屑干,你想要弄明白学得会,有些是靠悟性,有些是靠缘分,有时就靠命...

下面的几个参数化的例子就容易多了,原理简单,起点特低,实操性特强,很体谅不信命的你,值得拥有。

参数化元素需要保存与获取状态,状态就是一个数据结构的实例,所谓的具体元素的形状外观只是一个具体的实例的一个可视的映像。

有至少以下几个内容需要实现:

1. 状态的保存与获取,在具体实现的时候可以使用mdl中的多种方式,比如EC或者XAttribute(参见EC和Bentley::DgnPlatform::XAttributeHandler的相关内容),或者自定义的数据序列化与反序列化方式,Boost C++库中的有个非常高级的序列化库可以借鉴,如有兴趣,请移步文章最下方“阅读原文”处。

2. 修改与回调的设置,一般是通过用户界面,此时获取数据(状态),将数据映射到界面,在界面修改的时候,通过设置的回调函数来重新生成新对象,替换旧对象,写入数据(状态)。

具体实现的时候,有几个难点:

(1)如果对一个数据结构设计一个界面,这样过于繁琐,尤其在数据结构过多的时候,这个可以参看Qt库的界面创建方式,在Qt中对话框和各种对话框条目是实时new出来的,不仅不需要事先的定义,还可以创建整齐划一的界面。

(2)在控制多个参数化构件的时候,最好使用ioC容器进行控制反转,让不同的对象类型和回调函数注册到此容器,这样可以隔离变化点,有利于代码封闭。

更多复杂的细枝末节在此不表,你可以按图索骥,迈出第一步。

如果上面的表述让你有点蒙圈,太正常了,别怀疑自己,罗马不是一天建成的,日拱一卒,慢慢来,相信我,这些都不涉及mdl秘籍也不需要大奔家的私货,我们都能玩转它。

来看一个案例,地铁轨道的参数化实现:

有些参数化不仅是自身状态,还有关联的外部元素,比如设计轴线等,如下例,盾构管环的创建与修改:

下面这个例子不仅关联了轴线,还关联了DTM(数字地面高程模型),根据DTM高度调整柱高:

更多的成果心得,后续分享。。。

评论