Revit 编程获取墙侧面的两种方法

读了叶老师“”如何编程读取墙的轮廓线“的文章(http://blog.csdn.net/joexiongjin/article/details/7275096),我写了几行代码实现其中获取墙侧面的部分。 另外,我试了一下,也可以通过HostObjectUtils.GetSideFaces达到同样的目的。

第一种方法:

通过墙的几何信息获得墙的solid,然后遍历solid的所有表面,找到其法向量与Wall.Orientation平行的表面。

public List<PlanarFace> GetWallFaces(Wall wall)
    {
        Options opt = new Options();
        opt.ComputeReferences = true;
        opt.DetailLevel = Autodesk.Revit.DB.DetailLevels.Medium;
        GeometryElement ge = wall.get_Geometry(opt);
        List<PlanarFace> lstpf = new List<PlanarFace>();
        foreach (GeometryObject obj in ge.Objects)
        {
            Solid solid = obj as Solid;
            if (solid != null)
            {
                foreach (Face face in solid.Faces)
                {
                    PlanarFace pf = face as PlanarFace;
                    if (pf != null)
                    {
                        if (pf.Normal.CrossProduct(wall.Orientation).IsZeroLength())
                        {
                            lstpf.Add(pf);
                        }
                    }
                }
                return lstpf;
            }
        }
        return null;
    }


第二种方法:

利用HostObjectUtils类的静态方法GetSideFaces 

public PlanarFace GetWallSideFace(Wall wall, ShellLayerType slt)
        { 
            Reference reference = HostObjectUtils.GetSideFaces(wall, slt)[0];
            PlanarFace face = 
		wall.GetGeometryObjectFromReference(reference) as PlanarFace;
            return face;
        }


参数 ShellLayerType 是枚举类型,其可取值为  ShellLayerType.Interior 或者ShellLayerType.Exteiror。顺便说一下,HostObjectUtils 还提供了 GetBottomFaces, Get TopFaces 方法。


转载本文请注明出处: http://blog.csdn.net/tpecnoc/article/details/7397259


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值