Pro/TOOLKIT示例程序:关系式

原文链接: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;
}


你可能感兴趣的:(Pro/TOOLKIT示例程序:关系式)