# 0. 前言

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

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

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

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

# 1. 选择集过滤

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

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

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

常用过滤器类型列表:

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

# 2. 示例代码

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _05_选择集
{public class Class1{[CommandMethod("SeleDemo")]public void SeleDemo(){Database db = HostApplicationServices.WorkingDatabase;Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;//PromptSelectionResult psr = ed.SelectAll(); // 选择窗口中所有图形// 只选择窗口中的圆形TypedValue[] values = new TypedValue[]{new TypedValue((int)DxfCode.Start,"Circle")};SelectionFilter filter = new SelectionFilter(values);// 过滤器//PromptSelectionResult psr = ed.GetSelection(filter); // 选取图形对象//if(psr.Status == PromptStatus.OK)//{//    SelectionSet sSet = psr.Value;//    this.ChangeColor(sSet);//}PromptSelectionResult psr = ed.GetSelection(filter);List<ObjectId> ids = new List<ObjectId>();if (psr.Status == PromptStatus.OK){SelectionSet sSet = psr.Value;List<Point3d> points = new List<Point3d>();points = this.GetPoint(sSet);for (int i = 0; i < points.Count; i++){PromptSelectionResult ss1 = ed.SelectCrossingWindow(points.ElementAt(i), points.ElementAt(i));ids.AddRange(ss1.Value.GetObjectIds());}}this.ChangeColor(ids);}private List<Point3d> GetPoint(SelectionSet sSet){List<Point3d> points = new List<Point3d>();ObjectId[] ids = sSet.GetObjectIds();Database db = HostApplicationServices.WorkingDatabase;using (Transaction trans = db.TransactionManager.StartTransaction()){for (int i = 0; i < ids.Length; i++){Entity ent = (Entity)ids[i].GetObject(OpenMode.ForRead);Point3d center = ((Circle)ent).Center;double radius = ((Circle)ent).Radius;points.Add(new Point3d(center.X + radius, center.Y, center.Z));}trans.Commit();}return points;}/// <summary>/// 改变颜色/// </summary>/// <param name="sSet">选取对象</param>private void ChangeColor(SelectionSet sSet){ObjectId[] ids = sSet.GetObjectIds();Database db = HostApplicationServices.WorkingDatabase;using (Transaction trans = db.TransactionManager.StartTransaction()){for (int i = 0; i < ids.Length; i++){Entity ent = (Entity)ids[i].GetObject(OpenMode.ForWrite);ent.ColorIndex = 1; // 红色}trans.Commit();}}private void ChangeColor(List<ObjectId> ids){Database db = HostApplicationServices.WorkingDatabase;using (Transaction trans = db.TransactionManager.StartTransaction()){for (int i = 0; i < ids.Count; i++){Entity ent = (Entity)ids[i].GetObject(OpenMode.ForWrite);ent.ColorIndex = 3; // 红色}trans.Commit();}}}
}

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

说明一下:图片为什么带水印,我是从我的知乎转载过来的,我要在知乎和公众号一起发文,所以没有多余时间再编辑一个平台了,可以关注我的公众号看原文!

C#之CAD二次开发(10) 用户交互之选择集相关推荐

  1. C#之CAD二次开发(19) 组合条件的选择集过滤

    https://mp.weixin.qq.com/s?__biz=MzA3NzI3MjgyNQ==&mid=2247483963&idx=1&sn=73f1683dfc7a40 ...

  2. CAD二次开发命令窗口交互(COM接口c#语言)

    1.介绍 c#用COM接口实现在CAD中窗口交互有多种方式,比如,选择集,输入参数等,本次主要讲utility方法下的属性: 2.详细介绍 //获取CAD应用程序,调用COM AcadApp = (A ...

  3. C#之CAD二次开发(15) Ribbon交互界面实例

    # 0. 引言 先看看结果,这里添加了一个选项卡,在里面仿照系统医院添加了绘图面板和两个按钮操作,并将按钮的操作功能也加了进行 当你不断进步有自己的小算法可以往里面添加的时候,就可以在里面加入自己的东 ...

  4. c#CAD二次开发全套视频目录

    本人非专业编程人员,设计院画图民工一名.自学CAD编程,也写了一些小程序!初期学习lisp编程语言,基本了解CAD各中开发模块,写过一些程序!前段时间自学C#CAD二次开发,遍布网上无教学视频.经过自 ...

  5. CAD二次开发(C#) 第一节

    前言 由于工作需要,最近在学习二次开发,将其记录于此,以便日后查看. 语法 涉及"特性","进程"知识点,需要有所了解 #region CAD二次开发--第一节 ...

  6. 【CAD二次开发】实现双击实体的响应

    一.基本双击响应实现 通过向导在VS中创建MFC支持的新项目: 项工程中添加普通CDoubleClick类, 基类选择AcDbDoubleClickEdit: 类的头文件为: class CDoubl ...

  7. lisp陡坎程序_(终稿)毕业论文设计_Autolisp在CAD二次开发中的应用.doc(最终版)最新版...

    <毕业论文:Autolisp在CAD二次开发中的应用.doc>由会员分享,可免费在线阅读全文,更多与<(终稿)毕业论文设计_Autolisp在CAD二次开发中的应用.doc(最终版) ...

  8. 关于objectArx /CAD二次开发中“属性块”操作

    关于objectArx /CAD二次开发中"属性块"操作 属性块就是在图块上附加一些文字属性(Attribute),这些文字可以非常方便地修改.属性块被广泛应用在工程设计和机械设计 ...

  9. C#之CAD二次开发 (11) 文本对象

    # 0. 前言 在CAD中文本对象的处理算是一个很重要的内容了,实际工作中也会遇到很多需要批量处理CAD中文本对象的情况 之前就遇到一个批量一对一替换文本的情况,那个实例代码后面也会贴出来,一个小小的 ...

最新文章

  1. AutoConfig工具使用
  2. JVM学习笔记之四:分代垃圾回收
  3. php中 可替代curl,laravel-PHP-为什么使用Guzzle代替cURL?
  4. vuls漏洞扫描工具
  5. Node中同步与异步的方式读取文件
  6. NVIDIA cuda7在centos6.5中的安装
  7. KR C、ANSI C、C89、C90、C95、C99 和 C11 的区别联系
  8. css3常用方法以及css3选择器
  9. 又一国产开源微内核操作系统上线!源代码已开放下载
  10. Bash脚本教程之数组
  11. java socket oc_Java Socket编程(三) 服务器Sockets
  12. 吞吐性能翻倍!搭载了第三代Tensor Core的A100是怎么做到的?
  13. Mysql密码加密方式
  14. 【翻译工具】如何复活谷歌翻译(网页翻译)
  15. 目标检测_CVPR2020
  16. 计算机基础知识新手学电脑输入法,新手学习电脑怎么使用键盘打字
  17. 缓存路由组件+路由组件的2个生命周期钩子 activated 和 deactivated
  18. 1.NanoPi M1(全志H3)基于wiringPi的GPIO控制总结
  19. php 代码中使用换行
  20. VUEcli3设置页签图标

热门文章

  1. matlab处理心电图数据的原理
  2. 各行业的英语术语(绝对精华4)--房地产
  3. linux 社交软件_Linux和创客空间如何增强我们的社交结构
  4. 陈天奇团队发布TVM:把深度学习部署到手机、树莓派等更多硬件
  5. 如何运行内存中的程序
  6. 五年级计算机学情分析,小学五年级信息技术教案教学计划
  7. 【大数据基础】基于信用卡逾期数据的Spark数据处理与分析
  8. 学习上位机编程:提升自动化领域竞争力的关键技能
  9. 米哈游 春季校园招聘 三月内推开始啦,内推码NTAHEGf
  10. java自定义对话框弹出