วันจันทร์ที่ 27 พฤศจิกายน พ.ศ. 2560

การจับเวลาใน การทำงาน คำนวนหรือ ทดสอบอัลกอริกทึม

ปัญหาของการทำงาน Data ขนาดใหญ่ อาจจะเกิด ปัญหา ของ การคำนวน ใช้เวลา แบบ 2ยกกำลัง n ตามจำนวน Data ได้ บางครั้ง เพื่อต้องการ ทดสอบจับเวลา ใช้ DateTime และ TimeSpan ใน Dotnet

ในกรณีดูเวลา ใช้ เวลาวินาทีของ วัน(เราคงไม่ทำข้ามวัน)


   logMsg("End at:"+DateTime.Now.TimeOfDay.TotalSeconds.ToString("0.##"));

กรณี ดู เริ่มและสิ้นสุด

 // start timer
            DateTime sttime = DateTime.Now;
            doComputingHere();
            DateTime endTime = DateTime.Now;
            string diff = ((endTime - sttime).TotalSeconds).ToString("0.##");
            logMsg("Run time(s):" + diff);

วันอาทิตย์ที่ 12 พฤศจิกายน พ.ศ. 2560

Revit เลือกวัตถุ 2 ครั้ง PickObject

ทดลอง Print Id ของ Object ที่เลือก 2 ครั้ง ใช้ PickObject แต่ uiDoc.Selection  -> ตัวแปร r ใน วงเล็บ จะเป็นคนละตัว

public static void test2Pick(ExternalCommandData commandData)
        {
            UIApplication uiApp = commandData.Application;
            UIDocument uiDoc = uiApp.ActiveUIDocument;
            var app = uiApp.Application;
            Document doc = uiDoc.Document;
            ElementId id1=null;
            ElementId id2=null;

            string str = "2 Id=";
            // Select something to use as base bounding box.
            {
                Reference r = uiDoc.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element);
                id1 = r.ElementId;
                str += id1.ToString()+"\n";
            }
            {
                Reference r = uiDoc.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element);
                id2 = r.ElementId;
                str += id2.ToString();
            }
            MessageBox.Show(str);

        }

แสดง Family ทั้งหมดใน Project File

เป็นการใช้ FilteredElementCollector .OfClass จะค้นอะไรให้ทำตรงนี้

  public static void listAllFamilies(ExternalCommandData cmd)
        {
 UIApplication uiapp = cmd.Application;
            UIDocument uidoc = uiapp.ActiveUIDocument;
            Autodesk.Revit.ApplicationServices.Application app = uiapp.Application;
            Autodesk.Revit.DB.Document doc = uidoc.Document;

            FilteredElementCollector collector = new FilteredElementCollector(doc).OfClass(typeof(Family));
            string str = "";
            foreach (var item in collector)
            {

                str+=item.Name+"\n";

            }
            TaskDialog.Show("??",str);

        }