AutoCAD二次开发之.net API学习笔记(2)

1、缺省情况下,每个新建的数据库的块表中都包含两条特殊的块表记录:模型空间和图纸空间。其中前者用

于创建图形,后者用于创建最终的布局,新创建的实体通过BlockTableRecord的AppendEntity方法添加,同时

需要通过事务的AddNewlyCreateDBObject方法通知事务,通常可以将添加操作放在Using语句中,在Using定义

的范围内完成对数据库的操作,结束using语句后,事务自动调用Dispose。
2、对象标识  
(1)句柄Handle——Autodesk.AutoCAD.DatabaseServices.Handle
说明:实体句柄可以随DWG文件保存,句柄的唯一性只限于其所在的DWG文件,可以通过DBObject的Handle属性

返回数据库对象对应的句柄。
(2)ObjectId——Autodesk.AutoCAD.DatabaseServices.ObjectId
说明:与句柄不同,对象ID仅存在于其所在的数据库从内存中产生到被删除之前,并且如果操作多个数据库,

对象ID在多个数据库之间都是唯一的,可以通过数据库对象DBObject的ObjectId属性返回数据库对象对应的

ObjectId,通过ObjectId可以通过事务的GetObject方法将实体对象打开,以供编辑。
3、实体都是从Entity类派生,例如圆、直线、矩形等,它们都具有一些共同的属性,包括颜色、线型、线型

比例、可见性、图层等,当添加实体到块表记录时,如果没有明确指定这些属性,AutoCAD会自动调用

SetDatabaseDefaults()函数来设置默认值;但不同的实体往往有着不同的属性和方法,所以当打开一个实体

对象时,经常需要判断其类型才能使用相应的属性和方法,System.Type类表示类型声明,是一个抽象类,运

算符typeof返回一个System.Type对象,可以用来判断是否是所指定的对象类型,例如;
myEntity.GetType == typeof(Circle)
完成了对象的类型判断之后,如果需要进行类型转换,通常调用运算符as来进行转换操作,但是如果转换不可

行,as会引发NULL而不是引发异常,也可以通过强制转换实现,例如:

// 使用as进行转换
Line aline = myEntity as Line;
// 强制转换
Circle cir = (Circle)myEntity;

4、块对象在AutoCAD中经常用到,实际平时使用的有块定义和块参照两部分。块定义实际上就是在块表中增加

一个块表记录BlockTableRecord,使用“block”命名创建块实际就是创建了一条块记录,使用“insert”命

名插入块,实际就是向数据库的模型中添加了一个块引用的实体,创建块定义步骤大致如下:
(1)定义块的ID——ObjectId blkObjId = new ObjectId();
(2)获取块表——BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId,OpenMode.ForWrite)
(3)创建新的块表记录 BlockTableRecord nBtr=new BlockTableRecord();
(4)保存块表记录到块表,返回其ID——blkObjId=bt.Add(nBtr);
(5)保存新创建的实体到块表记录。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值