C#之CAD二次开发(10) 用户交互之选择集
# 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) 用户交互之选择集相关推荐
- C#之CAD二次开发(19) 组合条件的选择集过滤
https://mp.weixin.qq.com/s?__biz=MzA3NzI3MjgyNQ==&mid=2247483963&idx=1&sn=73f1683dfc7a40 ...
- CAD二次开发命令窗口交互(COM接口c#语言)
1.介绍 c#用COM接口实现在CAD中窗口交互有多种方式,比如,选择集,输入参数等,本次主要讲utility方法下的属性: 2.详细介绍 //获取CAD应用程序,调用COM AcadApp = (A ...
- C#之CAD二次开发(15) Ribbon交互界面实例
# 0. 引言 先看看结果,这里添加了一个选项卡,在里面仿照系统医院添加了绘图面板和两个按钮操作,并将按钮的操作功能也加了进行 当你不断进步有自己的小算法可以往里面添加的时候,就可以在里面加入自己的东 ...
- c#CAD二次开发全套视频目录
本人非专业编程人员,设计院画图民工一名.自学CAD编程,也写了一些小程序!初期学习lisp编程语言,基本了解CAD各中开发模块,写过一些程序!前段时间自学C#CAD二次开发,遍布网上无教学视频.经过自 ...
- CAD二次开发(C#) 第一节
前言 由于工作需要,最近在学习二次开发,将其记录于此,以便日后查看. 语法 涉及"特性","进程"知识点,需要有所了解 #region CAD二次开发--第一节 ...
- 【CAD二次开发】实现双击实体的响应
一.基本双击响应实现 通过向导在VS中创建MFC支持的新项目: 项工程中添加普通CDoubleClick类, 基类选择AcDbDoubleClickEdit: 类的头文件为: class CDoubl ...
- lisp陡坎程序_(终稿)毕业论文设计_Autolisp在CAD二次开发中的应用.doc(最终版)最新版...
<毕业论文:Autolisp在CAD二次开发中的应用.doc>由会员分享,可免费在线阅读全文,更多与<(终稿)毕业论文设计_Autolisp在CAD二次开发中的应用.doc(最终版) ...
- 关于objectArx /CAD二次开发中“属性块”操作
关于objectArx /CAD二次开发中"属性块"操作 属性块就是在图块上附加一些文字属性(Attribute),这些文字可以非常方便地修改.属性块被广泛应用在工程设计和机械设计 ...
- C#之CAD二次开发 (11) 文本对象
# 0. 前言 在CAD中文本对象的处理算是一个很重要的内容了,实际工作中也会遇到很多需要批量处理CAD中文本对象的情况 之前就遇到一个批量一对一替换文本的情况,那个实例代码后面也会贴出来,一个小小的 ...
最新文章
- AutoConfig工具使用
- JVM学习笔记之四:分代垃圾回收
- php中 可替代curl,laravel-PHP-为什么使用Guzzle代替cURL?
- vuls漏洞扫描工具
- Node中同步与异步的方式读取文件
- NVIDIA cuda7在centos6.5中的安装
- KR C、ANSI C、C89、C90、C95、C99 和 C11 的区别联系
- css3常用方法以及css3选择器
- 又一国产开源微内核操作系统上线!源代码已开放下载
- Bash脚本教程之数组
- java socket oc_Java Socket编程(三) 服务器Sockets
- 吞吐性能翻倍!搭载了第三代Tensor Core的A100是怎么做到的?
- Mysql密码加密方式
- 【翻译工具】如何复活谷歌翻译(网页翻译)
- 目标检测_CVPR2020
- 计算机基础知识新手学电脑输入法,新手学习电脑怎么使用键盘打字
- 缓存路由组件+路由组件的2个生命周期钩子 activated 和 deactivated
- 1.NanoPi M1(全志H3)基于wiringPi的GPIO控制总结
- php 代码中使用换行
- VUEcli3设置页签图标