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

news2024/11/27 2:44:21
//选择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
导入视图如下


 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++类与对象】继承

继承 一、继承基本语法二、继承方式1、公共继承public2、保护继承protected3、私有继承private 三、对象模型四、继承中的构造与析构顺序五、同名成员处理方式同名静态成员处理方法 六、多继承语法&#xff08;不建议使用&#xff09;七、菱形继承&#xff08;钻石继承&#xf…

Pandas 教程

文章目录 Pandas1. Pandas介绍2. Series2.1 Series 的创建2.1.1 列表创建2.1.2 NumPy 数组创建2.1.3 字典创建2.1.4 Series 参数 2.2 Series 的索引2.2.1 显式索引2.2.2 隐式索引2.2.3 修改索引2.2.4 通过索引获取值2.2.5 通过索引修改值 2.3 Series 的切片2.3.1 显式切片2.3.2…

《WebKit 技术内幕》之五(4): HTML解释器和DOM 模型

4 影子&#xff08;Shadow&#xff09;DOM 影子 DOM 是一个新东西&#xff0c;主要解决了一个文档中可能需要大量交互的多个 DOM 树建立和维护各自的功能边界的问题。 4.1 什么是影子 DOM 当开发这样一个用户界面的控件——这个控件可能由一些 HTML 的标签元素…

在WIN从零开始在QMUE上添加一块自己的开发板(一)

文章目录 一、前言二、源码编译&#xff08;一&#xff09;安装Msys2&#xff08;二&#xff09;配置GCC工具链&#xff08;三&#xff09;安装QEMU构建依赖&#xff08;四&#xff09;下载编译QEMU源码 二、QUME编程基础&#xff08;一&#xff09;QOM机制&#xff08;二&…

基于SpringBoot Vue档案管理系统

大家好✌&#xff01;我是Dwzun。很高兴你能来阅读我&#xff0c;我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结&#xff0c;还为大家分享优质的实战项目&#xff0c;本人在Java项目开发领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#x…

ClickHouse与Doris数据库比较

概述 都说“实践是检验真理的唯一标准”&#xff0c;光说不练假把式&#xff0c;那么本文就通过实际的测试来感受一下Doris和clickhouse在读写方面的性能差距&#xff0c;看看Doris盛名之下&#xff0c;是否真有屠龙之技&#xff1b;clickhouse长锋出鞘&#xff0c;是否敢缚苍…

Vagrant创建Oracle RAC环境示例

利用Vagrant安装Oracle RAC&#xff08;默认为non-CDB模式&#xff09;&#xff0c;生成2台虚机&#xff0c;耗时约1小时。 node1: -----------------------------------------------------------------node1: INFO: 2024-01-11 18:25:54: Make create database commandnode1: …

多人在线聊天交友工具,匿名聊天室网站源码,附带搭建教程

源码介绍 匿名聊天室&#xff08;nodejs vue&#xff09; 多人在线聊天交友工具&#xff0c;无需注册即可畅所欲言&#xff01;你也可以放心讲述自己的故事&#xff0c;说出自己的秘密&#xff0c;因为谁也不知道对方是谁。 运行说明 安装依赖项&#xff1a;npm install 启动…

react学习笔记(复习)

React简介 react是什么&#xff1f; React用于构建用户界面的JS库。是一个将数据渲染为HTML视图的开源JS库。 为什么学&#xff1f; 1.原生JS操作DOM繁琐&#xff0c;效率低 2.使用JS直接操作DOM,浏览器会进行大量的重绘重排 3.原生JS没有组件化编码方案&#xff0c;代码…

Linux-ionde(软硬件链接)剖析

概述 文件是存储在硬盘上的&#xff0c;硬盘的最小存储单位叫做扇区sector&#xff0c;每个扇区存储512字节。操作系统读取硬盘的时候&#xff0c;不会一个个扇区地读取&#xff0c;这样效率太低&#xff0c;而是一次性连续读取多个扇区&#xff0c;即一次性读取一个块block。这…

OpenAI的DALL·e2生成的AI图像有时会带有偏见或NSFW

专家警告说&#xff0c;OpenAI的图像生成模型DALLe2可能玩起来很有趣&#xff0c;但它生成的图片可能会带有刻板印象和偏见&#xff0c;甚至是生成NSFW图片&#xff0c;因此在现实世界中部署会有风险。 OpenAI公司承认“如果没有足够的防护措施&#xff0c;像DALLe2这样的模型…

k8s节点RouteCreated为false

出现该情况后&#xff0c;一般是初始化节点失败。因此&#xff0c;需要把节点从集群中移除&#xff0c;再加入到集群中&#xff0c;即可解决。 通常出现这个状况后&#xff0c;该节点上是没有被分配pod ip的&#xff0c;可以通过命令查看&#xff1a; # 发现没有PodCIDR、PodC…

DHCP原理

目录 DHCP应用场景DHCP基本原理DHCP报文类型地址池DHCP工作原理DHCP租期更新DHCP重绑定IP地址释放 DHCP应用场景 在大型企业网络中&#xff0c;会有大量的主机或设备需要获取IP地址等网络参数。如果采用手工配置&#xff0c;工作量大且不好管理&#xff0c;如果有用户擅自修改网…

vue3前端开发,子组件向父组件传递数据练习

vue3前端开发,子组件向父组件传递数据练习&#xff01; <script setup> import Child from ./Child.vue const getMsg (msg)>{console.log(msg); } </script> <template><h3>Parent</h3><!--绑定事件--><Child get-Msg"getM…

回调地狱与解决方案

什么是回调地狱&#xff1f; 简单理解就是回调函数嵌套回调 示例&#xff1a; setTimeout(() > {console.log(1);setTimeout(() > {console.log(2);setTimeout(() > {console.log(3);}, 1000);}, 2000)}, 3000)如上代码所示&#xff0c;回调函数嵌套回调&#xff0c;就…

QoS简介

QoS产生的背景 网络的普及和业务的多样化使得互联网流量激增&#xff0c;从而产生网络拥塞&#xff0c;增加转发时延&#xff0c;严重时还会产生丢包&#xff0c;导致业务质量下降甚至不可用。所以&#xff0c;要在网络上开展这些实时性业务&#xff0c;就必须解决网络拥塞问题…

电商系统设计到开发02 单机性能压测

一、前言 接着上篇文章&#xff1a;电商系统设计到开发&#xff08;第一版&#xff09;-CSDN博客 已经开发的代码&#xff0c;今天我们对上面开发的代码进行压力测试&#xff0c;看看单机部署的情况下&#xff0c;性能表现如何。代码地址&#xff1a;风萧萧兮/concurrency-en…

Linux中关于head命令详解

head的作用 head用于查看文件的开头部分的内容。 head的参数 -q隐藏文件名-v 显示文件名-c<数目>显示的字节数-n<数目>显示的行数 head的案例 # 查看yum.log前五行内容 head -5 yum.log

对于随机生成图片接口浏览器走缓存的问题

前提场景 目前有一个api 他可以随机生成一张图片&#xff0c;我通过v-for循环一个Array渲染出来几个img 并且都调用了该接口&#xff0c;但是每个img都是一样的图片 具体代码如下 <div class"icon-group-box" v-for"item in groupList" :key"item…

Oracle篇—参数文件在11gRAC或12cRAC的启动位置介绍

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux&#xff0c;也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&#xff0c;并且也会默默的点赞收藏加关注❣…