/// <returns>返回块参照的属性名和属性值</returns> public static SortedDictionary<string, string> GetAttributesInBlock(this Database db, string blockName) { SortedDictionary<string, string> attributes = new SortedDictionary<string, string>(); // 筛选指定名称的块参照 TypedValue[] values = { new TypedValue((int)DxfCode.Start, "INSERT"), new TypedValue((int)DxfCode.BlockName, blockName), }; var filter = new SelectionFilter(values); Editor ed = Application.DocumentManager.GetDocument(db).Editor; var entSelected = ed.SelectAll(filter); // 如果数据库不存在指定名称的块参照,则返回 if (entSelected.Status != PromptStatus.OK) return null; using (Transaction trans = db.TransactionManager.StartTransaction()) { // 遍历块参照 foreach (var id in entSelected.Value.GetObjectIds()) { BlockReference bref = (BlockReference)trans.GetObject(id, OpenMode.ForRead); // 遍历块参照中的属性 foreach (ObjectId attId in bref.AttributeCollection) { AttributeReference attRef = (AttributeReference)trans.GetObject(attId, OpenMode.ForRead); // 将块参照的属性名和属性值添加到字典中 attributes.Add(attRef.Tag, attRef.TextString); } } trans.Commit(); } return attributes; // 返回指定名称的块参照的属性名和属性值