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值即为深度值。 提前深…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
