c# cad2016选择封闭多段线获取多段线面积

在C#中,如果你想要通过AutoCAD .NET API来选择封闭多段线内部的其他闭合多段线并计算它们各自的面积,可以遵循以下基本步骤:

1、加载AutoCAD库: 确保你的C#项目引用了Autodesk.AutoCAD.Interop和Autodesk.AutoCAD.Interop.Common这两个库。

2、初始化AutoCAD应用: 创建一个AcadApplication类的对象实例以与AutoCAD应用程序交互。

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;//1获取当前激活的文档(活动文档)并将其赋给doc变量。
Document doc = Application.DocumentManager.MdiActiveDocument;
//2 将doc文档的数据库(Database)赋给db变量。
Database db = doc.Database;
//3 将doc文档的编辑器(Editor)赋给ed变量。
Editor ed = doc.Editor;

3、用户交互选择对象: 使用.SelectImplied()或者.GetSelectionSet()方法让用户选择封闭多段线内的闭合多段线。

PromptSelectionResult selRes = ed.SelectImplied("选择内部的闭合多段线...");if (selRes.Status == PromptStatus.OK)
{SelectionSet selectionSet = selRes.Value;
}

4、遍历选择集并计算面积: 对于选中的每一个多段线对象,获取其几何信息并计算面积。

foreach (ObjectId id in selectionSet.GetObjectIds())
{using (Polyline polyline = (Polyline)tr.GetObject(id, OpenMode.ForRead)){if (polyline.IsClosed && polyline.NumberOfVertices > 0){double area = polyline.Area;ed.WriteMessage($"多段线 {id} 的面积为: {area}");}}
}

5、确保在一个事务中进行操作: 在AutoCAD中执行任何数据库修改或查询操作之前,需要开启一个事务。

using (Transaction tr = db.TransactionManager.StartTransaction())
{// 上面的代码应该在这个事务作用域内
}// 不要忘记提交事务(如果有必要)
tr.Commit();

6、完整代码

 //获取面积[CommandMethod("GetArea")]public void GetArea(){//1获取当前激活的文档(活动文档)并将其赋给doc变量。Document doc = Application.DocumentManager.MdiActiveDocument;//2 将doc文档的数据库(Database)赋给db变量。Database db = doc.Database;//3 将doc文档的编辑器(Editor)赋给ed变量。Editor ed = doc.Editor;PromptSelectionResult selRes = ed.GetSelection(new SelectionFilter(new[] { new TypedValue((int)DxfCode.Start, "LWPOLYLINE")
}));if (selRes.Status == PromptStatus.OK){SelectionSet selectionSet = selRes.Value;using (Transaction tr = db.TransactionManager.StartTransaction()){foreach (ObjectId id in selectionSet.GetObjectIds()){using (Polyline polyline = (Polyline)tr.GetObject(id, OpenMode.ForRead)){if (polyline.Closed && polyline.NumberOfVertices > 0){double area = polyline.Area;ed.WriteMessage($"\n多段线 {id} 的面积为: {area.ToString("0.00")}");}}}tr.Commit();}}}

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

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

相关文章

MySQL十部曲之四:MySQL中的数据类型

文章目录 前言概述数字类型数字类型语法数字类型字面量十六进制字面量位字面量布尔字面量 数字类型的属性超出范围和溢出处理 时间和日期类型时间和日期类型语法DATE、DATETIME和TIMESTAMP的异同TIMESTAMP和DATETIME的自动初始化和更新时间和日期字面量 字符串类型字符串类型语…

智能分析网关V4智慧冶金工厂视频智能监管方案

一、背景与需求 随着工业4.0的推进,冶金行业正面临着转型升级的压力。为了提高生产效率、降低能耗、保障安全,冶金智能工厂视频监管方案应运而生。该方案通过高清摄像头、智能分析技术、大数据处理等手段,对工厂进行全方位、实时监控&#xf…

Go的单元测试

开发项目过程中,少不了单元测试;下面我们认识下单元测试: Go 语言测试框架可以让我们很容易地进行单元测试,但是需要遵循五点规则。 含有单元测试代码的 go 文件必须以 _test.go 结尾,Go 语言测试工具只认符合这个规…

光纤接口类型

光纤接口 网络设备基础知识 文章目录 光纤接口前言一、光纤接口二、光纤接口的优缺点总结前言 不同的接口类型适用于不同的光纤传输系统和应用需求。在选择光纤设备时,需要根据实际需求和系统要求选择适当的光纤接口类型。 一、光纤接口

搭建nginx图片服务器

(1)将图片存储于/home/data/images目录; (2)配置nginx.conf user nginx; worker_processes 4;error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid;events {worker_connections 10000; }ht…

Web3:B站chainlink课程Lesson5遇到的小坑汇总

ethers代码 我用的ethers.js 6 ,和视频里一样用的是5的不用看代码部分 ethers.providers.JsonRpcProvider("server") //无了 ethers.JsonRpcProvider("server") //现在的wallet.getTransactionCount() //无了 wallet.getNonce() //现在的Big…

Flink中的容错机制

一.容错机制 在Flink中,有一套完整的容错机制来保证故障后的恢复,其中最重要的就是检查点。 1.1 检查点(Checkpoint) 在流处理中,我们可以用存档读档的思路,将之前某个时间点的所有状态保存下来&#xf…

ASP.NET Core 7 Web 使用Session

ASP.NET Core 好像不能像20年前那样直接使用Session函数,我使用如下方法 1、在NuGet安装以下2个包 2、在Program.cs注册 //注册Session builder.Services.AddSession(options > {options.IdleTimeout TimeSpan.FromMinutes(60);options.Cookie.HttpOnly fals…

【七、centos要停止维护了,我选择Almalinux】

搜索镜像 https://developer.aliyun.com/mirror/?serviceTypemirror&tag%E7%B3%BB%E7%BB%9F&keywordalmalinux dvd是有界面操作的,minimal是最小化只有命里行 镜像下载地址 安装和centos基本一样的,操作命令也是一样的,有需要我…

第14次修改了可删除可持久保存的前端html备忘录:增加一个翻牌钟,修改背景主题:现代深色

第14次修改了可删除可持久保存的前端html备忘录&#xff1a;增加一个翻牌钟&#xff0c;修改背景主题&#xff1a;现代深色 备忘录代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta http-equiv"X…

DevExpress WinForms导航控件 - 交付更时尚、体验更好的业务应用(二)

DevExpress WinForms的Side Navigation&#xff08;侧边导航&#xff09;和Nav Panel&#xff08;导航面板&#xff09;可以帮助客户交付完全可模仿UI体验的业务解决方案&#xff0c;这些体验在当今流行的应用程序中都可找到。在上文中&#xff08;点击这里回顾>>&#x…

代码随想录算法训练营day3 | 链表 (1)

一、链表理论基础 链表是一种通过指针串联在一起的线性结构&#xff0c;每个节点由两部分组成&#xff1a;数据域和指针域&#xff08;指向下一个节点&#xff09;&#xff0c;最后一个节点的指针指向NULL&#xff08;空指针&#xff09;。 …