许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  AutoCAD创建和编辑图元对象详解

AutoCAD创建和编辑图元对象详解

阅读数 286
点赞 0
article_banner

用户可以创建的对象的范围,从简单的直线、圆到复杂的样条曲线、椭圆和关联填充区域。通常,用户使用 AppendEntity 函数添加对象到中一个 BlockTableRecord 对象中。对象创建后,就可以修改对象的像图层、颜色和线型之类的属性。

图形数据库与其它数据库程序相似,可以认为在模型空间中的一个直线对象就相当于一条表记录,模型空间就相当于数据为表。在使用数据库时,必须在使用它们之前打开和关闭记录。与存储在数据库中的对象不同的是,需要使用 GetObject 函数从数据库中获取对象,然后定义你想怎样使用对象。

本节主题

   打开和关闭对象

   创建对象

   使用选择集

   编辑命名和二维对象

   使用图层,颜色和线型

   保存和恢复图层状态

   向图形中添加文字


打开和关闭对象

使用ObjectIds

   使用事务管理器处理事务

   在没有事务管理器时打开和关闭对象

   升级和降级打开的对象

使用ObjectIds

包含在数据库中的每个对象都被指定了几个唯一编号。使用独特的方式访问对象的方法有:

  • 图元句柄
  • ObjectId
  • 实例指针

大多数公共方法都是通过 ObjectID 访问对象的。如果你的工程使用了COm Interop 和托管 .NET API,ObjectID 也可以很好的工作。如果创建了自定义的 AutoLISP 函数,就可以需要使用图元句柄了。

句柄在 AutoCAD 进程之间是不变的,如果需要输出图形信息到外部文件,可能稍后又需要用它更新图形,那么使用句柄是访问对象最好的方式。数据库中对象的 ObjectID 仅当数据库被加载到 内存  中后才存在。一旦数据库关闭了,对象的 ObjectID 就不再存在并且下次数据库再打开时,同一对象的 ObjectID 可能会不同了。

获取对象 ID

当使用对象时,打开对象用于查询和编辑它之前,首先必须获得对象的ID。当图形打开后,一个对象 ID 被 赋值 给数据库中的一个现有对象,一个新对象在它们首次创建时被赋值对象 ID。对象 ID 通常用于获取数据库中的现有对象:

  • 利用 Database 对象的成员属性,像 CLayer 用于获取当前图层的对象 ID。
  • 遍历符号表,像图层符号表.

打开对象

只要获得了对象 ID,GetObject 函数就可以根据特定的对象 ID 打开指定对象。一个对象可以用以下几种模式打开:

  • Read. 以只读的方式打开对象。
  • Write. 如果对象没有被打开,以写的方式打开对象。
  • Notify. 当对象关闭,以只读或可写方式打开对象时以通知的方式打开对象,但对象打开后不通知。

用户应该以这一种模式打开一个对象,这种模式使访问这个对象有最好的状态。以可写方式打开对象比创建一个可撤消记录需要更多额外的开销。如果你不确定对象是否是你想打开后用于操作的对象,就应该以只读方式打开,然后使用 UpgradeOpen 方法把模式从只读模式升级为可写模式。

GetObject 和 Open 函数都返回一个对象。在一些程序语言中,需要根据被赋值的变量值转换返回值。如果使用的是 VB  .NET,就不需要担心转换返回值,因为它自己做这么做。下面示例展示为当前数据库的零层获得 LayerTableRecord。

下面的示例在事务不再需要后手工销毁它。

Dim acCurDb As Document = Application.DocumentManager.MdiActiveDocument.DatabaseDim acTrans As Transaction = acCurDb.TransactionManager.StartTransaction() Dim acLyrTblRec As LayerTableRecordacLyrTblRec = acTrans.GetObject(acCurDb.LayerZero, OpenMode.ForRead) acTrans.Dispose()

下面的示例使用 Using 语句在事务不再需要后销毁。Using 语句是首选的代码样式。

Dim acCurDb As Document = Application.DocumentManager.MdiActiveDocument.DatabaseUsing acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()    Dim acLyrTblRec As LayerTableRecord    acLyrTblRec = acTrans.GetObject(acCurDb.LayerZero, OpenMode.ForRead)End Using

使用事务管理器处理事务

事务是用于将多个对象的多个操作一起当作一个简单的操作。事务是通过事务管理器启动和管理的。只要事务启动了,就可以使用 GetObject 函数打开对象。

当用 GetObject 打开使用的对象时,事务管理器会追踪对对象所做的修改。任何创建和添加到数据库的新对象,最好使用 AddNewlyCreatedDBObject 函数将其添加到事务中。一旦对象完成编辑或添加到数据库,应该保存对数据库所做的修改并关闭所有打开的对象,可以使用事务管理器创建的事务对象的 Commit 函数完成此操作。只要完成一个事务,就要用 Dispose 函数关闭事务。


开始新事务并打开对象

   提交与回滚更改

   嵌套事务

开始新事务并打开对象

事务管理器是从当前 Database   的 TransactionManager 属性访问的。一旦对事务管理器进行了引用,就可以使用 StartTransaction 方法启动一个新事务。StartTransaction 会创建一个 Transaction 对象的实例并允许用户使用 GetObject 方法打开对象。

在事务结束的时候,所有在事务打开期间打开的对象都会被关闭。若要结束事务,请调用 Transactio
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空