块在CAD中有很强的复用性,在CAD中经常可以看到各种各样的块,在开发中我们也经常需要创建一些属于我们自己块,创建块的方式有两种,一种是直接创建实体,然后将实体保存到一个新建的块表中,另一种方式则是通过导入外部的dwg文件来创建块。接下来将介绍如何讲dwg文件导入成块。

首先创建一个dwg文件,创建块时默认的基点为原点

通过代码读取dwg文件并创建块

1 [CommandMethod("DRK", CommandFlags.Session)]

2 public static void DRK_导入块()

3 {

4 Document doc = app.DocumentManager.MdiActiveDocument;

5 Database db = doc.Database;

6 //将dwg文件以导入成块,并创建块参照

7 string dir = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);

8 string dwg = System.IO.Path.Combine(dir, "blocks", "路灯.dwg");

9 if (!System.IO.File.Exists(dwg))

10 return;

11 string filename = System.IO.Path.GetFileNameWithoutExtension(dwg);

12 using(doc.LockDocument())

13 {

14 using(Transaction tr = db.TransactionManager.StartTransaction())

15 {

16 BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForWrite) as BlockTable;

17 BlockTableRecord btr = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;

18 ObjectId btrObjid = ObjectId.Null;

19 if (!bt.Has(filename))//如果现有的文档中没有该块才导入,否则会出现块重定义

20 {

21 Database tmpDb = new Database(false, true);

22 tmpDb.ReadDwgFile(dwg, System.IO.FileShare.Read, false, "");//先把文件读进来

23 btrObjid = db.Insert(filename, tmpDb, false);//块的本质就是一天块表记录(BlockTableRecord)

24 tmpDb.Dispose();

25 }

26 else

27 {

28 btrObjid = bt[filename];

29 }

30

31 //创建块参照

32 BlockReference blk = new BlockReference(new MCAD.Geometry.Point3d(0, 0, 0), btrObjid);

33 btr.AppendEntity(blk);

34 tr.AddNewlyCreatedDBObject(blk,true);

35

36 tr.Commit();

37 }

38 }

39

40 }

运行完成结束后将在现有的文档中创建一个块参照。


《恋与制作人》李泽言·光影随心羁绊卡详解
oppo手机拍照怎么设置背景虚化