本帖最后由 fangmin723 于 2024-11-30 18:15 编辑
AcDbAttributeDefinition.GeometricExtents;出错了,AutoCAD.Net怎么获取AcDbAttributeDefinition的包围框
AutoCAD二次开发:获取属性快中的属性名,属性值,属性值范围_cad在块中手动加的属性,在c++代码中怎么获取-CSDN博客
 - using System;
- using Autodesk.AutoCAD.ApplicationServices;
- using Autodesk.AutoCAD.DatabaseServices;
- using Autodesk.AutoCAD.EditorInput;
- using Autodesk.AutoCAD.Geometry;
- public class AttributeExtractor
- {
- public static void GetAttributeValuesAndExtents()
- {
- // 获取当前文档和数据库
- Document doc = Application.DocumentManager.MdiActiveDocument;
- Database db = doc.Database;
- Editor ed = doc.Editor;
- // 开始事务
- using (Transaction tr = db.TransactionManager.StartTransaction())
- {
- // 打开模型空间块表记录
- BlockTable blockTable = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
- BlockTableRecord btr= (BlockTableRecord)tr.GetObject(blockTable[BlockTableRecord .ModelSpaceId], OpenMode.ForRead);
- // 遍历模型空间中的所有对象
- foreach (ObjectId id in btr)
- {
- // 检查是否为块参照
- Entity ent = tr.GetObject(id , OpenMode.ForRead) as Entity;
- if (ent != null && ent is BlockReference)
- {
- BlockReference blockRef = ent as BlockReference;
- // 检查块是否有属性
- if (blockRef.AttributeCollection.Count > 0)
- {
- // 遍历块中的每个属性
- foreach (ObjectId attrId in blockRef.AttributeCollection)
- {
- DBObject obj = tr.GetObject(attrId, OpenMode.ForRead);
- if (obj is AttributeReference)
- {
- AttributeReference attribute = obj as AttributeReference;
- // 输出属性值
- ed.WriteMessage($"\nAttribute: {attribute.Tag} - Value: {attribute.TextString}");
- // 计算并输出属性文本的几何范围
- Extents3d ext = attribute.GeometricExtents;
- ed.WriteMessage($"\nGeometric Extents: Min({ext.MinPoint}), Max({ext.MaxPoint})");
- }
- }
- }
- }
- }
- // 提交事务
- tr.Commit();
- }
- }
- }
|