CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

ObjectARX 开发指南

命令定义 (.NET)

2023-1-1 16:28| 发布者: admin| 查看: 1572| 评论: 0|来自: AutoCAD

定义命令时,使用该属性。该属性需要一个字符串值用作正在定义的命令的全局名称。除了全局命令名称外,该属性还可以接受以下值:CommandMethodCommandMethodCommandMethod

  • 命令标志 - 定义命令的行为
  • 组名称 — 命令组名称
  • 本地名称 - 本地命令名称,通常特定于语言
  • 帮助主题名称 - 按下 F1 时应显示的帮助主题名称
  • 上下文菜单类型标志 - 定义命令处于活动状态时的上下文菜单行为
  • 帮助文件名 - 包含命令处于活动状态并按下 F1 时应显示的帮助主题的帮助文件

下表列出了可用于定义命令行为的可用标志。

枚举值 描述
操作宏 命令可以使用动作记录器记录为动作。
Defun(德芬酒店) Command 可以作为 LISP 函数调用,因此可用于从 LISP 接收参数,并可以使用这些函数将值返回给 LISP。此标志只能由 Visual LISP 引擎设置。acedGetArgs()acedRetXxx()
DocExclusiveLock(文档独家锁) 调用命令时,文档将被独占锁定。
文档读取锁定 调用命令时,文档将被读取锁定。
可中断 提示用户输入时,该命令可能会中断。
模 态 当另一个命令处于活动状态时,无法调用命令。
NoAction录制 命令不能用动作记录器记录为动作。
NoBlock编辑器 不能从块编辑器中使用命令。
没有历史记录 命令不会添加到 repeat-last-command 历史记录列表中。
NoInferConstraint 推断约束时不能使用命令。
无内部锁 文档不能在内部锁定。
NoMultiple (无倍数) 当以星号 (*) 为前缀作为命令宏的一部分时,Command 不支持多重行为。
NoNewStack的 Command 不会在堆栈上创建新项。
无OEM 无法从 AutoCAD OEM 访问命令。
无纸空间 不能从纸张空间使用命令。
无透视 当 PERSPECTIVE 设置为 1 时,不能使用命令。
NoTileMode 当 TILEMODE 设置为 1 时,无法使用命令。
NoUndoMarker(无撤消标记) 命令不支持撤消标记。这适用于不修改数据库的命令,因此不应显示在撤消文件中。
重 绘 检索 pickfirst 集或夹持集时,不会清除它们。
会期 命令是在应用程序上下文中执行的,而不是在当前文档上下文中执行的。
TempShowDynDimension Command 允许在选择图元时临时显示动态尺寸。
透明 当另一个命令处于活动状态时,可以使用命令。
定义 命令只能通过其全局名称使用。
UsePickSet 检索 pickfirst 集时,将清除该集。

实例和静态命令方法

命令方法可以声明为实例方法或静态方法。静态命令方法是在 C# 中使用 static 关键字声明的,或者在 VB .NET 中使用关键字声明的。实例命令方法是未使用 static 或关键字声明的公共类成员。SharedShared

对于实例命令方法,该方法的封闭类型将针对每个打开的文档单独实例化。这意味着每个文档都会获得命令实例数据的私有副本。因此,当用户切换文档时,不存在覆盖特定于文档的数据的危险。如果实例方法需要全局共享数据,则可以通过声明静态变量或共享成员变量来实现。

对于静态命令方法,托管包装器运行时模块不需要实例化封闭类型。无论文档上下文如何,都使用方法数据的单个副本。静态命令通常不使用每个文档的数据,并且不需要特别考虑 MDI 模式。

可以使用命令标志定义实例和静态方法,以适应特殊要求。例如,可以使用设置标志的属性声明实例方法。这意味着该命令在应用程序执行上下文中运行,但也维护每个文档的数据。此类命令的 AutoCAD 示例是 PROPERTIES 命令。CommandFlags.Session

同样,可以在没有标志的情况下声明静态方法。此组合对于在文档上下文中运行但不需要维护每个文档数据的命令非常有用。CommandFlags.Session

定义命令的语法

下面演示如何创建定义名为 CheckForPickfirstSselection 的命令的属性。该属性还使用命令标志来指示允许命令使用在命令启动之前选择的对象。CommandMethodUsePickSet

VB.NET

<CommandMethod("CheckForPickfirstSelection", CommandFlags.UsePickSet)> _
Public Sub CheckForPickfirstSelection()
 . . .
End Sub

C#

[CommandMethod("CheckForPickfirstSelection", CommandFlags.UsePickSet)]
public static void CheckForPickfirstSelection()
{
 . . .
}

您可以通过在 VB.NET 中使用 + 运算符和 |C# 中的运算符。

VB.NET

<CommandMethod("CheckForPickfirstSelection", CommandFlags.UsePickSet + _
                                             CommandFlags.NoBlockEditor)> _
Public Sub CheckForPickfirstSelection()
 . . .
End Sub

C#

[CommandMethod("CheckForPickfirstSelection", CommandFlags.UsePickSet |
                                             CommandFlags.NoBlockEditor)]
public static void CheckForPickfirstSelection()
{
 . . .
}

路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1   苏公网安备32011402011833)

GMT+8, 2025-1-16 19:53

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部