ObjectARX给CAD发送命令的几种方法
更新时间:2023-12-10 13:00:01 阅读量: 教育文库 文档下载
在ARX的帮助里有最常见的两个方法: int acedCommand(int rtype, ... unnamed); int acedCmd(const struct resbuf * rbp);
这两个函数处理命令的方式差不多,只不过一个通过链表来描述整个命令,一个通过不定参数来描述。
1. acedCommand()[ads_command()]
acedCommand()函数的参数是成对处理的。每对参数中的第一个表示参数的类型,第二个表示其实际的数据。参数表中的最后一个必须是单个参数,其值为0或RTNONE。每个表示参数类型的参数值必须为在adscodes.h文件中定义的结果类型码中的一个(例如RTPOINT)。比如:acedCommand(RTSTR, \RTSTR, \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, \
p11, RT3DPOINT, p21 ,0); if (cmdlist == NULL) {
acdbFail(\
return BAD; }
acedCmd(cmdlist); acutRelRb(cmdlist); 执行效果是一样的。
其实还有其它方式来执行AutoCAD命令,下面介绍另外一种方法:
3 // 发送命令给AutoCAD
void YgxAcadUtil::SendCommandToCAD(CString cmd) {
cmd.Format(\ 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(\注意后面要带一空格。 zoom e命令可以这样:
SendCommandToCAD(_T(\在zoom后面要有空格,e 后面也要有空格。
这里还介绍一种发送命令的方法:
4 acedPostCommand,由于这个函数Autodesk没有公布,在使用
之前,我们需要先申明一下:
extern Adesk::Boolean acedPostCommand(const char* ); 然后,我们发送Cancel命令为例: acedPostCommand(\
5 ads_queueexpr( _T(\该
函数CAD未公开,使用时提前声明下就可以了。可以参考帮助文件中:Tips and Techniques 。
6 acDocManager->sendStringToExecute(curDoc(), _T(\
2,2,0 \该函数在Arx帮助中有详细说明。
7 Windows API 方法void SendCmdToAcad(ACHAR *cmd)
{
COPYDATASTRUCT cmdMsg; cmdMsg.dwData = (DWORD)1;
cmdMsg.cbData = (DWORD)(_tcslen(cmd) + 1) * sizeof(ACHAR); cmdMsg.lpData = cmd;
SendMessage(adsw_acadMainWnd(),WM_COPYDATA,NULL, (LPARAM)&cmdMsg); }
8
?Com 方法
void SendCommandTest(void) {
IAcadApplicationPtr pApp = acedGetIDispatch(TRUE); IAcadDocumentPtr pDoc;
pApp->get_ActiveDocument(&pDoc);
pDoc->SendCommand( _T(\}
? ? ? ? ?
ads_queueexpr()
AcApDocManager::sendStringToExecute() ::SendMessage()
IAcadDocument::SendCommand() acedCommand()
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- ObjectARX
- 命令
- 发送
- 方法
- CAD
- 西藏自治区差旅费管理办法
- 小学四年级校本课程教案
- 整式的乘除测试题练习四套(含答案)
- 铸造复习题新(带答案)
- 聚合物结构与性能复习题及答案
- 通信职业技能鉴定线路专业题库
- 第八章 立井井筒装备
- 第1章课后习题参考答案
- 浙江省金华、丽水、衢州十二校2011-2012学年高三语文第二次联考试题
- RLC串联电路练习
- 高考地理总复习 自然灾害与防治课后检测选修6
- 富士达电梯调试与维修手册 - 图文
- 资金的时间价值练习题
- (八年级物理教案)八年级物理下册《功率》导学案人教版
- 第十四届多媒体课件大赛获奖名单获奖作品名单 - 图文
- 审计学基础复习题及参考答案
- 操作系统进程部分的习题
- 时代光华 营运资金管理之应收账款管理(课后测试答案)
- 人本主义学习理论
- 2013年高考总复习语文人教版浙江专题十一古代诗歌鉴赏专题检测(附答案)