Revit API之BoundingBoxXYZ的用法和剖面框(Section Box)

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();
            }
        }

=========【更多高級應用請關注公衆號】========


==================================


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章