微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Autodesk forge 查看器加载自定义属性

如何解决Autodesk forge 查看器加载自定义属性

我正在查看器中加载模型,添加自定义按钮,获取所有元素及其属性。我希望能够更改其中一些属性,然后查看模型上的更改。即使它不会更新翻译的文件(仅在查看器中)

这就是我加载模型的方式

function displayViewer() {
const options = {
  env: 'AutodeskProduction',api: 'derivativeV2',accesstoken: accesstoken
}

const documentId = 'urn:' + urn
let viewerApp: any
window.Autodesk.Viewing.Initializer(options,onInitialized)
function onInitialized() {
  const htmlDiv = document.getElementById('forgeViewer')
  viewerApp = new window.Autodesk.Viewing.GuiViewer3D(htmlDiv,{
    extensions: ['MyAwesomeExtension','CustomPropertyPanelExtension']
  })
  const startedCode = viewerApp.start()
}
window.Autodesk.Viewing.Document.load(documentId,onDocumentLoadSuccess)

function onDocumentLoadSuccess(viewerDocument: any) {
  const viewerapp = viewerDocument.getRoot()
  const md_ViewerDocument = viewerDocument // Hold the viewerDocument in a global variable so that we can access it within SelectViewable()
  const md_viewables = viewerapp.search({ type: 'geometry' })
  const sel = document.getElementById('viewables')
  for (let i = 0; i < md_viewables.length; i++) {
    const opt = document.createElement('option')
    opt.innerHTML = md_viewables[i].data.name
    opt.value = md_viewables[i].data.name
    sel && sel.appendChild(opt)
  }
  viewerApp.loadDocumentNode(viewerDocument,md_viewables[0])
  if (md_viewables.length > 1) {
    const viewablesDIV = document.getElementById('viewables_dropdown')
  }
}
}

这就是我添加按钮的方式

class MyAwesomeExtension extends window.Autodesk.Viewing.Extension {
    constructor(viewer: any,options: any) {
      super(viewer,options)
      this._group = null
      this._button = null
    }

    load() {
      return true
    }

    unload() {
      // Clean our UI elements if we added any
      if (this._group) {
        this._group.removeControl(this._button)
        if (this._group.getNumberOfControls() === 0) {
          this.viewer.toolbar.removeControl(this._group)
        }
      }
      return true
    }

    onToolbarCreated() {
      // Create a new toolbar group if it doesn't exist
      this._group = this.viewer.toolbar.getControl('allMyAwesomeExtensionsToolbar')
      if (!this._group) {
        this._group = new window.Autodesk.Viewing.UI.ControlGroup('allMyAwesomeExtensionsToolbar')
        this.viewer.toolbar.addControl(this._group)
      }

      // Add a new button to the toolbar group
      this._button = new window.Autodesk.Viewing.UI.Button('myAwesomeExtensionButton')
      this._button.onClick = (ev: any) => {
        const instanceTree = this.viewer.model.getData().instanceTree
        const allDbIdsstr = Object.keys(instanceTree.nodeAccess.dbIdToIndex)
        const test = allDbIdsstr.map(function (id) {
          return parseInt(id)
        })
        this.viewer.model.getBulkProperties(test,null,function (elements: any) {
          addData(elements)
        })
        setaValidate(!validate)
      }
      this._button.setToolTip('Validate')
      this._group.addControl(this._button)
    }
  }
  window.Autodesk.Viewing.theExtensionManager.registerExtension('MyAwesomeExtension',MyAwesomeExtension)
}
},[deskLoaded,accesstoken,extension,urn])

addData 函数获取所有元素和属性。我希望能够推送更新的数据库

解决方法

看看这个链接,你应该找到一种添加属性的方法: Adding Custom Properties Property Panel

我没有对其进行测试,所以我不知道您是否可以修改现有属性,并且它不会跨会话保持不变,因为它只会更改查看器中的值而不是数据库中的值。

,

在 v7.37(我认为)之后对 setProperties 函数进行了更新,而是使用了 setAggregatedProperties,它用于添加自定义属性。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。