我们使用 Forge Viewer 来显示 BIM 模型。但是如果我们单击树选择中列出的任何设备,在锻造查看器中设备不会缩放。 如何让选定的装备在锻造查看器中放大?
我们使用了以下代码:
Autodesk.Viewing.Initializer(options, function () {
// Get the viewer div
const viewerDiv = document.getElementById('forgeViewer');
// Initialize the viewer object
const viewer = new Autodesk.Viewing.GuiViewer3D(viewerDiv);
viewer.start();
// Ensure event listeners are added only once
viewer.addEventListener(Autodesk.Viewing.TOOLBAR_CREATED_EVENT, onToolbarCreated);
viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, Loadedevent);
// Initialize the AggregatedView
const view = new Autodesk.Viewing.AggregatedView();
view.init(viewerDiv, options3d);
// Use the same viewer instance
const aggregatedViewer = view.viewer;
// Set custom profile settings
const customProfileSettings = {
settings: {
reverseMouseZoomDir: true,
reverseHorizontalLookDirection: true,
selectionMode: 1 // enum value, 0 is default 'First Object' is 1
}
};
const customProfile = new Autodesk.Viewing.Profile(customProfileSettings);
viewer.setProfile(customProfile);
// Optimize viewer settings
viewer.setQualityLevel(false, false); // Disable ambient occlusion and antialiasing
viewer.setGroundShadow(false); // Disable ground shadow
viewer.setGroundReflection(false); // Disable ground reflection
viewer.setProgressiveRendering(true); // Enable progressive rendering
// Load all manifests
const tasks = models.map(md => loadManifest(md.urn, aggregatedViewer));
Promise.all(tasks)
.then(docs => Promise.resolve(docs.map(doc => {
const bubbles = doc.getRoot().search({ type: 'geometry', role: '3d' });
const bubble = bubbles[0];
if (!bubble) return null;
return bubble;
})))
.then(bubbles => view.setNodes(bubbles));
});
// loadManifest function
function loadManifest(documentId, viewer) {
debugger;
return new Promise((resolve, reject) => {
const onDocumentLoadSuccess = (doc) => {
doc.downloadAecModelData(() => resolve(doc));
// New code for handling selection changes
viewer.addEventListener(Autodesk.Viewing.AGGREGATE_SELECTION_CHANGED_EVENT, (event) => {
if (!event.selections || event.selections.length <= 0 || event.selections.length > 1) return;
const selSet = event.selections[0];
const dbIds = selSet.dbIdArray;
const model = selSet.model;
const dbId = dbIds[0];
model.getProperties(dbId, function (data) {
if (FromPage == '') {
if (FromSelection == '') {
if (Count === 0) {
let instanceTree = model.getInstanceTree();
let parentId = instanceTree.getNodeParentId(dbId);
var objectid = parentId + 1;
if (objectid === PreviousParentId) {
Count = 1;
selectionchangecount = 0;
} else {
viewer.select(parentId, model, Autodesk.Viewing.SelectionType.OVERLAYED);
// or viewer.setAggregateSelection([ { ids: [parentId ], model, selectionType: Autodesk.Viewing.SelectionType.OVERLAYED } ])
Count = 1;
selectionchangecount = 0;
}
PreviousParentId = parentId;
} else {
itemobject = dbId;
selectionchangecount = selectionchangecount + 1;
if (selectionchangecount == fileselectioncount) {
Count = 0;
selectionchangecount = 0;
}
}
} else {
selectionchangecount = selectionchangecount + 1;
if (selectionchangecount == filecount) {
FromSelection = '';
selectionchangecount = 0;
}
itemobject = dbId;
}
} else {
FromPage = '';
itemobject = dbId;
}
});
});
};
Autodesk.Viewing.Document.load(documentId, onDocumentLoadSuccess, reject);
});
}
需要缩放设备的解决方案。
默认情况下,在模型浏览器面板中选择一个元素会将相机聚焦在该元素上。尝试转到 https://aps-simple-viewer-nodejs.autodesk.io/#dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6cGV0cmJyb3otc2FtcGxlcy9yYWNfYWR2YW5jZWRfc2FtcGxlX3Byb2plY3QucnZ0,并选择模型中的任何元素浏览器。您的应用程序中的某些其他设置可能会更改此默认行为。
或者,您可以通过向查看器添加自定义事件处理程序来实现相同的行为,如下所示:
viewer.addEventListener(Autodesk.Viewing.SELECTION_CHANGED_EVENT, function () {
viewer.fitToView(viewer.getSelection());
})