Pro/TOOLKIT示例程式(十五)Mapkey(對映鍵)
阿新 • • 發佈:2019-02-14
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;
}