[OPM CE C#]如何获得公称直径映射

例如在公制项目中使用英制spec,mdb中的0.75会转换成公制的20,这个映射列表是在OPM Lookup.mdb中的Length_MetricImperialTable表中,请问C#如何能获得这个映射,如果不能直接获得,能获得OPM Lookup.mdb文件路径也行,可以直接打开这个mdb读取数据。谢谢。

Parents
  • 先获取WorkSet的根目录:

    string workSetRoot = Bentley.DgnPlatformNET.ConfigurationManager.GetVariable("_USTN_WORKSETROOT");
    然后加上相对路径:Standards\OpenPlant\SpecGen\Mappings\OPM Lookup.mdb

    Answer Verified By: Changsong Ling 

  • 第一个方案,直接获得映射,是不行么?谢谢。

  • 看目录名字,这个数据库是在OPPA中进行SpecGen的时候用到的,不是直接给OPM用的,我看了一下代码,结果也支持目前的这个判断,如果您有知道OPM使用的地方,请告诉我。

    还有就是,Schema或者说WorkSet是有其单位制的定义的,所以最好不要混用Spec,除非你仔仔细细的测试过,因为不同的单位制对应了不同的默认单位,而且我们可以预见,很多情况下这并不会导致程序报错,但结果可能会是错的。

    如果您想手动或者自己写工具转换,我目前能给出的方案就是直接读取这个表,或者您将其转换为csv或者json等格式随程序一起提供。

    如果您是想将一种单位制的Spec DB转换为另外一种单位制,我认为OPPA应该提供了类似的工具,您先找找,找不到我再帮您问一下。

  • 这个mdb中的Length_MetricImperialTable是用于OPM公称直径转换的,不知道为什么会放在SpecGen目录下。Spec Generator不涉及尺寸转换,应该完全用不到这个表。当然可能要用到其它两个表。

    OPM支持不同单位制的等级,只要每个表中的MEAS_UNITS设置正确即可。

    当然能用相同单位制的等级是最好的,无奈单位就规定了英制等级。在公制OPM下使用英制等级,用是能用的,不过可能有误差,而且这个误差是OPM的bug导致,比如弯头半径尺寸在mdb中只有一个,但是可能会绘制出不同半径的模型。目前发现这个误差最大到1.2mm。

    OPM需要这个表的证据:可以在公制项目中使用一个英制等级,比如这时候可以看到等级中的3”会显示为DN80。如果删除3“/80的这个映射再重新打开OPM,不会再有DN80了。

    另外补充下获得这个文件路径的最佳方案:

    ConfigurationManager.GetVariable("OP_SPECPLUGIN_DATABASES") + "OPM Lookup.mdb"

    如果用前面的加子目录方法,会不适用PW环境。PW会更改所有本地目录为DMSXXXXX方式,如果采用子目录叠加方式会找不到。目前PW环境下OPM中调用OPIM就有这个问题,PW只会更新DMSXXXXX目录下的文件,但OPIM只会用初级目录下子目录,这样就不能更新,必须手动删除初级目录下的子目录,让PW再次下载这个初级目录下所有文件。

    目前我已经读取这个OPM lookup文件获得了公英制转换数据,多谢。

  • 感谢分享!

    直接读表吧,没找到统一的读取接口。

Reply Children
No Data