AcEdCommandStack

 

系统包含此类的一个对象的一个实例。惟一的实例通过acedRegCmds(提供指向对象的一个指针)被参考,并且提供可在AutoCAD中创建、定义和注册命令对象的应用程序。这些命令对象用于在一个外部定义命令处理后调用适当的ObjectARX应用程序的命令。执行命令的命令名可以是全局的和未转化的或局部的和已转化的。命令可被增加至已有的命令组中,或增加至一个新建的组(新组由addCommand()方法自动地创建)中。如果命令组中已包含要增加的命令名称的命令时,则试图增加命令至这个组时将被拒绝。

 

继承自

AcRxObject

 

包含文件

accmd.h

 

参见

AcEdCommand, AcEdCommandIterator

 

成员

 

AcEdCommandStack编辑函数

 

AcEdCommandStack::addCommand函数

virtual Acad::ErrorStatus

addCommand(

const char* cmdGroupName,

const char* cmdGlobalName,

const char* cmdLocalName,

Adesk::Int32 commandFlags,

AcRxFunctionPtr FunctionAddr,

AcEdUIContext * UIContext = NULL,

int fcode = -1,

HINSTANCE hResourceHandle = NULL,

AcEdCommand** cmdPtrRet = NULL) = 0;

cmdGroupName

输入指向null结尾的字符的指针,这个字符为要增加命令至的命令组的名称

cmdGlobalName

输入指向null结尾的字符的指针,这个字符为要增加的命令的全局的和未转化的名称

cmdLocalName

输入指向null结尾的字符的指针,这个字符为要增加的命令的局部的和已转化的名称

commandFlags

输入与命令关联的标记。这个标记就为ACRX_CMD_TRANSPARENTACRX_CMD_MODAL,而且可以和ACRX_CMD_USEPICKSETACRX_CMD_REDRAW进行位运算(关于更多信息见下)

FunctionAddr

输入指向在命令调用时被执行的函数的指针

UIContext

输入指向AcEdUIContext回调类的指针

fcode

输入赋值给命令的整数码

hResourceHandle

输入当命令执行时当前使用的资源句柄

cmdPtrRet

输入指向正在增加的命令的AcEdCommand对象地址的指针之指针

此函数创建一个AcEdCommand对象;将cmdGlobalName的拷贝,cmdLocalName, commandFlagsfunctionAddr的拷贝填入,并将其增加至由cmdGroupName标识的命令组中。如果cmdGroupName命令组不存在,则在新的AcEdCommand对象增加之前,创建一个新的cmdGroupName命令组并增加至CommandStack中。否则寻找已有的命令组是否有与AcEdCommand对象有相同全局名称的cmdGlobalName或局部名称的cmdLocalName

注意:cmdGlobalNamecmdLocalName字符串均不能超过30个字符(不包括字符结束符)。

如果hResourceHandle不非空,则当AutoCAD执行正在注册的命令时,hResourceHandle将成为当前的。当命令结束时,之前的当前资源句柄将恢复为当前的句柄。

如果cmdPtrRet为非空,则它指向的指针将指向正在被addCommand()处理的命令的AcEdCommand对象。

commandFlags参数可包含一个或另一个主标记值(但不是二者都),并可选地与一个或多个第二标记值进行位运算。

主标记值

名称

含义

ACRX_CMD_MODAL

Command cannot be invoked while another command is active

ACRX_CMD_TRANSPARENT     

Command can be invoked while another command is active.
ads_sssetfirst() cannot be used when this flag is set

 

Secondary Flags (optional)

Name

Meaning

ACRX_CMD_USEPICKSET

当得到pickfirst设置时,它显然在AutoCAD中。

命令可通过acedSSGetFirst()acedSSGet("I"...)函数取得pickfirst集。

命令可通过acedSSSetFirst()设置pickfirst集,但到命令结束时集才存在。

命令不能取得或设置夹点(grips)。

ACRX_CMD_REDRAW

当得到pickfirst集或夹点时,它们显然不包在AutoCAD中。

命令可通过acedSSGetFirst()函数取得pickfirst 集和夹点集。

命令可通过acedSSGet("I"...)取得pickfirst集。

命令可使用acedSSSetFirst()函数设置pickfirstgrip集。这些集中的对象以适当的夹点句柄重绘并在命令结束时高亮显示。

ACRX_CMD_NOPERSPECTIVE

当前视口为透视图模式时,命令不能被调用。

ACRX_CMD_NOTILEMODE

tilemode == 1时,命令不能被调用。

ACRX_CMD_NOPAPERSPACE

当在图纸空间中时,命令不能被调用。

ACRX_CMD_UNDEFINED

使用只能通过cmdGroupName.cmdGlobalName语法被调用。

ACRX_CMD_DEFUN

这个标记只能通过Visual LISP引擎设置,因此可使用acedGetArgs()LISP取得参数并使用acedRetXxx()函数将值返回至LISP

ACRX_CMD_DOCREADLOCK

