การอ่านค่า จะต้องแยก กัน
การอ่านค่า ของ Element หรือ Object
// เริ่ม transaction
trans.Start();
// open entity
Element ent = CachedDoc.GetElement(elementId);
foreach (Parameter param in ent.Parameters)
{
sParam += param.Definition.Name + "=" + param.AsString() + ",";
}
trans.Commit(); // Ok
สำหรับการอ่านค่า Parameter ของ Family (type) ต้อง อ่าน Type มาจาก Element
ent.GetTypeId()
// เริ่ม transaction
trans.Start();
// open entity
Element ent = CachedDoc.GetElement(elementId);
Element eltype = CachedDoc.GetElement(ent.GetTypeId());
foreach (Parameter param in eltype.Parameters)
{
string valueStr = param.AsString() ;
sParam += param.Definition.Name + "=" + valueStr + "\n";
}
trans.Commit(); // Ok
สำหรับใช้ Linq จะเหลือบรรทัดเดียว
Element e = doc.GetElement( r );
Parameter par1 = e.Parameters.Cast<Parameter>().Where(o => o.Definition.Name == "PE_CODE").First();
ในกรณีของ Family type Parameter ก็คือ Type
Element eltype = doc.GetElement(el.GetTypeId());
IList<Parameter> pparam = eltype.GetParameters("abcd”); // ใช้ Search ตามชื่อ
// ถ้ามีตัวเดียว ใช้ pparam[0];
foreach (Parameter param in eltype.Parameters)
{ // ดูทุกตัว
..
}
ตัวอย่าง update Parameter
ตอบลบpublic static void updateDesc(ExternalCommandData cmd)
{
UIApplication uiapp = cmd.Application;
UIDocument uidoc = uiapp.ActiveUIDocument;
Autodesk.Revit.ApplicationServices.Application app = uiapp.Application;
Autodesk.Revit.DB.Document doc = uidoc.Document;
Reference aEle=uidoc.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element);
updateAParam(aEle.ElementId, "Comments", "Test",doc);
}
private static void updateAParam(ElementId elementId, string v1, string v2, Document doc)
{
using (Transaction tran = new Transaction(doc))
{
tran.Start("update description");
try
{
Element aElem = doc.GetElement(elementId);
Parameter acom = aElem.GetParameters(v1).First();
acom.Set(v2);
tran.Commit();
}
catch
{
tran.RollBack();
}
}
}