我正在研究一个涉及OpenPlant模式的iModel.js项目。 iModel文件已使用MicroStation桥上传至iModelHub。我已经能够成功;
我正在尝试获取所有过程管道和过程设备类的列表,并将它们显示在窗格中。我正在做SELECT * FROM Bis.Element GROUP BY ECClassId
。这给了我所有元素和对应的classID的列表,但是这个列表似乎并不完整。我只得到4种过程设备类(CentrifugalPump
,Drum
,Vessel
和Tank
)和5种过程管道类(ConcentricPipeReducer
,Nozzle
,GateValve
,Pipeline
,PipeRun
和ThreeWayValve
)。
如何获得所有课程的清单?
答案 0 :(得分:3)
似乎您仅在查询iModel的实例数据。结果有限的类列表包含iModel文件中存在的实际元素。该文件仅包含这4种过程设备类和5种过程管道类类型的物理(或功能)元素,这就是您看到的那些原因的原因。
幸运的是,每个iModel文件都有一个ECDbMeta ECSchema
。 ECDbMeta 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/