美文网首页
利用Dynamo进行模型版本对比

利用Dynamo进行模型版本对比

作者: 九哥BIMer | 来源:发表于2021-11-17 17:40 被阅读0次

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

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

    先来看一段视频演示:

    此处为语雀视频卡片,点击链接查看:003-模型调整跟踪.mp4

    比较同一个模型的不同版本,找出新增,删除以及更改的内容,虽然感觉上实现应该不难,但是让你在 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 对比,也可以转换成字符串进行对比,看你的操作习惯,例如对比参数,我们可以定义一个自定义函数,如下:

        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]
    

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

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

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

    image

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

    相关文章

      网友评论

          本文标题:利用Dynamo进行模型版本对比

          本文链接:https://www.haomeiwen.com/subject/ouzltrtx.html