明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1880|回复: 7

[其它] 【已解决】获取属性快中的属性参照包围盒,块中属性定义无法获取包围盒

[复制链接]
发表于 2024-11-29 16:11:47 | 显示全部楼层 |阅读模式
本帖最后由 fangmin723 于 2024-11-30 18:15 编辑

AcDbAttributeDefinition.GeometricExtents;出错了,AutoCAD.Net怎么获取AcDbAttributeDefinition的包围框

AutoCAD二次开发:获取属性快中的属性名,属性值,属性值范围_cad在块中手动加的属性,在c++代码中怎么获取-CSDN博客
  1. using System;
  2. using Autodesk.AutoCAD.ApplicationServices;
  3. using Autodesk.AutoCAD.DatabaseServices;
  4. using Autodesk.AutoCAD.EditorInput;
  5. using Autodesk.AutoCAD.Geometry;

  6. public class AttributeExtractor
  7. {
  8.     public static void GetAttributeValuesAndExtents()
  9.     {
  10.         // 获取当前文档和数据库
  11.         Document doc = Application.DocumentManager.MdiActiveDocument;
  12.         Database db = doc.Database;
  13.         Editor ed = doc.Editor;

  14.         // 开始事务
  15.         using (Transaction tr = db.TransactionManager.StartTransaction())
  16.         {
  17.             // 打开模型空间块表记录
  18.             BlockTable blockTable = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
  19.             BlockTableRecord btr= (BlockTableRecord)tr.GetObject(blockTable[BlockTableRecord .ModelSpaceId], OpenMode.ForRead);

  20.             // 遍历模型空间中的所有对象
  21.             foreach (ObjectId id in btr)
  22.             {
  23.                 // 检查是否为块参照
  24.                 Entity ent = tr.GetObject(id , OpenMode.ForRead) as Entity;
  25.                 if (ent != null && ent is BlockReference)
  26.                 {
  27.                     BlockReference blockRef = ent as BlockReference;
  28.                     // 检查块是否有属性
  29.                     if (blockRef.AttributeCollection.Count > 0)
  30.                     {
  31.                         // 遍历块中的每个属性
  32.                         foreach (ObjectId attrId in blockRef.AttributeCollection)
  33.                         {
  34.                             DBObject obj = tr.GetObject(attrId, OpenMode.ForRead);
  35.                             if (obj is AttributeReference)
  36.                             {
  37.                               AttributeReference attribute = obj as AttributeReference;
  38.                                 // 输出属性值
  39.                                 ed.WriteMessage($"\nAttribute: {attribute.Tag} - Value: {attribute.TextString}");

  40.                                 // 计算并输出属性文本的几何范围
  41.                                 Extents3d ext = attribute.GeometricExtents;
  42.                                 ed.WriteMessage($"\nGeometric Extents: Min({ext.MinPoint}), Max({ext.MaxPoint})");
  43.                             }
  44.                         }
  45.                     }
  46.                 }
  47.             }

  48.             // 提交事务
  49.             tr.Commit();
  50.         }
  51.     }
  52. }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

 楼主| 发表于 2024-11-29 16:23:05 | 显示全部楼层
明经AutoCAD.NetApi QQ群  sailor(75063165)大佬:

这个我试过,后台新建一个DWG文档,将属性文字复制过去,才能测算出正确的包围盒,否则修改后包围盒一直不正确。
回复 支持 反对

使用道具 举报

发表于 2024-11-29 16:26:40 | 显示全部楼层
忽略掉,遇到块就分解就避开他,我也是经常到找不到它的包围盒
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-29 16:59:23 | 显示全部楼层
liuhe 发表于 2024-11-29 16:26
忽略掉,遇到块就分解就避开他,我也是经常到找不到它的包围盒

按照字面意思理解的话,就是说当块属性在块内部的话,就获取不了,那在外部呢,复制一份在内存里的呢
回复 支持 反对

使用道具 举报

发表于 2024-11-29 17:11:13 | 显示全部楼层
fangmin723 发表于 2024-11-29 16:59
按照字面意思理解的话,就是说当块属性在块内部的话,就获取不了,那在外部呢,复制一份在内存里的呢

在内部也可以通过创建单行文字描述它
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-29 17:14:19 | 显示全部楼层
本帖最后由 fangmin723 于 2024-11-29 17:16 编辑
你有种再说一遍 发表于 2024-11-29 17:11
在内部也可以通过创建单行文字描述它

嗯嗯,明天我都测试下外部和复制,看看可行性,可行的话,优先考虑单行文字
回复 支持 反对

使用道具 举报

发表于 2024-11-30 09:06:20 | 显示全部楼层
还要考虑到多行 Attrib 的情况吧?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-30 18:12:56 | 显示全部楼层
e2002 发表于 2024-11-30 09:06
还要考虑到多行 Attrib 的情况吧?

不知道,等用到了多行时,再研究吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-1 03:10 , Processed in 0.287754 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表