以下示例演示怎样使用Pro/TOOLKIT插入UDF。
示例中的UDF通过选择一个基准点来创建一个孔特征,可以指定孔的直径和孔的深度。
// 示例:插入UDF
int TestUDF(uiCmdCmdId command,
uiCmdValue *p_value,
void *p_push_command_data)
{
ProError err;
// 获取当前模型
ProMdl mdlCurr;
err = ProMdlCurrentGet(&mdlCurr);
// 选择基准点
ProSelection *sels;
int nSel = 0;
err = ProSelect("point", 1, NULL, NULL, NULL, NULL, &sels, &nSel);
if (PRO_TK_NO_ERROR != err || 1 != nSel)
{
return -1;
}
ProSelection pntSel;
ProSelectionCopy(sels[0], &pntSel);
// udf数据
ProGroup udf;
ProUdfdata udfData;
ProUdfdataAlloc(&udfData);
ProUdfdataNameSet(udfData, L"hole", NULL);
ProUdfdataDependencySet(udfData, PROUDFDEPENDENCY_INDEPENDENT);
// 设置udf的参考
ProUdfreference udfPntref;
ProUdfreferenceAlloc(L"place_point", pntSel, PRO_B_FALSE, &udfPntref);
ProUdfdataReferenceAdd(udfData, udfPntref);
// 设置udf的尺寸数据:diameter=50.0, depth=50.0
ProUdfvardim udfDiaDim, udfDepthDim;
err = ProUdfvardimAlloc(L"diameter", 50, PROUDFVARTYPE_DIM, &udfDiaDim);
err = ProUdfdataUdfvardimAdd(udfData, udfDiaDim);
err = ProUdfvardimAlloc(L"depth", 50, PROUDFVARTYPE_DIM, &udfDepthDim);
err = ProUdfdataUdfvardimAdd(udfData, udfDepthDim);
// 创建udf
err = ProUdfCreate((ProSolid)mdlCurr, udfData, NULL, NULL, 0, &udf);
if (PRO_TK_NO_ERROR != err)
{
AfxMessageBox(TEXT("Create udf failed."));
}
// 释放资源
ProUdfdataFree(udfData);
ProUdfvardimFree(udfDiaDim);
ProUdfvardimFree(udfDepthDim);
ProUdfreferenceFree(udfPntref);
ProSelectionFree(&pntSel);
// 刷新窗口显示
ProWindowRepaint(-1);
return 0;
}