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();
}
}
=========【更多高级应用请关注公众号】========
==================================