Pro/TOOLKIT示例程序(十五)Mapkey(映射键)

Pro/TOOLKIT并不能完全实现Pro/E的所有功能。
对于Pro/TOOLKIT没有提供API接口的功能,就需要使用Mapkey来实现。
你可以先录制一段Mapkey,然后调用ProMacroLoad执行Mapkey。
在Wildfire5下录制Mapkey的步骤:
【工具】->【映射键】
Pro/TOOLKIT示例程序(十五)Mapkey(映射键)_第1张图片
录制完成之后,可以通过【保存】查看Mapkey的伪代码。

示例:修改工程图所有尺寸的箭头样式为双箭头

在Pro/TOOLKIT中,并没有提供修改工程图尺寸箭头样式的API,如果想要用代码实现修改尺寸的箭头样式,则只能通过Mapkey实现。
首先、录制一段修改工程图尺寸箭头样式的Mapkey,查看Mapkey的伪代码如下:

~ Command ProCmdDwgModArrowStyle ;#DOUBLE ARROW;#DONE/RETURN;

然后调用ProMacroLoad执行。
执行前后的效果如下图所示:
Pro/TOOLKIT示例程序(十五)Mapkey(映射键)_第2张图片
Pro/TOOLKIT示例程序(十五)Mapkey(映射键)_第3张图片
以下代码实现将当前工程图中的所有尺寸的箭头样式改为双箭头。

// 工程图尺寸访问函数
ProError DrwDimensionVisitAction(ProDimension  *dimension,
                                 ProError      status,
                                 ProAppData     data)
{
    vector* pDimVec = (vector*)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 allDims;
    err = ProDrawingDimensionVisit((ProDrawing)mdlCurr, PRO_DIMENSION, 
        DrwDimensionVisitAction, NULL, &allDims);

    // 执行Mapkey
    wstring wstrMapkey = L"~ Command `ProCmdDwgModArrowStyle` ;#DOUBLE ARROW;#DONE/RETURN;";
    vector::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;
}

你可能感兴趣的:(Pro/E二次开发)