当前位置: 首页 > news >正文

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绘图&#xff0c;将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 是一个开源的向量数据库引擎&#xff0c;旨在提供高效的向量存储、检索和分析能力。它被设计用于处理大规模的高维向量数据&#xff0c;常用于机器学习、计算机视觉…...

实体类注解

目录 一、TableField注解 二、TableId注解 三、Table注解 四、TableLogic注解 五、Getter与Setter注解 六、EqualsAndHashCode注解 七、Accessors注解 一、TableField注解 Data NoArgsConstructor //空参构造方法 AllArgsConstructor //全参构造方法 TableName("t…...

常见数据结构种类

常见数据结构种类 数据存储的常用结构有&#xff1a;栈、队列、数组、链表和红黑树 a.队列&#xff08;queue&#xff09; – 先进先出&#xff0c;后进后出。 – 场景&#xff1a;各种排队。叫号系统。 – 有很多集合可以实现队列。 b.栈&#xff08;stack&#xff09; – …...

linux高级---k8s中的五种控制器

文章目录 一、k8s的控制器类型二、pod与控制器之间的关系三、状态与无状态化对特点四、Deployment1、Deployment的资源清单文件2、在配置清单中调用deployment控制器3、镜像更新4、金丝雀发布5、删除Deployment 五、Statefulset六、DaemonSet1、daemonset的资源清单文件2、在配…...

记一次udp服务性能优化经历

目录 概述磁盘io网络io减少重复计算减少内存复制减少互斥锁 概述 手上有个go项目&#xff0c;接收udp信息&#xff08;主要是syslog和snmp trap&#xff09;并查询设备信息&#xff0c;将信息结构化&#xff08;设备ip名称&#xff0c;匹配了什么规则之类的&#xff09;后发送…...

uniapp和VueI18n多语言H5项目语言国际化功能搭建流程

uniapp多语言项目国家化功能搭建流程 说明&#xff1a;uniapp多语言项目功能搭建分为应用部分和框架部分。 应用部分&#xff0c;即开发者自己的代码里涉及的界面部分的语言翻译。框架部分&#xff0c;即uni-app内置组件和API涉及界面的部分的语言翻译。 功能的搭建是需要un…...

C# | 凸包算法之Jarvis,寻找一组点的边界/轮廓

C#实现凸包算法之Jarvis 文章目录 C#实现凸包算法之Jarvis前言示例代码实现思路测试结果结束语 前言 这篇关于凸包算法的文章&#xff0c;本文使用C#和Jarvis算法来实现凸包算法。 首先消除两个最基本的问题&#xff1a; 什么是凸包呢&#xff1f; 凸包是一个包围一组点的凸多…...

SpringBoot接收请求参数的方式

【方式一】原始方式 因为SpringBoot封装了Servlet&#xff0c;所以也允许使用HttpServletRequest类中的方法来获取 /*** 【方式一】原始方式*/RequestMapping("/demo01")public String demo01(HttpServletRequest request) {// 参数名要与页面提交的参数名一致Strin…...

MKS SERVO4257D 闭环步进电机_系列5 CAN指令说明

第1部分 产品介绍 MKS SERVO 28D/35D/42D/57D 系列闭环步进电机是创客基地为满足市场需求而自主研发的一款产品。具备脉冲接口和RS485/CAN串行接口&#xff0c;支持MODBUS-RTU通讯协议&#xff0c;内置高效FOC矢量算法&#xff0c;采用高精度编码器&#xff0c;通过位置反馈&am…...

安捷伦E4440A(Agilent) e4440a 3HZ-26.5G频谱分析仪

Agilent E4440A、Keysight E4440A、HP E4440A频谱分析仪&#xff0c;3 Hz - 26.5 GHz&#xff08;PSA 系列&#xff09; ​Agilent / Keysight PSA 系列 E4440A 高性能频谱分析仪提供强大的一键式测量、多功能功能集和前沿技术&#xff0c;可满足您的项目和需求。选项可供您选…...

