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

การใช้ PickPoint ใน Revit

ในการเลือกจุด ใน Revit  มี 2 แบบ ได้แก่ การเลือก (pt) จากจุดใดๆ

XYZ pt = _uiDoc.Selection.PickPoint( "Pick a point" );

การเลือกจะ ให้เลือกบนจอ และมี Prompt แสดง
อีกแบบที่จะใช้ใน Application บ่อยๆ ได้แก่ การเลือกบน Object เช่น กำแพง

Reference r = _uiDoc.Selection.PickObject(
        ObjectType.PointOnElement,
        "Select a point on element" );

      Element e = _uiDoc.Document.GetElement( r );
      XYZ pt = r.GlobalPoint;

      

ตัวอย่างข้างล่างเป็นการ Moveวัตถุ โดยการเลือก และคำนวนการย้ายตำแหน่งจาก Object โดยใช้ BoundingBox(กล่องสี่เหลี่ยมครอบวัตถุ)

public static void SelectAndMoveElement(ExternalCommandData commandData)
{// เป็นการทดลองการแก้ไข ตำแหน่งของ Object
// เลือก Project ปัจจุบัน
Autodesk.Revit.DB.Document CachedDoc = commandData.Application.ActiveUIDocument.Document;
Autodesk.Revit.ApplicationServices.Application CachedApp = commandData.Application.Application;
// เลือก วัตถุ 1 ชิ้น
Reference pickedObj = commandData.Application.ActiveUIDocument.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element, "Please select an element to move.");

if (pickedObj != null && pickedObj.ElementId != ElementId.InvalidElementId)
{
// element location
                Element e1 = CachedDoc.GetElement(pickedObj.ElementId);
                XYZ minPt1 = e1.get_BoundingBox(null).Min;
                XYZ minPt2 = e1.get_BoundingBox(null).Max;
                XYZ minPt = minPt1 + (minPt2 - minPt1) / 2;// หา จุดกึ่งกลางวัตถุ
                XYZ mPt = commandData.Application.ActiveUIDocument.Selection.PickPoint();
                XYZ vPt = mPt - minPt;// คำนวน Vector Move
                
                PPGenInput.PPSingleInput mydlg = new PPGenInput.PPSingleInput();
// เลือกระยะเป็น Vector
mydlg.setPrompt("Enter Move Vector:");
mydlg.text = vPt.ToString();//"10,10,0";
            
mydlg.ShowDialog();
string vectorStr = mydlg.text.Replace("(","").Replace(")",""); // นำค่าเข้ามาที่ ตัวแปร

string[] arr = vectorStr.Split(new char[] { ',' }); // แยกเป็นตัวๆ X,Y,Z
using (Transaction trans = new Transaction(CachedDoc, "SelectAndMoveElement"))
{
// เริ่ม transaction
trans.Start();
#if R14    
Line lineAsAxis = CachedApp.Create.NewLineBound(new XYZ(0, 0, 0), new XYZ(0, 0, 1));
#else
      //              Line lineAsAxis = CachedApp.Create.(new XYZ(0, 0, 0), new XYZ(0, 0, 1));

#endif
                   
                    // แปลงจาก arr เป็น vector จริง double_x,double_y,double_z
XYZ xyz = ptM2f(double.Parse(arr[0]), double.Parse(arr[1]), double.Parse(arr[2]));
// move
ElementTransformUtils.MoveElement(CachedDoc, pickedObj.ElementId, xyz);
                   
trans.Commit(); // Ok
}
}

}

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

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