Autodesk Forge 查看器加载自定义属性
Autodesk forge viewer loading customized properties
我正在查看器中加载模型、添加自定义按钮、获取所有元素及其属性。我希望能够更改其中一些属性,然后在模型上查看更改。即使它不会更新翻译后的文件(仅在查看器中)
这就是我加载模型的方式
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 函数获取所有元素和属性。我希望能够推送更新的 db
看看这个 link,您应该找到添加属性的方法:
Adding Custom Properties Property Panel
我没有测试它,所以我不知道您是否可以修改现有属性,并且它不会跨会话持久存在,因为它只更改查看器中的值,而不是数据库中的值。
在 v7.37 之后对 setProperties 函数进行了更新(我认为),而不是我使用 setAggregatedProperties,它适用于添加自定义属性。
我正在查看器中加载模型、添加自定义按钮、获取所有元素及其属性。我希望能够更改其中一些属性,然后在模型上查看更改。即使它不会更新翻译后的文件(仅在查看器中)
这就是我加载模型的方式
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 函数获取所有元素和属性。我希望能够推送更新的 db
看看这个 link,您应该找到添加属性的方法: Adding Custom Properties Property Panel
我没有测试它,所以我不知道您是否可以修改现有属性,并且它不会跨会话持久存在,因为它只更改查看器中的值,而不是数据库中的值。
在 v7.37 之后对 setProperties 函数进行了更新(我认为),而不是我使用 setAggregatedProperties,它适用于添加自定义属性。