华为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. 高效内存池设计和实现实现思路 (分而…...

给编程初学者的一封信

提醒&#xff1a;以下内容仅做参考&#xff0c;具体请自行设计。 随着信息技术的快速发展&#xff0c;编程已经成为一个越来越重要的技能。那么&#xff0c;我们该如何入门编程呢&#xff1f;欢迎大家积极讨论 一、自学编程需要注意什么&#xff1f; 要有足够的时间、精力等…...

【无功优化】基于改进教与学算法的配电网无功优化【IEEE33节点】(Matlab代码时候)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

数据在内存中的存储(超详细讲解)

目录 浮点数家族 浮点数类型在内存中的存储 一.为什么说整型和浮点数在内存中存储方式不同&#xff08;证明&#xff09; 二.浮点数的存储规则 浮点数在计算机内部的表示方法 1.对于M的存储和取出规则 2.对于E的存储和取出时的规则 对前面代码结果进行解释&#xff1a; …...

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简单使用

如&#xff1a;天空 coco包含pascal voc 的所有类别&#xff0c;并且对每个类别的标注目标个数也比pascal voc的多。 一般使用coco数据集预训练好的权重来迁移学习。 如果仅仅针对目标检测object80类而言&#xff0c;有些图片并没有标注信息&#xff0c;或者有错误标注信息。…...

learnOpenGL-深度测试

深度测试&#xff1a;OpenGL将一个片段的深度值与深度缓冲的内容进行对比。执行一个深度测试&#xff0c;测试通过则深度缓冲将会更新为新的深度值。测试失败则片段被丢弃。 深度测试片段着色器及模版测试之后执行。 片段着色器中内置变量gl_FragCoord的z值即为深度值。 提前深…...

Omni-Vision Sanctuary 开发环境搭建:基于 Ubuntu 与 Anaconda 的完整配置流程

Omni-Vision Sanctuary 开发环境搭建&#xff1a;基于 Ubuntu 与 Anaconda 的完整配置流程 1. 引言 如果你是一名计算机视觉研究者或开发者&#xff0c;想要在本地搭建Omni-Vision Sanctuary模型的开发环境&#xff0c;这篇文章将为你提供一份详细的Ubuntu系统配置指南。我们…...

STC89C52抢答器DIY避坑指南:从万能板焊接调试到常见故障排查(蜂鸣器不响、按键失灵)

STC89C52抢答器DIY避坑指南&#xff1a;从万能板焊接调试到常见故障排查 在电子制作领域&#xff0c;抢答器是一个经典的单片机实践项目。不同于市面上现成的模块化套件&#xff0c;使用万能板手工焊接STC89C52抢答器不仅能深入理解电路原理&#xff0c;更能锻炼实际动手能力。…...

背负式静电喷雾机的设计【solidworks三维、5张cad图纸论文、答辩稿】

背负式静电喷雾机作为现代农业装备中的关键设备&#xff0c;其设计需兼顾轻量化、高效性与操作便捷性。通过SolidWorks三维建模技术&#xff0c;可实现整机结构的虚拟装配与干涉检查&#xff0c;优化各部件的空间布局。例如&#xff0c;药箱与喷雾系统的集成设计需平衡容量与重…...

windows java jar 包后台运行

使用 javaw 实现后台运行&#xff08;简单场景&#xff09;这是最简单的方法。Java 自带的 javaw.exe 是 java.exe 的变体&#xff0c;它运行程序时不会打开任何控制台窗口。操作步骤&#xff1a;创建一个新的文本文件&#xff0c;命名为 start.bat。在文件中写入以下内容&…...

如何通过Nucleus Co-Op实现创新无缝的本地多人游戏体验

如何通过Nucleus Co-Op实现创新无缝的本地多人游戏体验 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 你是否曾经希望在同一台电脑上与朋友共同体…...

HsMod:炉石传说功能增强插件的全方位优化方案

HsMod&#xff1a;炉石传说功能增强插件的全方位优化方案 【免费下载链接】HsMod Hearthstone Modify Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod HsMod是一款基于BepInEx框架开发的炉石传说功能增强插件&#xff0c;通过55项实用功能为…...

Retinaface+CurricularFace模型在智能门禁系统中的实战应用

RetinafaceCurricularFace模型在智能门禁系统中的实战应用 1. 引言 想象一下这样的场景&#xff1a;每天早晨上班高峰期&#xff0c;办公楼入口排着长队等待刷卡进门&#xff1b;访客需要在前台登记身份证&#xff0c;保安还要手动核对信息。这种传统门禁方式不仅效率低下&am…...

别再用asyncio硬扛高并发了!无GIL环境下Python原生多线程性能翻倍的6个核心调优参数

第一章&#xff1a;Python无锁GIL环境下的并发模型演进全景Python长期以来受全局解释器锁&#xff08;GIL&#xff09;制约&#xff0c;导致多线程无法真正并行执行CPU密集型任务。近年来&#xff0c;随着CPython 3.12正式引入实验性“无GIL构建选项”&#xff08;--without-py…...

fre:ac开源音频转换工具:让无损音乐在全设备自由流动的专业级解决方案

fre:ac开源音频转换工具&#xff1a;让无损音乐在全设备自由流动的专业级解决方案 【免费下载链接】freac The fre:ac audio converter project 项目地址: https://gitcode.com/gh_mirrors/fr/freac 你是否遇到过这些音乐管理难题&#xff1a;珍藏多年的CD专辑不知如何数…...

Go Module 依赖冲突调试方法

Go Module 依赖冲突调试方法 在Go语言开发中&#xff0c;依赖管理是一个关键环节。随着项目规模的扩大&#xff0c;依赖的第三方库越来越多&#xff0c;版本冲突问题也愈发常见。Go Module作为官方推荐的依赖管理工具&#xff0c;虽然简化了依赖管理流程&#xff0c;但在多级依…...