วันพฤหัสบดีที่ 17 กันยายน พ.ศ. 2558

การอ่านค่า Parameter จาก Object และ Type

Parameter ใน Revit มี 2 แบบ แบบที่อยู่ใน Family เรียกว่า ใน Type ยกตัวอย่างเช่นคาน จะมีความกว้าง(b) ลึก (h) เป็นต้น แต่ จะมี Parameter ที่เป็นเฉพาะของ คาน เช่น ความยาว หรือ Length
การอ่านค่า จะต้องแยก กัน

การอ่านค่า ของ 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)
                { // ดูทุกตัว
                ..
            }
 



1 ความคิดเห็น:

  1. ตัวอย่าง 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();
    }
    }
    }

    ตอบลบ