利用Dynamo进行模型版本对比

本文介绍了如何使用Dynamo和Python在BIM项目中对比模型的不同版本,包括检测新增图元、删除图元,以及参数和几何的变化。作者分享了基于图元GUID的新增/删除判断方法,并提到了使用参数快照和几何转换的技巧。
摘要由CSDN通过智能技术生成

你好,这里是 BIM 的乐趣,我是九哥~

今天我们来聊一个老生常谈的话题——模型版本对比。

先来看一段视频演示:

Dynamo模型版本对比

比较同一个模型的不同版本,找出新增,删除以及更改的内容,虽然感觉上实现应该不难,但是让你在 Dynamo 里写这么个程序,相信很多人也是不知道该如何上手。今天我们就来聊聊如何用 Dynamo 写这么个程序。

最开始是自己胡乱尝试,获取参数对比参数之类的,发现效率特别低,后来就在 Bing 上搜了下,发现大佬 Jeremy Tammik 博客里介绍过。在他的帖子中提到过解决问题的两种方法,其中有一个就是比较模型的 “快照”。看了这篇文章对我启发挺大的,所以就照着尝试了一下。

文章里详细介绍了比较方法,并且创建了 GitHub 库,有二开需求的小伙伴,直接去看看估计就搞定了,我这里呢,就是类比下,把相同的方法,用 Python 实现,并在 Dynamo 里做成一种通用的简便快捷的方法。

接下来进入正题,我们要对比 Revit 模型的版本变化,主要是对比几方面:

  1. 新增图元
  2. 删除图元
  3. 参数变化
  4. 几何变化
  5. 参数和几何均变化

一、判断图元是新增还是删除,我们可以使用图元的 GUID

这一步很简单,遍历 A 模型的图元 GUID 是否在 B 模型列表内,反过来再遍历 B 模型的图元 GUID 是否在 A 模型列表内,这样就能找出新增还是删除的图元了。

newguid = [e for e in docAguid if e not in docBguid]
deletedguid = [e for e in docBguid if e not in docAguid]

二、判断图元和参数变化

这里就用到了 “快照” 的概念,可以将参数和几何转换成 Encode 对比,也可以转换成字符串进行对比,看你的操作习惯,例如对比参数,我们可以定义一个自定义函数,如下:

def parametersnapshot(x):
	parameters = x.Parameters
	paramnames = [p.Definition.Name for p in parameters]
 	sortedindex = sorted(range(len(paramnames)), key = lambda k : paramnames[k])
 	sortedparameters = [paramnames[i] for i in sortedindex]
 	paramvalues = []
 	for p in parameters:
    	if p.AsString() != None:
     	paramvalues.append(p.AsString())
    else :
    	paramvalues.append(p.AsValueString())
  	sortedvalues = [paramvalues[i] for i in sortedindex]
  	return ', '.join(['%s : %s' % (param,value) for param,value in zip(sortedparameters,sortedvalues)])

几何的话,需要先将 solid 转换成 Mesh,再获取 Mesh 的顶点,再转换成字符串进行对比,效率就高很多了。

这个需要自己去多尝试了,我的方法不一定是最好的,就不展示,小伙伴们子去试试哈~

然后将所有的对比结果依次输出即可,也可输出对比的图元 ID,在 Revit 中对图元进行颜色区分,就可以很清楚的表达出我们的对比结果了~

好了,今天的分享就到这里,小伙伴们快去自己尝试吧~
 

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九哥BIMer

予人玫瑰,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值