国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

JowayYoung / 3053人閱讀

摘要:現(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

相關(guān)文章

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

    摘要:默認(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é)得包...

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

    摘要:有提供類似的功能,但這并不包含在里頭。條列清單或是切換視圖是非常容易的,你主要是要建立一個(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è)新功...

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

    摘要:搜索所需的時(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í)間...

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

    摘要:本文將介紹來(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)有本...

    oogh 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<