导出cad实体所有信息到txt并打开(生成唯一文件名) ——c#cad二次开发

效果如下:

建议在保存时指定编码为UTF-8:

using (StreamWriter sw = new StreamWriter(filePath, false, Encoding.UTF8))

     {

         // 写入内容

     }

最终

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Text;
using Path = System.IO.Path;
namespace EnhancedEntityPropertyExporter
{
    public class ExportCommands
    {
        [CommandMethod("xx")]
        public void 属性查询()
        {
            List<Entity> ents = SelectEntities<Entity>();
            if (ents is null || ents.Count == 0)
            {
                Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage("未选择!\n");
                return;
            }

            try
            {
                // 获取桌面路径
                string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);

                // 生成基础文件名(格式:图元属性20231010)
                string baseFileName = $"图元属性{DateTime.Now:yyyyMMddhhmmss}";
                string fullPath = "";
                int copyNumber = 0;

                // 生成唯一文件名
                do
                {
                    string suffix = copyNumber > 0 ? $"复件{copyNumber}" : "";
                    string fileName = $"{baseFileName}{suffix}.txt";
                    fullPath = Path.Combine(desktopPath, fileName);
                    copyNumber++;
                } while (File.Exists(fullPath)); // 循环直到找到不存在的文件名

                // 构建属性字符串
                using (StreamWriter sw = new StreamWriter(fullPath, false, System.Text.Encoding.UTF8))
                {

                   

                    foreach (var obj in ents)
                    {

                        sw.WriteLine($"AutoCAD 实体属性导出 - {DateTime.Now}");

                        sw.WriteLine("====================================");

                        sw.WriteLine($"实体类型: {obj.GetType().Name}");

                        sw.WriteLine($"句柄(Handle): {obj.Handle}");

                        sw.WriteLine($"图层(Layer): {obj.Layer}");

                        sw.WriteLine("====================================");

                        sw.WriteLine();

                        string str = "";
                        str += "对象全部属性:  >\n";
                        str += $"类型:    {obj.GetType()}\n";

                        PropertyInfo[] pis = obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
                        foreach (var pi in pis)
                        {
                            try
                            {
                                var value = pi.GetValue(obj, null);
                                str += $"{pi.Name} :    {(value != null ? value.ToString() : "Null")}\n";
                            }
                            catch
                            {
                                str += $"{pi.Name} :    获取失败\n";
                            }
                        }
                        str += "\n";
                        sw.Write(str); // 写入文件
                    }
                }

                // 用记事本打开文件
                Process.Start("notepad.exe", fullPath);

            }
            catch (Exception ex)
            {
                MessageBox.Show($"导出失败:{ex.Message}");
            }
        }

        public List<T> SelectEntities<T>() where T : Entity
        {
            List<T> result = new List<T>();
            Editor editor = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
            var pso = new PromptSelectionOptions();
            pso.MessageForAdding = "\n请选择:";
            PromptSelectionResult psr = editor.GetSelection(pso);
            if (psr.Status == PromptStatus.OK)
            {
                ObjectId[] objectids = psr.Value.GetObjectIds();
                Database database = HostApplicationServices.WorkingDatabase;
                using (Transaction tran = database.TransactionManager.StartTransaction())
                {
                    foreach (var item in objectids)
                    {
                        Entity entity = item.GetObject(OpenMode.ForRead) as Entity;
                        if (entity is T)
                        {
                            result.Add(entity as T);
                        }

                    }
                }
            }
            return result;
        }
    }
}

【事件触发一致性】研究多智能体网络如何通过分布式事件驱动控制实现有限时间内的共识(Matlab代码实现)内容概要:本文围绕多智能体网络中的事件触发一致性问题,研究如何通过分布式事件驱动控制实现有限时间内的共识,提供了相应的Matlab代码实现方案。文中探讨了事件触发机制在降低通信负担、提升系统效率方面的优势,重点分析了多智能体系统在有限时间收敛的一致性控制策略,涉及系统模型构建、触发条件设计、稳定性与收敛性分析等核心技术环节。此外,文档还展示了该技术在航空航天、电力系统、机器人协同、无人机编队等多个前沿领域的潜在应用,体现了其跨学科的研究价值和工程实用性。; 适合人群:具备一定控制理论基础和Matlab编程能力的研究生、科研人员及从事自动化、智能系统、多智能体协同控制等相关领域的工程技术人员。; 使用场景及目标:①用于理解和实现多智能体系统在有限时间内达成一致的分布式控制方法;②为事件触发控制、分布式优化、协同控制等课题提供算法设计与仿真验证的技术参考;③支撑科研项目开发、学术论文复现及工程原型系统搭建; 阅读建议:建议结合文中提供的Matlab代码进行实践操作,重点关注事件触发条件的设计逻辑与系统收敛性证明之间的关系,同时可延伸至其他应用场景进行二次开发与性能优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山水CAD插件定制

你的鼓励是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值