系统包含此类的一个对象的一个实例。惟一的实例通过acedRegCmds(提供指向对象的一个指针)被参考,并且提供可在AutoCAD中创建、定义和注册命令对象的应用程序。这些命令对象用于在一个外部定义命令处理后调用适当的ObjectARX应用程序的命令。执行命令的命令名可以是全局的和未转化的或局部的和已转化的。命令可被增加至已有的命令组中,或增加至一个新建的组(新组由addCommand()方法自动地创建)中。如果命令组中已包含要增加的命令名称的命令时,则试图增加命令至这个组时将被拒绝。
accmd.h
AcEdCommand, AcEdCommandIterator
AcEdCommandStack编辑函数
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;
此函数创建一个AcEdCommand对象;将cmdGlobalName的拷贝,cmdLocalName, commandFlags和functionAddr的拷贝填入,并将其增加至由cmdGroupName标识的命令组中。如果cmdGroupName命令组不存在,则在新的AcEdCommand对象增加之前,创建一个新的cmdGroupName命令组并增加至CommandStack中。否则寻找已有的命令组是否有与AcEdCommand对象有相同全局名称的cmdGlobalName或局部名称的cmdLocalName。 注意:cmdGlobalName和cmdLocalName字符串均不能超过30个字符(不包括字符结束符)。 如果hResourceHandle不非空,则当AutoCAD执行正在注册的命令时,hResourceHandle将成为当前的。当命令结束时,之前的当前资源句柄将恢复为当前的句柄。 如果cmdPtrRet为非空,则它指向的指针将指向正在被addCommand()处理的命令的AcEdCommand对象。 commandFlags参数可包含一个或另一个主标记值(但不是二者都),并可选地与一个或多个第二标记值进行位运算。
关于functionAddr参数,AcRxFunctionPtr是accmd.h头文件中的一个类型定义。它定义为: typedef
void (*AcRxFunctionPtr)(); UIContext参数用于增加命令,这个命令不是一个指向命令模式快捷菜单的标准命令的命令选项。 fcode参数允许应用程序将一个整数码赋值给一条命令。这个码可从被调用的函数中通过ads_getfcode()取得(只有通过ads_invoke调用时,或当VisualLISP=YES时)。 如果成功地增加新的AcEdCommand,则返回Acad::eOk。 如果cmdGlobalName或cmdLocalName已存在于cmdGroupName命令组中,则增加命令失败并返回Acad::eDuplicateKey。 如果cmdGlobalName或cmdLocalName超过30个字符(不包括结束字符),则返回Acad::eInvalidInput。 |
||||||||||||||||||||||||||||||||||||||||||||||||||
virtual bool atPut( const char*
cmdGroupName, AcRxDictionary*& cmdsGlobal, AcRxDictionary*& cmdsLocal) = 0;
此函数仅供内部使用。 |
||||||||||||||||||||||||||||||||||||||||||||||||||
virtual Acad::ErrorStatus popGroupToTop( const char*
cmdGroupName) = 0;
此函数将cmdGroupName命令组弹至CommandStack顶部,使之成为在解析ObjecctARX应用程序定义的名称时第一个被搜索的组。 如果成功则返回Acad::eOk。 如果在CommandStack中没有cmdGroupName的命令组,则返回Acad::eKeyNotFound。 |
||||||||||||||||||||||||||||||||||||||||||||||||||
virtual Acad::ErrorStatus removeCmd( const char*
cmdGroupName, const char*
cmdGlobalName) = 0;
此函数将具有名为cmdGlobalName全局的和未转化名称的函数从cmdGroupName命令组中删除。 如果成功则返回Acad::eOk。 如果在cmdGroupName命令组中没有名为cmdGlobalName的全局的和未转化的命令,则返回Acad::eKeyNotFound。 注意:只搜索名为cmdGroupName的命令组的全局的和未转化的名称空间。命令不能使用一个命令的局部的或已转化的名删除。 |
||||||||||||||||||||||||||||||||||||||||||||||||||
virtual Acad::ErrorStatus removeGroup( const char*
groupName) = 0;
此函数将名为GroupName的命令组从CommandStack中删除,并删除命令组词典对象和所有的储存在其中的AcEdCommand对象。 如果成功则返回Acad::eOk。 如果没有找到名为GroupName的命令组,则返回Acad::eKeyNotFound。 |
AcEdCommandStack Query
Functions
virtual AcEdCommandIterator * iterator() = 0; 返回指向一个AcEdCommandIterator的指针,这个AcEdCommandIterator可用于遍历所有CommandStack中的AcEdCommand对象(即,迭代器遍历所有组中的命令)。 注意:迭代器是动态地分配,在不需要时必须由调用的应用程序删除。 |
||||||||||||||||||
virtual AcEdCommand * lookupCmd( const char*
cmdName, bool globalFlag, bool allGroupsFlag, bool skipUndefed) = 0;
此函数在当前的命令组(如果allGroupsFlag
== false)或所有的命令组中搜索第一次出现的cmdName。搜索通常从CommandStack顶部的命令组开始。如果globalFlag
== true,则搜索CommandStack的全局的和未转化的名称空间。否则搜索局部的和已转化的名称空间。如果skipUndefed
== true,则在搜索中忽略记为未定义的命令。如果找到匹配的命令名,则返回关联的AcEdCommand对象的拷贝。否则返回NULL,表示命令没有找到。如果搜索所有命令组并且找到超过一个的相同命令(即,在不同的命令组中),则使用第一个找到的命令。 注意:执行调用的应用程序不能删除返回的对象。 virtual AcEdCommand * lookupCmd( const char*
cmdName, bool globalFlag, bool allGroupsFlag) = 0;
此函数在当前的命令组(如果allGroupsFlag
== false)或所有的命令组中搜索第一次出现的cmdName。搜索通常从CommandStack顶部的命令组开始。如果globalFlag
== true,则搜索CommandStack的全局的和未转化的名称空间。否则搜索局部的和已转化的名称空间。如果找到匹配的命令名,则返回关联的AcEdCommand对象的拷贝。否则返回NULL,表示命令没有找到。如果搜索所有命令组并且找到超过一个的相同命令(即,在不同的命令组中),则使用第一个找到的命令。 注意:执行调用的应用程序不能删除返回的对象。 virtual AcEdCommand * lookupCmd( const char*
cmdName, bool globalFlag) = 0;
此函数在CommandStack中的所有命令组中搜索与cmdName匹配的名称。如果globalFlag
== true,则搜索CommandStack的全局的和未转化的名称空间。否则搜索局部的和已转化的名称空间。如果找到匹配的命令名,则返回关联的AcEdCommand对象的拷贝。否则返回NULL,表示命令没有找到。如果搜索CommandStack找到超过一个的相同命令(即,在不同的命令组中),则使用第一个找到的命令。 注意:执行调用的应用程序不能删除返回的对象。 |
||||||||||||||||||
virtual AcEdCommand * lookupCmd2( const char*
cmdName, bool globalFlag, bool allGroupsFlag, int skipFlags, bool match =
false) = 0;
此函数仅供内部的ObjectARX系统使用。 |
||||||||||||||||||
virtual AcEdCommand * lookupGlobalCmd( const char*
cmdName) = 0;
在CommandStack中的所有命令组中从堆顶开始搜索所有的全局的和未转化的名称,找出是否有名为cmdName的命令。如果找到匹配的命令,返回指向关联的AcEdCommand对象的拷贝的指针。否则返回NULL,表示没有找到命令。如果搜索CommandStack找到超过一个的相同命令(即,在不同的命令组中),则使用第一个找到的命令。 注意:执行调用的应用程序不能删除返回的对象。 |
||||||||||||||||||
virtual AcEdCommand * lookupLocalCmd( const char*
cmdName) = 0;
在CommandStack中的所有命令组中从堆顶开始搜索所有的局部的和已转化的名称,找出是否有名为cmdName的命令。如果找到匹配的命令,返回指向关联的AcEdCommand对象的拷贝的指针。否则返回NULL,表示没有找到命令。如果搜索CommandStack找到超过一个的相同命令(即,在不同的命令组中),则使用第一个找到的命令。 注意:执行调用的应用程序不能删除返回的对象。 |