当前位置:   article > 正文

cad二次 开发 修改块的颜色_C#之CAD二次开发(10) 用户交互之选择集

c# cad selectwindow

# 0. 前言

CAD中通过用户交互来选择对象,也可以通过.NET API模拟不同对象选择选项。

当执行多个选择集时,可以创建一个ObjectIdCollection对象来跟踪已选择的对象。

可以用如下的函数进行选择对象:

  1. 1. GetSelection() 用户在图形中选择实体
  2. 2. SelectAll() 选择所有实体
  3. 3. SelectCrossingWindow() 选择窗口及和窗口四边相交的实体
  4. 4. SelectCrossingPolygon 选择多边形中及和多边形相交的实体
  5. 5. SelectFence 栏选
  6. 6. SelectImplied 选择当前图形中已经选择的实体
  7. 7. SelectLast 选择图形中最后一盒绘制的实体
  8. 8. SelectPrevious 选择上一个选择集
  9. 9. SelectWindows 选择窗口中的实体
  10. 10. SelectWindowsPolygon 选择多边形中的实体
  11. 11. SelectCrossingWindow 通过点坐标选择图形

# 1. 选择集过滤

如果我们只需要选择图形中的部分文件就需要定义过滤规则

选择过滤器有一对TypedValue参数构成,TypedValue的第一个参数是过滤器的类型(例如 对象),第二个参数是需要过滤的值(例如圆)。

过滤器类型的一个DXF组码,用于指定使用何种过滤器

常用过滤器类型列表:

08559352f596e0aaefc24569620510f7.png

例如只选取图形中的圆形:

8ab3a0461d868fbcb3d4968a4c6790ff.png

# 2. 示例代码

  1. using Autodesk.AutoCAD.ApplicationServices;
  2. using Autodesk.AutoCAD.DatabaseServices;
  3. using Autodesk.AutoCAD.EditorInput;
  4. using Autodesk.AutoCAD.Geometry;
  5. using Autodesk.AutoCAD.Runtime;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace _05_选择集
  12. {
  13. public class Class1
  14. {
  15. [CommandMethod("SeleDemo")]
  16. public void SeleDemo()
  17. {
  18. Database db = HostApplicationServices.WorkingDatabase;
  19. Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  20. //PromptSelectionResult psr = ed.SelectAll(); // 选择窗口中所有图形
  21. // 只选择窗口中的圆形
  22. TypedValue[] values = new TypedValue[]
  23. {
  24. new TypedValue((int)DxfCode.Start,"Circle")
  25. };
  26. SelectionFilter filter = new SelectionFilter(values);// 过滤器
  27. //PromptSelectionResult psr = ed.GetSelection(filter); // 选取图形对象
  28. //if(psr.Status == PromptStatus.OK)
  29. //{
  30. // SelectionSet sSet = psr.Value;
  31. // this.ChangeColor(sSet);
  32. //}
  33. PromptSelectionResult psr = ed.GetSelection(filter);
  34. List<ObjectId> ids = new List<ObjectId>();
  35. if (psr.Status == PromptStatus.OK)
  36. {
  37. SelectionSet sSet = psr.Value;
  38. List<Point3d> points = new List<Point3d>();
  39. points = this.GetPoint(sSet);
  40. for (int i = 0; i < points.Count; i++)
  41. {
  42. PromptSelectionResult ss1 = ed.SelectCrossingWindow(points.ElementAt(i), points.ElementAt(i));
  43. ids.AddRange(ss1.Value.GetObjectIds());
  44. }
  45. }
  46. this.ChangeColor(ids);
  47. }
  48. private List<Point3d> GetPoint(SelectionSet sSet)
  49. {
  50. List<Point3d> points = new List<Point3d>();
  51. ObjectId[] ids = sSet.GetObjectIds();
  52. Database db = HostApplicationServices.WorkingDatabase;
  53. using (Transaction trans = db.TransactionManager.StartTransaction())
  54. {
  55. for (int i = 0; i < ids.Length; i++)
  56. {
  57. Entity ent = (Entity)ids[i].GetObject(OpenMode.ForRead);
  58. Point3d center = ((Circle)ent).Center;
  59. double radius = ((Circle)ent).Radius;
  60. points.Add(new Point3d(center.X + radius, center.Y, center.Z));
  61. }
  62. trans.Commit();
  63. }
  64. return points;
  65. }
  66. /// <summary>
  67. /// 改变颜色
  68. /// </summary>
  69. /// <param name="sSet">选取对象</param>
  70. private void ChangeColor(SelectionSet sSet)
  71. {
  72. ObjectId[] ids = sSet.GetObjectIds();
  73. Database db = HostApplicationServices.WorkingDatabase;
  74. using (Transaction trans = db.TransactionManager.StartTransaction())
  75. {
  76. for (int i = 0; i < ids.Length; i++)
  77. {
  78. Entity ent = (Entity)ids[i].GetObject(OpenMode.ForWrite);
  79. ent.ColorIndex = 1; // 红色
  80. }
  81. trans.Commit();
  82. }
  83. }
  84. private void ChangeColor(List<ObjectId> ids)
  85. {
  86. Database db = HostApplicationServices.WorkingDatabase;
  87. using (Transaction trans = db.TransactionManager.StartTransaction())
  88. {
  89. for (int i = 0; i < ids.Count; i++)
  90. {
  91. Entity ent = (Entity)ids[i].GetObject(OpenMode.ForWrite);
  92. ent.ColorIndex = 3; // 红色
  93. }
  94. trans.Commit();
  95. }
  96. }
  97. }
  98. }

原文请关注公众号:数据智能笔记

639d0ddcd582ad44e3dfaa7fd7fc83d7.png
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/111808
推荐阅读
相关标签
  

闽ICP备14008679号