【问题标题】:Where should I put the commands in an Autocad VB.NET project?我应该将命令放在 Autocad VB.NET 项目中的什么位置?
【发布时间】:2013-07-09 05:01:50
【问题描述】:

我对 Autocad 编程非常陌生,几个月才新,但我设法编写了一个包含大约 10 个 Autocad 命令的应用程序。这些命令中的大多数都显示一个窗口,其他所有操作都在该窗口中完成。我尝试使我的应用程序 MVVM..ish。因为我在 Models ViewModels Views 和命令之间有几乎 1 对 1 的对应关系,所以我觉得将命令放在 MVVM 的 3 个部分之一中是合适的。首先我决定将命令放在 ViewModel 中,然后我意识到我的命令只是显示一个窗口,而 ViewModel 不应该处理窗口,所以我将命令移至 View 的 Codebehind。据我了解,只要代码与视图严格相关,就可以在代码隐藏中包含代码。然后我在 Autodesk 提供的一些教程中阅读了有关 CommandClass 属性的信息,我发现了这一点:

CommandClass 属性 此自定义属性类用于将类型标记为应用程序的命令类。一个应用程序可以指定一个并且只有一个类型作为它的命令类。 AutoCAD 在具有此属性的类型上查找应用程序的命令方法。

这表明我应该有一个类来包含我的所有命令。然后我读到了这个,证实了上述内容:

对于实例命令方法,方法的封闭类型为每个打开的文档单独实例化。

所以我第一种将命令放入视图或视图模型的方法是完全错误的,因为我会让视图模型实例除了运行命令之外什么都不做。然后我在 ObjectARX 的文档中读到了这个:

如果应用程序使用 CommandClass 属性,它必须为每个包含 AutoCAD 命令处理程序方法的类型声明该属性的实例。

这与上面引用的教程直接相矛盾,并且还表明使用多个类来处理命令是一种被认可的做法。

所有 Autocad .NET 教程都是具有一个类和一个命令的项目,因此您不必为放置什么而选择太多。

一些有经验的 Autocad .NET 开发人员能否提供一个最佳实践,或者至少是一个好的,或者没有错误的实践来管理一个相当大的项目中的 Autocad 命令?

【问题讨论】:

  • [试试下面的链接,可能对你有帮助][1] [1]:stackoverflow.com/questions/1338955/autocad-in-vb-net?rq=1
  • 感谢您的回复,但我没有“入门”问题。几个月前,当我真正开始使用 Autocad .NET 时,我已经访问了其中的大部分链接。不幸的是,其中大多数都涵盖了基本的 hello world 问题。

标签: .net vb.net autocad-plugin objectarx


【解决方案1】:

在我的工作中,我将 CommandClass 属性附加到单个类,正如我以前启动的向导所提供的那样。

在那个命令类中,我放置了所有命令。 每一个都带有CommandMethod 属性。

所以它们没有附加到任何对象或视图(我真的认为这只能使用 VBA,而不是 .NET)

但是他们的代码并没有写在那里,我创建了不同的类来管理命令,所以主命令类的工作方式主要像一个命令索引,每个命令在我为自己的目的创建的不同类中调用其各自的主体。

所以,在你的位置,我可能会创建一个 MyCommands 和 CommandClass 具有所有命令的属性。每个命令只是从下面的ViewCommands 类中调用命令体。

创建一个ViewCommands 类(以及您需要的许多其他类,以简化您的模型)。 此类doesn't 具有CommandClass 属性,只是具有常规方法。 它将具有从CommandClass 方法调用的命令的核心。

我从来没有尝试过使用多个CommandClass,而且我相信最好将所有命令集中在一个地方,以便很好地跟踪您的插件所做的工作。

【讨论】:

  • 感谢您的意见和分享您的经验,但我想将这个问题再搁置几天,以便 Autocad.NET 专家看到它并提供更好的争论答案。
  • 正如我最近发现的,当它说它只能是一个命令类属性时,帮助是完全错误的,因此 Autodesk 不打算只有一个命令类。
  • 所以,这取决于你。可能最佳实践将来自一般的开发实践,因为我没有看到任何关于 Autocad .NET 的具体内容。可能你甚至不需要 CommandClass 属性,我在插件向导中的帮助告诉它不是强制性的,但可以提高性能。
猜你喜欢
  • 1970-01-01
  • 2010-10-11
  • 1970-01-01
  • 2012-08-10
  • 2012-07-22
  • 2018-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多