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

=========【更多高级应用请关注公众号】========


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


  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值