BoundingBoxXYZ定義了一個三維的長方體盒。它與BoundingBoxUV不同的是,BoundingBoxXYZ繼承於APIObject對象。
它的Transform屬性可以用來將數據從局部座標系變換到模型系統的座標。
如果要得到模型空間的長方體盒邊界數據,可以用Transform依次轉換各個數據。
1) 定義視圖的邊界
BoundingBoxXYZ可以通過視圖的裁剪盒屬性(View.CropBox)來定義視圖的邊界。
如圖所示:
2) 定義三維視圖剖面框
BoundingBoxXYZ也可以通過三維視圖的GetSectionBox方法來獲取三維視圖的剖面框(Section Box)。在在Revit UI界面的三維視圖屬性框裏,勾選剖面框屬性,即可在視圖中顯示出來,如圖所示:
3) 其他用法
① 定義元素的幾何邊界盒(Element.BoundingBox屬性),這種情況BoundingBoxXYZ是平行於座標軸的。
② 用於ViewSection類的CreateSection和CreateDetail方法。
以下的表格是ViewSection類的主要屬性。
屬性名 |
描述 ., |
Max/Min |
最大/最小座標值。這兩個屬性確定了平行於座標的三維邊界盒。最大值點是右上前點;最小值點足左下後點 |
|
|
Transform |
從盒子座標空間到投型空間的變換 |
Enable |
表明邊界盒是否打開 |
MaxEnabled/ MinEnabled |
表明最大/最小邊界在某一維度上是否可用的,使用0參數X軸,1代表Y軸,2代表Z軸。 •如果是一般的視圖(ViewScction,ViewPlan 等),BoundingBoxXYZ是從視圖的 CropBox屬性獲取的,那麼表明是否可以用視圖的裁剪盒來剪輯元素 •如果Enable屬性是false,那麼這兩個屬性也會返回false •如果視圖的裁剪視圖屬性是打開的,即API中View.CropBoxActive爲true,那麼MaxEnalbed和MinEnalbed屬性都會返回true •如果視圖的裁剪視圖屬性是關閉的,即API中View.CropBoxActive爲false,那麼MaxEnalbed和MinEnalbed屬性都會返回false •如果BounduigBoxXYZ是從三維視圖的GetSectionBox方法獲取的,那麼返回值取決於三維視圖的“剖面框”屬性有沒有勾選。如果勾選了該屬性,即API中BounduigBox Enalbe爲true,那麼這兩個屬性都返回true;否則返回false •如果BounduigBoxXYZ是從元素Element.BounduigBoxXYZ屬性獲取的,那麼這兩個屬性都返回true |
Bounds |
通過索引獲取最大或者最小邊界值。用0參數代表最小值,1代表最大值 |
BoundEnabled |
通過索引獲取邊界是否打開。第一個參數爲邊界值,0代表最小值,1代表最大; 第二個參數是維度,0代表x軸,1代表y軸,2代表z軸。如果要單獨打開各個維度邊界,必須整個邊界盒是打開的 |
以下代碼實現了通過旋轉BoundingBoxXYZ來修改三維視圖的截面盒。
public void ModifySectionBox(Autodesk.Revit.DB.Document doc)
{
using (Transaction transaction = new Transaction(doc, "Modify Section Box"))
{
transaction.Start();
View3D view3d = doc.GetElement(new ElementId(186350)) as View3D;
BoundingBoxXYZ box = view3d.GetSectionBox();
if (false == box.Enabled)
{
TaskDialog.Show("Error", "The section box for View3D isn't Enable.");
return;
}
// 創建旋轉變換
XYZ origin = new XYZ(0, 0, 0);
XYZ axis = new XYZ(0, 0, 1);
Transform rotate = Transform.CreateRotationAtPoint(axis, 2, origin);
// 把旋轉變換應用於三維視圖的剖面框
box.Transform = box.Transform.Multiply(rotate);
view3d.SetSectionBox(box);
transaction.Commit();
}
}
=========【更多高級應用請關注公衆號】========
==================================