工具箱相关
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

LayerChange.cs 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using GrxCAD.ApplicationServices;
  7. using GrxCAD.DatabaseServices;
  8. using GrxCAD.EditorInput;
  9. using System.Collections;
  10. using GrxCAD.Geometry;
  11. using System.IO;
  12. using System.Windows.Forms;
  13. namespace HCTools
  14. {
  15. class LayerChange
  16. {
  17. public static string dwgpath;//dwg文件所在位置
  18. public static List<string> lys;//要删除/打开/关闭的图层
  19. public static string savepath;//保存位置
  20. public static int flag;
  21. public void chagly()
  22. {
  23. //try
  24. //{
  25. List<String> dwgname = GetNameList(dwgpath, ".dwg");//获取dwg文件
  26. if (dwgname.Count == 0)
  27. {
  28. MessageBox.Show("没有找到dwg文件!", "警告");
  29. return;
  30. }
  31. foreach (string dwgfile in dwgname)
  32. {
  33. string dwg = dwgpath + "\\" + dwgfile;
  34. Document doc = GrxCAD.ApplicationServices.Application.DocumentManager.Add(dwg);
  35. if (flag == 0|| flag == 3 || flag == 4)
  36. {
  37. Delete(lys, doc, dwgfile);
  38. }
  39. else if (flag == 1)
  40. {
  41. Closely(lys, doc, dwgfile);
  42. }
  43. else if (flag == 2)
  44. {
  45. Openly(lys, doc, dwgfile);
  46. }
  47. doc.CloseAndDiscard();
  48. }
  49. //}
  50. //catch (GrxCAD.Runtime.Exception ex)
  51. //{
  52. // GrxCAD.ApplicationServices.Application.ShowAlertDialog("Error:\n" + ex.Message);
  53. //}
  54. }
  55. private void Delete(List<string> lys, Document doc, string dwgfile)
  56. {
  57. Database database = doc.Database;
  58. Editor ed = GrxCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
  59. if (flag == 0)
  60. {
  61. using (Transaction trans = doc.Database.TransactionManager.StartTransaction())
  62. {
  63. LayerTable layerTable = trans.GetObject(database.LayerTableId, OpenMode.ForRead) as LayerTable;
  64. for (int i = 0; i < lys.Count; i++)
  65. {
  66. if (layerTable.Has(lys[i]))
  67. {
  68. TypedValue[] value = new TypedValue[]
  69. {
  70. new TypedValue((int)DxfCode.LayerName,lys[i])
  71. };
  72. SelectionFilter filter = new SelectionFilter(value);
  73. PromptSelectionResult psr = ed.SelectAll(filter);
  74. if (psr.Status == PromptStatus.OK)
  75. {
  76. SelectionSet ss = psr.Value;
  77. ObjectIdCollection idcoll = new ObjectIdCollection(ss.GetObjectIds());
  78. for (int ii = 0; ii < idcoll.Count; ii++)
  79. {
  80. Entity ent = trans.GetObject(idcoll[ii], OpenMode.ForWrite) as Entity;
  81. ent.Erase();
  82. }
  83. }
  84. }
  85. }
  86. database.SaveAs(savepath + "\\" + dwgfile, true, DwgVersion.AC1021, doc.Database.SecurityParameters);
  87. ed.WriteMessage("删除成功!\n");
  88. trans.Commit();
  89. }
  90. }
  91. if (flag == 3)
  92. {
  93. using (Transaction transaction = database.TransactionManager.StartTransaction())
  94. {
  95. LayerTable layerTable = transaction.GetObject(database.LayerTableId, OpenMode.ForRead) as LayerTable;
  96. foreach (ObjectId objid in layerTable)
  97. {
  98. LayerTableRecord layerTableRecord = transaction.GetObject(objid, OpenMode.ForWrite) as LayerTableRecord;
  99. //if (layerTableRecord == null)
  100. // continue;
  101. layerTableRecord.IsLocked = false;
  102. if (database.Clayer == layerTableRecord.ObjectId)
  103. continue;
  104. TypedValue[] value = new TypedValue[]
  105. {
  106. new TypedValue((int)DxfCode.LayerName,layerTableRecord.Name)
  107. };
  108. SelectionFilter filter = new SelectionFilter(value);
  109. PromptSelectionResult psr = ed.SelectAll(filter);
  110. if (psr.Status == PromptStatus.Error&& lys.Contains(layerTableRecord.Name))
  111. layerTableRecord.Erase();
  112. }
  113. transaction.Commit();
  114. database.SaveAs(savepath + "\\" + dwgfile, true, DwgVersion.AC1021, doc.Database.SecurityParameters);
  115. }
  116. ed.WriteMessage("删除成功!\n");
  117. }
  118. if (flag == 4)
  119. {
  120. using (Transaction transaction = database.TransactionManager.StartTransaction())
  121. {
  122. LayerTable layerTable = transaction.GetObject(database.LayerTableId, OpenMode.ForRead) as LayerTable;
  123. for (int i = 0; i < lys.Count; i++)
  124. {
  125. if (layerTable.Has(lys[i]))
  126. {
  127. LayerTableRecord layerTableRecord = transaction.GetObject(layerTable[lys[i]], OpenMode.ForWrite) as LayerTableRecord;
  128. if (layerTableRecord == null)
  129. continue;
  130. if (database.Clayer == layerTableRecord.ObjectId)
  131. {
  132. database.Clayer = layerTable["0"];
  133. }
  134. layerTableRecord.IsLocked = false;
  135. layerTableRecord.Erase();
  136. BlockTable bt = transaction.GetObject(database.BlockTableId, OpenMode.ForRead) as BlockTable;
  137. foreach (ObjectId btrId in bt)
  138. {
  139. BlockTableRecord btr = transaction.GetObject(btrId, OpenMode.ForRead) as BlockTableRecord;
  140. foreach (ObjectId entId in btr)
  141. {
  142. Entity entity = transaction.GetObject(entId, OpenMode.ForRead) as Entity;
  143. if (entity.Layer == lys[i])
  144. {
  145. entity.UpgradeOpen();
  146. try
  147. {
  148. entity.Erase();
  149. }
  150. catch
  151. {
  152. continue;
  153. }
  154. }
  155. }
  156. }
  157. }
  158. }
  159. database.SaveAs(savepath + "\\" + dwgfile, true, DwgVersion.AC1021, doc.Database.SecurityParameters);
  160. transaction.Commit();
  161. ed.WriteMessage("删除成功!\n");
  162. }
  163. }
  164. }
  165. private void Openly(List<string> lys, Document doc, string dwgfile)
  166. {
  167. Database database = doc.Database;
  168. Editor ed = GrxCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
  169. using (Transaction transaction = database.TransactionManager.StartTransaction())
  170. {
  171. LayerTable layerTable = transaction.GetObject(database.LayerTableId, OpenMode.ForRead) as LayerTable;
  172. for (int i = 0; i < lys.Count; i++)
  173. {
  174. if (layerTable.Has(lys[i]))
  175. {
  176. LayerTableRecord layerTableRecord = transaction.GetObject(layerTable[lys[i]], OpenMode.ForWrite) as LayerTableRecord;
  177. if (layerTableRecord == null)
  178. continue;
  179. layerTableRecord.IsOff = false;
  180. }
  181. }
  182. database.SaveAs(savepath + "\\" + dwgfile, true, DwgVersion.AC1021, doc.Database.SecurityParameters);
  183. transaction.Commit();
  184. }
  185. ed.WriteMessage("打开成功!\n");
  186. }
  187. private void Closely(List<string> lys, Document doc, string dwgfile)
  188. {
  189. Database database = doc.Database;
  190. Editor ed = GrxCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
  191. using (Transaction transaction = database.TransactionManager.StartTransaction())
  192. {
  193. LayerTable layerTable = transaction.GetObject(database.LayerTableId, OpenMode.ForRead) as LayerTable;
  194. for (int i = 0; i < lys.Count; i++)
  195. {
  196. if (layerTable.Has(lys[i]))
  197. {
  198. LayerTableRecord layerTableRecord = transaction.GetObject(layerTable[lys[i]], OpenMode.ForWrite) as LayerTableRecord;
  199. if (layerTableRecord == null)
  200. continue;
  201. layerTableRecord.IsOff = true;
  202. }
  203. }
  204. database.SaveAs(savepath + "\\" + dwgfile, true, DwgVersion.AC1021, doc.Database.SecurityParameters);
  205. transaction.Commit();
  206. }
  207. ed.WriteMessage("关闭成功!\n");
  208. }
  209. /// <summary>
  210. /// 获取文件夹中相应格式的所有文件
  211. /// </summary>
  212. private static List<String> GetNameList(String filespath, String filetype)
  213. {
  214. DirectoryInfo root = new DirectoryInfo(filespath);
  215. List<String> filename = new List<string>(); //文件名
  216. FileInfo[] files = root.GetFiles();
  217. foreach (FileInfo file in files)
  218. {
  219. if (file.Name.Substring(file.Name.Length - 4, 4) != filetype)
  220. continue;
  221. else
  222. filename.Add(file.Name);
  223. }
  224. return filename;
  225. }
  226. }
  227. }