首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在一个视口中从多个imodels渲染合并的imodel?

如何在一个视口中从多个imodels渲染合并的imodel?
EN

Stack Overflow用户
提问于 2021-07-14 15:33:11
回答 1查看 38关注 0票数 0

我已经将多个imodels合并到一个文件中,如下所示(来自iModeljs测试代码):

代码语言:javascript
复制
const mergedIModelFileName: string = "...path/combined.bim";
const mergedDb = SnapshotDb.createEmpty(mergedIModelFileName, {
  rootSubject: { name: "Merge Test" },
});
const campusSubjectId: Id64String = Subject.insert(
  mergedDb,
  IModel.rootSubjectId,
  "Campus"
);

const garageSubjectId: Id64String = Subject.insert(
  mergedDb,
  IModel.rootSubjectId,
  "Garage"
);

const buildingSubjectId: Id64String = Subject.insert(
  mergedDb,
  IModel.rootSubjectId,
  "Building"
);

mergedDb.saveChanges("Create Subject hierarchy");

if (true) {
  const campusIModelFileName = "...path/source1";
  const campusDb = SnapshotDb.openFile(campusIModelFileName);
  const transformer = new IModelTransformer(campusDb, mergedDb, {
    targetScopeElementId: campusSubjectId,
  });
  await transformer.processSchemas(new BackendRequestContext());
  transformer.context.remapElement(IModel.rootSubjectId, campusSubjectId);
  await transformer.processAll();
  transformer.dispose();
  mergedDb.saveChanges("Imported Campus");
  
  campusDb.close();
}
if (true) {
  const garageIModelFileName =
    "...path/source2";
  const garageDb = SnapshotDb.openFile(garageIModelFileName);

  const transformer = new IModelTransformer(garageDb, mergedDb, {
    targetScopeElementId: garageSubjectId,
  });
  transformer.context.remapElement(IModel.rootSubjectId, garageSubjectId);
  await transformer.processAll();
  transformer.dispose();
  mergedDb.saveChanges("Imported Garage");

  garageDb.close();
}

if (true) {
  const buildingIModelFileName =
    "...path/source3";
  const buildingDb = SnapshotDb.openFile(buildingIModelFileName);
  const transformer = new IModelTransformer(buildingDb, mergedDb, {
    targetScopeElementId: buildingSubjectId,
  });
  await transformer.processSchemas(new BackendRequestContext());
  transformer.context.remapElement(IModel.rootSubjectId, buildingSubjectId);
  await transformer.processAll();
  transformer.dispose();
  mergedDb.saveChanges("Imported Building");

  buildingDb.close();
}
mergedDb.close();

它给出了合并的imodel文件。然而,它提供了具有不同视图的合并的imodel文件。

enter image description here

enter image description here

enter image description here

我想要和需要的是看到我合并在一个视口中的所有模型。有没有这样做的IModelTransformOptions?如果可能的话,如果你能给我一些代码来解释,我将非常感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-15 08:39:17

您可以使用或不使用IModelTransformer来实现这一点,这取决于您最终想要得到什么。

一旦有了合并的iModel,就可以使用ViewCreator3D.createDefaultView函数创建包含合并模型中所有3D模型的默认视图。

如果希望合并现有的SpatialViewDefinition,可以创建IModelTransformer的子类并覆盖onTransformElementshouldExportElement,以形成一个组合的视图definition+model选择器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68373873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档