Pro/TOOLKIT并不能完全实现Pro/E的所有功能。
对于Pro/TOOLKIT没有提供API接口的功能,就需要使用Mapkey来实现。
你可以先录制一段Mapkey,然后调用ProMacroLoad执行Mapkey。
在Wildfire5下录制Mapkey的步骤:
【工具】->【映射键】
录制完成之后,可以通过【保存】查看Mapkey的伪代码。
示例:修改工程图所有尺寸的箭头样式为双箭头
在Pro/TOOLKIT中,并没有提供修改工程图尺寸箭头样式的API,如果想要用代码实现修改尺寸的箭头样式,则只能通过Mapkey实现。
首先、录制一段修改工程图尺寸箭头样式的Mapkey,查看Mapkey的伪代码如下:
~ Command
ProCmdDwgModArrowStyle
;#DOUBLE ARROW;#DONE/RETURN;
然后调用ProMacroLoad执行。
执行前后的效果如下图所示:
以下代码实现将当前工程图中的所有尺寸的箭头样式改为双箭头。
// 工程图尺寸访问函数
ProError DrwDimensionVisitAction(ProDimension *dimension,
ProError status,
ProAppData data)
{
vector<ProDimension>* pDimVec = (vector<ProDimension>*)data;
pDimVec->push_back(*dimension);
return PRO_TK_NO_ERROR;
}
// 修改当前工程图中所有尺寸的箭头样式
int ChangeDrwDimsArrowStyle(uiCmdCmdId command,
uiCmdValue *p_value,
void *p_push_command_data)
{
// 获取当前工程图
ProError err;
ProMdl mdlCurr;
err = ProMdlCurrentGet(&mdlCurr);
ProMdlType mdlType;
err = ProMdlTypeGet(mdlCurr, &mdlType);
if (mdlType != PRO_MDL_DRAWING)
{
return -1;
}
// 遍历工程图中的所有尺寸
vector<ProDimension> allDims;
err = ProDrawingDimensionVisit((ProDrawing)mdlCurr, PRO_DIMENSION,
DrwDimensionVisitAction, NULL, &allDims);
// 执行Mapkey
wstring wstrMapkey = L"~ Command `ProCmdDwgModArrowStyle` ;#DOUBLE ARROW;#DONE/RETURN;";
vector<ProDimension>::iterator iterDim = allDims.begin();
for (; iterDim != allDims.end(); ++iterDim)
{
err = ProSelbufferClear();
ProSelection dimSel;
err = ProSelectionAlloc(NULL, &(*iterDim), &dimSel);
err = ProSelbufferSelectionAdd(dimSel);
// 加载并执行Mapkey
err = ProMacroLoad((wchar_t*)wstrMapkey.c_str());
err = ProMacroExecute();
}
err = ProWindowRepaint(-1);
return 0;
}