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}");
}
}
}