c# cass10 获取宗地内所有封闭线段的面积

获取面积的主要流程如下:

  1. 获取当前AutoCAD应用中的活动文档、数据库和编辑器对象。
  2. 创建一个选择过滤器,限制用户只能选择"宗地"图层上的LWPOLYLINE对象作为外部边界。
  3. 提示用户根据上述规则进行实体选择,并获取选择结果。
  4. 检查用户是否成功选择了实体。
  5. 开始事务处理以确保数据一致性。
  6. 遍历所有被选中的外部多段线。
  7. 读取所选多段线,并确保它是闭合的且至少有一个顶点。
  8. 创建一个表示外部多段线边界坐标的点集合。
  9. 创建一个窗口选择过滤器,用于选择位于外部多段线内的所有实体。
  10. 使用多边形窗口选择方式让用户选择位于外部多段线内的实体,并获取选择结果。
  11. 检查用户是否成功在内部区域进行了实体选择。
  12. 遍历用户在内部区域所选的所有闭合多段线。
  13. 获取多段线的面积,并输出到编辑器中。

在AutoCAD应用程序中,我们经常需要计算图形的面积。下面是一个示例方法,演示了如何获取AutoCAD中多段线的面积。

首先,我们需要获取当前活动的文档、数据库和编辑器对象。这可以通过以下代码实现:

Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;

接下来,我们需要限制用户只能选择"宗地"图层上的多段线对象作为外部边界。为此,我们创建一个选择过滤器,并将其应用于选择命令。代码如下:

SelectionFilter outerFilter = new SelectionFilter(new TypedValue[] {new TypedValue((int)DxfCode.Start, "LWPOLYLINE"),new TypedValue((int)DxfCode.LayerName, "宗地")
});
PromptSelectionResult outerSelRes = ed.GetSelection(outerFilter);

然后,我们检查用户是否成功选择了实体。如果选择成功,我们开始一个事务处理以确保数据一致性。代码如下:

if (outerSelRes.Status == PromptStatus.OK)
{using (Transaction tr = db.TransactionManager.StartTransaction()){// 遍历所有被选中的外部多段线foreach (ObjectId outerId in outerSelRes.Value.GetObjectIds()){// 读取所选多段线using (Polyline outerPolyline = (Polyline)tr.GetObject(outerId, OpenMode.ForRead)){// 确保所选多段线是闭合的且至少有一个顶点if (outerPolyline.Closed && outerPolyline.NumberOfVertices > 0){// 创建一个表示外部多段线边界坐标的点集合Point3dCollection outerPoints = new Point3dCollection();for (int i = 0; i < outerPolyline.NumberOfVertices; i++){Point3d point = outerPolyline.GetPoint3dAt(i);outerPoints.Add(point);}// 创建一个窗口选择过滤器,用于选择位于外部多段线内的所有实体SelectionFilter innerFilter = new SelectionFilter(new TypedValue[] {new TypedValue((int)DxfCode.Start, "LWPOLYLINE")});// 使用多边形窗口选择方式让用户选择位于外部多段线内的实体PromptSelectionResult innerSelRes = ed.SelectWindowPolygon(outerPoints, innerFilter);// 检查用户是否成功在内部区域进行了实体选择if (innerSelRes.Status == PromptStatus.OK){SelectionSet innerSelectionSet = innerSelRes.Value;// 遍历用户在内部区域所选的所有闭合多段线foreach (ObjectId id2 in innerSelectionSet.GetObjectIds()){using (Polyline polyline2 = (Polyline)tr.GetObject(id2, OpenMode.ForRead)){if (polyline2.Closed && polyline2.NumberOfVertices > 0){// 获取多边形的面积double area = polyline2.Area;ed.WriteMessage($"\n内部多段线 {id2} 内部的总多边形面积为: {area.ToString("0.00")}");}}}}}}}}
}

以上代码中,我们首先检查用户是否成功选择了外部多段线作为边界。然后,我们创建一个包含外部多段线边界坐标的点集合。接下来,我们使用多边形窗口选择方式,让用户选择位于外部多段线内的实体。最后,我们遍历用户在内部区域所选的所有闭合多段线,并计算其面积。

这是一个简单的示例,演示了如何在AutoCAD中获取多段线的面积。您可以根据自己的需求进行修改和扩展。

完整代码

    [CommandMethod("GetArea")]public void GetArea(){// 获取当前AutoCAD应用中的活动文档、数据库和编辑器对象Document doc = Application.DocumentManager.MdiActiveDocument;Database db = doc.Database;Editor ed = doc.Editor;// 创建一个选择过滤器,限制用户只能选择"宗地"图层上的LWPOLYLINE对象作为外部边界SelectionFilter outerFilter = new SelectionFilter(new TypedValue[] {new TypedValue((int)DxfCode.Start, "LWPOLYLINE"),new TypedValue((int)DxfCode.LayerName, "宗地")
});// 提示用户根据上述规则进行实体选择,并获取选择结果PromptSelectionResult outerSelRes = ed.GetSelection(outerFilter);// 检查用户是否成功选择了实体if (outerSelRes.Status == PromptStatus.OK){using (Transaction tr = db.TransactionManager.StartTransaction())// 开始事务处理以确保数据一致性{foreach (ObjectId outerId in outerSelRes.Value.GetObjectIds())// 遍历所有被选中的外部多段线{using (Polyline outerPolyline = (Polyline)tr.GetObject(outerId, OpenMode.ForRead))// 读取所选多段线{// 确保所选多段线是闭合的且至少有一个顶点if (outerPolyline.Closed && outerPolyline.NumberOfVertices > 0){// 创建并填充一个表示外部多段线边界坐标的点集合Point3dCollection outerPoints = new Point3dCollection();for (int i = 0; i < outerPolyline.NumberOfVertices; i++){Point3d point = outerPolyline.GetPoint3dAt(i);outerPoints.Add(point);}// 创建一个窗口选择过滤器,用于选择位于外部多段线内的所有实体SelectionFilter innerFilter = new SelectionFilter(new TypedValue[] {new TypedValue((int)DxfCode.Start, "LWPOLYLINE")});// 使用多边形窗口选择方式让用户选择位于外部多段线内的实体PromptSelectionResult innerSelRes = ed.SelectWindowPolygon(outerPoints, innerFilter);// 检查用户是否成功在内部区域进行了实体选择if (innerSelRes.Status == PromptStatus.OK){SelectionSet innerSelectionSet = innerSelRes.Value;// 遍历用户在内部区域所选的所有闭合多段线foreach (ObjectId id2 in innerSelectionSet.GetObjectIds()){using (Polyline polyline2 = (Polyline)tr.GetObject(id2, OpenMode.ForRead)){if (polyline2.Closed && polyline2.NumberOfVertices > 0){double area = polyline2.Area;ed.WriteMessage($"\n内部多段线 {id2} 内部的总多边形面积为: {area.ToString("0.00")}");}}}}}}}}}}

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

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

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

