c# cad二次开发通过获取excel数据 在CAD绘图,将CAD属性导出到excel
c# cad二次开发通过获取excel数据 在CAD绘图,将CAD属性导出到excel
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Excel = NetOffice.ExcelApi;
using Autodesk.AutoCAD.DatabaseServices;
using System.IO;
using Autodesk.AutoCAD.Geometry;
namespace _17外部文件_Excel_交互
{
public class Class1
{
public struct CircleData
{
public double X;
public double Y;
public double Z;
public double R;
}
[CommandMethod(“ExcelDemo”)]
public void ExcelDemo()
{
Database db = HostApplicationServices.WorkingDatabase;
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
#region 保存图形信息到Excel文件
//string fileName = this.OpenSaveDialog(ed, db);
//if (fileName == “”) return;
获取图形信息
//TypedValue[] values = new TypedValue[]
//{
// new TypedValue((int)DxfCode.Start,“circle”)
//};
//SelectionFilter filter = new SelectionFilter(values);
//PromptSelectionResult res = ed.SelectAll(filter);
//if (res.Status != PromptStatus.OK) return;
//ObjectId[] ids = res.Value.GetObjectIds();
//if (ids.Length == 0) return;
//CircleData[] datas = this.GetCircelData(db, ids);
保存数据到Excel文件
//this.SaveDataToExcel(fileName, datas);
#endregion
#region 读取Excel文件画图
string fileName = this.OpenFileDialog(ed, db);
if (fileName == “”) return;
List datas = this.GetDataFromExcel(fileName);
if (datas.Count == 0) return;
this.DrawCircle(db, datas);#endregion}/// <summary>/// 将图形绘制到模型空间/// </summary>/// <param name="db"></param>/// <param name="datas"></param>private void DrawCircle(Database db, List<CircleData> datas){using (Transaction trasns = db.TransactionManager.StartTransaction()){BlockTable bt = (BlockTable)trasns.GetObject(db.BlockTableId, OpenMode.ForRead);BlockTableRecord btr = (BlockTableRecord)trasns.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);for (int i = 0; i < datas.Count; i++){Point3d center = new Point3d(datas[i].X, datas[i].Y, datas[i].Z);double radius = datas[i].R;Circle c = new Circle(center,Vector3d.ZAxis,radius);btr.AppendEntity(c);trasns.AddNewlyCreatedDBObject(c, true);}trasns.Commit();}}/// <summary>/// 读取Excel数据/// </summary>/// <param name="fileName"></param>/// <returns></returns>private List<CircleData> GetDataFromExcel(string fileName){List<CircleData> datas = new List<CircleData>();Excel.Application excelApp = new Excel.Application(); //生命Excel程序Excel.Workbook book = excelApp.Workbooks.Open(fileName); //Excel工作簿Excel.Worksheet sheet = (Excel.Worksheet)book.Worksheets[1]; //获取第一张工作表int i = 2;while (sheet.Cells[i, 2].Value != null && sheet.Cells[i, 2].Value.ToString().Trim() != ""){CircleData data = new CircleData();data.R = (double)sheet.Cells[i, 2].Value;data.X = (double)sheet.Cells[i, 3].Value;data.Y = (double)sheet.Cells[i, 4].Value;data.Z = (double)sheet.Cells[i, 5].Value;datas.Add(data);i++;}excelApp.Quit(); //推出并销毁Excel程序excelApp.Dispose();return datas;}/// <summary>/// 保存数据到Excel文件/// </summary>/// <param name="fileName"></param>/// <param name="datas"></param>private void SaveDataToExcel(string fileName, CircleData[] datas){Excel.Application excelApp = new Excel.Application(); //生命Excel程序Excel.Workbook book = excelApp.Workbooks.Add(); //Excel工作簿Excel.Worksheet sheet = (Excel.Worksheet)book.Worksheets[1]; //获取第一张工作表sheet.Cells[1, 1].Value = "序号";sheet.Cells[1, 2].Value = "半径";sheet.Cells[1, 3].Value = "X坐标";sheet.Cells[1, 4].Value = "Y坐标";sheet.Cells[1, 5].Value = "Z坐标";for (int i = 0; i < datas.Length; i++){sheet.Cells[i + 2, 1].Value = i+1;sheet.Cells[i + 2, 2].Value = datas[i].R;sheet.Cells[i + 2, 3].Value = datas[i].X;sheet.Cells[i + 2, 4].Value = datas[i].Y;sheet.Cells[i + 2, 5].Value = datas[i].Z;}book.SaveAs(fileName); //保存工作簿excelApp.Quit(); //推出并销毁Excel程序excelApp.Dispose();}/// <summary>/// 获取图形对象的数据/// </summary>/// <param name="db"></param>/// <param name="ids"></param>/// <returns></returns>private CircleData[] GetCircelData(Database db, ObjectId[] ids){CircleData[] datas = new CircleData[ids.Length];using (Transaction trans = db.TransactionManager.StartTransaction()){for (int i = 0; i < ids.Length; i++){Circle c = (Circle)ids[i].GetObject(OpenMode.ForRead);datas[i].X = c.Center.X;datas[i].Y = c.Center.Y;datas[i].Z = c.Center.Z;datas[i].R = c.Radius;}}return datas;}/// <summary>/// 获取文件保存路径和文件名/// </summary>/// <param name="ed"></param>/// <param name="db"></param>/// <returns>文件全路径</returns>private string OpenSaveDialog(Editor ed,Database db){string directoryName = Path.GetDirectoryName(db.Filename);string fileName = Path.GetFileName(db.Filename);fileName = fileName.Substring(0, fileName.IndexOf('.'));PromptSaveFileOptions opt = new PromptSaveFileOptions("保存Excel文件");opt.DialogCaption = "保存Excel文件";opt.Filter = "Excel 97-2003 工作簿(*.xls)|*.xls|Excel 工作簿(*.xlsx)|*.xlsx";opt.FilterIndex = 1;opt.InitialDirectory = directoryName;opt.InitialFileName = fileName;PromptFileNameResult fileRes = ed.GetFileNameForSave(opt);if (fileRes.Status == PromptStatus.OK){fileName = fileRes.StringResult;}else{fileName = "";}return fileName;}/// <summary>/// 获取打开文件的全路径/// </summary>/// <param name="ed"></param>/// <param name="db"></param>/// <returns></returns>private string OpenFileDialog(Editor ed, Database db){string directoryName = Path.GetDirectoryName(db.Filename);string fileName = Path.GetFileName(db.Filename);fileName = fileName.Substring(0, fileName.IndexOf('.'));PromptOpenFileOptions opt = new PromptOpenFileOptions("读取Excel文件");opt.DialogCaption = "读取Excel文件";opt.Filter = "Excel 工作簿(*.xlsx)|*.xlsx|Excel 97-2003 工作簿(*.xls)|*.xls";opt.FilterIndex = 0;opt.InitialDirectory = directoryName;opt.InitialFileName = fileName;PromptFileNameResult fileRes = ed.GetFileNameForOpen(opt);if (fileRes.Status == PromptStatus.OK){fileName = fileRes.StringResult;}else{fileName = "";}return fileName;}
}
}
相关文章:
c# cad二次开发通过获取excel数据 在CAD绘图,将CAD属性导出到excel
c# cad二次开发通过获取excel数据 在CAD绘图,将CAD属性导出到excel using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Runtime; using System; using System.Collections.Generic; using System.Linq; us…...
LLM之高性能向量检索库
LLM向量数据库 高性能向量检索库milvus简介安装调用 faiss简介安装调用 高性能向量检索库 milvus 简介 Milvus 是一个开源的向量数据库引擎,旨在提供高效的向量存储、检索和分析能力。它被设计用于处理大规模的高维向量数据,常用于机器学习、计算机视觉…...
实体类注解
目录 一、TableField注解 二、TableId注解 三、Table注解 四、TableLogic注解 五、Getter与Setter注解 六、EqualsAndHashCode注解 七、Accessors注解 一、TableField注解 Data NoArgsConstructor //空参构造方法 AllArgsConstructor //全参构造方法 TableName("t…...
常见数据结构种类
常见数据结构种类 数据存储的常用结构有:栈、队列、数组、链表和红黑树 a.队列(queue) – 先进先出,后进后出。 – 场景:各种排队。叫号系统。 – 有很多集合可以实现队列。 b.栈(stack) – …...
linux高级---k8s中的五种控制器
文章目录 一、k8s的控制器类型二、pod与控制器之间的关系三、状态与无状态化对特点四、Deployment1、Deployment的资源清单文件2、在配置清单中调用deployment控制器3、镜像更新4、金丝雀发布5、删除Deployment 五、Statefulset六、DaemonSet1、daemonset的资源清单文件2、在配…...
记一次udp服务性能优化经历
目录 概述磁盘io网络io减少重复计算减少内存复制减少互斥锁 概述 手上有个go项目,接收udp信息(主要是syslog和snmp trap)并查询设备信息,将信息结构化(设备ip名称,匹配了什么规则之类的)后发送…...
uniapp和VueI18n多语言H5项目语言国际化功能搭建流程
uniapp多语言项目国家化功能搭建流程 说明:uniapp多语言项目功能搭建分为应用部分和框架部分。 应用部分,即开发者自己的代码里涉及的界面部分的语言翻译。框架部分,即uni-app内置组件和API涉及界面的部分的语言翻译。 功能的搭建是需要un…...
C# | 凸包算法之Jarvis,寻找一组点的边界/轮廓
C#实现凸包算法之Jarvis 文章目录 C#实现凸包算法之Jarvis前言示例代码实现思路测试结果结束语 前言 这篇关于凸包算法的文章,本文使用C#和Jarvis算法来实现凸包算法。 首先消除两个最基本的问题: 什么是凸包呢? 凸包是一个包围一组点的凸多…...
SpringBoot接收请求参数的方式
【方式一】原始方式 因为SpringBoot封装了Servlet,所以也允许使用HttpServletRequest类中的方法来获取 /*** 【方式一】原始方式*/RequestMapping("/demo01")public String demo01(HttpServletRequest request) {// 参数名要与页面提交的参数名一致Strin…...
MKS SERVO4257D 闭环步进电机_系列5 CAN指令说明
第1部分 产品介绍 MKS SERVO 28D/35D/42D/57D 系列闭环步进电机是创客基地为满足市场需求而自主研发的一款产品。具备脉冲接口和RS485/CAN串行接口,支持MODBUS-RTU通讯协议,内置高效FOC矢量算法,采用高精度编码器,通过位置反馈&am…...
安捷伦E4440A(Agilent) e4440a 3HZ-26.5G频谱分析仪
Agilent E4440A、Keysight E4440A、HP E4440A频谱分析仪,3 Hz - 26.5 GHz(PSA 系列) Agilent / Keysight PSA 系列 E4440A 高性能频谱分析仪提供强大的一键式测量、多功能功能集和前沿技术,可满足您的项目和需求。选项可供您选…...
华为OD机试真题 Java 实现【最长子字符串的长度】【2022Q4 100分】,附详细解题思路
一、题目描述 给你一个字符串s,字符串s首尾相连组成一个环形,请你在环形中找出‘o’字符出现了偶数次最长子字符串的长度。 二、输入描述 输入一串小写字母组成的字符串。 三、输出描述 输出一个整数。 四、解题思路 题目要求在给定的环形字符串中找出字符’o’出现了…...
【iOS】--对象的底层结构
源码 先转一下源码 //#import <Foundation/Foundation.h> #import <objc/runtime.h>interface LGPerson : NSObject property (nonatomic, strong) NSString *KCName; endimplementation LGPersonendint main(int argc, const char * argv[]) {autoreleasepool {…...
高并发内存池设计_内存池
高并发内存池设计 1. 常用的内存操作函数2. 高性能内存池设计_弊端解决之道弊端一弊端二弊端三弊端四3. 弊端解决之道内存管理维度分析内存管理组件选型4. 高并发内存管理最佳实践内存池技术内存池如何解决弊端?高并发时内存池如何实现?5. 高效内存池设计和实现实现思路 (分而…...
给编程初学者的一封信
提醒:以下内容仅做参考,具体请自行设计。 随着信息技术的快速发展,编程已经成为一个越来越重要的技能。那么,我们该如何入门编程呢?欢迎大家积极讨论 一、自学编程需要注意什么? 要有足够的时间、精力等…...
【无功优化】基于改进教与学算法的配电网无功优化【IEEE33节点】(Matlab代码时候)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
数据在内存中的存储(超详细讲解)
目录 浮点数家族 浮点数类型在内存中的存储 一.为什么说整型和浮点数在内存中存储方式不同(证明) 二.浮点数的存储规则 浮点数在计算机内部的表示方法 1.对于M的存储和取出规则 2.对于E的存储和取出时的规则 对前面代码结果进行解释: …...
log4cplus使用示例
1、l4jlog.h封装头文件 #pragma once#include <iostream> #include <log4cplus/logger.h> #include <log4cplus/loggingmacros.h> #include <log4cplus/fileappender.h> #include <log4cplus/layout.h> #include <log4cplus/configurator.h&…...
人工智能学习07--pytorch20--目标检测:COCO数据集介绍+pycocotools简单使用
如:天空 coco包含pascal voc 的所有类别,并且对每个类别的标注目标个数也比pascal voc的多。 一般使用coco数据集预训练好的权重来迁移学习。 如果仅仅针对目标检测object80类而言,有些图片并没有标注信息,或者有错误标注信息。…...
learnOpenGL-深度测试
深度测试:OpenGL将一个片段的深度值与深度缓冲的内容进行对比。执行一个深度测试,测试通过则深度缓冲将会更新为新的深度值。测试失败则片段被丢弃。 深度测试片段着色器及模版测试之后执行。 片段着色器中内置变量gl_FragCoord的z值即为深度值。 提前深…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
