การจัดการของ 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 ทำให้การเขียนโปรแกรมสั้นลงไปอย่างมาก
ผมจะแนะนำในตอนหน้า
ไม่มีความคิดเห็น:
แสดงความคิดเห็น