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值即为深度值。 提前深…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...

基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...