当命令被调用时,文件被锁定为只读。如果这个位没有设置,则当命令被调用时,文件被锁定为写入。

ACRX_CMD_DOCEXCLUSIVELOCK

当命令被调用时,文件将锁定为专用。如果这个位没有设置,则当命令被调用时,文件将锁定为公用的。

ACRX_CMD_SESSION

命令将在应用程序执行环境而不是当前的文件环境中运行,这两个环境的的功能和限制不同。这个标记要谨慎地使用。

  • 如果没有使用第二标记,则ads_ssgetfirst, ads_sssetfirstads_ssget("I".) 函数不能使用。
  • ACRX_CMD_USEPICKSETACRX_CMD_REDRAW都设置与只设置ACRX_CMD_REDRAW的作用相同。
  • ObjectARX命令中,当使用ads_ssgetfirst()时,有可能支持pickfirst,但不支持gripset(即,ACRX_CMD_USEPICKSET)。在这种情况下,返回的gripset resbuf列表是一个具有restype == RTNONE类型的resbuf
    另一种可能是使用ads_ssgetfirst即不支持pickfirst,也不支持grips。为了与设置一个有效的pickfirst而不处理grips一致,在以这个模式(即不支持gripspickfirst)调用函数时,两个返回的gripsetpickfirst集都包含具有restype == RTNONE类型的一个resbuf
    因为这个特性,ads_ssgetfirst()函数通常返回RTNORM并适当地设置其中一个或所有两个返回的列表为RTNONE类型的resbufs

关于functionAddr参数,AcRxFunctionPtraccmd.h头文件中的一个类型定义。它定义为:

typedef void (*AcRxFunctionPtr)();

UIContext参数用于增加命令,这个命令不是一个指向命令模式快捷菜单的标准命令的命令选项。

fcode参数允许应用程序将一个整数码赋值给一条命令。这个码可从被调用的函数中通过ads_getfcode()取得(只有通过ads_invoke调用时,或当VisualLISP=YES时)。

如果成功地增加新的AcEdCommand,则返回Acad::eOk

如果cmdGlobalNamecmdLocalName已存在于cmdGroupName命令组中,则增加命令失败并返回Acad::eDuplicateKey

如果cmdGlobalNamecmdLocalName超过30个字符(不包括结束字符),则返回Acad::eInvalidInput

AcEdCommandStack::atPut函数

virtual bool

atPut(

const char* cmdGroupName,

AcRxDictionary*& cmdsGlobal,

AcRxDictionary*& cmdsLocal) = 0;

cmdGroupName

未公布

cmdsGlobal

未公布

cmdsLocal

未公布

此函数仅供内部使用。

AcEdCommandStack::popGroupToTop函数

virtual Acad::ErrorStatus

popGroupToTop(

const char* cmdGroupName) = 0;

cmdGroupName

输入指向以NULL结尾的字符,这个字符是要弹至CommandStack 顶部的命令组的名称

此函数将cmdGroupName命令组弹至CommandStack顶部,使之成为在解析ObjecctARX应用程序定义的名称时第一个被搜索的组。

如果成功则返回Acad::eOk

如果在CommandStack没有cmdGroupName的命令组,则返回Acad::eKeyNotFound

AcEdCommandStack::removeCmd函数

virtual Acad::ErrorStatus

removeCmd(

const char* cmdGroupName,

const char* cmdGlobalName) = 0;

cmdGroupName

输入指向以NULL结尾的字符,这个字符为包含要删除命令的命令组的名称

cmdGlobalName

输入指向以NULL结尾的字符,这个字符为要从cmdGroupName 命令组中删除的命令的名称

此函数将具有名为cmdGlobalName全局的和未转化名称的函数从cmdGroupName命令组中删除。

如果成功则返回Acad::eOk

如果在cmdGroupName命令组中没有名为cmdGlobalName的全局的和未转化的命令,则返回Acad::eKeyNotFound

注意:只搜索名为cmdGroupName的命令组的全局的和未转化的名称空间。命令不能使用一个命令的局部的或已转化的名删除。

AcEdCommandStack::removeGroup函数

virtual Acad::ErrorStatus

removeGroup(

const char* groupName) = 0;

groupName

输入指向以NULL结尾的字符,这个字符为要从CommandStack 中删除的命令组的名称

此函数将名为GroupName的命令组从CommandStack中删除,并删除命令组词典对象和所有的储存在其中的AcEdCommand对象。

如果成功则返回Acad::eOk

如果没有找到名为GroupName的命令组,则返回Acad::eKeyNotFound

AcEdCommandStack Query Functions

 

AcEdCommandStack::iterator函数

virtual AcEdCommandIterator *

iterator() = 0;

返回指向一个AcEdCommandIterator的指针,这个AcEdCommandIterator可用于遍历所有CommandStack中的AcEdCommand对象(即,迭代器遍历所有组中的命令)。

注意:迭代器是动态地分配,在不需要时必须由调用的应用程序删除。

