摘要:現(xiàn)在讓我們修改這個(gè)示例讓他可以展示兩個(gè)同項(xiàng)目但不同版號(hào)的模型及。示例執(zhí)行結(jié)果如下這邊是這個(gè)比較模型的括展代碼英文原文
熟悉 BIM360 Team 的朋友可能知道他有一個(gè)很牛的模型文檔版本比較的功能,但如果模型是放在 Google 云盤或是百度云盤上有可能做到嗎?
Autodesk Forge 團(tuán)隊(duì)先前寫了一個(gè)從 Google 云盤的轉(zhuǎn)檔示例,這個(gè)示例會(huì)從 Google 云盤里下載模型文檔到你的服務(wù)器上,在將它上傳到 Forge Data Management 服務(wù)上進(jìn)行轉(zhuǎn)檔,同時(shí)在轉(zhuǎn)檔完成后在瀏覽器上展示結(jié)果。
現(xiàn)在讓我們修改這個(gè)示例讓他可以展示兩個(gè)同項(xiàng)目但不同版號(hào)的 Revit 模型(model A 及 model B)。在 Forge Viewer 里,每個(gè) Revit 構(gòu)件都會(huì)對(duì)應(yīng)到一個(gè) dbId,而這個(gè) dbId 也會(huì)對(duì)應(yīng)到一個(gè) Reivt 唯一碼(Unique GUID),這個(gè)唯一碼也是 Forge Viewer 的外部編碼(Extenal Id),所以只要在 model A 及 model B 里比對(duì)兩者間有沒(méi)有不存在的 Extenal Id,以及比對(duì)同一個(gè) External Id 的構(gòu)件屬性里有沒(méi)有被新增、修改及刪除的參數(shù),根據(jù)這個(gè)思路我們可以將沒(méi)有修改的構(gòu)件隱藏起來(lái),有異動(dòng)的構(gòu)件以綠色(新增的)、紅色(刪除的)及橘色(有修改的)來(lái)上色,就可以在 Forge Viewer 上做出簡(jiǎn)單的模型比較功能,原代碼可以參考這里,示例可造訪這里。
示例執(zhí)行結(jié)果如下:
這邊是這個(gè)比較模型的括展代碼:
function VersionChanges(viewer, options) { Autodesk.Viewing.Extension.call(this, viewer, options); } VersionChanges.prototype = Object.create(Autodesk.Viewing.Extension.prototype); VersionChanges.prototype.constructor = VersionChanges; VersionChanges.prototype.load = function () { var modelA = this.options.modelA; var modelB = this.options.modelB; var removed = {}; var added = {}; var modified = {}; var red = new THREE.Vector4(1, 0, 0, 1); var green = new THREE.Vector4(0, 0.5, 0, 1); var orange = new THREE.Vector4(1, 0.6, 0.2, 1); viewer.addEventListener(Autodesk.Viewing.OBJECT_TREE_CREATED_EVENT, function () { listElements(function (listA, listB) { // make all elements as ghost viewer.isolate(-1); viewer.clearThemingColors(modelA); viewer.clearThemingColors(modelB); for (var extIdA in listA) { if (listB[extIdA] != null) continue; var dbIdA = listA[extIdA].dbId; removed[extIdA] = dbIdA; console.log("Removed dbId: " + dbIdA); viewer.impl.visibilityManager.show(dbIdA, modelA); viewer.setThemingColor(dbIdA, red, modelA); } for (var extIdB in listB) { if (listA[extIdB] != null) continue; var dbIdB = listB[extIdB].dbId added[extIdB] = dbIdB; console.log("Added dbId: " + dbIdB); viewer.impl.visibilityManager.show(dbIdB, modelB); viewer.setThemingColor(dbIdB, green, modelB); } for (var extId in listA) { if (typeof listB[extId] === "undefined") continue; // removed dbId var dbId = listA[extId].dbId; // should be the same as listB[extId] var propsA = listA[extId].properties; var propsB = listB[extId].properties; for (var i = 0; i < propsA.length; i++) { if (propsB[i] == null) continue; if (propsA[i].displayCategory.indexOf("__")==0) continue; // internal properties if (propsA[i].displayValue != propsB[i].displayValue) { console.log("Property " + dbId + ": " + propsA[i].displayName + " changed from " + propsA[i].displayValue + " to " + propsB[i].displayValue); modified[extId] = dbId; } } if (typeof modified[extId] != "undefined") { console.log("Modified dbId: " + dbId); // color on both models //viewer.impl.visibilityManager.show(dbId, modelA); //viewer.impl.visibilityManager.show(dbId, modelB); viewer.setThemingColor(dbId, orange, modelA); viewer.setThemingColor(dbId, orange, modelB); } } }); }); function listElements(callback) { getAllLeafComponents(modelA, function (modelAdbIds) { getAllLeafComponents(modelB, function (modelBdbIds) { // this count will help wait until getProperties end all callbacks var count = modelAdbIds.length + modelBdbIds.length; var modelAExtIds = {}; modelAdbIds.forEach(function (modelAdbId) { modelA.getProperties(modelAdbId, function (modelAProperty) { modelAExtIds[modelAProperty.externalId] = {"dbId": modelAdbId, "properties": modelAProperty.properties}; count--; if (count == 0) callback(modelAExtIds, modelBExtIds); }); }); var modelBExtIds = {}; modelBdbIds.forEach(function (modelBdbId) { modelB.getProperties(modelBdbId, function (modelBProperty) { modelBExtIds[modelBProperty.externalId] = {"dbId": modelBdbId, "properties": modelBProperty.properties}; count--; if (count == 0) callback(modelAExtIds, modelBExtIds); }); }); }); }); } function getAllLeafComponents(model, callback) { var components = []; function getLeafComponentsRec(tree, parentId) { if (tree.getChildCount(parentId) > 0) { tree.enumNodeChildren(parentId, function (childId) { getLeafComponentsRec(tree, childId); }); } else components.push(parentId); return components; } var instanceTree = model.getInstanceTree(); var allLeafComponents = getLeafComponentsRec(instanceTree, instanceTree.nodeAccess.rootId); callback(allLeafComponents); } return true; }; VersionChanges.prototype.unload = function () { return true; }; Autodesk.Viewing.theExtensionManager.registerExtension("Autodesk.Forge.Samples.VersionChanges", VersionChanges);
英文原文:https://forge.autodesk.com/bl...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/83209.html
摘要:默認(rèn)情況下,是英文環(huán)境,調(diào)取的是的資源其實(shí)無(wú)需翻譯。但是,如前面提到的,語(yǔ)言包只是包含了部分常規(guī)字串的翻譯,如果遇到?jīng)]有包含的常規(guī)字串怎么辦呢例如,本例中的語(yǔ)言包并沒(méi)有對(duì),進(jìn)行翻譯,所以即使切換了語(yǔ)言,它們?nèi)耘f是英文。 注:本文是個(gè)人調(diào)試分析所得,非官方文檔,請(qǐng)酌情選用參考。文中分析的數(shù)據(jù)由https://extract.autodesk.io轉(zhuǎn)換下載而來(lái)。 談到信息本地化,個(gè)人覺(jué)得包...
摘要:有提供類似的功能,但這并不包含在里頭。條列清單或是切換視圖是非常容易的,你主要是要建立一個(gè)使用者介面讓使用者去選取他們想觀看的內(nèi)容。我使用了來(lái)確保當(dāng)前載入模型占用的內(nèi)存可以都被釋出。 此篇文章原作是 Autodesk ADN Philippe Leefsma,以下以我簡(jiǎn)稱。 這有一個(gè)簡(jiǎn)易的博客用來(lái)說(shuō)明一個(gè)我剛加入 https://forge-rcdb.autodesk.io 的一個(gè)新功...
摘要:搜索所需的時(shí)間會(huì)依據(jù)你的模型大小及你搜索字串的空白數(shù)量而定,搜索的效能差異是有可能從幾秒鐘有引號(hào)變成數(shù)分鐘沒(méi)有引號(hào)的。從上圖看來(lái),就可以知道在搜索時(shí)加上引號(hào)是怎么對(duì)效能有顯著的影響。 Viewer3D.search 是一個(gè)非常有用的搜索函數(shù),他可以讓你清楚的知道你模型里面有什么信息,但他的響應(yīng)時(shí)間很容易因你搜索內(nèi)容而拉長(zhǎng)。請(qǐng)?jiān)囍胂笕绻覀冃枰M(jìn)行多次的搜索,但每次都需要一段很長(zhǎng)的時(shí)間...
摘要:本文將介紹來(lái)自顧問(wèn)團(tuán)隊(duì)的國(guó)際同事原創(chuàng)的緩存范例,利用廣泛用于開發(fā)的典型接口實(shí)現(xiàn)。因而在緩存模型時(shí),可以調(diào)用該接口緩存所有相關(guān)的,無(wú)需用到。代碼示例我們制作了讓用戶選擇模型作離線緩存的例子,查看代碼請(qǐng)?jiān)L問(wèn),在線演示請(qǐng)?jiān)L問(wèn)。 演示視頻:http://www.bilibili.com/video... 由于Autodesk Forge是完全基于RESTful API框架的云平臺(tái),且暫時(shí)沒(méi)有本...
閱讀 2435·2021-10-09 09:59
閱讀 2188·2021-09-23 11:30
閱讀 2599·2019-08-30 15:56
閱讀 1152·2019-08-30 14:00
閱讀 2946·2019-08-29 12:37
閱讀 1264·2019-08-28 18:16
閱讀 1665·2019-08-27 10:56
閱讀 1032·2019-08-26 17:23