C#开源库ACadSharp读取dwg图元的示例

文章目录

  • 介绍
  • 数据示例
  • 读取图元属性

介绍

开源库ACadSharp的地址:https://github.com/DomCR/ACadSharp

可以在NuGet中搜索到该库并安装。

数据示例

数据是一个绘制了以下简单图元的dwg数据:
在这里插入图片描述

读取图元属性

创建了.net6控制台项目,通过NuGet安装了ACadSharp库。

测试了以下几种图元的读取:

  • Line
  • Arc
  • Circle
  • Ellipse
  • LwPolyline
  • MText
  • Text
using ACadSharp.IO;
using ACadSharp;
using ACadSharp.Entities;namespace TestACadSharp
{internal class Program{static void Main(string[] args){var dwgPath = "./test-data/demo.dwg";CadDocument doc = DwgReader.Read(dwgPath, onNotification);//遍历所有实体foreach (var entity in doc.Entities){PrintInfo(entity);Console.WriteLine();}Console.WriteLine("Over!");}static void PrintInfo(Entity ent){switch (ent){case Line:var e = ent as Line;Console.WriteLine($"Line: X1={e.StartPoint.X},Y1={e.StartPoint.Y}," +$"X2={e.EndPoint.X},Y2={e.EndPoint.Y},Handle={e.Handle}");break;case Arc:var a = ent as Arc;Console.WriteLine($"Arc: r={a.Radius},X={a.Center.X},Y={a.Center.Y}," +$"StartAngle={a.StartAngle},EndAngle={a.EndAngle}");break;case Circle:var c = ent as Circle;Console.WriteLine($"Circle: r={c.Radius},X={c.Center.X},Y={c.Center.Y}");break;case Ellipse:var ee = ent as Ellipse;Console.WriteLine($"Ellipse: X={ee.Center.X},Y={ee.Center.Y}," +$"MajorAxis={ee.MajorAxis},MinorAxis={ee.MinorAxis}," +$"Rotation={ee.Rotation}");break;case Polyline:var p = ent as Polyline;Console.WriteLine($"Polyline: IsClosed={p.IsClosed}");for (int i = 0; i < p.Vertices.Count; i++){var v = p.Vertices[i];Console.WriteLine($"Bulge={v.Bulge},X={v.Location.X},Y={v.Location.Y}");}break;case LwPolyline:var wp = ent as LwPolyline;Console.WriteLine($"LwPolyline: IsClosed={wp.IsClosed}");for (int i = 0; i < wp.Vertices.Count; i++){var v = wp.Vertices[i];Console.WriteLine($"Bulge={v.Bulge},X={v.Location.X},Y={v.Location.Y}");}break;case MText:var mt = ent as MText;Console.WriteLine($"MText: X={mt.InsertPoint.X},Y={mt.InsertPoint.Y},Text={mt.Value},Height={mt.Height}");break;case TextEntity:var t = ent as TextEntity;Console.WriteLine($"Text: X={t.InsertPoint.X},Y={t.InsertPoint.Y},Text={t.Value},Height={t.Height}");break;default:break;}}// Process a notification form the readerprivate static void onNotification(object sender, NotificationEventArgs e){Console.WriteLine(e.Message);}}
}

在控制台打印了图元的部分属性:

Line: X1=0,Y1=0,X2=100,Y2=100,Handle=591Circle: r=20,X=100,Y=100LwPolyline: IsClosed=False
Bulge=0,X=100,Y=0
Bulge=0,X=200,Y=100
Bulge=0,X=200,Y=200Arc: r=50,X=200,Y=0,StartAngle=1.5707963267948961,EndAngle=3.5853960407017067LwPolyline: IsClosed=True
Bulge=0,X=0,Y=200
Bulge=0,X=20,Y=200
Bulge=0,X=100,Y=300
Bulge=0,X=20,Y=300LwPolyline: IsClosed=False
Bulge=1.7160122950374628,X=144.12226845286386,Y=251.44355233800798
Bulge=0,X=203.49903695426838,Y=270.9970954309483
Bulge=0,X=168.5715230805963,Y=344.3228820294762
Bulge=0,X=91.0324529571044,Y=367.36812645092596Ellipse: X=325.5331742656035,Y=139.27755185746537,MajorAxis=167.47948810551864,MinorAxis=61.59293601510967,Rotation=-2.3304093705041717Text: X=334.465413122849,Y=340.1926829662716,Text=hello,Height=77.01746524013924MText: X=427.1373896780551,Y=226.34077414221065,Text=world\P!!!!,Height=77.01746524013924

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

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

相关文章

【UniApp打包鸿蒙APP全流程】如何配置并添加UniApp API所需的鸿蒙系统权限

一、前言&#xff1a;为什么选择 UniApp 打包鸿蒙应用&#xff1f; 随着鸿蒙生态的快速发展&#xff0c;越来越多开发者希望将现有跨平台项目快速接入鸿蒙系统。而 UniApp 作为国内领先的跨平台开发框架&#xff0c;凭借其“一次开发&#xff0c;多端发布”的特性&#xff0c;…

STM32-FreeRTOS快速入门指南(下)

第十一章 FreeRTOS事件标志组 1. 事件标志组简介 事件标志组与信号量一样属于任务间同步的机制&#xff0c;但是信号量一般用于任务间的单事件同步&#xff0c;对于任务间的多事件同步&#xff0c;仅使用信号量就显得力不从心了。 FreeRTOS 提供的事件标志组可以很好的处理多事…

KTH7812磁编码器芯片完全支持ABZ和UVW输出模式

KTH7812磁编码器芯片完全支持ABZ和UVW输出模式&#xff0c;具体功能细节如下&#xff1a;&#x1f527; 1. ABZ输出特性 分辨率可编程&#xff1a;支持 4~4096步/圈&#xff08;对应1~1024个脉冲周期/圈&#xff09;&#xff0c;用户可通过配置寄存器自定义分辨率。 输出频率…

Android为ijkplayer设置音频发音类型usage

官方文档 多区音频路由 | Android Open Source Projecthttps://source.android.google.cn/docs/automotive/audio/audio-multizone-routing?hlzh-cn 背景 车机系统开发多分区&#xff08;zone&#xff09;功能&#xff0c;可以实现同一个app通过设置&#xff0c;在不同分…

C++ 循环:从入门到精通的深度解析

《C++ 循环:从入门到精通的深度解析》 目录 循环的本质与编程价值 三大基础循环结构详解 循环控制语句:break与continue的魔法 嵌套循环:构建复杂逻辑的基石 现代C++循环特性(C++11+) 循环性能优化与常见陷阱 实战案例:算法与工程中的循环应用 面试题深度解析与编程技巧…

| `cat /etc/os-release` | 发行版详细信息(如 Ubuntu、CentOS) |

在 Linux 或类 Unix 系统中&#xff0c;最简洁的命令查看操作系统类型是&#xff1a; uname -s✅ 输出示例&#xff1a; LinuxDarwin&#xff08;macOS&#xff09;FreeBSD 等&#x1f50d; 说明&#xff1a; uname&#xff1a;显示系统信息-s&#xff1a;仅显示操作系统内核名…

Maya 3D建模:点、线、面、创建多边面

目录 一 点、线、面 二 创建多边面 一 点、线、面 鼠标放在模型上 按住鼠标右键&#xff1a;就可以选择点 线 面 shift 加选点线面 ctrl 减选点线面 顶点面&#xff1a;是一个检查模式&#xff0c;观察有无错误 选择面&#xff0c;单击一个面&#xff0c;按住shift键 同时…

CXR-LT 2024:一场关于基于胸部X线的长尾、多标签和零样本疾病分类的MICCAI挑战赛|文献速递-深度学习人工智能医疗图像

Title题目CXR-LT 2024: A MICCAI challenge on long-tailed, multi-label, and zero-shotdisease classification from chest X-rayCXR-LT 2024&#xff1a;一场关于基于胸部X线的长尾、多标签和零样本疾病分类的MICCAI挑战赛01文献速递介绍CXR-LT系列是一项由社区推动的计划&a…

拆解本地组策略编辑器 (gpedit.msc) 的界面和功能

我们来详细拆解本地组策略编辑器 (gpedit.msc) 的界面和功能。打开后,你会看到一个标准的微软管理控制台 (MMC) 窗口,主要分为三个部分。 这是一个典型的本地组策略编辑器界面,我们将其分为三个主要部分进行讲解: +-----------------------------------------------+----…

[NCTF2019]True XML cookbook

TRY 尝试XML外部实体注入 <?xml version"1.0" encoding"utf-8" ?> <!DOCTYPE user[<!ENTITY flag SYSTEM "file://./doLogin.php"> ]> <user><username> &flag; </username><password>1</pa…

嵌入式硬件篇---模块使用

在电子开发、自动化控制等领域&#xff0c;“模块” 是实现特定功能的标准化组件&#xff08;可以理解为 “功能积木”&#xff09;。不同模块分工明确&#xff0c;比如有的负责感知环境&#xff08;传感器&#xff09;&#xff0c;有的负责通信&#xff08;蓝牙 / WiFi&#x…

密码管理中Null 密码

Null 密码定义&#xff1a;Null 密码是指允许用户或系统账户使用空密码&#xff08;即不输入任何字符&#xff09;进行登录或身份验证的配置。危害&#xff1a;完全绕过身份验证&#xff1a;这是最严重的危害。攻击者无需破解或窃取任何密码&#xff0c;只需输入用户名并留空密…

git新建项目如何推送到远程仓库

​ git新建项目如何推送到远程仓库 一、远程代码库操作(gitee为例) 1. 建新仓库 2. 找到地址:这里可以看到用户名等其他信息 3. 记住地址url(https) 二、本地操作 1. 安装git 2. 创建项目 3. 在当前项目下打开git bash 4. 添加远程仓库 5. 检查远程仓库地址 6. 检查当前状…

代码管理平台Gitlab如何通过 ZeroNews 实现远程访问?

Gitlab介绍1.1 GitLabGitLab 是一个基于 Web 的开源代码托管平台&#xff0c;集代码托管、项目管理、持续集成与持续部署等功能于一身。它采用 Git 作为版本控制系统&#xff0c;界面友好、功能丰富。相较于市场上的 Gitee 和 GitHub&#xff0c;GitLab 有以下优势&#xff1a;…

基于STM32F103C8T6控制A4988模块驱动2相4线步进电机

文章目录一、A4988模块简介二、A4988引脚说明三、A4988的Vref电压调节四、STM32F103C8T6控制A4988驱动2相4线步进电机准备工作引脚接线代码示例效果展示五、A4988电机驱动板常见问题一、A4988模块简介 A4988 是一款功能齐全的微步进电机驱动器&#xff0c;内置转换器&#xff0…

基于单片机智能晾衣架/智能窗户/智能窗帘设计

传送门 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目速选一览表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目功能速览 概述 智能晾衣架系统基于单片机设计&#xff0c;融合传感器技术与物联网功能&#xff0c;实现衣物的自…

Python爬虫实战:研究dark-fantasy,构建奇幻文学数据采集分析系统

1. 引言 1.1 研究背景 奇幻文学作为奇幻文学的重要子类别,融合了哥特式元素与传统奇幻设定,以其对人性的深刻探索和复杂的道德困境构建,成为当代文学研究的重要对象。与传统奇幻文学强调英雄主义和光明战胜黑暗的叙事不同,奇幻往往展现道德边界、复杂的角色动机和充满不确…

算法提升树形数据结构-(线段树)

今天介绍有关线段树的相关部分的知识&#xff0c;线段树是树的数据结构中十分重要的算法处理思想。1.建立初始树的条件2.基本框架3.区间修改的相关代码4.区间查询的代码题目描述给定一个长度为 N 的数组 a&#xff0c;其初值分别为 a1​,a2​,...,aN​。现有 Q 个操作&#xff…

java-代码随想录第十四天| 二叉树层序遍历相关题目

目录 102.二叉树的层序遍历 107.二叉树的层次遍历II 199.二叉树的右视图 637.二叉树的层平均值 429.N叉树的层序遍历 515.在每个树行中找最大值 116.填充每个节点的下一个右侧节点指针 117.填充每个节点的下一个右侧节点指针II 104.二叉树的最大深度 111.二叉树的最小…

C++智能指针详解:告别内存泄漏,拥抱安全高效

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C&#xff1a;由浅入深篇 小新的主页&#xff1a;编程版小新-CSDN博客 引言&#xff1a;为什么引入智能指针&#…