|
使用 acedCommandC 时识别取消
将命令发送到 AutoCAD 命令行现在具有早期 acedCommand 方法的两个变体。当 AutoCAD 完成命令执行所需的所有参数(也称为令牌)都已知而无需用户输入时,acedCommandS 更易于使用且适用。通过提供所有参数使用 acedCommandS 时,无法取消该命令。
当需要AutoCAD暂停某些用户输入时,当命令由AutoCAD运行时,将使用acedCommandC。在这种情况下,用户有可能在不提供输入的情况下取消命令。为了确定这种情况,下面是一个使用"acedCmdCWasCancelled"和"acedCallBackOnCancel"方法的代码片段。此外,由于 acedCommandC 的异步性质,只能从提供给 acedCommandC 的回调方法中识别命令的完成,如本代码片段所示。
[code]#include "acedCmdNF.h"
static void AdskMyTestCommand()
{
ads_point pt1;
int rt = ads_getpoint(
NULL,
_T("\nSelect first point: "), pt1);
int rs = acedCommandC
(
&MyCallback,
NULL,
RTSTR,
_T("_line"),
RT3DPOINT,
pt1,
RTNONE
);
acutPrintf(ACRX_T("\nAfter acedCommandC call.
acedCommandC is asynchronous..."));
}
static int MyCallback(void * pData)
{
if (acedCmdCWasCancelled())
{
acutPrintf(ACRX_T("\nCommand was cancelled..."));
return 0;
}
if(isLineActive())
{
int rs = acedCommandC
(
&MyCallback,
NULL,
RTSTR,
PAUSE,
RTNONE
);
acedCallBackOnCancel();
return 1;
}
CallWhenLineDone();
return 0;
}
static void CallWhenLineDone()
{
acutPrintf(ACRX_T("\nCommand completed."));
}
static Adesk::Boolean isLineActive()
{
struct resbuf rb;
acedGetVar(_T("CMDNAMES"),&rb);
if (_tcsstr(rb.resval.rstring, _T("LINE")))
return Adesk::kTrue;
return Adesk::kFalse;
}[/code] |
|