燃热厂站工程解决方案-数字院-张三 - MS版.dgn
该文件中存在一个全名为OpenPlant_3D.01.08的ECSchema
我尝试了很多个获取ECSchema的方法,目前测试只有如下API能够获取成功
FindInstancesScope scope = FindInstancesScope.CreateScope(file, new FindInstancesScopeOption(DgnECHostType.File, false)); eCSchema = DgnECManager.Manager.LocateSchemaInScope(scope, schemaName, versionMajor, versionMinor, SchemaMatchType.Exact);
此外我还尝试了如下API,都无法成功获取到:
DgnECManager.Manager.LocateDeliveredSchema(schemaName, versionMajor, versionMinor, SchemaMatchType.Exact, file);
DgnECManager.Manager.LocateSchema(schemaName,versionMajor,versionMinor,SchemaMatchType.LatestCompatible,null,null);
ECObjects.LocateSchema(schemaName,versionMajor,versionMinor,SchemaMatchType.LatestCompatible,null,null);
ECObjects.LocateSchema(schemaFullName,SchemaMatchType.LatestCompatible,null,null);
请问一下具体的原因呢?
LocateDeliveredSchema不工作的原因应该是该函数是用于定位外部的Schema文件的。
后面三个LocateSchema不工作,推测应该是后面的两个null导致的找不到schema。在您代码的第一行,如果将new FindInstancesScopeOption(DgnECHostType.File, false)改成new FindInstancesScopeOption()也会导致找不到这个schema。您这个文件中的所有schema都有这个特点,必须指定File才能找到。请问这些schema都是怎样被导入进来的?
这些Schema是我在OPM中用“ecx schema export”Keyin导出的,然后我把文件存成了imodel,然后再合并到一个空的ms打开的dgn中,然后在这个dgn中用“ecx schema import”Keyin导入的之前导出的ECSchema,当然有部分ECSchema导入失败,但大部分是成功的。
感谢你的分享
其他几个获取不到的函数,最后一个参数context给一个Session.Instance.GetActiveDgnModel()就获取到了。
mySchema = DgnECManager.Manager.LocateSchema(schemaName, verMaj, verMin, SchemaMatchType.LatestCompatible, null, Session.Instance.GetActiveDgnModel()); mySchema = ECObjects.LocateSchema(schemaName, verMaj, verMin, SchemaMatchType.LatestCompatible, null, Session.Instance.GetActiveDgnModel()); schemaName = "OpenPlant_3D.01.08"; mySchema = ECObjects.LocateSchema(schemaName, SchemaMatchType.LatestCompatible, null, Session.Instance.GetActiveDgnModel());
那我知道了,可是请问,我在不知道这个ECSchema属于何种情况存储的,只知道名称, 有哪个API是最通用的,我一定可以获取到DgnECManager.Manager.DiscoverSchemas获取的名称所对应的ECSchema呢?
最好是自己写一个函数,先获取一下当前dgn文件中的,如果获取不到再获取Delivered的
xiangeboy said:FindInstancesScopeOption没有不带参数的默认构造函数吧
确实。是我记晕了。