本文介绍如何使用Toolkit完成单位转换。
Toolkit使用ProUnitsystem这一结构体表示模型的单位:
1 2 3 4 5 6
| typedef struct { ProMdl owner; ProName name; } ProUnitsystem;
|
获取当前模型使用的单位ProUnitsystem
可由ProMdlPrincipalunitsystemGet
函数获取,同理ProMdlPrincipalunitsystemGet
函数可设置模型使用的单位。
模型可用的单位由ProMdlUnitsystemsCollect
函数获取,给出所有可用单位的ProArray
数组。ProUnitsystem
中的name
并非简单的如mmNs
等内容,而是包含mmNs
关键词的叙述语句,故判断单位需要使用wcsstr
函数判断ProUnitsystem
中的name
是否包含关键的子字符串。
最后给出模型单位转换的关键代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| void _convertUnit(ProUnitConvertType ConVertType) { ProError status; ProMdl mdl; ProUnitsystem unitSystem; ProUnitsystemType type; wchar_t *p = NULL; ProUnitsystem *unitSystem_array; int num_unitSystem, i; status = ProMdlCurrentGet(&mdl); status = ProMdlPrincipalunitsystemGet(mdl, &unitSystem); p = wcsstr(unitSystem.name, L"mmNs"); if (!p) { status = ProMdlUnitsystemsCollect(mdl, &unitSystem_array); if (status != PRO_TK_NO_ERROR) return; status = ProArraySizeGet(unitSystem_array, &num_unitSystem); for (i = 0; i < num_unitSystem; i++) { p = wcsstr(unitSystem_array[i].name, L"mmNs"); if (p) { status = ProMdlPrincipalunitsystemSet(mdl, &unitSystem_array[i], ConVertType, PRO_B_TRUE, PRO_VALUE_UNUSED); status = ProArrayFree((ProArray *)&unitSystem_array); return; } } status = ProArrayFree((ProArray *)&unitSystem_array); } }
|
代码公开,需要的人可以随便根据自己的环境修改编译。完整代码可在Github.com下载。代码在VS2010,Creo 2.0 M060 X64下编译通过。