相关文章

前端下载导出文件流,excel/word/pdf/zip等

** 一、导入导出接口增加responseType:‘blob’ ** axios({url: 接口,method: post,data&#xff1a;{},responseType: blob });二、导出方法封装 //data 文件流 //fileName 文件名称 /* mineType 文件类型例如&#xff1a;* 下载 Excel : "application/vnd.m…

(附源码)ssm 招聘信息管理系统-计算机毕设 78049

ssm 招聘客户管理系统 摘 要 由于数据库和数据仓库技术的快速发展&#xff0c;招聘客户管理系统建设越来越向模块化、智能化、自我服务和管理科学化的方向发展。招聘客户系统对处理对象和服务对象&#xff0c;自身的系统结构&#xff0c;处理能力&#xff0c;都将适应技术发展的…

逃避自由是所有成长的前提

《逃避自由》是埃里希弗洛姆的一部重要作品&#xff0c;首次出版于1941年。该书主要探讨了现代人在面对自由和独立时所表现出的逃避倾向。在这部作品中&#xff0c;弗洛姆分析了自由的心理学基础&#xff0c;并论证了自由不仅仅是一个政治和经济的概念&#xff0c;更是一个深刻…

脚本工具 mktemp 和 install

1.创建临时文件 mktemp 1.1 介绍 mktemp 命令用于创建并显示临时文件&#xff0c;可避免冲突 使用mktemp命令时&#xff0c;它会根据指定的模板在临时目录&#xff08;默认为/tmp&#xff09;中创建一个唯一的临时文件或目录&#xff0c;并返回该文件或目录的完整路径。临时…

2023年12月CCF-GESP编程能力等级认证Python编程一级真题解析

一、单选题(共15题,共30分) 第1题 某公司新出了一款无人驾驶的小汽车,通过声控智能驾驶系统,乘客只要告诉汽车目的地,车子就能自动选择一条优化路线,告诉乘客后驶达那里。请问下面哪项不是驾驶系统完成选路所必须的。( )(2023年12月py一级) A:麦克风 B:扬声器 C…

工作中的小记录

1、在element的el-dialog中上传附件后在另一个el-form-item下的input输入框中获取该附件名 使用v-model无法双向绑定。使用this.$set this.$set(this.formData,"属性名","属性值")2、后端传来文件地址&#xff0c;点击直接下载 getCaseId(this.$route.quer…

datawhale 大模型学习 第十一章-大模型法律篇

简介 新技术与法律关系&#xff1a;大型语言模型&#xff08;LLM&#xff09;的出现引发了对现有法律适用性的探讨&#xff0c;尤其是在版权、隐私和公平使用等方面。互联网法律挑战&#xff1a;互联网的匿名性和无国界特性对法律的管辖权提出了挑战。法律与道德区分&#xff…

在线UI设计工具有哪些?这5个包你满意

随着 UI 设计行业的蓬勃发展&#xff0c;越来越多的设计师进入 UI 设计&#xff0c;选择一款方便的 UI 设计工具尤为重要&#xff01;除了传统的 UI 设计工具&#xff0c;在线 UI 设计工具也受到越来越多设计师的青睐。这种不受时间、地点和计算机配置限制的工作方法真的很刺激…

Python处理图片生成天际线(2024.1.29)

1、天际线简介 天际线&#xff08;SkyLine&#xff09;顾名思义就是天空与地面的边界线&#xff0c;人站在不同的高度&#xff0c;会看到不同的景色和地平线&#xff0c;天空与地面建筑物分离的标记线&#xff0c;不得不说&#xff0c;每天抬头仰望天空&#xff0c;相信大家都可…

屈子祠镇黑鱼岭,不可移动文物预防性保护系统守遗珍

一、何止秦俑 秦陵苑囿青铜水禽等文物集中展出 文物保护&#xff0c;尤其是不可移动文物的保护&#xff0c;一直都是文化遗产的重要环节。湖南省汨罗市屈子祠镇双楚村黑鱼岭墓地&#xff0c;作为长江中游地区的重大考古发现&#xff0c;其商朝晚期的历史背景赋予其不可估量的历…

c# 语音播报

在C#中进行语音播报通常需要使用.NET Framework中的某个语音库或服务。一个常见的选择是使用System.Speech.Synthesis命名空间中的SpeechSynthesizer类&#xff0c;该类提供了文本到语音的转换功能。 以下是一个简单的示例&#xff0c;演示如何在C#中使用SpeechSynthesizer进行…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例5-6 绘制几何图形

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>绘制几何图形</title> </head><body><canvas id"canvas" width"250" height"150" style"border: 1px b…

QUIC with CUBIC or BBR

拥塞控制 拥塞控制算法是 TCP/QUIC 协议的一个基础部分&#xff0c;多年来经过一个个版本的迭代&#xff08;如 Tahoe、Reno、Vegas 等&#xff09;&#xff0c;拥塞控制算法得到了持续的提升。由于篇幅有限&#xff0c;本文就目前比较流行的两种拥塞控制算法&#xff08;CUBI…

SVM支持向量机

1.基本概念 支持向量机&#xff08;Support Vector Machine&#xff0c;SVM&#xff09;是一种有监督学习方法&#xff0c;主要用于分类和回归分析。它的基本思想是在特征空间中找到一个超平面&#xff0c;能够将不同类别的样本分开&#xff0c;并且使得离这个超平面最近的样本…

Linux 链接 GitHub 出现 Connection timed out

问题 安装GIT并完成公钥验证&#xff1a;Linux 系统拉取 Github项目 [rootxxx devtools]# ssh -T gitgithub.com ssh: connect to host github.com port 22: Connection timed out解决方案 进入在存放公钥私钥id_rsa.pub文件里&#xff0c;新建/修改config文本 [rootxxx my…

Java 异常处理下篇:11 个异常处理最佳实践

文章目录 前言最佳实践早抛出&#xff0c;晚捕获原则只捕获实际可处理的异常不要忽略捕捉的异常抛出具体的检查性异常正确包装自定义异常中的异常记录或抛出异常&#xff0c;但不要同时执行finally 中永远不要抛出异常或返回值避免使用异常进行流程控制使用模板方法处理重复的 …

算法训练day24回溯算法理论基础77组合

今日学习链接 https://programmercarl.com/%E5%9B%9E%E6%BA%AF%E7%AE%97%E6%B3%95%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html#%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80 https://programmercarl.com/0077.%E7%BB%84%E5%90%88.html#%E5%89%AA%E6%9E%9D%E4%BC%98%E5%8C%96 回溯算…

sql注入,布尔盲注和时间盲注,无回显

布尔盲注 通过order by分组可以看到&#xff0c;如果正确会i显示you are in&#xff0c;错误则无任何提示&#xff0c;由此可以判断出&#xff0c;目前只显示对错&#xff0c;此外前端不会显示任何数据 也就是说&#xff0c;目前结果只有两种&#xff0c;在这种只有两种变量的…

Uniapp登录页面获取头像、昵称的最新方法的简单使用

前言 写小程序写到登录页面的时候&#xff0c;发现官方文档中原来的wx.getUserInfo和wx.getUserProfile不太能用了&#xff0c;学习了相对比较新的方法&#xff0c;这种方法的文档链接如下&#xff1a; https://developers.weixin.qq.com/miniprogram/dev/framework/open-abil…

交易策略的开发:关于市场到底能不能预测的哲学思考

文章目录 为什么要判断市场能否被预测三个方面来论述这个问题耗散结构理论什么是耗散结构 为什么要判断市场能否被预测 这个问题已经争论几十年了&#xff0c;不仅在股票市场&#xff0c;期货市场&#xff0c;外汇市场, 甚至整个金融市场。至今没有人给出一个科学的论断。 如果…