BIM模型属性生产过程中需要填写桩号,里面包括起点桩号,终点桩号,定位桩号。填写方式为从中心线起点开始量取,不同的桩号量取方式如下:
由于试验段自己参与了生产,在结合中心线手动量取了几十个构件的起终点桩号后,当时的心情:
通过分析,人工手动量取填写有两个难点:(1)构件数量多,一段5公里的模型构件数量就多达几千个,且部分模型形状不规则,纯手工填写效率低;(2)在道路转弯处,采用量取工具无法准确沿着道路中心进行量取,想要量取准确难度很大。
在此背景下,结合Bentley软件的特性,利用FME,在迭代了无数版本后,终于达到了想要的效果,不仅比人工量取快数倍,并且更准确。
实现功能重点用到以下转换器:HullReplacer、NeighborFinder、FeatureJoiner、LengthToPointCalculator、StatisticsCalculator
(官方详细手册值得拥有https://pan.baidu.com/share/init?surl=MwytFv-wQc98A_jiYdeToQ,密码:2020)
核心思路其实很简单,直接生成模型的外包平面多边形(HullReplacer),将多边形上的点都投影到中心线上(NeighborFinder、FeatureJoiner),计算每个点到中心线起点的距离(LengthToPointCalculator),再进行统计分类统计(StatisticsCalculator),计算每个模型到中心线起点的最小值(对应起点桩号)、最大值(对应终点桩号)、平均值(对应定位桩号)。
使用C#给工具做了个界面方便使用,让我们来一起看看最终的效果吧(看图片水印,欢迎关注公众号,里面有演示视频)。
当然,这里面还涉及到了很多其他情况影响正确性和效率,比如,模型外包矩形的节点,碰巧最小值或最大值的那个点投影到中心线上时,中心线上该位置刚好有个节点,就会出现这个点无法投影到中心线上,后续计算出来的桩号就不够准确。
或者,不同种类的构件,又碰巧A构件的最小值或最大值和B构件的最小值或者最大值投影到中心线上的位置相同,那么就只有一个能投影上,甚至同一类构件也存在这种情况(例如,一杆多牌的标志牌,版面大小和方向完全一样,只是高度不同,两者的顶视图平面外包多边形完全一致)。
又比如,一条路由于太长,被拆分成了4段由不同人生产,你手里拿到的是第3段,你就需要知道前2段结束时的里程,你模型对应的中心线起点就不是从0开始的,需要从第2段的结束里程开始,怎么灵活的传递这个参数,让不同起点的人都可以直接算出最终的里程,也都是需要考虑的环节。
同时,模型体量大、构件多,操作起来异常复杂,如何操作更快速,更准确也是非常值得研究和提升,这也是迭代无数版本的原因,如果大家感兴趣,以上多种情况的解决方式可以继续深入的讲解。