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());
}
}
}
ไม่มีความคิดเห็น:
แสดงความคิดเห็น