1 /// <summary> 2 /// 插入另一个dwg 3 /// </summary> 4 /// <param name="filename">文件名</param> 5 /// <param name="over">是否覆盖</param> 6 /// <returns></returns> 7 public static bool GetBlockDefFromFile(string filename, bool over) 8 { 9 Database db = HostApplicationServices.WorkingDatabase; 10 Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; 11 try 12 { 13 FileInfo fi = new FileInfo(filename); 14 string blkdefname = fi.Name; 15 if (blkdefname.Contains(".")) 16 { 17 blkdefname = blkdefname.Substring(0, blkdefname.LastIndexOf('.')); 18 } 19 bool has = Common.BlockTable(db).Has(blkdefname); 20 if ((has && over) || !has) 21 { 22 using (Database blkDb = new Database(false, true)) 23 { 24 blkDb.ReadDwgFile(filename, System.IO.FileShare.Read, true, null); 25 blkDb.CloseInput(true); 26 using (DocumentLock docLock = doc.LockDocument())//多文档要先这样,否则报至命错误 27 { 28 using (Transaction t = doc.TransactionManager.StartTransaction()) 29 { 30 ObjectId idBTR = doc.Database.Insert(blkdefname, blkDb, false); 31 t.Commit(); 32 } 33 } 34 blkDb.Dispose(); 35 36 } 37 } 38 return true; 39 } 40 catch 41 { 42 return false; 43 } 44 45 } 46 47 48 49 50 51 52 53 /// <summary> 54 /// 插入另一图的块名"blkdefname"块定义 55 /// </summary> 56 /// <param name="filename"></param> 57 /// <param name="blkdefname"></param> 58 /// <param name="over"></param>是否覆盖 59 /// <returns></returns> 60 public static bool GetBlockDefFromFile(string filename, string blkdefname, bool over) 61 { 62 try 63 { 64 bool has = Common.BlockTable(m_Database).Has(blkdefname); 65 if ((has && over) || !has) 66 { 67 using (Database blkDb = new Database(false, true)) 68 { 69 blkDb.ReadDwgFile(filename, System.IO.FileShare.Read, true, null); 70 blkDb.CloseInput(true); 71 using (DocumentLock docLock = m_Document.LockDocument())//多文档要先这样,否则报至命错误 72 { 73 using (Transaction trans = m_Database.TransactionManager.StartTransaction()) 74 { 75 ObjectIdCollection ids = new ObjectIdCollection(); 76 ids.Add(Common.GetBlock(blkdefname, blkDb).ObjectId); 77 blkDb.Wblock(m_Database, ids, new Point3d(), DuplicateRecordCloning.Replace); 78 trans.Commit(); 79 } 80 } 81 blkDb.Dispose(); 82 } 83 } 84 return true; 85 } 86 catch 87 { 88 return false; 89 } 90 91 }