AutoCad.net(3)

                创建和编辑AutoCAD实体
    我们可以创建各种AutoCAD实体对象,从简单的直线和圆到样条曲线、椭圆和关联填充区域等。通常使用AppendEntity()函数将对象添加到BlockTableRecord对象。创建了一个对象后,我们就可以修改其图层、颜色、线型等属性。

图形数据库与其他数据库程序类似,我们可以将模型空间的直线对象想像成表记录,而将模型空间想像成数据库表。使用数据库时,必须在进行操作前打开和关闭记录。存储在图形数据库里的对象也是一样。我们使用GetObject()函数从数据库中获取一个对象,并确定怎样使用该对象。

   

    使用ObjectId
图形数据库Database对象中包含的每个对象都被赋予了几种独特的ID标志,以方便访问对象。这些独特的标志有:
• 实体句柄Handle;
• 对象ObjectId;
• 实例指针Instance pointer;
最常用方法是通过ObjectId访问对象。在一个开发项目里同时使用COM互操作和托管.NET API的情况下,对象ObjectId都能很好地工作。如果创建自定义AutoLISP函数,就需要使用实体句柄来访问对象。
句柄存在于AutoCAD会话之间,因此,如果我们需要将图形信息导出到一个外部文件,以便随后用于更新图形,这时使用实体句柄访问对象是最好的方式。数据库中对象的ObjectId只在数据库加载到内存里时才存在。一旦数据库关闭,赋予对象的ObjectId就不存在了,并且下次打开数据库时可能为该对象赋予了一个不同的ObjectId。


获取对象的ObjectId
使用对象时,在打开对象对其进行查询或编辑前,需要先获得该对象的ObjectId。图形文件打开时,数据库中已存在的对象会被赋予一个ObjectId,新对象在第一次创建时会被赋予ObjectId。数据库中已存在对象的ObjectId通常通过下列方式获得:
• 使用Database对象的成员属性,如Clayer属性用来提取当前图层的ObjectId;

• 遍历符号表,如遍历图层符号表可以获得每个图层的ObjectId;


打开一个对象
一旦得到对象的ObjectId,就可以使用GetObject()函数打开该对象。打开对象的方式(打开模式)有下列三种:
• Read.以读模式打开对象;
• Write.对还没打开的对象以写模式打开;
• Notify. 以通知方式打开对象,用于当对象已经关闭、已经以读模式打开或已经以写模式打开时。更多关于通知的内容,见(§7 使用事件)。
应以最适合访问的方式打开对象。以写模式打开对象可能会产生比你的需要还多的额外开销,原因是这时会创建撤销记录。如果不能确定正要打开的对象就是你要使用的,应该以读模式打开,然后使用UpgrateOpen()方法将打开模式由读模式升级为写模式.


C#
下面的示例代码演示不再需要事务时手工将其关闭(释放内存)。
Document acCurDb = Application.DocumentManager.MdiActiveDocument.Database;
Transaction acTrans = acCurDb.TransactionManager.StartTransaction();
LayerTableRecord acLyrTblRec;
acLyrTblRec = acTrans.GetObject(acCurDb.LayerZero,
OpenMode.ForRead) as LayerTableRecord;
acTrans.Dispose();


下面的示例代码演示不再需要事务时使用Using语句关闭事务(释放内存)。Using语句是优先选用的编码方式。
Document acCurDb = Application.DocumentManager.MdiActiveDocument.Database;
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
LayerTableRecord acLyrTblRec;
acLyrTblRec = acTrans.GetObject(acCurDb.LayerZero,
OpenMode.ForRead) as LayerTableRecord;
}

使用事务管理器管理事务
事务用来将对多个对象的多个操作打包成单个操作组,以便于提交或回滚。事务通过事务管理器启动和管理。启动事务之后,我们就可以用GetObject()方法打开对象。
当我们操作用GetObject函数打开的对象时,事务管理器TransactionManager会跟踪对该对象的修改。创建及添加到数据库的任何新对象也应同时调用AddNewlyCreatedDBObject()方法将其添加到事务。对象编辑完并添加到数据库后,可以使用事务对象的Commit()方法保存对数据库的修改并关闭所有打开的对象。事务处理完毕后,调用Dispose()方法关闭事务。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值