วันพุธที่ 21 มีนาคม พ.ศ. 2561

Export Revit ไปเป็น Unity3d

การ Export Revit Model ไปเป็น Unity จะใช้ เป็น ".fbx" จะอยู่ที่ R->Export


เมื่อออกเป็น File แล้ว ใน Unity จะต้อง Import เป็น Asset จึงจะนำเข้าได้ แล้วค่อยไปวางใน Model

จะอยุ่ใน Tab Asset และ Drag and Drop ไปที่ Space


ข้อสังเกตุ สีของวัตถุจะเป็น basic ถ้าต้องการ ให้มีสี ต้อง Map Meterial ใหม่

วันอาทิตย์ที่ 18 มีนาคม พ.ศ. 2561

เริ่ม Unity และ C# Mono

Unity เป็น โปรแกรมสร้าง Game ที่ support c# ใน ทั้ง Windows และ Mac
วิธีลง ง่ายมาก ไป Download ที่ Website
https://unity3d.com/get-unity/download

และติดตั้ง จะมี Mono C# มาด้วย


เปิด Unity จะบังคับ ลงทะเบียน ให้ตอบ Email ให้เรียบร้อย จะเข้าโปรแกรม
ในระบบ โปรแกรม ของ Unity จะเรียก วัตถุ เช่น บ้านโต็ะ .. เป็น Assets ทั้งหมด รวมทั้ง Action หรือ โปรแกรมด้วย
ลอง Download Funiture มาทดสอบ ใน แบบ
และ ลากวาง
สร้าง Plane
Game Object->3D Object->Plane
Game Object->Ligth

ใส่ Plane ใส่ โต็ะ เตียง ใส่ Point Light และ ลบ Direction Light(แสงอาทิตย์ ออก)

สร้าง C# Code
Asset->Create->C# script
จะได้ C#


กด Double Click (จะทำ ปิดเปิด ไฟ)
แก้ Code

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour {

    public Light myLight;

    void Update () {
        if (Input.GetKey ("space")) {
            myLight.enabled = true;
        } else {
            myLight.enabled = false;
        }
    }
}

ทำการ Save

แล้ว ลาก ไปวางที่ Point Light
ที่ Inspector(หรือ Property จะแสดงค่า)

กดที่ จุด หลัง My Light ของ New Behaviour Script และ เลือก Point Light

กดที่ Game Tab และกด Play (ลุกศร)
และกด แคร่ Space bar ไฟจะปิดเปิด



วันอาทิตย์ที่ 25 กุมภาพันธ์ พ.ศ. 2561

Google map บน Winform ด้วย Webbrowser control

Google Map จะแสดงบน WebBrowser Control ของ c# ใน windows 7-10 ไม่ได้ ต้องแก้ที่ meta tag
ใน Html ที่จะแสดง googlemap

<!DOCTYPE html>
<html>
    <head>
 /**** บรรทัดนี้ ******/
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="initial-scale=1.0, user-scalable=no">

            <meta charset="utf-8">


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

การแสดงค่า ใน List Box ใช้Dictionary เป็น Datasource

การใช้ ListBox Datasource เพื่อความง่ายใช้ Dictionary ในการเลือก TitleBox สำหรับ Sheet ใน Revit


FilteredElementCollector collector = new FilteredElementCollector(doc);
                collector.OfCategory(BuiltInCategory.OST_TitleBlocks);
                collector.WhereElementIsElementType();

                //Get ElementId of first title block type.

Dictionary<string,ElementId> datas = 
collection.AsEnumerable().ToDictionary(x=>x.ToString(),y=>y);

listBox1.DataSource = new BindingSource(datas, null); 
listBox1.DisplayMember = "Value"; 
listBox1.ValueMember = "Key"; 

เมื่อเลือก ที่ Selection 
จะเป็น SelectedValue แต่ต้อง ใช้ เป็น 

ElementId id =SelectedValue as ElementId;

วันจันทร์ที่ 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);

        }