0

我遵循了 Philippe Leefsma 的关于如何实现标记工具的教程,但没有任何运气。链接在这里:http ://adndevblog.typepad.com/cloud_and_mobile/2016/02/playing-with-the-new-view-data-markup-api.html

在这里:https ://developer.api.autodesk.com/viewingservice/v1/viewers/docs/tutorial-feature_markup.html

我收到需要包含 requireJS 的错误,但我不想使用它。所以我在我的 html 文件中使用了这个脚本:

<script src="https://autodeskviewer.com/viewers/2.2/extensions/MarkupsCore.js">

我不知道这是否是正确的方法?我在控制台中没有收到任何错误,但标记按钮没有出现在停靠面板中。

这是我在查看器中加载扩展的代码:

viewerApp = null;

function initializeViewer(containerId, urn, params) {
function getToken(url) {

    return new Promise(function (resolve, reject) {

        $.get(url, function (response) {
            resolve(response.access_token);
        });
    });
}
var initOptions = {
    documentId: 'urn:' + urn,
    env: 'AutodeskProduction',
    getAccessToken: function (onGetAccessToken) {
        getToken(params.gettokenurl).then(function (val) {
            var accessToken = val;
            var expireTimeSeconds = 60 * 30;
            onGetAccessToken(accessToken, expireTimeSeconds);
        });
    }
}

function onDocumentLoaded(doc) {
    var rootItem = doc.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);
    // Pick the first 3D item otherwise first 2D item
    var selectedItem = (geometryItems3d.length ?
            geometryItems3d[0] :
            geometryItems2d[0]);

    var domContainer = document.getElementById('viewerContainer');

    var config = { extensions: ["Autodesk.Viewing.MarkupsCore"] };

    // GUI Version: viewer with controls
    var viewer = new Autodesk.Viewing.Private.GuiViewer3D(domContainer, config);
    viewer.loadExtension("Autodesk.Viewing.MarkupsCore");

    viewer.initialize();

    viewer.loadModel(doc.getViewablePath(selectedItem));

    var extension = viewer.getExtension("Autodesk.Viewing.MarkupsCore");

    viewerApp = viewer;


}

function onEnvInitialized() {
    Autodesk.Viewing.Document.load(
      initOptions.documentId,
      function (doc) {
          onDocumentLoaded(doc);
      },
      function (errCode) {
          onLoadError(errCode);
      })
}

function onLoadError(errCode) {
    console.log('Error loading document: ' + errCode);
}

Autodesk.Viewing.Initializer(
  initOptions,
  function () {
      onEnvInitialized()
  })
}

非常感谢任何帮助!

4

1 回答 1

0

不幸的是,自从我写了那篇博文以来,API 发生了一些变化。MarkupCore.js 现在包含在 viewer3D.js 源代码中,因此如果您使用最新版本的查看器 API,则无需引用任何额外文件或使用 requireJS。

请记住,这是一个仅限 API 的功能,因此即使在加载标记扩展之后,您也不会获得任何开箱即用的 UI。您必须自己实现它,例如创建一个带有按钮的对话框,最终可能通过调用 API 创建标记。

我的博客文章中的一些代码可能仍然有效,并让您了解需要做什么。

希望有帮助。

于 2017-01-23T16:45:46.613 回答