AutoCAD二次开发:ObjectArx下的两种命令注册方式

        共有两种方式,都是基于向导方式创建:

一:使用ACED_ARXCOMMAND_ENTRY_AUTO宏定义

1、创建一个ArxDefCommand的Arx项目,目录结构如下

2、编辑注册命令调用的函数

#include <tchar.h> // 打印时引用了宏“_T”
class CArxDefCommandApp : public AcRxArxApp {
    public:
        CArxDefCommandApp () : AcRxArxApp () {}
        
    virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt) {}
    virtual AcRx::AppRetCode On_kUnloadAppMsg (void *pkt) {}
    virtual void RegisterServerComponents () {}
​
    // Modal Command with localized name
    // ACED_ARXCOMMAND_ENTRY_AUTO(CArxDefCommandApp, ADSKMyGroup, MyCommand, MyCommandLocal, ACRX_CMD_MODAL)
    // 注册命令对应的函数命名:组名+命令名
    static void ADSKMyGrouphello () {
        // Put your command code here
        acutPrintf(_T("hello, method 1"));  // CAD打印函数
    }
}

3、在宏区域完成命令的注册

ACED_ARXCOMMAND_ENTRY_AUTO(CArxDefCommandApp,   // 项目名
                            ADSKMyGroup,        // 组名
                            hello1,             // 命令名
                            你好,                // 命令名2
                            ACRX_CMD_MODAL,     // 命令参数
                            NULL)               // 调用函数,为空时即为根据名字匹配的void ADSKMyGrouphello ()

4、生成解决方案,加载完成后输入命令,成功

二:使用acedRegCmds宏定义

1、首先定义功能函数

// 单独定义功能函数
void show() {
    acutPrintf(L"hello,method 2");
}

2、在InitApp 中注册命令

//----- ObjectARX EntryPoint
class CArxDefCommandApp : public AcRxArxApp {
    public:
        CArxDefCommandApp () : AcRxArxApp () {}
        virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt) {
        // TODO: Load dependencies here
        // You *must* call On_kInitAppMsg here
        AcRx::AppRetCode retCode =AcRxArxApp::On_kInitAppMsg (pkt) ;
        // TODO: Add your initialization code here
        // 注册命令处
        // acedRegCmds类:Register command 封装注册命令:连接命令与函数
        /* ---addCommand函数:
                命令组名(cad按照命令组==>命令==>函数查找并执行命令)
                命令名
                命令别名
                参数:见代码下面的表
                函数名:可以以此为入口进入自己封装的类库,show函数,最顶上
        */
        acedRegCmds->addCommand(_T("ADSK"), _T("hello2"), _T("你好2"),
            ACRX_CMD_MODAL, show);
        return (retCode) ;
    }
}

3、生成解决方案,加载完成后输入命令,成功

 

三、addCommand 命令常见参数

ACRX_CMD_MODAL其他命令执行期间该命令不可执行
ACRX_CMD_TRANSPARENT其他命令执行期间该命令可执行,但ads_sssetfirst()不可使用
ACRX_CMD_USEPICKSET命令可以得到、设置pickfirst集,但命令结束后就销毁
ACRX_CMD_REDRAW和ACRX_CMD_USEPICKSET标志位一样,实体会重新绘制
ACRX_CMD_NOPERSPECTIVE命令不能使用在当前视口为正交模式时
ACRX_CMD_SESSION多文档命令,使用该命令时必须锁定文档,因其操作非当前文档,否则块表打不开
ACRX_CMD_NOTILEMODE命令不能使用在模型空间中
ACRX_CMD_NOPAPERSPACE命令不能使用在图纸空间中
ACRX_CMD_UNDEFINED命令调用必须加命令组名
ACRX_CMD_DEFUN命令使用在lisp中
ACRX_CMD_NOHISTORY 命令不会保存在最近使用命令列表中
ACRX_CMD_NO_UNDO_MARKER命令不设置undo标志

        参考:https://blog.csdn.net/chucksun0426/category_11145990.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值