123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
-
- using GrxCAD.ApplicationServices;
- using GrxCAD.DatabaseServices;
- using GrxCAD.EditorInput;
- using GrxCAD.Geometry;
- using System.Windows.Forms;
- using System.IO;
-
- namespace HCTools
- {
- class PickupPoint
- {
- public void PickupPt(string num)
- {
- Document document = GrxCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
- Database db = HostApplicationServices.WorkingDatabase;
-
- Editor ed = GrxCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
-
- TypedValue[] value = new TypedValue[]
- {
- new TypedValue((int)DxfCode.Start,"LWPOLYLINE,POLYLINE")
- };//设置筛选条件
- SelectionFilter filter = new SelectionFilter(value);
-
- //选择区域中全部对象
- //PromptSelectionResult psr = ed.SelectAll(filter);
- // 要求在图形区域中手动选择对象
- PromptSelectionResult psr = ed.GetSelection(filter);
- SelectionSet selectionset = psr.Value;
-
- if (psr.Status == PromptStatus.OK)
- {
- ObjectId[] obj = new ObjectId[selectionset.Count];
- obj = selectionset.GetObjectIds();
- List<Point3d> AllPoints = new List<Point3d>();
- List<string> FinalPoints = new List<string>();
- string decimalnum = "F" + num;
- string ele = " ";
-
- for (int i = 0; i < obj.Length; i++)
- {
- DocumentLock documentlock = GrxCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument();
- using (Transaction trans = db.TransactionManager.StartTransaction())
- {
- Point3dCollection coll = new Point3dCollection();
- ObjectId objid = obj[i];
- Entity entity = (Entity)trans.GetObject(objid, OpenMode.ForWrite);
-
- if (entity is Polyline)
- {
- Polyline line = entity as Polyline;
- //line.GetStretchPoints(coll);
- int vertexNum = line.NumberOfVertices;
- Point3d point;
- // 遍历获取多段线顶点坐标
- for (int ii = 0; ii < vertexNum; ii++)
- {
- point = line.GetPoint3dAt(ii);
- coll.Add(point);
- }
- ele = line.Elevation.ToString();
- }
- else if (entity is Polyline2d)
- {
- Polyline2d line = entity as Polyline2d;
- //line.GetStretchPoints(coll);
- foreach (ObjectId id in line)
- {
- Vertex2d vx = (Vertex2d)trans.GetObject(id, OpenMode.ForRead);
- if (vx.VertexType != Vertex2dType.SplineControlVertex)
- {
- coll.Add(vx.Position);
- }
- }
- ele = line.Elevation.ToString();
- }
- else if(entity is Polyline3d)
- {
- Polyline3d line = entity as Polyline3d;
- foreach (ObjectId id in line)
- {
- PolylineVertex3d vx3d = (PolylineVertex3d)trans.GetObject(id,
- OpenMode.ForRead);
- coll.Add(vx3d.Position);
- }
- ele = "三维多段线";
- }
-
- #region//无用
- ////检查选择的多段线是否有重复点,如果有就移除
- //for (int ii = 0; ii < coll.Count - 1; ii++)
- //{
- // for (int iii = ii + 1; iii < ii + 21; iii++)
- // {
- // if (iii == coll.Count + 1)
- // break;
-
- // string x1 = coll[ii].X.ToString(decimalnum);
- // string y1 = coll[ii].Y.ToString(decimalnum);
-
- // string x2 = coll[iii].X.ToString(decimalnum);
- // string y2 = coll[iii].Y.ToString(decimalnum);
-
- // if (x1 == x2 && y1 == y2)
- // {
- // coll.RemoveAt(iii);
- // }
- // else
- // {
- // continue;
- // }
- // }
- //}
- #endregion
-
- for (int j = 0; j < coll.Count; j++)
- {
- AllPoints.Add(coll[j]);
- }
- trans.Commit();
- }
- documentlock.Dispose();
-
- for (int ii = 0; ii < AllPoints.Count; ii++)
- {
- if (ii == 0)
- FinalPoints.Add(ele);
- string x = AllPoints[ii].X.ToString(decimalnum);
- string y = AllPoints[ii].Y.ToString(decimalnum);
- string z = AllPoints[ii].Z.ToString(decimalnum);
- string res = string.Join(" ", new string[] { x, y, z });
- FinalPoints.Add(res);
- }
- AllPoints.Clear();
- }
- //保存文件对话框
- System.Windows.Forms.SaveFileDialog save = new System.Windows.Forms.SaveFileDialog();
- save.Filter = "文本文件(*.txt)|*.txt";
- //FolderBrowserDialog dialog = new FolderBrowserDialog();
- //dialog.Description = "请选择文件路径";
- //保存文件是否记录上一次文件目录
- save.RestoreDirectory = true;
- if (save.ShowDialog() == DialogResult.OK)
- {
- string savePath = save.FileName;
- File.WriteAllLines(savePath, FinalPoints, Encoding.UTF8);
- ed.WriteMessage("保存成功\n");
- }
- else
- {
- MessageBox.Show("保存失败\n");
- }
- //if (dialog.ShowDialog() == DialogResult.OK)
- //{
- // string foldPath = dialog.SelectedPath;
- // string savePath = foldPath + "\\" + ele + ".txt";
- // File.WriteAllLines(savePath, FinalPoints, Encoding.UTF8);
- // ed.WriteMessage("\n保存成功");
- //}
- }
- else
- {
- ed.WriteMessage("\n多段线选择失败");
- }
-
- }
- }
- }
|