AutoCAD .NET二次开发——CommandMethod

今天专门讲一个——CommandMethod。我们都在知道CAD操作要快,必须要熟悉掌握各种命令。在Lisp开发中,在函数后C:即可添加一个命令,非常方法,在.NET API也可以非常方便的设置命令,它需要CommandMethod属性。

先来看CommandMethod的定义,它的构造函数很多,其中参数最全的一个如下图所示:

AutoCAD <wbr>.NET二次开发——CommandMethod

groupName组名,string,命令编组名称,一般在小项目开发中用得比较少。

globalName,全局名称, string,即命令,它应该是唯一的,不然在调用时会发生意外。

localizedNameId, 本地名称,string,指定语言的本地命令名称,不知道有什么用。

flags, 命令标志,CommandFlags,定义命令的行为。详见附表。

contextMenuExtensionType, 上下文菜单类型标志 ,Type, 定义命令处于活动状态时的上下文菜单行为。

helpFileName, 帮助文件名string,帮助文件,含有命令活动状态下按下F1时要显示的帮助主题。

helpTopic ,帮助主题,string。帮助文件中的主题。

除上面这个构造函数外,它还有5个:

CommandMethodAttribute(string globalName)

CommandMethodAttribute(string globalName, CommandFlags flags)

CommandMethodAttribute(string groupName, string globalName, CommandFlags flags)

CommandMethodAttribute(string groupName, string globalName, string localizedNameId, CommandFlags flags)

CommandMethodAttribute(string groupName, string globalName, string localizedNameId, CommandFlags flags, string helpTopic)

CommandMethodAttribute(string groupName, string globalName, string localizedNameId, CommandFlags flags, Type contextMenuExtensionType)

在使用时的注意事项有:

(1)CommandMethodAttribute和CommandMethod是一个,不管使用哪一个都可以;

(2)CommandMethodAttribut的使用需要添加相关引用,包括accoremgd,acdbmgd和acmgd三个;

(3)CommandMethod后的有效行必须是一个函数。

附表:Command Flags命令标志

枚举值描述
ActionMacro可以用动作录制器录制命令动作;
DocReadLock命令执行时将被只读锁定;
Interruptible提示用户输入时可以中断命令;
Modal别的命令运行时不能运行此命令;
NoActionRecording不能用动作录制器录制命令动作;
NoBlockEditor不能从块编辑器使用该命令;
NoHistory不能将命令添加到repeat-last-command(重复上一个命令)历史列表;
NoPaperSpace不能从图纸空间使用该命令;
NoTileMode当TILEMODE置1时不能使用该命令;
NoUndoMarker命令不支持撤销标记。用于不修改数据库因而也就无需出现在撤销记录中的那些命令;
Redraw不清空取回的先选择后执行设置及对象捕捉设置;
Session命令运行于应用程序上下文,而不是当前图形文档上下文;
Transparent别的命令运行时可以运行此命令;
Undefined只能通过全局名使用命令;
UsePickSet清空取回的先选择后执行设置;

注意, 当使用 implifiedselection 的时候, 需要 在commandmethod 里加入 Command Flags .usepickset.
但是执行完命令会清空选择. 所有如果最后高亮一些图元(ed.setimplifiedselection)时,需要添加Redraw命令,