EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 767|回复: 0
打印 上一主题 下一主题

[资料] AutoCAD初始化C#程序中的属性

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12406

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-8 15:27:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.关于CAD初始化托管程序,先看一段帮助中文件:
当AutoCAD装载一个托管程序时,它查询程序的装配件(assembly)是否有ExtensionApplication自定义特性性。如果它找到这个特性,AutoCAD把这个特性所联系的类型作为程序的入口点。如果没有找到这个特性,AutoCAD查找所有实现IExtensionApplication接口的输出类。如果没有找到相关的接口实现,AutoCAD就会跳过程序的初始化步骤。
ExtensionApplication 特性只能被附加到一个类型。这个被附加的类型必须实现IExtensionApplication接口。
除了查找IExtensionApplication 接口的实现,AutoCAD 查询程序的装配件是否有一个或多个CommandClass特性。如果找到带有这个特性的实例,AutoCAD 只查找它们所联系的命令方法类型。否则,它会查找所有输出的类型。
CommandClass 特性可以被声明为定义AutoCAD命令处理函数的任何类型。如果一个程序使用CommandClass 属性,它必须为包含有AutoCAD命令处理函数的所有类型声明一个带有此特性的实例。
下面描述了怎样使用这些特性:
2.优化代码来快速载入大型程序
1.定义一个实现Autodesk.AutoCAD.Runtime.IExtensionApplication接口的类型。如果你不需要执行初始化或终止工作,那么可以为接口方法提供空实现。
2.在装配件环境中,声明一个ExtensionApplication特性。
3.把实现了IExtensionApplication接口的类型传递给ExtensionApplication特性。
4.在装配件环境中,为每个定义AutoCAD命令方法的类声明一个CommandClass特性。
5.把命令方法类的类型传递给CommandClass特性。
3.代码分析
  1. <font color="#323e32" style="font-family: 'Microsoft Yahei', Simsun; "><font face="simsun"><font color="blue"><font face="新宋体"><font style="font-size: 9pt; ">using</font></font></font> <font face="新宋体"><font style="font-size: 9pt; ">System;</font></font>
  2. </font></font><font color="#323e32" style="font-family: 'Microsoft Yahei', Simsun; "><font face="simsun"><font color="blue"><font face="新宋体"><font style="font-size: 9pt; ">using</font></font></font> <font face="新宋体"><font style="font-size: 9pt; ">System.Diagnostics;</font></font>
  3. </font></font><font color="#323e32" style="font-family: 'Microsoft Yahei', Simsun; "><font face="simsun"><font color="blue"><font face="新宋体"><font style="font-size: 9pt; ">using</font></font></font> <font face="新宋体"><font style="font-size: 9pt; ">Autodesk.AutoCAD.Runtime;</font></font>
  4. </font></font><font color="#323e32" style="font-family: 'Microsoft Yahei', Simsun; "><font face="simsun"><font color="blue"><font face="新宋体"><font style="font-size: 9pt; ">using</font></font></font> <font face="新宋体"><font style="font-size: 9pt; ">Autodesk.AutoCAD.ApplicationServices;</font></font>
  5. </font></font><font color="#323e32" style="font-family: 'Microsoft Yahei', Simsun; "><font face="simsun"><font color="blue"><font face="新宋体"><font style="font-size: 9pt; ">using</font></font></font> <font face="新宋体"><font style="font-size: 9pt; ">Autodesk.AutoCAD.EditorInput;</font></font>
  6. </font></font><font color="#323e32" style="font-family: 'Microsoft Yahei', Simsun; "><font face="simsun"><font color="blue"><font face="新宋体"><font style="font-size: 9pt; ">using</font></font></font> <font face="新宋体"><font style="font-size: 9pt; ">Autodesk.AutoCAD.DatabaseServices;</font></font>
  7. <font face="新宋体"><font style="font-size: 9pt; ">[<font color="blue">assembly</font>: <font style="color: rgb(43, 145, 175); ">ExtensionApplication</font>(<font color="blue">typeof</font>(ManagedApp.<font style="color: rgb(43, 145, 175); ">Init</font>))]</font></font>
  8. <font face="新宋体"><font style="font-size: 9pt; ">[<font color="blue">assembly</font>: <font style="color: rgb(43, 145, 175); ">CommandClass</font>(<font color="blue">typeof</font>(ManagedApp.<font style="color: rgb(43, 145, 175); ">Commands</font>))]</font></font>
  9. <font color="blue"><font face="新宋体"><font style="font-size: 9pt; ">namespace</font></font></font> <font face="新宋体"><font style="font-size: 9pt; ">ManagedApp</font></font>
  10. <font face="新宋体"><font style="font-size: 9pt; ">{</font></font>
  11. <font face="新宋体"><font style="font-size: 9pt; ">    <font color="blue">public</font> <font color="blue">class</font> <font style="color: rgb(43, 145, 175); ">Init</font> : <font style="color: rgb(43, 145, 175); ">IExtensionApplication</font></font></font>
  12. <font face="新宋体"><font style="font-size: 9pt; ">    {</font></font>
  13. <font face="新宋体"><font style="font-size: 9pt; ">        <font color="blue">public</font> <font color="blue">void</font> Initialize()</font></font>
  14. <font face="新宋体"><font style="font-size: 9pt; ">        {</font></font>
  15. <font face="新宋体"><font style="font-size: 9pt; ">        </font></font> <font face="新宋体"><font style="font-size: 9pt; ">。。。。。。</font></font>
  16. <font face="新宋体"><font style="font-size: 9pt; ">       }</font></font>
  17. <font face="新宋体"><font style="font-size: 9pt; ">        [<font style="color: rgb(43, 145, 175); ">CommandMethod</font>(<font style="color: rgb(163, 21, 21); ">"Test"</font>)]</font></font>
  18. <font face="新宋体"><font style="font-size: 9pt; ">       <font color="blue">public</font> <font color="blue">void</font> Test()</font></font>
  19. <font face="新宋体"><font style="font-size: 9pt; ">        {</font></font>
  20. <font face="新宋体"><font style="font-size: 9pt; ">          </font></font><font face="新宋体"><font style="font-size: 9pt; ">。。。。。。</font></font>
  21. <font face="新宋体"><font style="font-size: 9pt; ">        }</font></font>
  22. <font face="新宋体"><font style="font-size: 9pt; ">    }</font></font>


  23. <font face="新宋体"><font style="font-size: 9pt; ">    <font color="blue">public</font> <font color="blue">class</font> <font style="color: rgb(43, 145, 175); ">Commands</font></font></font>
  24. <font face="新宋体"><font style="font-size: 9pt; ">    {</font></font>
  25. <font face="新宋体"><font style="font-size: 9pt; ">       [<font style="color: rgb(43, 145, 175); ">CommandMethod</font>(<font style="color: rgb(163, 21, 21); ">"kaka"</font>,<font style="color: rgb(43, 145, 175); ">CommandFlags</font>.Modal)]</font></font>
  26. <font face="新宋体"><font style="font-size: 9pt; ">      <font color="blue">public</font> <font color="blue">void</font> LoadAssembly()</font></font>
  27. <font face="新宋体"><font style="font-size: 9pt; ">    {</font></font>
  28. </font></font><font color="#323e32" style="font-family: 'Microsoft Yahei', Simsun; "><font face="simsun">           <font face="新宋体"><font style="font-size: 9pt; ">。。。。。。</font></font>
  29. <font face="新宋体"><font style="font-size: 9pt; ">        }</font></font>
  30. <font face="新宋体"><font style="font-size: 9pt; ">        [<font style="color: rgb(43, 145, 175); ">CommandMethod</font>(<font style="color: rgb(163, 21, 21); ">"GetVersion"</font>)]</font></font>
  31. <font face="新宋体"><font style="font-size: 9pt; ">        <font color="blue">public</font> <font color="blue">void</font> GetVersion()</font></font>
  32. <font face="新宋体"><font style="font-size: 9pt; ">        {</font></font>
  33. <font face="新宋体"><font style="font-size: 9pt; ">          </font></font><font face="新宋体"><font style="font-size: 9pt; ">。。。。。。</font></font>
  34. <font face="新宋体"><font style="font-size: 9pt; ">        }</font></font>
  35. <font face="新宋体"><font style="font-size: 9pt; ">    }</font></font></font></font>
复制代码
}
1. Assemblyassembly标识符显式地告诉了编译器,当前这个属性用于整个程序集,所以它的位置不能在arxClass类中,可以放在namespaceClassLibrary中或者外面。上面是放在了命名空间外面。
2.[assembly: ExtensionApplication(typeof(ManagedApp.Init))]
上面表示ExtensionApplication属性,CAD首先查找它标志的类来初始化,如果没有找到,就找如上面public class Init :IExtensionApplication 实现了IExtensionApplication的类,如果还是没有找到,就跳过初始化。所以上面[assembly:ExtensionApplication(typeof(ManagedApp.Init))]和public class Init : IExtensionApplication后面的IExtensionApplication写上一处就可以了。
3.[assembly: CommandClass(typeof(ManagedApp.Commands))]
表示ManagedApp.Commands是定义CommandClass的,就是说能够执行Commands中定义的命令(CommandMethod)如上面的[CommandMethod("kaka")]和[CommandMethod("GetVersion")],但是不能执行[CommandMethod("Test")],因为[CommandMethod("Test")]所在的类Initialize()没有定义CommandClass
4. 在属性类名与后缀Attribute间存在一个自动的编译转换。因此当我们用一个属性去修饰一个程序实体时,不需要给出Attribute这个后缀。编译器首先会在System.Attribute的所有派生类中进行匹配,如果没有找到匹配属性,它就将属性名加上Attribute后缀名后再进行匹配。
所以上面使用[CommandMethod("kaka")][]CommandMethodAttribute("kaka")效果是一样的。
5.从对象浏览器中可以看到有两个定义属性的,CommandMethod和CommandClass从字面上看一个是定义类的,一个是定义方法的。
[CommandMethod("kaka",CommandFlags.Modal)],定义了CAD中能运行的命令
上面有两个参数:" kaka "CommandFlags.Modal,"Hello"表示全局名,就是输入Hello标示public void HelloWorld(),而CommandFlags.Modal表示的意思是命令是透明的。还可以选多个表示方法,打开CommandFlags看。CommandMethod的其他属性相关含义见才鸟.net教程272页



-------------------------------------------
IExtensionApplication接口
1.接口:定义了一类事物(类)都必须实现的行为,这些行为时方法、属性、事件的集合,他不提供任何具体实现,也不包含任何字段,接口通过interface关键字来定义,在其代码内指定他所包含的具体成员。
2.IExtensionApplication接口
是Autodesk.AutoCAD.Runtime的成员,具体如下,有两个方法,一个是初始化时执行的方法、一个是终止的执行的。方法里面没有任何具体实现。
public interface IExtensionApplication
{
void Initialize();
void Terminate();
}
  用在CAD中就是表示实现IExtensionApplication接口的类在初始化时执行Initialize(),终止时执行Terminate()。接口实现的方法和类的继承在语法上一样,通过“:”来实现,但是类中必须重写接口中定义所有方法、事件和属性。
public class App : IExtensionApplication
{
public void
Initialize()
{
           // 重写,初始化我的应用程序
           ……
}
public void
  Terminate()
{
           //重写,清理我的应用程序
}
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对

相关帖子

工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-11-27 04:17

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表