forge viewer多模型加载后获取每个模型的模型对象和id
时间: 2023-12-04 20:02:41 浏览: 229
如果您在 Forge Viewer 中加载了多个模型,您可以使用以下代码获取每个模型的模型对象和 ID:
```javascript
var models = viewer.impl.modelQueue().getModels();
models.forEach(function(model) {
var modelId = model.id;
var modelObject = model;
console.log("Model ID: ", modelId);
console.log("Model Object: ", modelObject);
});
```
这段代码使用 `modelQueue()` 函数获取 Viewer 中所有的模型队列,并将其存储在 `models` 变量中。然后,使用 `forEach()` 函数迭代每个模型,并分别获取其 ID 和模型对象,将其分别存储在 `modelId` 和 `modelObject` 变量中。最后,将这些信息输出到控制台中,以便您查看和调试。
请注意,此代码将获取所有已加载的模型,包括主模型和从模型。如果您只需要获取主模型或从模型,则需要进行进一步的筛选和过滤。
相关问题
forge viewer如何先加载一个模型再加载多个模型,同时点击按钮变成一个模型、
如果您想在 Forge Viewer 中先加载一个模型,然后再加载多个模型,您可以使用以下代码来实现:
```javascript
var mainModelPath = 'path/to/main/model.svf';
var secondaryModelPaths = ['path/to/secondary/model1.svf', 'path/to/secondary/model2.svf', 'path/to/secondary/model3.svf'];
// 加载主模型
Autodesk.Viewing.Initializer(
{env: 'AutodeskProduction'},
function() {
var viewer = new Autodesk.Viewing.GuiViewer3D(document.getElementById('MyViewerDiv'));
var options = {
'document': mainModelPath,
'env': 'AutodeskProduction',
'getAccessToken': function(onTokenReady) {
var token = 'YOUR_ACCESS_TOKEN';
var timeInSeconds = 3600;
onTokenReady(token, timeInSeconds);
}
};
viewer.start(options, function() {
console.log('主模型加载成功!');
// 加载第二个模型
loadSecondaryModels(viewer, secondaryModelPaths);
});
}
);
// 加载第二个模型
function loadSecondaryModels(viewer, modelPaths) {
modelPaths.forEach(function(modelPath) {
var options = {
'document': modelPath,
'env': 'AutodeskProduction',
'getAccessToken': function(onTokenReady) {
var token = 'YOUR_ACCESS_TOKEN';
var timeInSeconds = 3600;
onTokenReady(token, timeInSeconds);
}
};
Autodesk.Viewing.Document.load(options.document, function(document) {
var secondaryModel = document.getRoot().getDefaultGeometry();
viewer.loadDocumentNode(document, secondaryModel, {keepCurrentModels: true});
console.log('第二个模型加载成功!');
});
});
}
// 点击按钮显示/隐藏第二个模型
var btn = document.getElementById('toggleSecondaryModelBtn');
var isSecondaryModelVisible = true;
btn.addEventListener('click', function() {
if (isSecondaryModelVisible) {
viewer.hideAll();
viewer.showModel(mainModelPath);
isSecondaryModelVisible = false;
} else {
viewer.showAll();
isSecondaryModelVisible = true;
}
});
```
这段代码首先使用 `Autodesk.Viewing.Initializer()` 函数初始化 Viewer,并使用 `viewer.start()` 函数加载主模型。一旦主模型加载成功,`loadSecondaryModels()` 函数将被调用,来加载所有的第二个模型。该函数使用 `forEach()` 函数迭代所有第二个模型,并使用 `Autodesk.Viewing.Document.load()` 函数加载每个模型。加载成功后,使用 `viewer.loadDocumentNode()` 函数将其添加到 Viewer 中。
最后,使用 `viewer.hideAll()` 和 `viewer.showAll()` 函数来控制第二个模型的显示和隐藏。当按钮被点击时,将切换第二个模型的可见性,并将按钮文本更新为相应的状态。
请注意,这里使用的是 `showModel()` 和 `hideAll()` 函数来控制模型的可见性,而不是 `show()` 和 `hide()` 函数。这是因为前者可以同时显示/隐藏多个模型,而后者只能显示/隐藏当前活动模型。
forge viewer 如何加载多模型到查看器中
要加载多个模型到 Forge Viewer 中,可以按照以下步骤进行操作:
1. 首先,使用 Forge 提供的 Model Derivative API 将各个模型转换为 SVF 格式(或其他支持的格式)。
2. 将每个模型的 URN(唯一资源名称)保存下来。
3. 在 Viewer 中,使用 Viewer3D 对象的 loadDocumentNode 方法加载第一个模型,该方法需要传入 URN 和要加载的节点 ID。
4. 对于每个附加模型,使用 Viewer3D 对象的 loadModel 方法加载模型,该方法需要传入 URN 和一个回调函数,在回调函数中将新模型添加到场景中。
以下是示例代码:
```
var viewer;
function loadInitialModel() {
var urn = 'first-model-urn';
var nodeId = 1;
Autodesk.Viewing.Initializer(options, function() {
viewer = new Autodesk.Viewing.Viewer3D(document.getElementById('viewer'));
viewer.loadDocumentNode(urn, nodeId);
});
}
function loadAdditionalModel() {
var urn = 'additional-model-urn';
Autodesk.Viewing.Document.load(urn, function(doc) {
var geometryItems = Autodesk.Viewing.Document.getSubItemsWithProperties(doc.getRootItem(), {
'type': 'geometry',
'role': '3d'
}, true);
if (geometryItems.length > 0) {
var item = geometryItems[0];
viewer.loadModel(doc.getViewablePath(item), function(model) {
viewer.impl.addModel(model);
});
}
}, function(error) {
console.log(error);
});
}
```
注意,以上代码仅供参考,具体实现方式可能会因应用场景和需求而有所不同。
阅读全文