|
Pro/TOOLKIT并不能完全实现Pro/E的所有功能。
对于Pro/TOOLKIT没有提供API接口的功能,就需要使用Mapkey来实现。
你可以先录制一段Mapkey,然后调用ProMacroLoad执行Mapkey。
在Wildfire5下录制Mapkey的步骤:
【工具】->【映射键】
录制完成之后,可以通过【保存】查看Mapkey的伪代码。
示例:修改工程图所有尺寸的箭头样式为双箭头
在Pro/TOOLKIT中,并没有提供修改工程图尺寸箭头样式的API,如果想要用代码实现修改尺寸的箭头样式,则只能通过Mapkey实现。
首先、录制一段修改工程图尺寸箭头样式的Mapkey,查看Mapkey的伪代码如下:
mapkey vvvv ~ Command `ProCmdDwgModArrowStyle` ;#DOUBLE ARROW;#DONE/RETURN;
1 mapkey vvvv ~ Command `ProCmdDwgModArrowStyle` ;#DOUBLE ARROW;#DONE/RETURN;
然后调用ProMacroLoad执行。
示例下载:protk_sample_mapkey.zip (VS2008 + Wildfire5.0)
在示例的Bin文件夹下有一工程图模型drw0001.drw。
代码如下:
以下代码实现将当前工程图中的所有尺寸的箭头样式改为双箭头。
// 工程图尺寸访问函数
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;
}
工程图尺寸访问函数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;}
转载请注明:CAX二次开发博客 » Pro/TOOLKIT程序:Mapkey(映射键)
|
|