Code:
using Autodesk.AutoCAD;using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using System;
namespace LispApp
{
public class GetAttributes
{
[CommandMethod("GETATTRIB#")]
/*Aufruf von Lisp in der Form (getattrib (car (entsel)) "ATRRIBUTSNAME")
*Rückgabe: Wenn Attribut vorhanden --> string mit Wert des Attributes
* Wenn Attribut nicht vorhanden --> nil
*/
public ResultBuffer ListAttributes(ResultBuffer InputBuff)
{
//Variablen Definieren:
Database db = HostApplicationServices.WorkingDatabase;
Transaction tr = db.TransactionManager.StartTransaction();
ResultBuffer ResBuff = new ResultBuffer();
Array InputArr = InputBuff.AsArray();
ObjectId ObId = InputArr.GetValue(0);
string attstr = Convert.ToString (((TypedValue) (InputArr.GetValue(1))).Value);
// Transaktion starten
BlockReference blkRef = (BlockReference)tr.GetObject(ObId,OpenMode.ForRead);
BlockTableRecord btr =(BlockTableRecord)tr.GetObject(blkRef.BlockTableRecord,OpenMode.ForRead);
btr.Dispose();
//Durch die Attribute iterieren:
AttributeCollection attCol = blkRef.AttributeCollection;
foreach (ObjectId attId in attCol)
{
AttributeReference attRef =(AttributeReference)tr.GetObject(attId,OpenMode.ForRead);
if (attRef.Tag == attstr)
{
ResBuff.Add (new TypedValue (5005,attRef.TextString));
return ResBuff;
}
else
{
ResBuff.Add (new TypedValue (5019));
return ResBuff;
}
}
tr.Commit();
tr.Dispose();
}
}
}