AcEdCommandStack::lookupCmd函数

virtual AcEdCommand *

lookupCmd(

const char* cmdName,

bool globalFlag,

bool allGroupsFlag,

bool skipUndefed) = 0;

cmdName

输入指向以NULL结尾的字符,这个字符为要搜索的命令名

globalFlag

输入布尔值标记,说明命令查找在全局的或未转化的命令名还是在局部的和转化的命令名中进行

allGroupsFlag

输入布尔值标记,说明只在CommandStack顶部的命令组中还是所有的命令组中搜索

skipUndefed

输入布尔值标记,说明是否忽略当前标记为未定义的过去的(past)命令

此函数在当前的命令组(如果allGroupsFlag == false)或所有的命令组中搜索第一次出现的cmdName。搜索通常从CommandStack顶部的命令组开始。如果globalFlag == true,则搜索CommandStack的全局的和未转化的名称空间。否则搜索局部的和已转化的名称空间。如果skipUndefed == true,则在搜索中忽略记为未定义的命令。如果找到匹配的命令名,则返回关联的AcEdCommand对象的拷贝。否则返回NULL,表示命令没有找到。如果搜索所有命令组并且找到超过一个的相同命令(即,在不同的命令组中),则使用第一个找到的命令。

注意:执行调用的应用程序不能删除返回的对象。


virtual AcEdCommand *

lookupCmd(

const char* cmdName,

bool globalFlag,

bool allGroupsFlag) = 0;

cmdName

输入指向以NULL结尾的字符,这个字符为要搜索的命令名

globalFlag

输入布尔值标记,说明命令查找在全局的或未转化的命令名还是在局部的和转化的命令名中进行

allGroupsFlag

输入布尔值标记,说明只在CommandStack顶部的命令组中还是所有的命令组中搜索

此函数在当前的命令组(如果allGroupsFlag == false)或所有的命令组中搜索第一次出现的cmdName。搜索通常从CommandStack顶部的命令组开始。如果globalFlag == true,则搜索CommandStack的全局的和未转化的名称空间。否则搜索局部的和已转化的名称空间。如果找到匹配的命令名,则返回关联的AcEdCommand对象的拷贝。否则返回NULL,表示命令没有找到。如果搜索所有命令组并且找到超过一个的相同命令(即,在不同的命令组中),则使用第一个找到的命令。

注意:执行调用的应用程序不能删除返回的对象。


virtual AcEdCommand *

lookupCmd(

const char* cmdName,

bool globalFlag) = 0;

cmdName

输入指向以NULL结尾的字符,这个字符为要搜索的命令名

globalFlag

输入布尔值标记,说明命令查找在全局的或未转化的命令名还是在局部的和转化的命令名中进行

此函数在CommandStack中的所有命令组中搜索与cmdName匹配的名称。如果globalFlag == true,则搜索CommandStack的全局的和未转化的名称空间。否则搜索局部的和已转化的名称空间。如果找到匹配的命令名,则返回关联的AcEdCommand对象的拷贝。否则返回NULL,表示命令没有找到。如果搜索CommandStack找到超过一个的相同命令(即,在不同的命令组中),则使用第一个找到的命令。

注意:执行调用的应用程序不能删除返回的对象。

AcEdCommandStack::lookupCmd2函数

virtual AcEdCommand *

lookupCmd2(

const char* cmdName,

bool globalFlag,

bool allGroupsFlag,

int skipFlags,

bool match = false) = 0;

cmdName

未公布

globalFlag

未公布

allGroupsFlag

未公布

skipFlags

未公布

match

未公布

此函数仅供内部的ObjectARX系统使用。

AcEdCommandStack::lookupGlobalCmd函数

virtual AcEdCommand *

lookupGlobalCmd(

const char* cmdName) = 0;

cmdName

输入指向以NULL结尾的字符,这个字符为要搜索的命令名

CommandStack中的所有命令组中从堆顶开始搜索所有的全局的和未转化的名称,找出是否有名为cmdName的命令。如果找到匹配的命令,返回指向关联的AcEdCommand对象的拷贝的指针。否则返回NULL,表示没有找到命令。如果搜索CommandStack找到超过一个的相同命令(即,在不同的命令组中),则使用第一个找到的命令。

注意:执行调用的应用程序不能删除返回的对象。

AcEdCommandStack::lookupLocalCmd函数

virtual AcEdCommand *

lookupLocalCmd(

const char* cmdName) = 0;

cmdName

输入指向以NULL结尾的字符,这个字符为要搜索的命令名

CommandStack中的所有命令组中从堆顶开始搜索所有的局部的和已转化的名称,找出是否有名为cmdName的命令。如果找到匹配的命令,返回指向关联的AcEdCommand对象的拷贝的指针。否则返回NULL,表示没有找到命令。如果搜索CommandStack找到超过一个的相同命令(即,在不同的命令组中),则使用第一个找到的命令。

注意:执行调用的应用程序不能删除返回的对象。