Exemple #1
0
        /// <summary>
        /// 添加板
        /// </summary>
        /// <param name="floor"></param>
        public void Add(Floor floor)
        {
            var geometry = floor.get_Geometry(new Options()
            {
                View = Document.ActiveView
            });
            var           geometryElements = geometry as GeometryElement;
            LevelOutLines leveledOutLines  = new LevelOutLines();

            foreach (Solid geometryElement in geometryElements)
            {
                var         faces    = geometryElement.Faces;
                List <Face> addFaces = new List <Face>();
                foreach (Face face in faces)
                {
                    //矩形面
                    var planarFace = face as PlanarFace;
                    if (planarFace != null)
                    {
                        if (Model.AlignType == AlignType.BeamTopToFloorTop && planarFace.FaceNormal.Z > 0)
                        {
                            addFaces.Add(face);
                        }
                        else if (Model.AlignType == AlignType.BeamTopToFloorBottom && planarFace.FaceNormal.Z < 0)
                        {
                            addFaces.Add(face);
                        }
                    }
                    //圆面
                    var cylindricalFace = face as CylindricalFace;
                    if (cylindricalFace != null)
                    {
                        //最外的轮廓面必为矩形
                        //即如有其他原型作为最外轮廓面的...需重写逻辑,要判断最外轮廓面
                        //矩形面的最外轮廓可以通过XYZ(0,0,1)取得
                    }
                }
                foreach (var addFace in addFaces.OrderByDescending(c => c.Area))
                {
                    leveledOutLines.Add(addFace, Model);
                }
            }
            if (!leveledOutLines.IsValid)
            {
                throw new NotImplementedException("添加的板无效,无子轮廓");
            }
            else
            {
                LeveledOutLines.Add(leveledOutLines);
            }
        }
Exemple #2
0
        /// <summary>
        /// 轮廓嵌套分层
        /// </summary>
        /// <param name="levelFloor"></param>
        /// <returns></returns>
        public LevelOutLines GetLeveledOutLines(LevelFloor levelFloor)
        {
            var leveledOutLines = new LevelOutLines();
            var option          = new Options()
            {
                View = Document.ActiveView
            };
            var geometry         = levelFloor.Floor.get_Geometry(option);
            var geometryElements = geometry as GeometryElement;

            foreach (Solid geometryElement in geometryElements)
            {
                var         faces    = geometryElement.Faces;
                List <Face> addFaces = new List <Face>();
                foreach (Face face in faces)
                {
                    //矩形面
                    var planarFace = face as PlanarFace;
                    if (planarFace != null)
                    {
                        if (Model.AlignType == AlignType.BeamTopToFloorTop && planarFace.FaceNormal.Z > 0)
                        {
                            addFaces.Add(face);
                        }
                        else if (Model.AlignType == AlignType.BeamTopToFloorBottom && planarFace.FaceNormal.Z < 0)
                        {
                            addFaces.Add(face);
                        }
                    }
                    ////圆面
                    //var cylindricalFace = face as CylindricalFace;
                    //if (cylindricalFace != null)
                    //{
                    //    if (cylindricalFace.Axis.Z > 0)
                    //    {
                    //        addFaces.Add(cylindricalFace);
                    //    }
                    //}
                }
                if (addFaces.Count == 0)
                {
                    double    area        = -1;
                    RuledFace currentFace = null;
                    foreach (Face face in faces)
                    {
                        //定制面
                        var ruledFace = face as RuledFace;
                        if (ruledFace != null)
                        {
                            if (area < ruledFace.Area)
                            {
                                area        = ruledFace.Area;
                                currentFace = ruledFace;
                            }
                        }
                    }
                    if (currentFace != null)
                    {
                        addFaces.Add(currentFace);
                    }
                }
                foreach (var addFace in addFaces.OrderByDescending(c => c.Area))
                {
                    leveledOutLines.Add(addFace, Model);
                }
            }
            return(leveledOutLines);
        }