工具箱相关
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.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. using GrxCAD.ApplicationServices;
  2. using GrxCAD.DatabaseServices;
  3. using GrxCAD.EditorInput;
  4. using GrxCAD.Geometry;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.ComponentModel;
  8. using System.Data;
  9. using System.Drawing;
  10. using System.IO;
  11. using System.Linq;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. using System.Windows.Forms;
  15. namespace HCTools
  16. {
  17. public partial class AttributeForm : Form
  18. {
  19. private List<List<string>> info_all = new List<List<string>>();//obj信息
  20. private List<ObjectId> objid_all = new List<ObjectId>();
  21. public AttributeForm()
  22. {
  23. InitializeComponent();
  24. }
  25. public void GetInfo(List<List<string>> info_all, List<ObjectId> objid_all)
  26. {
  27. this.info_all = info_all;
  28. this.objid_all = objid_all;
  29. }
  30. private void AttributeForm_Load(object sender, EventArgs e)
  31. {
  32. this.dataGridView_Info.ColumnCount = 9;
  33. this.dataGridView_Info.Columns[0].HeaderText = "ID";
  34. this.dataGridView_Info.Columns[1].HeaderText = "名称";
  35. this.dataGridView_Info.Columns[2].HeaderText = "图层";
  36. this.dataGridView_Info.Columns[3].HeaderText = "类型";
  37. this.dataGridView_Info.Columns[4].HeaderText = "X";
  38. this.dataGridView_Info.Columns[5].HeaderText = "Y";
  39. this.dataGridView_Info.Columns[6].HeaderText = "Z";
  40. this.dataGridView_Info.Columns[7].HeaderText = "长度(m)";
  41. this.dataGridView_Info.Columns[8].HeaderText = "面积(m²)";
  42. this.dataGridView_Info.AllowUserToAddRows = false;
  43. this.dataGridView_Info.AllowUserToResizeRows = false;
  44. this.dataGridView_Info.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
  45. this.dataGridView_Info.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
  46. //this.dataGridView_Info.RowHeadersVisible = false;
  47. this.dataGridView_Info.ReadOnly = true;
  48. for (int i = 0; i < info_all.Count; i++)
  49. {
  50. dataGridView_Info.Rows.Add();
  51. }
  52. for (int i = 0; i < this.dataGridView_Info.Rows.Count; i++)
  53. {
  54. this.dataGridView_Info[0, i].Value = info_all[i][0];
  55. this.dataGridView_Info[1, i].Value = info_all[i][1];
  56. this.dataGridView_Info[2, i].Value = info_all[i][2];
  57. this.dataGridView_Info[3, i].Value = info_all[i][3];
  58. this.dataGridView_Info[4, i].Value = info_all[i][4];
  59. this.dataGridView_Info[5, i].Value = info_all[i][5];
  60. this.dataGridView_Info[6, i].Value = info_all[i][6];
  61. this.dataGridView_Info[7, i].Value = info_all[i][7];
  62. this.dataGridView_Info[8, i].Value = info_all[i][8];
  63. }
  64. }
  65. private void dataGridView_Info_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
  66. {
  67. int column = e.Column.Index;
  68. int row1 = e.RowIndex1;
  69. int row2 = e.RowIndex2;
  70. if (column == 0|| column == 4 || column == 5 || column == 6)
  71. {
  72. double value1 = Convert.ToDouble(e.CellValue1.ToString().Replace("_", ""));
  73. double value2 = Convert.ToDouble(e.CellValue2.ToString().Replace("_", ""));
  74. if (value1 > value2)
  75. e.SortResult = 1;
  76. else if (value2 == value1)
  77. e.SortResult = 0;
  78. else e.SortResult = -1;
  79. e.Handled = true;
  80. }
  81. }
  82. private void 缩放至ToolStripMenuItem_Click(object sender, EventArgs e)
  83. {
  84. DataGridViewRow row = this.dataGridView_Info.CurrentRow;
  85. ObjectId id = objid_all[Convert.ToInt32(row.Cells[0].Value) - 1];
  86. Entity current_entity = BasicFunction.GetDBObject(id);
  87. current_entity.Highlight();//高亮显示实体
  88. //缩放至实体
  89. ZoomToExtent(current_entity.GeometricExtents);
  90. }
  91. /// <summary>
  92. /// 缩放至指定范围
  93. /// </summary>
  94. /// <param name="extent"></param>
  95. public static void ZoomToExtent(Extents3d extent)
  96. {
  97. try
  98. {
  99. Point3d pMin = extent.MinPoint;
  100. Point3d pMax = extent.MaxPoint;
  101. //获取当前文档及数据库
  102. Document acDoc = GrxCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  103. Database acCurDb = acDoc.Database;
  104. // 启动事务
  105. using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
  106. {
  107. using (ViewTableRecord acView = acDoc.Editor.GetCurrentView())
  108. {
  109. //设置视图的高
  110. acView.Height = Math.Abs(pMin.Y - pMax.Y);
  111. //设置视图的宽
  112. acView.Width = Math.Abs(pMin.X - pMax.X);
  113. // 设置视图中心
  114. acView.CenterPoint = new Point2d((pMin.X + pMax.X) / 2, (pMin.Y + pMax.Y) / 2);
  115. // 更新当前视图
  116. acDoc.Editor.SetCurrentView(acView);
  117. }
  118. // 提交更改
  119. acTrans.Commit();
  120. }
  121. }
  122. catch (Exception)
  123. {
  124. throw;
  125. }
  126. }
  127. private void button1_Click(object sender, EventArgs e)
  128. {
  129. SaveFileDialog saveFileDialog = new SaveFileDialog();
  130. saveFileDialog.Filter = "Text Files|*.txt";
  131. saveFileDialog.Title = "保存txt文件";
  132. saveFileDialog.FileName = "导出数据.txt";
  133. if (saveFileDialog.ShowDialog() == DialogResult.OK)
  134. {
  135. // 使用 StreamWriter 写入文件
  136. using (StreamWriter writer = new StreamWriter(saveFileDialog.FileName, false, Encoding.UTF8))
  137. {
  138. // 写入列标题
  139. for (int i = 0; i < dataGridView_Info.Columns.Count; i++)
  140. {
  141. writer.Write(dataGridView_Info.Columns[i].HeaderText);
  142. if (i < dataGridView_Info.Columns.Count - 1)
  143. {
  144. writer.Write("\t");
  145. }
  146. }
  147. writer.WriteLine();
  148. // 写入数据
  149. //判断是否有被选中数据,有的话导出选中的
  150. int flag = 0;
  151. foreach (DataGridViewRow row in dataGridView_Info.Rows)
  152. {
  153. if (row.Selected == true)
  154. flag = 1;
  155. }
  156. if (flag == 0)
  157. {
  158. for (int i = 0; i < dataGridView_Info.Rows.Count; i++)
  159. {
  160. for (int j = 0; j < dataGridView_Info.Columns.Count; j++)
  161. {
  162. writer.Write(dataGridView_Info.Rows[i].Cells[j].Value.ToString());
  163. if (j < dataGridView_Info.Columns.Count - 1)
  164. {
  165. writer.Write("\t");
  166. }
  167. }
  168. writer.WriteLine();
  169. }
  170. }
  171. else if (flag == 1)
  172. {
  173. for (int i = 0; i < dataGridView_Info.Rows.Count; i++)
  174. {
  175. if (dataGridView_Info.Rows[i].Selected == true)
  176. {
  177. for (int j = 0; j < dataGridView_Info.Columns.Count; j++)
  178. {
  179. writer.Write(dataGridView_Info.Rows[i].Cells[j].Value.ToString());
  180. if (j < dataGridView_Info.Columns.Count - 1)
  181. {
  182. writer.Write("\t");
  183. }
  184. }
  185. writer.WriteLine();
  186. }
  187. }
  188. }
  189. }
  190. MessageBox.Show("数据导出成功!", "成功", MessageBoxButtons.OK, MessageBoxIcon.Information);
  191. }
  192. }
  193. private void button_show_Click(object sender, EventArgs e)
  194. {
  195. Document doc = GrxCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  196. Editor ed = doc.Editor;
  197. PromptSelectionResult selectionResult = ed.SelectImplied();
  198. if (selectionResult.Status == PromptStatus.OK)
  199. {
  200. SelectionSet selectionSet = selectionResult.Value;
  201. using (Transaction trans = doc.TransactionManager.StartTransaction())
  202. {
  203. foreach (SelectedObject selectedObject in selectionSet)
  204. {
  205. ObjectId objectId = selectedObject.ObjectId;
  206. for (int i = 0; i < objid_all.Count; i++)
  207. {
  208. if (objectId == objid_all[i])
  209. this.dataGridView_Info.Rows[i].Selected = true;
  210. }
  211. }
  212. trans.Commit();
  213. }
  214. foreach (DataGridViewRow row in dataGridView_Info.Rows)
  215. {
  216. row.Visible = row.Selected;
  217. }
  218. }
  219. }
  220. private void button_cancelshow_Click(object sender, EventArgs e)
  221. {
  222. foreach (DataGridViewRow row in dataGridView_Info.Rows)
  223. {
  224. row.Visible = true;
  225. }
  226. }
  227. private void AttributeForm_FormClosed(object sender, FormClosedEventArgs e)
  228. {
  229. info_all.Clear();
  230. objid_all.Clear();
  231. }
  232. private void dataGridView_Info_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
  233. {
  234. Document doc = GrxCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  235. Editor ed = doc.Editor;
  236. List<ObjectId> ids = new List<ObjectId>();
  237. for(int i =0; i<this.dataGridView_Info.Rows.Count;i++)
  238. {
  239. if (this.dataGridView_Info.Rows[i].Selected == true)
  240. {
  241. ids.Add(objid_all[i]);
  242. }
  243. }
  244. ObjectId[] objid = ids.ToArray();
  245. ed.SetImpliedSelection(objid);
  246. }
  247. private void dataGridView_Info_CellClick(object sender, DataGridViewCellEventArgs e)
  248. {
  249. Document doc = GrxCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  250. Editor ed = doc.Editor;
  251. List<ObjectId> ids = new List<ObjectId>();
  252. ObjectId[] objid = ids.ToArray();
  253. ed.SetImpliedSelection(objid);
  254. }
  255. }
  256. }