C# Cad2016二次开发选择csv导入信息(七)

//选择csv导入信息
[CommandMethod("setdata")]
//本程序在AutoCAD的快捷命令是"DLLLOAD"
public void setdata()
{

    Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();

    dlg.DefaultExt = ".csv";
    // Display OpenFileDialog by calling ShowDialog method 
    Nullable<bool> result = dlg.ShowDialog();
    //判断确认按钮
    if (result == true)
    {
        //选择的文件路径
        string file_dir = dlg.FileName;

    }
}

 使用Microsoft.Win32.OpenFileDialog注意需要引用 PresentationFramework.dll控件

 [CommandMethod("setdata")]
 public void SetData()
 {
     // 选择CSV文件
     Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
     dlg.DefaultExt = ".csv";
     Nullable<bool> result = dlg.ShowDialog();
     if (result != true)
         return;

     // 获取当前文档和数据库
     Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
     Database db = doc.Database;
     Editor ed = doc.Editor;

     // 打开CSV文件并逐行处理
     string filePath = dlg.FileName;
     string[] csvLines = File.ReadAllLines(filePath);
     CheckAndCreateLayer("qlr权利人");
     using (Transaction trans = db.TransactionManager.StartTransaction())
     {
         BlockTable blockTable = trans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
         BlockTableRecord modelSpace = trans.GetObject(blockTable[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;

         foreach (string csvLine in csvLines)
         {
             string[] csvData = csvLine.Split(',');
             if (csvData.Length < 6)
             {
                 ed.WriteMessage("CSV数据格式不正确!");
                 continue;
             }

             string layerName = csvData[0];
             
             string name = csvData[1];//
             double x, y, height;
             int color;

             if (!double.TryParse(csvData[2], out x) || !double.TryParse(csvData[3], out y) ||
                 !double.TryParse(csvData[4], out height) || !int.TryParse(csvData[5], out color))
             {
                 ed.WriteMessage("CSV数据类型转换出错!");
                 continue;
             }

             // 检查图层是否已存在,不存在创建图层
             CheckAndCreateLayer(layerName);

             // 创建实体对象
             Point3d position = new Point3d(x, y, 0);
             DBText text = new DBText();
             text.Position = position;
             text.TextString = name;
             text.Height = height;
             text.Color = Color.FromColorIndex(ColorMethod.ByAci, (byte)color);
             //text.LayerId = ObjectId(layerName);
             LayerTableRecord ltr = new LayerTableRecord();
             text.LayerId = GetLayerId(layerName);
             // 添加实体到模型空间
             modelSpace.AppendEntity(text);
             trans.AddNewlyCreatedDBObject(text, true);
            
             //拼接CSV字符串
             string value = layerName + "," + name + "," + x + "," + y + "," + height + "," + color;
             ed.WriteMessage("\n" + value);
         }

         trans.Commit();
     }
 }
 public ObjectId GetLayerId(string layerName)
 {
     Document doc = Application.DocumentManager.MdiActiveDocument;
     Database db = doc.Database;
     using (Transaction tr = db.TransactionManager.StartTransaction())
     {
         LayerTable layerTable = (LayerTable)tr.GetObject(db.LayerTableId, OpenMode.ForRead);
         if (layerTable.Has(layerName))
         {
             LayerTableRecord layerRecord = (LayerTableRecord)tr.GetObject(layerTable[layerName], OpenMode.ForRead);
             return layerRecord.ObjectId;
         }
     }
     return ObjectId.Null;
 }

 public void CheckAndCreateLayer(string layerName)
 {
     Document doc = Application.DocumentManager.MdiActiveDocument;
     Database db = doc.Database;
     Editor ed = doc.Editor;

     using (Transaction tr = db.TransactionManager.StartTransaction())
     {
         LayerTable layerTable = tr.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable;

         if (!layerTable.Has(layerName))
         {
             LayerTableRecord layer = new LayerTableRecord();
             layer.Name = layerName;

             layerTable.UpgradeOpen();
             ObjectId layerId = layerTable.Add(layer);
             tr.AddNewlyCreatedDBObject(layer, true);

             // 设置新图层的属性
             layer.Color = Autodesk.AutoCAD.Colors.Color.FromColor(System.Drawing.Color.Red);
             layer.LineWeight = LineWeight.LineWeight030;

             tr.Commit();
             ed.WriteMessage("图层已创建: {0}\n", layerName);

         }
         else
         {
             tr.Commit();
             ed.WriteMessage("图层已存在: {0}\n", layerName);
         }
     }
 }

 注意事项 导入csv编码 utf8
导入视图如下


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/335132.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

1.php开发-个人博客项目文章功能显示数据库操作数据接收

&#xff08;2022-day12&#xff09; #知识点 1-php入门&#xff0c;语法&#xff0c;提交 2-mysql 3-HTMLcss ​ 演示案例 博客-文章阅读功能初步实现 实现功能&#xff1a; 前端文章导航&#xff0c;点入内容显示&#xff0c;更改ID显示不同内容 实现步骤&#xff1…

idea 连接docker

idea 连接docker步骤 services --> docker connection --->tcp://192.168.21.128:2375 修改docker配置 vi /usr/lib/systemd/system/docker.service 在ExecStart/usr/bin/dockerd -H fd:// --containerd/run/containerd/containerd.sock 后面加上 -H tcp://0.0.0.0:23…

matlab多元线性回归

1.matlab多元回归示例如下&#xff1a; 解决问题&#xff1a;油价预测 方法&#xff1a;多元线性回归 实现&#xff1a;matlab regress()函数 技巧&#xff1a;通过增加X1^2&#xff0c;X2^2&#xff0c;或者X1*X2等构造的特征项&#xff0c;可以提高回归模型的拟合准确度&…

CMake 实战构建TcpServer项目 静态库/动态库

爱编程的大丙CMake&#xff1a; 20. 举例 - 下_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV14s4y1g7Zj?p20&spm_id_frompageDriver&vd_sourcea934d7fc6f47698a29dac90a922ba5a3 hehedalinux:~/Linux/LinuxServerCpp$ ls Buffer.cpp Log.h Buffe…

RK3566 linux加入uvc app

SDK中external/uvc_app/目录提供了将板卡模拟成uvc camera的功能。 一、buildroot使能uvc_app 1、进入到buildroot目录 在sdk目录下执行以下命令&#xff1a; cd buildroot 2、选择defconfig 执行命令&#xff1a; source build/envsetup.sh 输入数字然后回车选择板卡&…

qt学习:实战 读取txt文件+定时器点名

目录 目标 步骤 头文件 配置ui界面 在.h里定义槽函数和字符串链表和定时器指针 在构造函数里读取txt文件并初始化定时器 开始按钮点击函数 开始定时器 停止按钮点击函数 关闭定时器 定时器槽函数 目标 两个按钮&#xff0c;一个开始点名&#xff0c;一个停止点名一个…

我在代码随想录|写代码Day10之双指针19. 删除链表的倒数第 N 个结点,面试题 02.07. 链表相交,142. 环形链表 II

博主介绍: 27dCnc 专题 : 数据结构帮助小白快速入门 &#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d; ☆*: .&#xff61;. o(≧▽≦)o .&#xff61;.:*☆ …

UVa1318/LA2797 Monster Trap

题目链接 本题是2003年ICPC亚洲区域赛会津(日本)赛区的H题 题意 给出一些线段障碍&#xff0c;你的任务是判断怪物能否逃到无穷远处。如下图所示&#xff0c;左图无法逃出&#xff0c;右图的可以逃出。 输入包含多组数据。每组数据第一行为整数n&#xff08;1≤n≤100&#xf…

[C#]C# winform部署yolov8目标检测的openvino模型

【官方框架地址】 https://github.com/ultralytics/ultralytics 【openvino介绍】 OpenVINO&#xff08;Open Visual Inference & Neural Network Optimization&#xff09;是由Intel推出的&#xff0c;用于加速深度学习模型推理的工具套件。它旨在提高计算机视觉和深度学…

【漏洞复现】Hikvision SPON IP网络对讲广播系统命令执行漏洞(CVE-2023-6895)

文章目录 前言声明一、系统简介二、漏洞描述三、影响版本四、漏洞复现五、修复建议 前言 Hikvision Intercom Broadcasting System是中国海康威视&#xff08;Hikvision&#xff09;公司的一个对讲广播系统。 声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播…

C++PythonC# 三语言OpenCV从零开发(2):教程选择

文章目录 相关专栏前言视频教学和官方文档视频教程OpenCV 官方教程最终选择我的最终选择 相关专栏 C&Python&Csharp in OpenCV 前言 OpenCV 有官方的教程和简单的视频教程&#xff1a; OpenCV 官方教程 B站也有相关的视频教学 OpenCV4 C 快速入门视频30讲 - 系列合集 …

AI短视频制作:创意与技术的完美结合

文章目录 一、充分了解AI技术的应用范围和优势二、创意策划&#xff0c;确定作品主题和风格三、素材收集&#xff0c;丰富作品内容四、特效制作&#xff0c;提升作品视觉效果五、配音处理&#xff0c;增强作品表现力六、作品发布&#xff0c;扩大作品传播范围《AI短视频制作一本…

关于大模型学习中遇到的3

来源&#xff1a;网络 Embedding模型 随着大型语言模型的发展&#xff0c;以ChatGPT为首&#xff0c;涌现了诸如ChatPDF、BingGPT、NotionAI等多种多样的应用。公众大量地将目光聚焦于生成模型的进展之快&#xff0c;却少有关注支撑许多大型语言模型应用落地的必不可少的Embed…

React16源码: React中的renderRoot的源码实现

renderRoot 1 &#xff09;概述 renderRoot 是一个非常复杂的方法这个方法里处理很多各种各样的逻辑, 它主要的工作内容是什么&#xff1f;A. 它调用 workLoop 进行循环单元更新 遍历整个 Fiber Tree&#xff0c;把每一个组件或者 dom 节点对应的Fiber 节点拿出来单一的进行更…

RabbitMQ入门篇【图文并茂,超级详细】

&#x1f973;&#x1f973;Welcome 的Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Docker的相关操作吧 目录 &#x1f973;&#x1f973;Welcome 的Huihuis Code World ! !&#x1f973;&#x1f973; 前言 1.什么是MQ 2.理解MQ 3.生活…

去掉element-ui的el-table的所有边框+表头+背景颜色

实例: 1.去掉table表头(加上:show-header"false") <el-table:data"tableData":show-header"false"style"width: 100%"> </el-table> 2.去掉table所有边框 ::v-deep .el-table--border th.el-table__cell, ::v-deep .el…

Git教程学习:05 撤销操作

文章目录 1 撤销操作2 取消暂存的文件3 撤销对文件的修改 1 撤销操作 这里&#xff0c;我们将会学习几个撤销基本工具。 注意&#xff0c;有些撤销操作是不可逆的。 这是在使用 Git 的过程中&#xff0c;会因为操作失误而导致之前的工作丢失的少有的几个地方之一。 有时候我们…

win系统环境搭建(十五)——如何将Windows系统备份

windows环境搭建专栏&#x1f517;点击跳转 win系统环境搭建&#xff08;十五&#xff09;——如何将Windows系统备份 文章目录 win系统环境搭建&#xff08;十五&#xff09;——如何将Windows系统备份1.为什么要做备份&#xff1f;1.1 关于启动快速启动1.2 关于BitLocker1.3…

【0到1的设计之路】从C语言到二进制程序

C程序如何从源代码生成指令序列(二进制可执行文件) 预处理 -> 编译 -> 汇编 -> 链接 -> 执行 预处理 预处理 文本粘贴 #include <stdio.h> #define MSG "Hello \ World!\n" int main() {printf(MSG /* "hi!\n" */); #ifdef __riscvpr…

2.C语言——控制语句

控制语句 1.分支语句/判断语句if 语句if...else 语句if...else if...else语句 switch语句 2.循环语句 while 语句 do...while 语句 for 语句 3.转向语句 break continue go to 1.分支语句/判断语句 if 语句 if(boolean_expression) { /* 如果布尔表达式为真将执行的语句 */ } …