123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- using GrxCAD.DatabaseServices;
- using GrxCAD.EditorInput;
- using GrxCAD.Geometry;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
-
- namespace HCTools
- {
- public partial class GCDdelete_Form : Form
- {
- public GCDdelete_Form()
- {
- InitializeComponent();
- }
- string lyr = "";
- int blc = -999;
-
- private void GCDdelete_Form_Load(object sender, EventArgs e)
- {
- this.comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
- this.comboBox_blc.DropDownStyle = ComboBoxStyle.DropDownList;
-
- //自动填充下拉框
- Database database = GrxCAD.DatabaseServices.HostApplicationServices.WorkingDatabase;
- using (Transaction traction = database.TransactionManager.StartTransaction())
- {
- //存放所有图层名
- List<string> alllayername = new List<string>();
- LayerTable layertable = traction.GetObject(database.LayerTableId, OpenMode.ForRead) as LayerTable;
- foreach (ObjectId objid in layertable)
- {
- LayerTableRecord layertablerecord = traction.GetObject(objid, OpenMode.ForRead) as LayerTableRecord;
- alllayername.Add(layertablerecord.Name);
- }
-
- alllayername.Sort();
-
- for (int i = 0; i < alllayername.Count; i++)
- {
- this.comboBox1.Items.Add(alllayername[i]);
- }
-
- if (alllayername.Contains("8300"))
- {
- int index = alllayername.IndexOf("8300");
- this.comboBox1.SelectedIndex = index;
- }
- traction.Commit();
- }
- }
-
- private void button1_Click(object sender, EventArgs e)
- {
- if (comboBox1.Text == "")
- {
- MessageBox.Show("请选择高程点所在图层!");
- return;
- }
- if (comboBox_blc.Text == "")
- {
- MessageBox.Show("请选择比例尺所在图层!");
- return;
- }
- string blctext = comboBox_blc.Text;
- int blcindex = blctext.LastIndexOf(':');
- string strblc = blctext.Substring(blcindex + 1);
- blc = Convert.ToInt32(strblc);
- lyr = comboBox1.Text;
- deletegcd();
- }
-
- private void deletegcd()
- {
- Database db = GrxCAD.DatabaseServices.HostApplicationServices.WorkingDatabase;
- Editor ed = GrxCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
- //获取高程点
- TypedValue[] typedvalue = new TypedValue[1];
- typedvalue.SetValue(new TypedValue((int)DxfCode.LayerName, lyr), 0);
- SelectionFilter selectionfilter = new SelectionFilter(typedvalue);
- PromptSelectionResult psr = ed.SelectAll(selectionfilter);
-
- if (psr.Status == PromptStatus.OK)
- {
- LayerControl layerscontrol = new LayerControl();
- string layname = "整数值高程点";
- if (layerscontrol.haslayername(layname) == false)
- {
- colorgb col = new colorgb(255, 255, 0);
- layerscontrol.creatlayer(layname, col);
- }
-
-
- SelectionSet selectionset = psr.Value;
- ObjectId[] obj = new ObjectId[selectionset.Count];
- obj = selectionset.GetObjectIds();
- for (int i = 0; i < obj.Length; i++)
- {
-
- using (Transaction tran = db.TransactionManager.StartTransaction())
- {
- ObjectId objid = obj[i];
-
- //找到实体获取并判断高程
- Entity entity = (Entity)tran.GetObject(objid, OpenMode.ForWrite);
-
- if (entity is BlockReference)
- {
- BlockReference bref = (BlockReference)entity;
- double z = Math.Round(bref.Position.Z, 2, MidpointRounding.AwayFromZero);
- //判断四舍五入后是否为整数
- if (Math.Truncate(z) == Math.Round(z, MidpointRounding.AwayFromZero))
- {
- bref.Layer = "整数值高程点";
- //获取高程点旁的高程标注
- Point3d p1 = new Point3d(bref.Position.X - 4 * blc / 2000, bref.Position.Y - 4 * blc / 2000, 0);
- Point3d p2 = new Point3d(bref.Position.X + 4 * blc / 2000, bref.Position.Y + 4 * blc / 2000, 0);
- TypedValue[] typedvalue1 = new TypedValue[2];
-
- typedvalue1.SetValue(new TypedValue((int)DxfCode.Start, "Text"), 0);
- typedvalue1.SetValue(new TypedValue((int)DxfCode.LayerName, lyr), 1);
-
- SelectionFilter filter1 = new SelectionFilter(typedvalue1);
- PromptSelectionResult psr1 = ed.SelectCrossingWindow(p1, p2, filter1);
-
- if (psr1.Status == PromptStatus.OK)
- {
- SelectionSet ss = psr1.Value;
- ObjectId[] objids = new ObjectId[ss.Count];
- objids = selectionset.GetObjectIds();
- for (int ii = 0; ii < objids.Length; ii++)
- {
- ObjectId objid1 = objids[ii];
- Entity ent = (Entity)tran.GetObject(objid1, OpenMode.ForWrite);
- if(ent is DBText)
- {
- DBText txt = (DBText)ent;
- if(Convert.ToDouble(txt.TextString)== Math.Round(bref.Position.Z, 2, MidpointRounding.AwayFromZero))
- txt.Layer = "整数值高程点";
- }
- }
- }
- }
- }
- tran.Commit();
- }
- }
- ed.WriteMessage("删除完成\n");
- }
- }
- }
-
- }
|