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