混淆了查看器API与示例,将选项传递给扩展

Confused with Viewer API vs example, passing options to extensions

本文关键字:选项 扩展 API      更新时间:2023-09-26

我很困惑,因为关于如何使用Viewer的示例似乎与API的文档不匹配,有些函数不在文档中,或者它们的签名不同。

基于示例代码,我如何将选项传递给我实例化的扩展?我想给我的分机打个回叫。

谢谢!

我们需要修复文档,使其不再依赖于未记录的A360查看器附加代码,该代码应该是内部的。很抱歉给您带来不便,我们会尽快完成。。。

目前,您可以使用我的查看器样板示例中的代码:

function initializeViewer(containerId, urn) {
    Autodesk.Viewing.Document.load(urn, function (model) {
      var rootItem = model.getRootItem();
      // Grab all 3D items
      var geometryItems3d = Autodesk.Viewing.Document.getSubItemsWithProperties(
        rootItem,
        { 'type': 'geometry', 'role': '3d' },
        true);
      // Grab all 2D items
      var geometryItems2d = Autodesk.Viewing.Document.getSubItemsWithProperties(
        rootItem,
        { 'type': 'geometry', 'role': '2d' },
        true);
      var domContainer = document.getElementById(containerId);
      //UI-less Version: viewer without any Autodesk buttons and commands
      //viewer = new Autodesk.Viewing.Viewer3D(domContainer);
      //GUI Version: viewer with controls
      viewer = new Autodesk.Viewing.Private.GuiViewer3D(domContainer);
      viewer.initialize();
      viewer.setLightPreset(8);
      //Button events - two buttons to load/unload a sample extension
      // Irrelevant to viewer code itself
      var loadBtn = document.getElementById('loadBtn');
      loadBtn.addEventListener("click", function(){
        loadExtension(viewer);
      });
      var unloadBtn = document.getElementById('unloadBtn');
      unloadBtn.addEventListener("click", function(){
        unloadExtension(viewer);
      });
      // Illustrates how to listen to events
      // Geometry loaded is fired once the model is fully loaded
      // It is safe to perform operation involving model structure at this point
      viewer.addEventListener(
        Autodesk.Viewing.GEOMETRY_LOADED_EVENT,
        onGeometryLoaded);
      //optional
      var options = {
        globalOffset: {
          x: 0, y: 0, z: 0
        }
      }
      // Pick the first 3D item ortherwise first 2D item
      var viewablePath = (geometryItems3d.length ?
        geometryItems3d[0] :
        geometryItems2d[0]);
      viewer.loadModel(
        model.getViewablePath(viewablePath),
        options);
    }, function(err) {
      logError(err);
    });
  }

一旦查看器初始化,您就可以独立加载每个扩展并按如下方式传递回调:

var options = {
     onCustomEventFiredByMyExtension: function() {
         console.log('LMV rulez!')
     }
 }
 viewer.loadExtension('MyExtensionId', options)

但我认为一个更优雅的方法是从扩展本身启动事件,它可能看起来像这样:

 viewer.loadExtension('MyExtensionId')
 var myExtension = viewer.getExtension('MyExtensionId')
 myExtension.on('CustomEvent', function () {
     console.log('LMV still rulez!')
 })

有关超级简单的事件库,请参阅微事件。