วันเสาร์ที่ 16 มีนาคม พ.ศ. 2562

Compare Revit 2 File

โดยหลักการ เปิด Revit 2 File ต้องการหาข้อแตกต่าง ระหว่างไฟล์

Reference
https://adndevblog.typepad.com/aec/2012/10/accessing-data-from-linked-file-using-revit-api.html

Live video
https://web.facebook.com/archtraining/videos/2639452556084492/

ยกตัวอย่าง กำแพง
หลักการใช้ Dictionary เก็บ Id กับ location แล้วเอา location มาเทียบ ถ้าต่าง แสดงว่า Move
ถ้า Id ไม่มี แสดง ว่า ลบออก กรณีเพิ่ม จะเป็น Id ใหม่ ให้ Array ของ Id ใหม่มา loop check ว่าไม่มี ก็จะ เป็น New Id


     public static void compare2file(ExternalCommandData cmd)
        {
            UIApplication uiapp = cmd.Application;
            UIDocument uidoc = uiapp.ActiveUIDocument;
            Autodesk.Revit.ApplicationServices.Application app = uiapp.Application;
            Autodesk.Revit.DB.Document doc = uidoc.Document;
            Dictionary<ElementId,string> id1 = new Dictionary<ElementId, string>(); // file 1
            Dictionary<ElementId, string> id2 = new Dictionary<ElementId, string>(); // file 2
            bool firstFile = true;
            foreach (Document auDoc in uiapp.Application.Documents)
            {
                Dictionary<ElementId, string> ids = firstFile ? id1 : id2;
                // to next
                firstFile = false; 
                MessageBox.Show(auDoc.PathName);
                // filter for wall
                FilteredElementCollector collLinked =  new FilteredElementCollector(auDoc);
                IList<Element> linkedWalls =
                  collLinked.OfClass(typeof(Wall)).ToElements();
                //  MessageBox.Show("Wall count=" + linkedWalls.Count.ToString());
                foreach (Element e in linkedWalls)
                {
                    Wall awall = e as Wall;
                    Curve c1 = (awall.Location as LocationCurve).Curve;
                    XYZ p1=c1.GetEndPoint(0);
                    XYZ p2 = c1.GetEndPoint(1);
                    string locationS = p1.X.ToString("0.##") + "," + p1.Y.ToString("0.##")+"," + p1.Z.ToString("0.##") +
                      "|"+   p2.X.ToString("0.##") + "," + p2.Y.ToString("0.##") +","+ p2.Z.ToString("0.##");
                    // MessageBox.Show("id=" + e.Id.ToString() + " " + locationS);
                    ids.Add(e.Id, locationS);
                }
            } // foreach doc
            foreach (var item1 in id1)
            { //compare
                string s1 = item1.Value;
                if (id2.ContainsKey(item1.Key))
                {  // check if id2 have same id
                    string s2 = id2[item1.Key];
                    if (s1 != s2) MessageBox.Show("Move id=" + item1.Key.ToString());
                }
                else { MessageBox.Show("Erase id=" + item1.Key.ToString()); }
            }
            foreach (var item2 in id2)
            {// just more id show
                if (!id1.ContainsKey(item2.Key))
                {
                    MessageBox.Show("New Id=" + item2.Key.ToString());
                }
            }

        }

ไม่มีความคิดเห็น:

แสดงความคิดเห็น