模型对比方法

1. 发起模型对比

调用服务端API即可发起模型对比。

API:发起模型对比

2. 等待对比结果

转换发起后,一般需要等待5~10分钟,你可以通过两种方式获取对比状态:

1)BIMFACE完成对比后,回调(即callback)你的系统。我们推荐这种方式;回调的URL在调用“发起模型对比”的API时通过参数指定,如何处理回调结果,请参考“发起模型对比”API的详细说明。

2)您也可以调用服务端“获取模型对比状态”

API:获取模型对比状态

3. 首先显示修改后的模型

按照显示单文件的方式,直接显示修改后的模型,请注意,务必采用“进阶方式”或“高级方式”。

4. 在修改后的模型上叠加几何差异模型

1)获取几何差异模型的ViewToken

调用服务端“获取ViewToken”API,输入参数:compareId。

API:获取ViewToken

2)在前端,使用JSSDK提供的method,把几何差异模型添加到场景

// 修改后模型的viewToken
var viewToken = '<viewToken>';

// 使用compareId换取的几何差异模型的viewToken
var viewTokenDiff = '<viewTokenDiff>';

// 初始化显示组件
var options = new BimfaceSDKLoaderConfig();
options.viewToken = viewToken;
BimfaceSDKLoader.load(options, successCallback, failureCallback);

function successCallback(viewMetaData) {

    // 获取DOM元素
    var dom4Show = document.getElementById('domId');
    var webAppConfig = new Glodon.Bimface.Application.WebApplication3DConfig();
    webAppConfig.domElement = dom4Show;
    
    // 创建WebApplication
    var app = new Glodon.Bimface.Application.WebApplication3D(webAppConfig);
    
    // 添加修改后的模型
    app.addView(viewToken);
    
    // 监听添加view完成的事件
    app.addEventListener(Glodon.Bimface.Application.WebApplication3DEvent.ViewAdded, function () {
    
        // 从WebApplication获取viewer3D对象
        var viewer3D = app.getViewer();
    
        // 添加模型对比差异部分
        viewer3D.addView(viewTokenDiff);
        viewer3D.render();
    });
}

function failureCallback(error) {
    console.log(error);
};

5. 获取变更的构件列表

为了更好地显示模型对比结果,需要对变更的构件进行相应的着色处理,因此,我们需要调用服务端“分页获取模型对比结果”API获取新增、删除、修改前后的构件ID。

API:分页获取模型对比结果

6. 对变更构件着色

注意:

  • 新增构件的objectIds为followingElementId
  • 删除构件的objectIds为previousFileId.previousElementId
  • 修改前构件的objectIds为previousFileId.previousElementId
  • 修改后构件的objectIds为followingElementId

步骤:

1)首先,隔离掉没有变化的构件,让其半透明

// 根据上述服务端接口,填充所有变化的构件ID
var allChangedObjectIds = "<allChangedObjectIds>";
viewer3D.isolateComponentsById(allChangedObjectIds, Glodon.Bimface.Viewer.IsolateOption.MakeOthersTranslucent);

2)然后,对于删除的构件着色,如:红色

// 红色
var redColor = new Glodon.Web.Graphics.Color(255, 0, 0, 1);

// 根据上述服务端接口,得到删除的构件ID
var deletedObjectIds = "<deletedObjectIds>";
viewer3D.overrideComponentsColorById(deletedObjectIds, redColor);

3)对新增的构件着色,如:绿色

参考第2步。

4)对修改构件,修改前的构件ID着色,如:浅黄色

参考第2步。

5)对修改构件,修改后的构件DI着色,如:黄色

参考第2步。

7. 针对修改的构件,显示前后属性的变更结果

修改的构件,其构件ID并未发生变化,但属性值一定发生了变化,可能存在新增、删除、修改的属性,您可以通过服务端“获取模型构件对比差异”API来获取。

API:获取模型构件对比差异