成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

「翻譯」在Forge Viewer上實(shí)作簡易的模型版本比較

JowayYoung / 3056人閱讀

摘要:現(xiàn)在讓我們修改這個示例讓他可以展示兩個同項(xiàng)目但不同版號的模型及。示例執(zhí)行結(jié)果如下這邊是這個比較模型的括展代碼英文原文

熟悉 BIM360 Team 的朋友可能知道他有一個很牛的模型文檔版本比較的功能,但如果模型是放在 Google 云盤或是百度云盤上有可能做到嗎?

Autodesk Forge 團(tuán)隊先前寫了一個從 Google 云盤的轉(zhuǎn)檔示例,這個示例會從 Google 云盤里下載模型文檔到你的服務(wù)器上,在將它上傳到 Forge Data Management 服務(wù)上進(jìn)行轉(zhuǎn)檔,同時在轉(zhuǎn)檔完成后在瀏覽器上展示結(jié)果。

現(xiàn)在讓我們修改這個示例讓他可以展示兩個同項(xiàng)目但不同版號的 Revit 模型(model A 及 model B)。在 Forge Viewer 里,每個 Revit 構(gòu)件都會對應(yīng)到一個 dbId,而這個 dbId 也會對應(yīng)到一個 Reivt 唯一碼(Unique GUID),這個唯一碼也是 Forge Viewer 的外部編碼(Extenal Id),所以只要在 model A 及 model B 里比對兩者間有沒有不存在的 Extenal Id,以及比對同一個 External Id 的構(gòu)件屬性里有沒有被新增、修改及刪除的參數(shù),根據(jù)這個思路我們可以將沒有修改的構(gòu)件隱藏起來,有異動的構(gòu)件以綠色(新增的)、紅色(刪除的)及橘色(有修改的)來上色,就可以在 Forge Viewer 上做出簡單的模型比較功能,原代碼可以參考這里,示例可造訪這里。

示例執(zhí)行結(jié)果如下:

這邊是這個比較模型的括展代碼:

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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/83209.html

相關(guān)文章

  • Autodesk Forge Viewer 信息本地化技術(shù)分析

    摘要:默認(rèn)情況下,是英文環(huán)境,調(diào)取的是的資源其實(shí)無需翻譯。但是,如前面提到的,語言包只是包含了部分常規(guī)字串的翻譯,如果遇到?jīng)]有包含的常規(guī)字串怎么辦呢例如,本例中的語言包并沒有對,進(jìn)行翻譯,所以即使切換了語言,它們?nèi)耘f是英文。 注:本文是個人調(diào)試分析所得,非官方文檔,請酌情選用參考。文中分析的數(shù)據(jù)由https://extract.autodesk.io轉(zhuǎn)換下載而來。 談到信息本地化,個人覺得包...

    littleGrow 評論0 收藏0
  • Forge Viewer 里切換模型視圖(Viewables)

    摘要:有提供類似的功能,但這并不包含在里頭。條列清單或是切換視圖是非常容易的,你主要是要建立一個使用者介面讓使用者去選取他們想觀看的內(nèi)容。我使用了來確保當(dāng)前載入模型占用的內(nèi)存可以都被釋出。 此篇文章原作是 Autodesk ADN Philippe Leefsma,以下以我簡稱。 這有一個簡易的博客用來說明一個我剛加入 https://forge-rcdb.autodesk.io 的一個新功...

    BlackHole1 評論0 收藏0
  • 翻譯」優(yōu)化 Viewer3D.search 效能

    摘要:搜索所需的時間會依據(jù)你的模型大小及你搜索字串的空白數(shù)量而定,搜索的效能差異是有可能從幾秒鐘有引號變成數(shù)分鐘沒有引號的。從上圖看來,就可以知道在搜索時加上引號是怎么對效能有顯著的影響。 Viewer3D.search 是一個非常有用的搜索函數(shù),他可以讓你清楚的知道你模型里面有什么信息,但他的響應(yīng)時間很容易因你搜索內(nèi)容而拉長。請試著想象如果我們需要進(jìn)行多次的搜索,但每次都需要一段很長的時間...

    hearaway 評論0 收藏0
  • Viewer模型加載本地離線緩存實(shí)戰(zhàn)

    摘要:本文將介紹來自顧問團(tuán)隊的國際同事原創(chuàng)的緩存范例,利用廣泛用于開發(fā)的典型接口實(shí)現(xiàn)。因而在緩存模型時,可以調(diào)用該接口緩存所有相關(guān)的,無需用到。代碼示例我們制作了讓用戶選擇模型作離線緩存的例子,查看代碼請訪問,在線演示請訪問。 演示視頻:http://www.bilibili.com/video... 由于Autodesk Forge是完全基于RESTful API框架的云平臺,且暫時沒有本...

    oogh 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<