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 alllayername = new List(); 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"); } } } }