Revit获取墙平行的面


        /// <summary>
        /// 获取墙平行的面
        /// </summary>
        /// <param name="wall">墙</param>
        /// <param name="transform">转换矩阵</param>
        /// <returns></returns>
        private List<PlanarFace> GetWallFaces(Wall wall, Transform transform)
        {
            Options opt = new Options();
            opt.ComputeReferences = true;
            opt.DetailLevel = ViewDetailLevel.Medium;
            GeometryElement ge = wall.get_Geometry(opt);
            List<PlanarFace> lstpf = new List<PlanarFace>();
            Solid solid = null;
            foreach (GeometryObject obj in ge)
            {
                solid = obj as Solid;
                if (solid != null)
                {
                    solid = SolidUtils.CreateTransformed(solid, transform);
                    foreach (Face face in solid.Faces)
                    {
                        PlanarFace pf = face as PlanarFace;
                        if (pf != null)
                        {
                            if (pf.FaceNormal.IsAlmostEqualTo(wall.Orientation) || pf.FaceNormal.IsAlmostEqualTo(-wall.Orientation))
                            {
                                lstpf.Add(pf);
                            }
                        }
                    }
                    break;
                }
            }
            //opt.Dispose();
            //ge.Dispose();
            //if (solid != null)
            //    solid.Dispose();
            return lstpf;
        }

        /// <summary>
        /// 获取墙平行的面
        /// </summary>
        /// <param name="wall">墙</param>
        /// <returns></returns>
        private List<PlanarFace> GetWallFaces(Wall wall)
        {
            Options opt = new Options();
            opt.ComputeReferences = true;
            opt.DetailLevel = ViewDetailLevel.Medium;
            GeometryElement ge = wall.get_Geometry(opt);
            List<PlanarFace> lstpf = new List<PlanarFace>();
            Solid solid = null;
            foreach (GeometryObject obj in ge)
            {
                solid = obj as Solid;
                if (solid != null)
                {
                    foreach (Face face in solid.Faces)
                    {
                        PlanarFace pf = face as PlanarFace;
                        if (pf != null)
                        {
                            if (pf.FaceNormal.IsAlmostEqualTo(wall.Orientation) || pf.FaceNormal.IsAlmostEqualTo(-wall.Orientation))
                            {
                                lstpf.Add(pf);
                            }
                            //if (pf.FaceNormal.CrossProduct(wall.Orientation).IsZeroLength())
                            //{

                            //}
                        }
                    }
                    break;
                }
            }
            //opt.Dispose();
            //ge.Dispose();
            //if (solid != null)
            //    solid.Dispose();

            return lstpf;
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值