如何在iModel.js中获取所有类

时间:2018-10-09 17:31:10

标签: imodeljs

我正在研究一个涉及OpenPlant模式的iModel.js项目。 iModel文件已使用MicroStation桥上传至iModelHub。我已经能够成功;

  1. 获取IMS访问令牌
  2. 通过传入访问令牌,CONNECT项目ID和iModel ID打开iModelDb
  3. 使用executeQuery命令对iModelDb对象运行ECSql查询。

我正在尝试获取所有过程管道和过程设备类的列表,并将它们显示在窗格中。我正在做SELECT * FROM Bis.Element GROUP BY ECClassId。这给了我所有元素和对应的classID的列表,但是这个列表似乎并不完整。我只得到4种过程设备类(CentrifugalPumpDrumVesselTank)和5种过程管道类(ConcentricPipeReducerNozzleGateValvePipelinePipeRunThreeWayValve)。

如何获得所有课程的清单?

1 个答案:

答案 0 :(得分:3)

似乎您仅在查询iModel的实例数据。结果有限的类列表包含iModel文件中存在的实际元素。该文件仅包含这4种过程设备类和5种过程管道类类型的物理(或功能)元素,这就是您看到的那些原因的原因。

幸运的是,每个iModel文件都有一个ECDbMeta ECSchemaECDbMeta ECSchema是一种架构,提供有关架构本身的信息(依次为实例数据赋予其含义)。模式中的所有类定义在iModel中都作为其自己的单独数据集存在。存在此信息的唯一目的是使实例数据的上下文可移植。

例如,当您执行SELECT * FROM Bis.Element时,将获得iModel中当前存在的所有Bis.Elements的列表。如您所见,所有这些元素都有自己的类ID。 Nozzle只是另一个Bis.Element,但它是在Nozzle模式中定义的ProcessPipingFunctional子类类型。

您可以查询ECDbMeta ECSchema,以获取在Process Piping和Piping设备模式中定义的所有类的列表。以下是一些示例SELECT语句:

  

“选择名称AS名称,别名AS别名,ECInstanceId AS ID来自ECDbMeta.ECSchemaDef的按名称排序”

以上语句将为您提供所有导入到您要查询的iModel中的模式的列表。一旦获得此列表,就可以为您正在寻找的流程和管道模式获取schema.id。然后,您可以使用这些ID来运行以下查询:

  

“从ECDbMeta.ECClassDef中选择名称AS名称,在ECClassDef.Schema.Id =?按名称排序”

此查询将为您提供在这些模式中定义的所有类的列表。

有关metaschemas的更多信息:https://imodeljs.github.io/iModelJs-docs-output/learning/ecdbmeta.ecschema/