例如在公制项目中使用英制spec,mdb中的0.75会转换成公制的20,这个映射列表是在OPM Lookup.mdb中的Length_MetricImperialTable表中,请问C#如何能获得这个映射,如果不能直接获得,能获得OPM Lookup.mdb文件路径也行,可以直接打开这个mdb读取数据。谢谢。
先获取WorkSet的根目录:
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文件获得了公英制转换数据,多谢。
感谢您的分享!
感谢分享!
直接读表吧,没找到统一的读取接口。