AutoCAD C# 判断多边形与点的位置关系

news/2024/11/16 7:55:03/文章来源:https://www.cnblogs.com/NanShengBlogs/p/18415985

书上说,射线法和叉乘法感觉都不完整

 

下面我分享我写的基于AutoCAD BREP算法

 

 var ed = acApp.Application.DocumentManager.MdiActiveDocument.Editor;var peo = new PromptEntityOptions("Select a PolyLine : ");peo.SetRejectMessage("Only PolyLine");peo.AddAllowedClass(typeof(Polyline), true);var per = ed.GetEntity(peo);if (per.Status != PromptStatus.OK) return;var ppo = new PromptPointOptions("指定测试点");var ppr = ed.GetPoint(ppo);if (ppr.Status != PromptStatus.OK) return;var rtn = "无法检测";using (var tr = per.ObjectId.Database.TransactionManager.StartTransaction()){var poly = tr.GetObject(per.ObjectId, OpenMode.ForRead) as Polyline;//一定要读,不要写//看点是否在曲线上/var ptOnPolyline = poly.GetClosestPointTo(ppr.Value, false);if (ptOnPolyline.DistanceTo(ppr.Value) < 0.001){acApp.Application.ShowAlertDialog(PointContainment.OnBoundary.ToString());return;}var pts = Enumerable .Range(0, poly.NumberOfVertices) .Select(i => poly.GetPoint3dAt(i));if (!poly.Closed && ! pts.FirstOrDefault().IsEqualTo(pts.LastOrDefault(),new Tolerance(0.0001,0.0001))){acApp.Application.ShowAlertDialog("多段线不封闭无法检测");return;}//转为面域var reg = Autodesk.AutoCAD.DatabaseServices.Region.CreateFromCurves(new DBObjectCollection { poly }).Cast<Autodesk.AutoCAD.DatabaseServices.Region>().FirstOrDefault();using (var brep = new Brep(reg)){if (brep != null){using (var ent = brep.GetPointContainment(ppr.Value, out PointContainment resultt)){rtn = ent is Autodesk.AutoCAD.BoundaryRepresentation.Face ? PointContainment.Inside.ToString() : resultt.ToString();}}}}acApp.Application.ShowAlertDialog(rtn);

 

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

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

相关文章

Nginx使用篇:实现负载均衡、限流与动静分离

Nginx实用篇:实现负载均衡、限流与动静分离| 原创作者/编辑:凯哥Java | 分类:Nginx学习系列教程nginx的logo Nginx 作为一款高性能的 HTTP 服务器及反向代理解决方案,在互联网架构中扮演着至关重要的角色。它不仅支持负载均衡、流量控制等功能…

[ACTF2020 新生赛]Upload

启动靶机,发现有前端验证先绕过前端验证,在burp中尝试发现验证在文件名后缀,且会重命名文件名 发现.ini能上传但是会被重命名,既然不像前端显示只有三种格式能上传,这里我们寻找能绕过的后缀尝试发现phtml能上传成功 //PHTML 扩展名是 PHP 的一个模块,它允许在 HTML 文件…

上海登陆最强台风 台风路径追踪 All In One

上海登陆最强台风 & 台风路径追踪 All In One 上海最强台风路径追踪 中央气象台、市气象服务中心介绍,今年第13号台风“贝碧嘉”(强台风级)的中心已于今天(2024年09月16日)7点30分前后在上海浦东临港新城登陆,登陆时中心附近最大风力14级(42米/秒),中心最低气压为…

再vue中使用Vuetify 创建app项目

vue:2 Vuetify :2与vue创建普通项目相同:https://www.cnblogs.com/yansans/p/18342267vscode打开项目,在项目终端中运行vue add vuetify@2之后会出现,选择默认即可(回车) 几个选项的解释: 1. Vuetify 2 - Configure Vue CLI (advanced)解释:这是一个高级选项,允许你对…

广东产业转移工业园

广东产业转移工业园

南沙C++信奥老师解一本通题 1228:书架

​【题目描述】John最近买了一个书架用来存放奶牛养殖书籍,但书架很快被存满了,只剩最顶层有空余。 John共有NN头奶牛(1≤N≤20,000),每头奶牛有自己的高度Hi(1≤Hi≤10,000),N头奶牛的总高度为S。书架高度为B(1≤B≤S<2,000,000,007)。 为了到达书架顶层,奶牛可以踩着…

基于Java+Springboot+Vue开发的医院门诊预约挂号系统

项目简介该项目是基于Java+Springboot+Vue开发的医院门诊预约挂号系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的门诊预约挂号管理系统项目,大学生可以在…

基于Java+Springboot+Vue开发的家具管理系统

项目简介该项目是基于Java+Springboot+Vue开发的家具管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的家具管理系统项目,大学生可以在实践中学习和提升…

VirtualBox 7.1.0 发布下载 - 开源跨平台虚拟化软件

VirtualBox 7.1.0 发布下载 - 开源跨平台虚拟化软件VirtualBox 7.1.0 发布下载 - 开源跨平台虚拟化软件 VirtualBox 7.1.0 (macOS, Linux, Windows) - 开源跨平台虚拟化软件 Oracle VM VirtualBox 7 请访问原文链接:https://sysin.org/blog/virtualbox-7/,查看最新版。原创作…

Kali Linux 2024.3 发布下载 - 领先的渗透测试发行版

Kali Linux 2024.3 发布下载 - 领先的渗透测试发行版Kali Linux 2024.3 发布 (Multiple transitions) - 领先的渗透测试发行版 The most advanced Penetration Testing Distribution 请访问原文链接:https://sysin.org/blog/kali-linux/,查看最新版。原创作品,转载请保留出处…

南沙C++信奥老师解一本通题:2110:【例5.1】素数环

​ 【题目描述】输入正整数n,把整数1,2,…,n 组成一个环,使得相邻两个整数之和均为素数。【输入】输入正整数n。【输出】输出任意一个满足条件的环。【输入样例】 6 【输出样例】 4 3 2 5 6 1 【提示】数据满足: 4≤n≤30#include <bits/stdc++.h> using namespace st…

Cisco Jabber 15.0 发布下载 - 面向企业的多合一通信工具

Cisco Jabber 15.0 发布下载 - 面向企业的多合一通信工具Cisco Jabber 15.0 (Andriod, iOS, macOS, Windows) - 面向企业的多合一通信工具 即时消息、语音和视频通话、语音邮件、桌面共享、会议和在线状态 请访问原文链接:https://sysin.org/blog/cisco-jabber-15/,查看最新版…