找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11026|回复: 8

[转贴] Pro/TOOLKIT程序:Mapkey(映射键)

[复制链接]

6

主题

111

回帖

-1

威望

助工

积分
124
QQ
发表于 2015-1-21 16:19 | 显示全部楼层 |阅读模式
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二次开发博客 &raquo; Pro/TOOLKIT程序:Mapkey(映射键)

我思故我存在

0

主题

37

回帖

-1

威望

实习生

积分
40
发表于 2015-2-6 16:03 | 显示全部楼层
的发的发的发
回复

使用道具 举报

6

主题

111

回帖

-1

威望

助工

积分
124
QQ
 楼主| 发表于 2015-2-6 16:37 | 显示全部楼层
回复

使用道具 举报

6

主题

111

回帖

-1

威望

助工

积分
124
QQ
 楼主| 发表于 2015-2-9 10:38 | 显示全部楼层
映射键就是快捷键啊
回复

使用道具 举报

3

主题

49

回帖

2

威望

助工

积分
66
发表于 2015-3-4 22:37 | 显示全部楼层
感谢分享
回复

使用道具 举报

28

主题

5395

回帖

336

威望

嘉宾

WU03360647

积分
8476

嘉宾勋章热心助人勋章优秀会员勋章希望之星勋章

发表于 2018-3-29 08:38 | 显示全部楼层


         屡屡滥发文不对题,胡说八道的内容,恶意灌水!
         专此标记,待适时综合清算一倂追咎!
回复

使用道具 举报

0

主题

3

回帖

0

威望

实习生

积分
3
发表于 2018-4-25 17:09 | 显示全部楼层
学习了,感谢楼主
回复

使用道具 举报

6

主题

111

回帖

-1

威望

助工

积分
124
QQ
 楼主| 发表于 2018-9-25 16:02 | 显示全部楼层
伪君子的掘墓人 发表于 2018-3-29 08:38
屡屡滥发文不对题,胡说八道的内容,恶意灌水!
         专此标记,待适时综合清算一倂追 ...

你和我有仇?还是神经?
你可以选择不看啊
没强求你啊
我思故我存在
回复 1 0

使用道具 举报

46

主题

264

回帖

1

威望

工程师

积分
382
发表于 2024-10-18 12:27 | 显示全部楼层
lwsh0289814 发表于 2018-9-25 16:02
你和我有仇?还是神经?
你可以选择不看啊
没强求你啊

mapkey的语法可以在哪里学习?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

本站为非营利性站点,部分资源为网友搜集或发布,仅供学习和研究使用,如用于商业用途,请购买正版。站内所发布的资源,如有侵犯你的权益,请发邮件联系我们,本站将立即改正或删除。

手机版|小黑屋|野火论坛(©2007~2024) ( 苏ICP备11036728号-2 )苏公网安备 32039102000103号|站长QQ28016688

GMT+8, 2024-11-22 13:40 , Processed in 0.167116 second(s), 28 queries .

快速回复 返回顶部 返回列表