C# CAD交互界面-自定义窗体(三)

运行环境 vs2022 c# cad2016  调试成功

一、引用 

二、开发代码进行详细的说明

  1. 初始化与获取AutoCAD核心对象

    • Database db = HostApplicationServices.WorkingDatabase;:这行代码获取当前工作中的AutoCAD数据库对象。在AutoCAD中,所有图形数据和对象都存储在数据库中。

    • Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;:获取当前活动MDI(多文档界面)文档的编辑器对象。编辑器提供了与用户交互的方法,比如输出命令行信息、获取用户选择等。

    • Document doc = Application.DocumentManager.MdiActiveDocument;:获取当前活动的MDI文档对象,它代表了一个打开的DWG文件,通过它可以访问和操作文档内的所有图形元素。

  2. 自定义窗体Form1

    • public Form1() { InitializeComponent(); }:这是自定义WinForms窗体Form1的构造函数,用于初始化窗体上的控件。这个过程由IDE自动生成,调用InitializeComponent()方法加载窗体设计时添加的所有组件。
  3. 注册命令方法"UiStart"

    • [CommandMethod("UiStart")]:这是一个特性标签,将该方法标记为AutoCAD的一个命令方法,当用户在AutoCAD命令行输入"UiStart"时会执行此方法。

    • public void UiStart():该方法内创建了自定义窗体Form1的一个实例,并使用ShowModelessDialog方法将其作为非模态对话框显示在AutoCAD界面上。这样用户可以同时进行其他AutoCAD操作,而不会被自定义窗体阻塞。

  4. 按钮点击事件处理程序

    • private void button1_Click(object sender, EventArgs e):这是自定义窗体上某个按钮(button1)的点击事件处理程序,在用户点击该按钮时触发。

    • 在事件处理程序内部:

      • 首先提示用户“请框选线段!”。
      • 然后调用ed.GetSelection()获取用户的图形选择结果。
      • 检查用户是否成功选择了图形对象,如果选择状态为OK,则进一步处理选择集(SelectionSet)中的每个对象ID。
      • 未完成的部分是遍历选择集并计算所选线段的总长度。对于每个ObjectId,需要从文档中获取实体对象并检查其类型,如果是线段则累加其长度。

 三、完整代码
