天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 70|回复: 0

发送命令给AutoCAD的方法,比如Cancel命令

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
闲来无事,突然想整理一下发送命令到AutoCAD的方法,在ARX的帮助里有最常见的两个方法:

int acedCommand(int rtype, ... unnamed);

int acedCmd(const struct resbuf * rbp);

      这两个函数处理命令的方式差不多,只不过一个通过链表来描述整个命令,一个通过不定参数来描述。

       1. acedCommand()[ads_command()]
       acedCommand()函数的参数是成对处理的。每对参数中的第一个表示参数的类型,第二个表示其实际的数据。参数表中的最后一个必须是单个参数,其值为0或RTNONE。每个表示参数类型的参数值必须为在adscodes.h文件中定义的结果类型码中的一个(例如RTPOINT)。比如:acedCommand(RTSTR, "ZOOM", RTSTR, "W", RT3DPOINT, p11, RT3DPOINT, p21 ,0);这个命令执行后会根据p11和p21点所确定的窗口范围缩放。注意p11和p21是ads_point类型。

      2. acedCmd()[ads_cmd()]
      注意此函数有一个resbuf指针类型的参数。该 resbuf 指针从何而来?它来自acutBuildList()函数。该函数的优点就是可以动态修改命令内容,不像acedCommand那样命令是写死的,但是缺点就是执行效率比acedCommand要差一些,同样,对于上面那个功能,我们可以如下调用:

struct resbuf *cmdlist;

cmdlist = acutBuildList(RTSTR, "ZOOM", RTSTR, "W", RT3DPOINT, p11, RT3DPOINT, p21 ,0);

if (cmdlist == NULL) {

    acdbFail("Couldn't create list/n");

    return BAD;

}

acedCmd(cmdlist);

acutRelRb(cmdlist);

执行效果是一样的。



   其实还有其它方式来执行AutoCAD命令,下面介绍另外一种方法:

  // 发送命令给AutoCAD
void YgxAcadUtil::SendCommandToCAD(CString cmd)
{
    cmd.Format("%s", cmd);
    COPYDATASTRUCT cmdMsg;
    cmdMsg.dwData = (DWORD)1;
    cmdMsg.cbData = (DWORD)_tcslen(cmd) + 1;
    cmdMsg.lpData = cmd.GetBuffer(cmd.GetLength()+1) ;                  
    SendMessage(adsw_acadMainWnd(), WM_COPYDATA, (WPARAM)adsw_acadMainWnd(),
  (LPARAM)&cmdMsg);
}

这是我写的一个函数,通过给AutoCAD发送消息,来执行一些命令。cmd这个字符串包含的内容和acedCommand中的内容差不多,比如像发送一个redraw命令,可以这样调用:

SendCommandToCAD(_T("redraw "));

注意后面要带一空格。

zoom e命令可以这样:

SendCommandToCAD(_T("zoom e "));在zoom后面要有空格,e 后面也要有空格。



   这里还介绍一种发送命令的方法:

  acedPostCommand,由于这个函数Autodesk没有公布,在使用之前,我们需要先申明一下:

extern Adesk::Boolean acedPostCommand(const char* );

然后,我们发送Cancel命令为例:

acedPostCommand("CANCELCMD");

嗯,确实非常简单,呵呵!

 

 

 

 

发送命令给AutoCAD的方法,比如Cancel命令
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 12:25 , Processed in 0.154010 second(s), 28 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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