วันจันทร์ที่ 17 ธันวาคม พ.ศ. 2555

การจัดการของ Family ใน Revit


การจัดการของ Family ใน Revit
อ.ธนะพันธ์ อินทรเกสร
ระบบ Family ใน Revit เป็นส่วนสำคัญมาก ที่ทำให้ Revit ใช้งานง่าย ใน การจัดการ ของ Revit จะมี โครงสร้าง  3 ส่วน ได้แก่
1. Category     จะบอกว่าเป็นหมวดของงานอะไร เช่น เป็นงานหลังคาก็ได้แก่ Roofs หรือ โครงสร้างเช่น Structural Beam Systems เป็นต้น
2. Family  ได้แก่ สัญญลักษณ์ 3 มิติ หรือ 2 มิติ รูปของวัตถุนั้นเช่น เสา Concrete หรือ เสา I beam เป็นต้น
3. Family Type เป็นการตั้งค่า ของ Family ให้มีชื่อและขนาดตาม Parameter ตามต้องการ


4. Instances เป็น วัตถุ ในแบบที่เกิดจาก Family ที่เลือกมา โดยจะมี Id เฉพาะ ไม่ซ้ำ
จะเห็นว่าตัวแปรใน วัตถุจะมี 2 สถานะ ใน Instance จะเป็นตัวแปรเฉพาะตัว ส่วน type จะเป็นตัวแปรทั้งหมดใน type เดียวกัน

เพื่อสร้างโปรแกรมในการทำงาน อัตโนมัติ จะต้องนำ Family มาใช้ ต้องเข้าใจว่าใน แบบหรือ project ที่ทำงานของ Revit จะเรียกว่า Document ที่จะบรรจุ Family เป็น Element (แบบเดียวกัน กับ Block ใน Autocad และทุกอย่างใน Revit จะเรียกว่า Element) การมาใช้งาน จะสร้าง Instance (แบบเดียวกับ BlockRefence ใน Autocad)
การขั้นแรก Scan ทั้ง Document ใส่ใน Array

Autodesk.Revit.DB.Document document = commandData.Application.ActiveUIDocument.Document;

FilteredElementCollector collector = new FilteredElementCollector(document);


Collector จะมี ทุก Element ใน Project ปัจจุบัน ทั้ง Element ที่มองเห็น ทั้ง View ทุกอย่าง เพื่อให้เหลือเฉพาะส่วนที่ต้องการการ เราจะต้องทำการ filter หรือกรอง เฉพาะ Family โดยจะเรียกว่า FamilySymbol
      ICollection<Element> collection = collector.OfClass(typeof(FamilySymbol)).ToElements();

ตอนนี้เราจะได้ Family มาทั้งหมดแล้วใน collection ถ้าเราต้องการเฉพาะ
Category ใน Code จะเป็น
collection[i].Category.Name
ลองเขียนเป็นโปรแกรม
foreach (Element e in collection)
    {
        familySymbol = e as FamilySymbol;

        MessageBox.Show(familySymbol.Category.Name);
        Family fm = familySymbol.Family;
                   MessageBox.Show (fm.Name);

        ElementType et = e as ElementType;

        if (null != familySymbol.Category)
        {
            if ("Structural Columns" == familySymbol.Category.Name)
            {
 MessageBox.Show (et.Name);

                break;
            }
        }
    }

สำหรับการแสดงชื่อของ Family จะใช้
Family fm = familySymbol.Family;
                   MessageBox.Show (fm.Name);
โดยที่  familySymbol จะเก็บทัง Category และ Family
แต่ การที่จะเข้าไปใน Type จำเป็นต้องใช้ ElementType ในการ Cast Element เพื่อที่จะนำค่า
ElementType มาใช้งาน
 ถ้าต้องการ Type ก็ใช้
ElementType et = e as ElementType;
  MessageBox.Show (et.Name);

Revit ใช้การเขียนโปรแกรมในระบบที่ทันสมัยมาก ได้ใช้ Linq ทำให้การเขียนโปรแกรมสั้นลงไปอย่างมาก
ผมจะแนะนำในตอนหน้า



ไม่มีความคิดเห็น:

แสดงความคิดเห็น