块参照就是AutoCAD中的图块,它引用于块定义(即添加到块表的块表记录)。而块定义有两种形式:1、引用外部DWG图纸。2、种是图纸中添加在块表中的块表记录。 以下是块定义引用为块参照的例子:
- using System;
- using Autodesk.AutoCAD.DatabaseServices;
- using Autodesk.AutoCAD.Geometry;
- using Autodesk.AutoCAD.Runtime;
- [assembly: CommandClass(typeof(Sample.AddBlock))]
- namespace Sample
- {
-
class AddBlock -
{ -
/// <summary> -
/// 引用外部文件为块参照插入 -
/// </summary> -
[CommandMethod("AddRefBlock")]
-
public void Add1() -
{ -
Database db = HostApplicationServices.WorkingDatabase; -
using (Transaction trans = db.TransactionManager.StartTransaction()) -
{ -
BlockTable bt = trans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable; -
BlockTableRecord btr = trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; -
ObjectId refid = db.OverlayXref(@"c:\drwing.dwg", "name");// 通过外部文件获取图块定义的ObjectId -
BlockReference br = new BlockReference(Point3d.Origin, refid); // 通过块定义添加块参照 -
btr.AppendEntity(br); //把块参照添加到块表记录 -
trans.AddNewlyCreatedDBObject(br, true); // 通过事务添加块参照到数据库 -
trans.Commit(); -
} -
} -
/// <summary> -
/// 把块定义变为块参照插入 -
/// </summary> -
[CommandMethod("AddBlock")]
-
public void Add2() -
{ -
Database db = HostApplicationServices.WorkingDatabase; -
ObjectId blkid; -
//创建块定义 -
using (Transaction trans = db.TransactionManager.StartTransaction()) -
{ -
BlockTable bt = trans.GetObject(db.BlockTableId, OpenMode.ForWrite) as BlockTable; -
BlockTableRecord blk = new BlockTableRecord(); -
blk.Name = "BLK"; -
Line L = new Line(Point3d.Origin, new Point3d(1000, 1000, 0)); -
Circle C = new Circle(Point3d.Origin, Vector3d.ZAxis, 500); -
blk.AppendEntity(L); -
blk.AppendEntity(C); -
blkid = bt.Add(blk); -
trans.AddNewlyCreatedDBObject(blk, true); -
trans.Commit(); -
} -
using (Transaction tr = db.TransactionManager.StartTransaction()) -
{ -
BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable; -
BlockTableRecord btr = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; -
BlockReference br = new BlockReference(new Point3d(0,0, 0), blkid); // 通过块定义创建块参照 -
btr.AppendEntity(br); //把块参照添加到块表记录 -
tr.AddNewlyCreatedDBObject(br, true); // 通过事务添加块参照到数据库 -
tr.Commit(); -
} -
} -
} - }