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)
        {
            // 遍历选择集中的每个ObjectId
            foreach (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.mfbz.cn/a/372957.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《动手学深度学习(PyTorch版)》笔记7.1

注:书中对代码的讲解并不详细,本文对很多细节做了详细注释。另外,书上的源代码是在Jupyter Notebook上运行的,较为分散,本文将代码集中起来,并加以完善,全部用vscode在python 3.9.18下测试通过&…

数据库学习笔记2024/2/5

2. SQL 全称 Structured Query Language,结构化查询语言。操作关系型数据库的编程语言,定义了 一套操作关系型数据库统一标准 2.1 SQL通用语法 在学习具体的SQL语句之前,先来了解一下SQL语言的通用语法。 1). SQL语句可以单行或多行书写&…

C语言中10种常见的字符串函数你都掌握了吗?

目录 ​编辑 1.strlen(字符串长度计算函数) 2.strcpy(字符串拷贝函数) 3.strcat(字符串追加函数) 4.strcmp(字符串大小比较函数) 5.strncpy(有限制的字符串拷贝函数) 6.strnca…

DevOps落地笔记-15|混沌工程:通过问题注入提高系统可靠性

上一课时介绍了通过搭建一套部署流水线,高效、可靠的将软件部署到测试环境以及生产环境。到目前为止,我们学习了从用户需求到软件部署到生产环境交付给用户的全过程。随着软件工程不断发展,近几年,出现了一种新的实践,…

[Angular 基础] - 指令(directives)

[Angular 基础] - 指令(directives) 这里假设已经知道如何创建 Angular 组件以及数据绑定,不然可以参考前两篇笔记: [Angular 基础] - Angular 渲染过程 & 组件的创建 [Angular 基础] - 数据绑定(databinding) 就像中文翻译一样,dire…

一文讲透ast.literal_eval() eval() json.loads()

文章目录 一文讲透ast.literal_eval() eval() json.loads()1. ast.literal_eval()2. eval()3. json.loads()4. 总结 一文讲透ast.literal_eval() eval() json.loads() 在Python库中,我们经常会遇到需要将字符串转换为相应对象或数据结构的情况。在这种情况下&#…

研究表明:论文被大V宣传后,引用次数暴涨2~3倍!

随着AI领域的迅猛发展,学术成果的传播方式发生了显著转变。 期刊审稿周期长,当你还在和审稿人battle时,方法先过时了。而会议虽然没有期刊长,但也有几个月的时间差,为了保护成果的创新性并扩大影响力,很多…

mysql-FIND_IN_SET查询优化

优化前 SELECTuser_id,user_name,real_name,PASSWORD,real_org_id,real_org_name,real_dept_id,real_dept_name, STATUS FROMsys_user WHEREis_del 0 AND find_in_set( lilong, login_user_account ) 优化后 SELECTuser_id,user_name,real_name,PASSWORD,real_org_id,real…

必须了解的mysql三大日志-binlog、redo log和undo log

背景 日志是 mysql 数据库的重要组成部分,记录着数据库运行期间各种状态信息。mysql日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。 作为开发,我们重点需要关注的是二进制日志( binlog )和事务日志(包括redo log 和 undo …

Linux应用开发---网络通信

Linux应用开发—网络通信 1 网络通信概述 Linux下的网络编程,我们一般称为 socket 编程,socket 是内核向应用层提供的一套网络编程接口,我们可以基于socket接口开发自己的网络相关应用程序。 1.1 socket 简介 套接字(socket&…

ReentrantLock源码分析、LockSuppor、ReentrantReadWriteLock、锁优化的方法

ReentrantLock类图 我们看一下重入锁ReentrantLock类关系图,它是实现了Lock接口的类。NonfairSync和FairSync都继承 自抽象类Sync,在ReentrantLock中有非公平锁NonfairSync和公平锁FairSync的实现。 在重入锁ReentrantLock类关系图中,我们可以…

Rust-获取随机数练习案例

文章目录 前言一、取官网示例猜数字游戏玩一玩cargo checkTOML文件 二、完整代码总结 前言 Rust学习系列-获取随机数练习案例,基于cargo 进行案例练习,过程中会使用cargo check; cargo run;等命名,同时了解基础的let …

flask_django_python五金电商网络营销的可视化分析研究

前面部分完成了系统需求分析,了解到新闻数据业务方面的需求,系统主要分为用户管理、五金信息管理、在线留言、系统管理等功能。销的可视化研究,并对这些数据进行处理, 然后对这些数据进行可视化分析和统计。 Python 爬虫技术目前来…

linux免密登录的实现

ssh免密登录使用方便,关键没有了口令验证反倒规避了暴力破解或者被探测的风险。配置得当,使用ssh免密登录更加安全。在生产环境中应用和数据库服务器之间互相设置后使用方便,并且在第三方人员配置使用时不用告知对方密码。 第一步、ssh登录发…

如何在HA智能家居系统中添加HACS集成并实现异地控制家中苹果与小米设备

文章目录 基本条件一、下载HACS源码二、添加HACS集成三、绑定米家设备 ​ 上文介绍了如何实现群晖Docker部署HomeAssistant,通过内网穿透在户外控制家庭中枢。本文将介绍如何安装HACS插件商店,将米家,果家设备接入 Home Assistant。 基本条件…

第十三篇【传奇开心果系列】Python的OpenCV库技术点案例示例:光流估计

传奇开心果短博文系列 系列短博文目录Python的OpenCV库技术点案例示例:光流估计短博文目录前言一、光流估计介绍二、Lucas-Kanade光流介绍和示例代码三、Horn-Schunck光流介绍和示例代码四、cv::calcOpticalFlowPyrLK()函数实现光流估计介绍和示例代码五、光流估计用于运动分析…

Express框架介绍—node.js

Express—Node.js 官网传送门(opens new window) 基于 Node.js 平台,快速、开放、极简的 Web 开发框架 Express 是用于快速创建服务器的第三方模块。 Express 初体验 基本使用 安装 Express: npm install express创建服务器,监听客户端请…

瑞萨RA6M3开发实践指南-UART实践

1.背景说明 本文是参考瑞萨RA6M3开发实践指南文章教程,基于瑞萨HMI-Board BSP :1.1.1 版本 RT-Thread 5.0.1 版本操作步骤进行记录,整理成的文档。 1.1 本章内容 使用RT-Thread Studio创建开发板的程序,编写UART的程序,实现串口…

跟着pink老师前端入门教程-day19

一、移动WEB开发之流式布局 1、 移动端基础 1.1 浏览器现状 PC端常见浏览器:360浏览器、谷歌浏览器、火狐浏览器、QQ浏览器、百度浏览器、搜狗浏览器、IE浏览器。 移动端常见浏览器:UC浏览器,QQ浏览器,欧朋浏览器&#xff0…

Yolo v8 进行对象数量统计示例

Yolo v8 进行对象数量统计示例 示例代码 from ultralytics import YOLO from ultralytics.solutions import object_counter import cv2def object_count_test():# 权重文件,可替换为自己训练的权重文件model YOLO("yolov8n.pt")# results model.trai…