ADN Open CIS
Сообщество программистов Autodesk в СНГ

27/02/2018

Поддержка многомодельного поиска в Forge Viewer v4.0

С выпуском версии 4.0 Forge Viewer, вы сможете использовать «браузер модели» для поиска среди нескольких моделей.

Это краткая демонстрация, показывающая, как загрузить две модели: «ручная пила» и «1-й этаж здания».  

Вот исходный код загрузки:

Код - JavaScript: [Выделить]
  1.             var urnHandsaw = "dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnJwYXJ0eTEvSGFuZF9Sb3V0ZXIuZjNk";
  2.             var urnLevel1 = "dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnJwYXJ0eTEvRG9nX0hvdXNlXzIwMTZfQ2xhc3NpZmllZF9XaXRoTWF0ZXJpYWxUZXh0dXJlLmR3Zg";
  3.  
  4.             function onLoadSuccessInit() {
  5.                 var viewables = viewerApp.bubble.search({ 'type': 'geometry' });
  6.                 if (viewables.length < 1) return;
  7.                 viewerApp.selectItem(viewables[0].data);
  8.             }
  9.  
  10.             function onLoadSuccess(doc) {
  11.                 var viewables = viewerApp.bubble.search({ 'type': 'geometry' });
  12.                 const path = doc.getViewablePath(viewables[0].data);
  13.                 console.log(viewables);
  14.                 const posOptions = {
  15.                     placementTransform: (new THREE.Matrix4()).setPosition({x:1,y:100,z:1}).scale({x:2,y:2,z:2})
  16.                 };
  17.                 var viewables = viewerApp.bubble.search({ 'type': 'geometry' });
  18.                 let viewer = viewerApp.getCurrentViewer();
  19.                 viewer.loadModel(path, posOptions);
  20.             };
  21.  
  22.             function onInitialized() {
  23.                 viewerApp = new Autodesk.Viewing.ViewingApplication('forgeViewer');
  24.                 viewerApp.registerViewer( viewerApp.k3D, Autodesk.Viewing.Private.GuiViewer3D );  
  25.                 viewerApp.loadDocument( "urn:"+urnHandsaw, onLoadSuccessInit);
  26.                 window.setTimeout(e =>
  27.                     viewerApp.loadDocument( "urn:"+urnLevel1, onLoadSuccess), 3000);
  28.  
  29.             };
  30.             options = getViewingOptions();
  31.             Autodesk.Viewing.Initializer( options, onInitialized);
  32.         }

Во время загрузки, я устанавливаю матрицу преобразования как для уменьшения размера здания, так и для его сдвига над пилой (как видно из кода ниже) - просто чтобы выделить эти две совершенно разные модели.

Код - JavaScript: [Выделить]
  1. const posOptions = {
  2.    placementTransform: (new THREE.Matrix4()).setPosition({x:1,y:100,z:1}).scale({x:2,y:2,z:
  3. };
  4. viewer.loadModel(path, posOptions);

Теперь, со сценой на месте, нажмите на браузер модели и введите в новое окно поиска «bas», теперь вы увидите результаты поиска для обеих моделей:

«basic wall» от здания и «BasePlate1» из проекта HandSaw.   

Вы можете видеть это на видео выше.

Точно так же вы можете правильно установить видимость, блики и ореолы на нескольких моделях.
Раньше работали только результаты первой модели.  

Есть еще некоторые причуды с отражением земли и тенями.

Вы можете найти исходный код здесь. 

А демо здесь.

Источник: https://forge.autodesk.com/blog/multimodel-search-support-forge-viewer-v40

Автор перевода: Дмитрий Емельянов

Обсуждение: http://adn-cis.org/forum/index.php?topic=

Опубликовано 27.02.2018
Отредактировано 27.02.2018 в 14:53:08