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