1.引入的两个托管类库

使用ObjectARX.NET开发AutoCAD程序需要引用acdbmgd.dllacmgd.dll两个托管程序集。acdbmgd.dll包含ObjectDBX托管类,而acmgd.dll包含AutoCAD托管类。

2.程序调试

       将项目属性调试中的启动动作设为启动程序设为:

C:"Program Files"AutoCAD 2009"acad.exe

将项目属性调试中的工作目录设为C:"Program Files"AutoCAD 2009,否则加载程序集后输入程序集中的命令会不能执行。

注意:(1)导出命令的类必须为public。新建的类没有这个属性,即使使用[CommandMethod]属性导出命令也无法识别。

3.事务管理

l         通过事务处理管理器的GetObject()函数来获取块表对象。GetObject()函数的作用是获取驻留在AutoCAD数据库中的对象,因为这些对象是不能直接访问的。GetObject()函数有不同的形式,这里使用的是最复杂的形式,一共有3个参数。第一个参数表示要获取对象的ObjectId,对于块表或层表之类的符号表,它们的ObjectId可以通过当前数据库对象的相关属性获得,如块表就是BlockTableId,层表就是LayerTableId。第二个参数表示访问对象的方式,它是一个OpenMode的枚举,有3个取值,分别为ForRead(读)、ForWrite(写)和ForNotify(通知)。第三个参数表示是否打开已删除的对象。要注意的是GetObject()函数的返回值为DBObject类型,因此你要把返回值使用强制类型转换化成符合的对象类型。

l         通过事务处理管理器的GetObject()函数来获取模型空间所在的块表记录。模型空间所在块表记录的ObjectId可以通过调用上面获得的块表的索引器来获取,索引器的参数为BlockTableRecord.ModelSpace。对于GetObject()函数其它参数的设置,请参考上面的解释。

l         在块表记录中加入上面创建的实体对象,并通知事务处理管理器。

l         提交事务处理。在事务处理没有被提交之前,直线是不会被加入到AutoCAD中。

l         一个事务中只能提交一次事务(调用事务的Commit()函数)。

4.优化AutoCAD.NET程序的载入

[assembly:ExtensionApplication(typeof(InitClass))] //用于声明该类是ExtensionApplication

[assembly:CommandClass(typeof(CmdClss))]]          //用于声明该类是CommandClass

这两个属性对程序的运行并不是重要的,但如果是在大型的.NET模块中,用这两个属性显示告诉AutoCAD哪些对象类是ExtensionApplication,哪些类是CommandClass,则会加快AutoCAD载入.NET模块的速度。这两个属性是程序级的,在命名空间外进行声明。在VS2005使用托管ARX程序向导会自动为Command.cs创建属性。

如果在程序集中使用了上述两个属性,则未使用上述两个类显示声明的类中导出的类中的命令无法识别。
posted on 2008-05-06 22:40  卢世松  阅读(3626)  评论(0编辑  收藏  举报