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值即为深度值。 提前深…...
modelzoo:昇腾 NPU 的“模型仓库”
modelzoo:昇腾 NPU 的“模型仓库” 之前帮朋友看模型训练的代码,发现他自己手写了很多模型(ResNet50/BERT/LLaMA2 等)——光写模型定义就写了 5,000 行,而且还不一定对。 我告诉他:不用手写,用 …...
Python运算符:逻辑运算符(and/or/not)的短路特性
Python运算符:逻辑运算符(and/or/not)的短路特性📚 本章学习目标:深入理解逻辑运算符(and/or/not)的短路特性的核心概念与实践方法,掌握关键技术要点,了解实际应用场景与…...
今天农巡车项目的摄像头云台问题及解决
今天在农巡车双舵机云台项目开发过程中,主要遇到了舵机不转、舵机只动一下就停止、运动过程中抖动严重、实际转动角度不足、扫描逻辑加入后上下舵机失效、左右舵机最后一次不转、程序下载后长时间无响应等问题。首先,在PWM输出阶段发现PB6和PB7的TIM4通道…...
SQL 语句:从产生、发展到内容全景
引言:数据世界的通用语言 SQL(Structured Query Language,结构化查询语言)是当今数据领域最核心、最通用的语言。无论是数据分析师、后端工程师还是数据科学家,都离不开 SQL。它就像数据世界的“普通话”,连…...
【Sora 2批量视频生成黄金工作流】:实测吞吐提升4.8倍的关键配置——NVIDIA A100集群下每小时稳定输出217段1080p视频
更多请点击: https://codechina.net 第一章:Sora 2批量视频生成工作流全景概览 Sora 2作为新一代多模态视频生成模型,其批量处理能力依托于模块化、可编排的端到端工作流设计。该工作流融合提示工程、时空 latent 编码、分块并行解码与后处理…...
快速开发AI客服原型时如何利用Taotoken分钟级接入多模型
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 快速开发AI客服原型时如何利用Taotoken分钟级接入多模型 在探索和构建AI客服原型时,开发者常常面临一个核心矛盾&#…...
Translumo:实时屏幕翻译工具的完整实战指南
Translumo:实时屏幕翻译工具的完整实战指南 【免费下载链接】Translumo Advanced real-time screen translator for games, hardcoded subtitles in videos, static text and etc. 项目地址: https://gitcode.com/gh_mirrors/tr/Translumo 你是否在玩外语游戏…...
智谱ZCube组网架构革新:不动硬件提升15%集群推理吞吐,行业转向“挖效率”
【导语:过去行业在算力军备竞赛中多靠买GPU、建集群堆算力,如今这一路径被重新审视。智谱公开ZCube组网架构,在不增加硬件的情况下提升了集群推理吞吐,同时OpenAI等发布MRC网络协议,行业正从“堆硬件”向“挖效率”转向…...
视频孪生融合落地,无感定位完胜 UWB 静态定位模式
视频孪生融合落地,无感定位完胜 UWB 静态定位模式数字孪生产业加速向实景化、动态化、实景融合方向纵深发展,视频孪生凭借实景画面与虚拟模型共生联动的特性,成为实体场景数字化治理的核心载体。空间定位作为视频孪生的数据根基,直…...
AI智能切片不是‘一键分割’就完事:批量口播视频的工程化切片陷阱与工具选型
Hook你是否试过把一小时口播音频丢进某款‘AI切片工具’,结果导出37条视频——其中12条开头卡在‘呃…’上,8条结尾截断在半句话里,还有5条字幕和画面完全不同步?更糟的是,换一批素材,模型表现又不稳定。这…...
