1. 程式人生 > >Pro/TOOLKIT示例程式(十五)Mapkey(對映鍵)

Pro/TOOLKIT示例程式(十五)Mapkey(對映鍵)

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; }