原文链接:http://www.icaxdev.com/?p=854
示例程序演示了如下功能:
在示例程序的Bin文件夹下,prt0001.prt为测试模型。
添加的关系式如下:
diameter = 0.5 * side
if parameter_3 == true
parameter_1 = 1
else
parameter_1 = 0
endif
代码如下:
// 获取当前模型的关系式 int GetCurrModelRelationSet(uiCmdCmdId command, uiCmdValue *p_value, void *p_push_command_data) { // 获取当前模型 ProError err; ProMdl mdlCurr; err = ProMdlCurrentGet(&mdlCurr); ProModelitem mdlItem; err = ProMdlToModelitem(mdlCurr, &mdlItem); // 获取关系式 ProRelset relset; err = ProModelitemToRelset(&mdlItem, &relset); // 输出关系式 ProWstring* relation_lines = NULL; err = ProArrayAlloc(0, sizeof(ProWstring), 1, (ProArray*)&relation_lines); err = ProRelsetRelationsGet(&relset, &relation_lines); int nLine = 0; err = ProArraySizeGet(relation_lines, &nLine); if (0 == nLine) { AfxMessageBox(_T("不存在关系式")); } for (int i = 0; i < nLine; ++i) { MessageBoxW(NULL, relation_lines[i], L"www.icaxdev.com", MB_OK); } err = ProArrayFree((ProArray*)&relation_lines); return 0; } // 向当前模型中添加关系式 int AddRelSetToCurrModel(uiCmdCmdId command, uiCmdValue *p_value, void *p_push_command_data) { // 获取当前模型 ProError err; ProMdl mdlCurr; err = ProMdlCurrentGet(&mdlCurr); ProModelitem mdlItem; err = ProMdlToModelitem(mdlCurr, &mdlItem); // 关系式 vector<wstring> relationVec; relationVec.push_back(L"diameter = 0.5 * side"); relationVec.push_back(L"if parameter_3 == true"); relationVec.push_back(L"parameter_1 = 1"); relationVec.push_back(L"else"); relationVec.push_back(L"parameter_1 = 0"); relationVec.push_back(L"endif"); // 添加关系式 ProRelset relset; err = ProModelitemToRelset(&mdlItem, &relset); ProWstring* relation_lines; err = ProArrayAlloc(0, sizeof(ProWstring), 1, (ProArray*)&relation_lines); err = ProRelsetRelationsGet(&relset, &relation_lines); vector<wstring>::iterator iterRelLine = relationVec.begin(); for (; iterRelLine != relationVec.end(); ++iterRelLine) { wchar_t* pstr = (wchar_t*)iterRelLine->c_str(); err = ProArrayObjectAdd((ProArray*)&relation_lines, -1, 1, &pstr); } int nLine = 0; err = ProArraySizeGet(relation_lines, &nLine); err = ProRelsetRelationsSet(&relset, relation_lines, nLine); err = ProArrayFree((ProArray*)&relation_lines); err = ProRelsetRegenerate(&relset); err = ProSolidRegenerate((ProSolid)mdlCurr, PRO_REGEN_NO_FLAGS); err = ProWindowRepaint(-1); return 0; } // 删除当前模型的关系式 int DeleteCurrModelRelationSet(uiCmdCmdId command, uiCmdValue *p_value, void *p_push_command_data) { // 获取当前模型 ProError err; ProMdl mdlCurr; err = ProMdlCurrentGet(&mdlCurr); ProModelitem mdlItem; err = ProMdlToModelitem(mdlCurr, &mdlItem); // 获取关系式 ProRelset relset; err = ProModelitemToRelset(&mdlItem, &relset); // 删除关系式 err = ProRelsetDelete(&relset); return 0; }