miki969696

.net开源acadsharp库读取dwg读取特定名称的块

using System;
using System.IO;
using ACadSharp;
using ACadSharp.IO;
using ACadSharp.Entities;
using ACadSharp.Tables; // BlockRecord 在这个命名空间下

public class BlockFinder
{
    public static void Main()
    {
        string filePath = "C:\\Users\\admin\\Downloads\\0020.dwg"; // <--- 请将这里替换为您的DWG/DXF文件路径
        string blockName = "oo90";          // <--- 这是您要查找的块的名称

        if (!File.Exists(filePath))
        {
            Console.WriteLine($"错误: 文件未找到 '{filePath}'");
            return;
        }

        try
        {
            CadDocument doc = DwgReader.Read(filePath);

            // --- 修正点 1: 使用 BlockRecords 替代 Blocks ---
            // 块的定义存储在 CadDocument.BlockRecords 集合中
            if (doc.BlockRecords.TryGetValue(blockName, out BlockRecord blockRecord))
            {
                Console.WriteLine($"成功找到块: '{blockRecord.Name}'");
                Console.WriteLine("------------------------------------");
                Console.WriteLine("块中的实体信息:");

                // 检查块中是否有实体 (通过 Linq 的 Count() 方法)
                if (blockRecord.Entities.Count == 0)
                {
                    Console.WriteLine(" -> 该块中没有任何实体。");
                }
                else
                {
                    // --- 修正点 2: 直接遍历 BlockRecord 对象来获取其内部的实体 ---
                    foreach (Entity entity in blockRecord.Entities)
                    {
                        // 打印每个实体的基本信息,例如类型和图层
                        Console.WriteLine($" - 实体类型: {entity.GetType().Name}, " +
                                          $"图层: {entity.Layer.Name}, " +
                                          $"颜色: {entity.Color.ToString()}");

                        // 根据实体类型获取更详细信息的逻辑保持不变
                        if (entity is Line line)
                        {
                            Console.WriteLine($"   -> 线段起点: {line.StartPoint}, 终点: {line.EndPoint}");
                        }
                        else if (entity is Circle circle)
                        {
                            Console.WriteLine($"   -> 圆心: {circle.Center}, 半径: {circle.Radius}");
                        }
                        else if (entity is TextEntity text)
                        {
                            Console.WriteLine($"   -> 文本内容: '{text.Value}'");
                        }
                        // ... 在这里可以添加对其他实体类型的判断
                    }
                }
                Console.WriteLine("------------------------------------");
            }
            else
            {
                Console.WriteLine($"错误: 在文件中未找到名为 '{blockName}' 的块。");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"读取或处理文件时发生错误: {ex.Message}");
        }
    }
}

 

 
 

posted on 2025-10-30 16:28  盛书伟  阅读(4)  评论(0)    收藏  举报

导航