/// <summary> /// 为选中房间创建专门的floorPlan和ceilingPlan /// Ctrate a New FloorPlan and CeilingPlan for the selected selRoom /// </summary> /// <param name="viewOffseet"></param> /// <param name="view3d"></param> public void CreateNewViewPlan(double viewOffseet, View3D view3d) { //过滤所有的ViewFamilyType var classFilter = new ElementClassFilter(typeof(ViewFamilyType)); FilteredElementCollector collector = new FilteredElementCollector(DocSet.doc); collector = collector.WherePasses(classFilter); ViewPlan view = null; using (Transaction tran = new Transaction(DocSet.doc)) { foreach (ViewFamilyType viewFamilyType in collector) { //当类型为FloorPlan或者CeilingPlan时创建同类型视图 if (viewFamilyType.ViewFamily == ViewFamily.FloorPlan || viewFamilyType.ViewFamily == ViewFamily.CeilingPlan) { tran.Start("Creat view of type " + viewFamilyType.ViewFamily); //创建视图时需要 视图类型ID 相关标高ID view = ViewPlan.Create(DocSet.doc, viewFamilyType.Id, DocSet.selRoom.LevelId); //TaskDialog.Show("CreatLevelView", "A new level's view has been Created"); view.Name = DocSet.selRoom.Name;//生成平面的名称 view.get_Parameter(BuiltInParameter.VIEWER_CROP_REGION).Set(1); view.AreAnalyticalModelCategoriesHidden = false; view.PartsVisibility = PartsVisibility.ShowPartsAndOriginal; view.Scale = 50; view.CropBoxActive = true; view.CropBoxVisible = true; string viewName = "PLAN "; view.get_Parameter(BuiltInParameter.VIEW_DESCRIPTION).Set(DocSet.selRoom.Name); if (viewFamilyType.ViewFamily == ViewFamily.CeilingPlan) { PlanViewRange range = view.GetViewRange(); range.SetLevelId(PlanViewPlane.TopClipPlane, DocSet.selRoom.UpperLimit.Id); range.SetLevelId(PlanViewPlane.ViewDepthPlane, DocSet.selRoom.UpperLimit.Id); range.SetLevelId(PlanViewPlane.CutPlane, DocSet.selRoom.LevelId); range.SetLevelId(PlanViewPlane.BottomClipPlane, DocSet.selRoom.LevelId); range.SetOffset(PlanViewPlane.CutPlane, 7.874); range.SetOffset(PlanViewPlane.BottomClipPlane, 7.874); view.get_Parameter(BuiltInParameter.VIEW_DESCRIPTION).Set(DocSet.selRoom.Name); view.SetViewRange(range); viewName = "RCP "; view.get_Parameter(BuiltInParameter.VIEW_DESCRIPTION).Set(DocSet.selRoom.Name + " - RCP"); } viewName += _SoANumber + "_" + DocSet.selRoom.Level.Name; view.ViewName = viewName; tran.Commit(); ChangeViewFitRoom(view, tran, viewOffseet); } } } }
public Result Execute( ExternalCommandData commandData, ref string message, ElementSet elements) { UIApplication uiapp = commandData.Application; UIDocument uidoc = uiapp.ActiveUIDocument; Application app = uiapp.Application; Document doc = uidoc.Document; if (!(doc.ActiveView is ViewPlan viewPlan)) { TaskDialog.Show("Please select Plan view", "Select Plan view to change it's View Range"); return(Result.Succeeded); } Level level = viewPlan.GenLevel; View3D view3d = null; string source3d = StoreExp.ThreeDview; if (source3d == "Same Name") { source3d = viewPlan.Name; } try { view3d = (from v in new FilteredElementCollector(doc).OfClass(typeof(View3D)).Cast <View3D>() where v.Name == source3d select v).First(); } catch { TaskDialog.Show("Please rename 3D view or Select in Options", "Rename 3D view to match:" + Environment.NewLine + "'" + viewPlan.Name + "'" + Environment.NewLine + " or, Select source 3D view in Options"); return(Result.Succeeded); } BoundingBoxXYZ bbox = view3d.GetSectionBox(); Transform transform = bbox.Transform; double bboxOriginZ = transform.Origin.Z; double minZ = bbox.Min.Z + bboxOriginZ; double maxZ = bbox.Max.Z + bboxOriginZ; PlanViewRange viewRange = viewPlan.GetViewRange(); viewRange.SetLevelId(PlanViewPlane.TopClipPlane, level.Id); viewRange.SetLevelId(PlanViewPlane.CutPlane, level.Id); viewRange.SetLevelId(PlanViewPlane.BottomClipPlane, level.Id); viewRange.SetLevelId(PlanViewPlane.ViewDepthPlane, level.Id); if (viewPlan.ViewType == ViewType.CeilingPlan) { viewRange.SetOffset(PlanViewPlane.CutPlane, minZ - level.Elevation); viewRange.SetOffset(PlanViewPlane.TopClipPlane, maxZ - level.Elevation); viewRange.SetOffset(PlanViewPlane.ViewDepthPlane, maxZ - level.Elevation); viewRange.SetOffset(PlanViewPlane.BottomClipPlane, minZ - level.Elevation); } if (viewPlan.ViewType != ViewType.CeilingPlan) { viewRange.SetOffset(PlanViewPlane.CutPlane, maxZ - level.Elevation); viewRange.SetOffset(PlanViewPlane.BottomClipPlane, minZ - level.Elevation); viewRange.SetOffset(PlanViewPlane.ViewDepthPlane, minZ - level.Elevation); viewRange.SetOffset(PlanViewPlane.TopClipPlane, maxZ - level.Elevation); } using (Transaction t = new Transaction(doc)) { t.Start("Set View Range"); viewPlan.SetViewRange(viewRange); t.Commit(); } return(Result.Succeeded); }