วันอังคารที่ 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);


วันศุกร์ที่ 19 กุมภาพันธ์ พ.ศ. 2559

การทำองค์ประกอบ อาคารด้วย Onshape ฟรี

ออกแบบ 3มิติด้วย Onshape ฟรี

Onshape.com

โลกบน Cloud มาเร็วมาก ขอแนะนำสำหรับ ผู้ที่ใช้ Solidwork Inventor .. ที่เคยใช้ parametric feature base ตอนนี่มี โปรแกรม ฟรี บน web window, mac ,  Iphone , ipad, Andriod tablet. ชื่อ Onshape 
เป็น team solidwork เก่า โดยมี หลักว่า ฟรี ถ้าทำ part เป็น public และเป็นส่วนตัว ได้ 10 ชิ้น แต่ถ้า จ่าย 99 usd ต่อเดือนไม่จำกัด
โปรแกรม Export ได้ stl สำหรับ 3d print และหลาย format สำหรับ autocad, Revit


วันพฤหัสบดีที่ 14 มกราคม พ.ศ. 2559

การล้าง License ของ Autocad หรือ Revit เวลา เครื่องติด Virus (ต้องขอ License ใหม่)

มีปัญหาสำหรับเครื่องที่ติด virus ทำให้ License ของ Autocad หรือ Revit Error เปิด Run ไม่ได้ การล้าง
ให้เข้าไปที่
C:\programdata\Flexnet\
ค้น cmd.exe
c:
cd \programdata\Flexnet

โดย ทำการลบ ทั้งหมด โดย del *.*
หรือ ใช้ Explorer ก็ได้ เลือก File ทั้งหมด และกดที่ ปุ่ม [delete]
จากนั้น ไปทำการ Activate ใหม่

วันเสาร์ที่ 12 ธันวาคม พ.ศ. 2558

สร้าง Node เอง ด้วย C# ใน Dynamo

การ Custom Node มีประโยชน์​คือ ทำงานบางอย่างที่ Dynamo ไม่ได้ มีให้ หรือ งานหลายงาน อาจจะมีการเก็บ Code เก่าใว้ จะได้นำมาใช้ได้ 

Custom Node ใน Dynamo มีตัวอย่างมาก ที่เป็น ภาษาPython  หรือ การ Custom Node โดยใช้ Graphic ก็มีจำนวนมาก ให้ Searh google key word "Dynamo Custom Node" แต่ที่จะอธิบาย เป็นการนำ C# มาทำ custom node เพราะ มี Code จำนวนมาก(ของตัวเอง) เขียนใว้แล้ว  
ในเอกสาร ของ Dynamo จะมี Link ที่อธิบาย ในการสร้าง Code ที่เรียกว่า ZeroTouch 
ใน Link

ให้ Download Souce และ compile ในการ Compile Dll ที่ได้ ให้ Copy ลงใน Folder ของ Dynamo
ใน Revit เปิด Dynamo
และ ทำการเลือก Import Library

เลือก File ZeroTouchEssentials.dll จะเพิ่ม Menu ขึ้นมา
สำหรับ Code ที่เป็นตัวทำงานในแต่ละ Node ให้ดูใน Source

เช่น Double Length ก็จะแสดงง่ายใน Code แบบนี้

   public static double DoubleLength(Autodesk.DesignScript.Geometry.Curve curve)
        {
            return curve.Length * 2.0;
        }


ใน Dynamo จะแสดงแบบนี้


ง่ายอะไรจะปานนั้น



ใช้ Dynamo ในการ Query ขนาดพื้นใน Revit และส่งไป Excel

เป็นตัวอย่างของการใช้ Query ขนาดพื้น


 ใน Revit และส่ง ไป Excel โดยเอาชื่อ Floor ที่อยู่ ใน Mark ไปด้วย
ในการทำงานนี้ ต้องตั้งค่า Mode ในการ Run เป็น Manual

ผลจะไปเปิด Excel และใส่ค่า




เคล็ดลับ อยู่ที่ Element.GetParameterValueByName สามารถรับเป็น Array ได้ และจะทำทุกตัว แล้วจากนั้น ไปทำการ List.Create ใม่ ให้เป็น 2 แถว(อย่าลืมกด+) จึงไปใส่ใน Data ของ ExcelWriteToFile ช่องสี่เหลี่ยม เล็กในแต่ละ Block จะเป็นการ Debug ค่า ในการ run


วันศุกร์ที่ 11 ธันวาคม พ.ศ. 2558

ใช้ Dynamo วาด กำแพงใน Revit

เป็นมั่ว อย่างมีหลักการ โดยเริ่มจาก Objective ก่อนว่าต้องการ กำแพง แล้วก็เอา กำแพงมาวาง
แล้วดูว่า ต้องการอะไรอีก เช่น Curve (แต่อันนี้ ต้องมีความรู้ก่อนว่า Line , Arc ก็คือ Curve เหมือนกัน)
ต้องการ Level ก็เอามาวาง  ต้องการ Height ก็มาวาง ถ้าขึ้น เหลือง ก็แสดงว่าไม่ได้ ก็ใช้ ช่อง Search ลองไปเรื่อย
แล้วก็ได้กำแพงที่ปรับค่าได้


.ในการใช้ Slider ต้องตั้ง Limit ใหม่ โดยการกดที่ลูกศรลง เพื่อให้พอกับขนาดกำแพง