Autodesk.Viewing.OBJECT_TREE_CREATED_EVENT испускают только при первой инициализации в средстве просмотра Forge - PullRequest
0 голосов
/ 14 мая 2019

export const initForgeViewer = (urn: string, renderingHTMLElemet: HTMLElement): Promise<any> => {
  const forgeOptions = getForgeOptions(urn)
  return new Promise((resolve, reject) => {
    Autodesk.Viewing.Initializer(forgeOptions, () => {
      const viewerConfig = {
        extensions: ["ToolbarExtension"],
        sharedPropertyDbPath: undefined,
        canvasConfig: undefined, // TODO: Needs documentation or something.
        startOnInitialize: true,
        experimental: []
      }
      const viewer = new Autodesk.Viewing.Private.GuiViewer3D(renderingHTMLElemet, viewerConfig)
      const avd = Autodesk.Viewing.Document
      viewer.setTheme('light-theme')
      viewer.start()
      avd.load(forgeOptions.urn, (doc: any) => { // Autodesk.Viewing.Document
        const viewables = avd.getSubItemsWithProperties(doc.getRootItem(), { type: 'geometry', role: '3d' }, true)
        if (viewables.length === 0) {
          reject(viewer)
          return
        } else {
          const initialViewable = viewables[0]
          const svfUrl = doc.getViewablePath(initialViewable)
          const modelOptions = { sharedPropertyDbPath: doc.getPropertyDbPath() }
          viewer.loadModel(svfUrl, modelOptions, (model: any) => { // Autodesk.Viewing.Model
            this.loadedModel = model
            resolve(viewer) 
          })
        }
      })
    })
  })
}

Я использую приведенный выше код для инициализации просмотра Forge.Но я понимаю, что Autodesk.Viewing.OBJECT_TREE_CREATED_EVENT испускает только первый раз, когда я инициализирую просмотрщик Forge.Если я очищу зрителя следующим образом и инициализирую его снова.OBJECT_TREE_CREATED_EVENT будет уволен

this.viewer.finish()   

this.viewer.removeEventListener(Autodesk.Viewing.OBJECT_TREE_CREATED_EVENT,this.onObjectTreeReady)

this.viewer = null

1 Ответ

0 голосов
/ 15 мая 2019

Итак, я могу предположить, что вы полностью уничтожаете зрителя и создаете его снова, включая все события, верно?Пожалуйста, используйте следующее:

viewer.tearDown()
viewer.finish()
viewer = null

Проверено с использованием v6

...