块在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 }
运行完成结束后将在现有的文档中创建一个块参照。
标签:创建,tr,System,导入,dwg,IO,CAD From: https://www.cnblogs.com/wu-zm/p/16880633.html