วันอังคารที่ 26 เมษายน พ.ศ. 2559

การ Export Schedule

ในการส่งค่าไปทำการนับวัสดุ หรือ การวางแผนการก่อสร้าง มักจะต้องส่งข้อมูลไป ระบบอื่น ที่เป็นฐานข้อมูล Database การส่ง Text File โดยใช้ Tab เป็นตัวขั้น เป็นระบบที่ง่ายที่สุด

 public static void expSchedule(ExternalCommandData commandData)
        {

            UIApplication uiapp = commandData.Application;
            UIDocument uidoc = uiapp.ActiveUIDocument;
            Autodesk.Revit.DB.Document doc = uidoc.Document;
            string _export_folder_name = "c:/tmp/shedule";
            FilteredElementCollector col
              = new FilteredElementCollector(doc)
                .OfClass(typeof(ViewSchedule));
         // สร้าง List ในการเลือก เมื่อมีหลายตาราง
           List<string> ps =new List<string>();
            foreach (ViewSchedule vs in col)
            {
                ps.Add(vs.Name);
            }
       // เลือก และ ส่งออก ในชื่อ out1.txt
            int idx=PPGenInput.ppSelectItem.doShow(ps.ToArray(), "Select Schedule");
            if (idx >= 0)
            {  

                ViewSchedule vs = (ViewSchedule)col.Where(x => (x.Name == ps[idx])).First();
                ViewScheduleExportOptions opt = new ViewScheduleExportOptions(); 
                Directory.CreateDirectory( _export_folder_name);
                vs.Export(_export_folder_name,  "out1.txt", opt);
             
            }
        
        }

วันพฤหัสบดีที่ 21 เมษายน พ.ศ. 2559

การอ่านค่า วัสดุใน Revit Family

วัตถุใน Revit เช่น ประตู หน้าต่าง ล้วนเป็น Family ที่สร้างมา โดยที่ใน Family สามารถ ระบุวัสดุได้ สำหรับงาน ประมาณราคา ต้องการ วัสดุ เพื่อการ คำนวน ปริมาณ สารามารถ ทำได้ โดย เปิด Family นั้น และ ทำการ Explore เข้าไป

public static void look_FamilyInstance(FamilyInstance familyInstance)
{
    string message = "FamilyInstance : ";
  
    // ถ้ามี Host เช่น Rebar บอก Host ด้วย
    if (familyInstance.Host != null)
    {
        message += "\nFamilyInstance host name is : " + familyInstance.Host.Name;
    }

    foreach (ElementId materialId in familyInstance.GetMaterialIds(false))
    {
        Material material = familyInstance.Document.GetElement(materialId) as Material;
        message += "\nFamilyInstance e material : " + material.Name;
    }
    // มี ห้อง บอกด้วย
    if (familyInstance.Room != null)
    {
        message += "\nFamilyInstance room name is : " + familyInstance.Room.Name;
    }

    // Get FamilyInstance structural type
    message += "\nFamilyInstance structural type is : " + familyInstance.StructuralType;

    // Get FamilyInstance structural usage
    message += "\nFamilyInstance structural usage is : " + familyInstance.StructuralUsage;

    TaskDialog.Show("Revit",message); // แสดงผล
}

สำหรับ การเรียก Fuction นี้ อย่าลืม Casting ด้วย

    FamilyInstance fi = (FamilyInstance) doc.GetElement(elementId);
    look_FamilyInstance(fi);