Пытаясь избежать получения дубликата атрибута, выполните следующий код.
[CommandMethod("NLTAG")] public void ListAttributes() { Document acDoc = Application.DocumentManager.MdiActiveDocument; Editor ed=Application.DocumentManager.MdiActiveDocument.Editor; Database db = HostApplicationServices.WorkingDatabase; Transaction tr = db.TransactionManager.StartTransaction(); try { TypedValue[] filList = new TypedValue[1] { new TypedValue((int)DxfCode.Start, "INSERT") }; SelectionFilter filter = new SelectionFilter(filList); // Do nothing if selection is unsuccessful if (res.Status != PromptStatus.OK) return; SelectionSet selSet = res.Value; ObjectId[] idArray = selSet.GetObjectIds(); foreach (ObjectId blkId in idArray) { BlockReference blkRef = (BlockReference)tr.GetObject(blkId, OpenMode.ForRead); BlockTableRecord btr = (BlockTableRecord)tr.GetObject(blkRef.BlockTableRecord, OpenMode.ForRead); ////ed.WriteMessage( //// "\nBlock: " + btr.Name ////); btr.Dispose(); AttributeCollection attCol = blkRef.AttributeCollection; AttributeCollection parts = blkRef.AttributeCollection; foreach (ObjectId attId in attCol) { AttributeReference attRef(AttributeReference)tr.GetObject(attId, OpenMode.ForWrite); string str = ("\n " + attRef.TextString);//here i get duplicate value ed.WriteMessage(str); } } tr.Commit(); } catch (Autodesk.AutoCAD.Runtime.Exception ex) { ed.WriteMessage(("Exception: " + ex.Message)); } finally { tr.Dispose(); }
Что я уже пробовал:
Это мой код c#, который получает все атрибуты из выбранного блока и печатает его, и я хочу избежать дубликатов атрибутов, поэтому я получаю каждый атрибут только один.