// 获取当前工作数据库对象
Database db = HostApplicationServices.WorkingDatabase;// 获取当前活动文档的编辑器对象
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;// 获取当前活动的文档对象
Document doc = Application.DocumentManager.MdiActiveDocument;// Form1类的构造函数,初始化窗体控件
public Form1()
{public void Initialize(){UiStart();//启时自动加载工具栏}}// 注册一个名为"UiStart"的命令方法,在AutoCAD中执行此命令时将打开自定义窗体
[CommandMethod("UiStart")] // CAD启动界面命令
public void UiStart()
{// 创建自定义窗体Form1的实例Form1 myform = new Form1();// 在AutoCAD环境中非模态地显示该窗体Autodesk.AutoCAD.ApplicationServices.Application.ShowModelessDialog(myform); // 非模态显示窗体
}// 自定义窗体上的按钮点击事件处理程序
private void button1_Click(object sender, EventArgs e)
{// 在AutoCAD命令行输出提示信息ed.WriteMessage("请框选线段!\n");// 获取用户在绘图区的选择PromptSelectionResult acSSPrompt = ed.GetSelection();// 检查用户是否成功进行了选择操作if (acSSPrompt.Status == PromptStatus.OK){// 获取用户所选的对象集合(即选择集)SelectionSet sSet = acSSPrompt.Value;// 初始化用于累加线段长度的变量double sumLen = 0;// 如果用户确实选择了对象if (sSet != null){// 遍历选择集中的每个ObjectIdforeach (ObjectId id in sSet.GetObjectIds()){// 在这里需要继续完成获取图形实体、判断其类型为线段并计算长度的逻辑// 例如:Entity ent = (Entity)doc.GetObject(id, OpenMode.ForRead);if (ent is Line){Line line = (Line)ent;sumLen += line.Length;}}// 计算完成后可以在这里输出总长度或其他操作ed.WriteMessage($"所有线段总长度为: {sumLen}\n");}}
}

//感谢大家的点赞,收藏,转发,关注  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/458109.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3D室内虚拟灭火体验为预防火灾提供全新方案

室内火灾常见于充电器未拔、电动车、油锅起火及煤气泄露等原因,由于室内空间小、易燃物多,因此极易造成较大的人员财产损失,3D仿真还原技术、通过1:1模拟还原火灾发生全过程,火灾VR安全培训提供全方位、真实感强的模拟…

机器人学、机器视觉与控制 上机笔记(2.1章节)

机器人学、机器视觉与控制 上机笔记(2.1章节) 1、前言2、本篇内容3、代码记录3.1、新建se23.2、生成坐标系3.3、将T1表示的变换绘制3.4、完整绘制代码3.5、获取点*在坐标系1下的表示3.6、相对坐标获取完整代码 4、结语 1、前言 工作需要,想同…

03 动力云客项目之登录功能后端实现

创建项目 使用Spring initializr初始化项目 老师讲的是3.2.0, 但小版本之间问题应该不大.

光学PCIe 6.0技术引领AI时代超大规模集群

随着云计算、大数据和人工智能技术的快速发展,超大规模数据中心正经历一场前所未有的变革。传统的集中式架构逐渐转变为解聚式(disaggregated)架构,这种架构将计算、存储和网络资源从单一的物理服务器中分离出来,形成独…

【知识整理】技术团队,新人培养

团队管理简介 团队梯度建设,团队管理 4 件事: 选:招合适的人才进来用:把合适的人才,用在合适的位置育:对人才的引导和培养梯度留:当人才有要走的想法时,如何留住人才 上面的 4 个要…

交易之路:从无知到有知的五个阶段

交易是易学的,它的操作很直观,也是复杂的,它的价格很玄妙。在金融行业日益壮大的背景下,新人辈出,而弱者则逐渐退出。市场生态在不断变化,我们每个人在交易之路上所经历的种种,既清晰可见又模糊…

第二证券:股市的国家队是谁?股市国家队包括哪些机构?

在a股商场上,投资者大致能够分为散户、游资、主力、组织、国家队这几大类,那么,股市的国家队是谁?股市国家队包含哪些组织? 国家队主要是指以下五大类: 1、中心汇金 中心汇金的全称为中心汇金投资有限责…

公众号迁移是否会迁移留言功能?

为什么公众号没有留言功能?从2018年2月开始,新注册的微信公众号取消了留言功能,原因是为了规避一些营销号通过虚假留言骗取读者信任。不过大部分公众号运营者对TX此举感到失望,一方面大片的留言就像店前排队的顾客,能体…

Rust通用代码生成器莲花发布红莲尝鲜版二十一,前端代码生成物有巨大改进

Rust通用代码生成器莲花发布红莲尝鲜版二十一,前端代码生成物有巨大改进 Rust通用代码生成器莲花已发布红莲尝鲜版二十一,此版本采用了新的前端代码生成引擎:时空之门前端代码生成器6.2.0。此引擎支持Nodejs 21,Nodejs 18和Nodejs 14。消除了…

5.electron之主进程起一个本地服务

如果可以实现记得点赞分享,谢谢老铁~ Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 Electron 将 Chromium 和 Node.js 嵌入到了一个二进制文件中,因此它允许你仅需一个代码仓库,就可以撰写支持 Windows、…

spring boot(2.4.x之前版本)和spring cloud项目中配置文件的作用

spring 版本以及相关的组件一直在变化&#xff0c;其中一些类或者功能在低版本中有&#xff0c;高版本中去掉了&#xff0c;有的新功能只在高版本有。 为了防止理解问题&#xff0c;pom.xml 版本依赖如下 <parent><groupId>org.springframework.boot</groupId…

Flink SQL Client 安装各类 Connector、Format 组件的方法汇总(持续更新中....)

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…