工具箱相关
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

GCDdelete_Form.cs 6.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. using GrxCAD.DatabaseServices;
  2. using GrxCAD.EditorInput;
  3. using GrxCAD.Geometry;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.ComponentModel;
  7. using System.Data;
  8. using System.Drawing;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using System.Windows.Forms;
  13. namespace HCTools
  14. {
  15. public partial class GCDdelete_Form : Form
  16. {
  17. public GCDdelete_Form()
  18. {
  19. InitializeComponent();
  20. }
  21. string lyr = "";
  22. int blc = -999;
  23. private void GCDdelete_Form_Load(object sender, EventArgs e)
  24. {
  25. this.comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
  26. this.comboBox_blc.DropDownStyle = ComboBoxStyle.DropDownList;
  27. //自动填充下拉框
  28. Database database = GrxCAD.DatabaseServices.HostApplicationServices.WorkingDatabase;
  29. using (Transaction traction = database.TransactionManager.StartTransaction())
  30. {
  31. //存放所有图层名
  32. List<string> alllayername = new List<string>();
  33. LayerTable layertable = traction.GetObject(database.LayerTableId, OpenMode.ForRead) as LayerTable;
  34. foreach (ObjectId objid in layertable)
  35. {
  36. LayerTableRecord layertablerecord = traction.GetObject(objid, OpenMode.ForRead) as LayerTableRecord;
  37. alllayername.Add(layertablerecord.Name);
  38. }
  39. alllayername.Sort();
  40. for (int i = 0; i < alllayername.Count; i++)
  41. {
  42. this.comboBox1.Items.Add(alllayername[i]);
  43. }
  44. if (alllayername.Contains("8300"))
  45. {
  46. int index = alllayername.IndexOf("8300");
  47. this.comboBox1.SelectedIndex = index;
  48. }
  49. traction.Commit();
  50. }
  51. }
  52. private void button1_Click(object sender, EventArgs e)
  53. {
  54. if (comboBox1.Text == "")
  55. {
  56. MessageBox.Show("请选择高程点所在图层!");
  57. return;
  58. }
  59. if (comboBox_blc.Text == "")
  60. {
  61. MessageBox.Show("请选择比例尺所在图层!");
  62. return;
  63. }
  64. string blctext = comboBox_blc.Text;
  65. int blcindex = blctext.LastIndexOf(':');
  66. string strblc = blctext.Substring(blcindex + 1);
  67. blc = Convert.ToInt32(strblc);
  68. lyr = comboBox1.Text;
  69. deletegcd();
  70. }
  71. private void deletegcd()
  72. {
  73. Database db = GrxCAD.DatabaseServices.HostApplicationServices.WorkingDatabase;
  74. Editor ed = GrxCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
  75. //获取高程点
  76. TypedValue[] typedvalue = new TypedValue[1];
  77. typedvalue.SetValue(new TypedValue((int)DxfCode.LayerName, lyr), 0);
  78. SelectionFilter selectionfilter = new SelectionFilter(typedvalue);
  79. PromptSelectionResult psr = ed.SelectAll(selectionfilter);
  80. if (psr.Status == PromptStatus.OK)
  81. {
  82. LayerControl layerscontrol = new LayerControl();
  83. string layname = "整数值高程点";
  84. if (layerscontrol.haslayername(layname) == false)
  85. {
  86. colorgb col = new colorgb(255, 255, 0);
  87. layerscontrol.creatlayer(layname, col);
  88. }
  89. SelectionSet selectionset = psr.Value;
  90. ObjectId[] obj = new ObjectId[selectionset.Count];
  91. obj = selectionset.GetObjectIds();
  92. for (int i = 0; i < obj.Length; i++)
  93. {
  94. using (Transaction tran = db.TransactionManager.StartTransaction())
  95. {
  96. ObjectId objid = obj[i];
  97. //找到实体获取并判断高程
  98. Entity entity = (Entity)tran.GetObject(objid, OpenMode.ForWrite);
  99. if (entity is BlockReference)
  100. {
  101. BlockReference bref = (BlockReference)entity;
  102. double z = Math.Round(bref.Position.Z, 2, MidpointRounding.AwayFromZero);
  103. //判断四舍五入后是否为整数
  104. if (Math.Truncate(z) == Math.Round(z, MidpointRounding.AwayFromZero))
  105. {
  106. bref.Layer = "整数值高程点";
  107. //获取高程点旁的高程标注
  108. Point3d p1 = new Point3d(bref.Position.X - 4 * blc / 2000, bref.Position.Y - 4 * blc / 2000, 0);
  109. Point3d p2 = new Point3d(bref.Position.X + 4 * blc / 2000, bref.Position.Y + 4 * blc / 2000, 0);
  110. TypedValue[] typedvalue1 = new TypedValue[2];
  111. typedvalue1.SetValue(new TypedValue((int)DxfCode.Start, "Text"), 0);
  112. typedvalue1.SetValue(new TypedValue((int)DxfCode.LayerName, lyr), 1);
  113. SelectionFilter filter1 = new SelectionFilter(typedvalue1);
  114. PromptSelectionResult psr1 = ed.SelectCrossingWindow(p1, p2, filter1);
  115. if (psr1.Status == PromptStatus.OK)
  116. {
  117. SelectionSet ss = psr1.Value;
  118. ObjectId[] objids = new ObjectId[ss.Count];
  119. objids = selectionset.GetObjectIds();
  120. for (int ii = 0; ii < objids.Length; ii++)
  121. {
  122. ObjectId objid1 = objids[ii];
  123. Entity ent = (Entity)tran.GetObject(objid1, OpenMode.ForWrite);
  124. if(ent is DBText)
  125. {
  126. DBText txt = (DBText)ent;
  127. if(Convert.ToDouble(txt.TextString)== Math.Round(bref.Position.Z, 2, MidpointRounding.AwayFromZero))
  128. txt.Layer = "整数值高程点";
  129. }
  130. }
  131. }
  132. }
  133. }
  134. tran.Commit();
  135. }
  136. }
  137. ed.WriteMessage("删除完成\n");
  138. }
  139. }
  140. }
  141. }