ObjectARX.NET C# 开发笔记一

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创建属性。

如果在程序集中使用了上述两个属性,则未使用上述两个类显示声明的类中导出的类中的命令无法识别。

转载于:https://www.cnblogs.com/ynchlss/archive/2008/05/06/1185915.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值