public RevitUI.Result Execute(RevitUI.ExternalCommandData commandData, ref string message, RevitDB.ElementSet elements) { RevitUI.UIDocument uidoc = commandData.Application.ActiveUIDocument; RevitDB.Document doc = uidoc.Document; if (doc.IsFamilyDocument)//感觉族文档没必要 { RevitUI.TaskDialog.Show("Revit", "该操作仅适用项目文档,不适用族文档!"); return(RevitUI.Result.Succeeded); } try { RevitDB.View view = doc.ActiveView; //当前视图 ICollection <RevitDB.ElementId> ids = uidoc.Selection.GetElementIds(); //选择对象 if (0 == ids.Count) //如果没有选择 { if (view is RevitDB.ViewSection) //当前视图为立面视图且没有选择对象时退出 { return(RevitUI.Result.Succeeded); } else if (view is RevitDB.View3D)//当前视图为三维视图且没有选择对象时切换至原楼层平面视图 { RevitDB.FilteredElementCollector collectL = new RevitDB.FilteredElementCollector(doc); ICollection <RevitDB.Element> collectionL = collectL.OfClass(typeof(RevitDB.View)).ToElements(); foreach (RevitDB.Element element in collectionL) { RevitDB.View v = element as RevitDB.View; if (view.ViewName == "三维视图_" + v.ViewType.ToString() + "_" + v.ViewName) { if (!v.IsTemplate) { uidoc.ActiveView = v; break; } } } return(RevitUI.Result.Succeeded); }//未选择对象时列出当前视图所有可见对象 RevitDB.FilteredElementCollector collector = new RevitDB.FilteredElementCollector(doc, view.Id).WhereElementIsNotElementType(); ids = collector.ToElementIds(); } RevitDB.Transaction ts = new RevitDB.Transaction(doc, "Create_View3D"); ts.Start(); bool fg = true; RevitDB.FilteredElementCollector collect = new RevitDB.FilteredElementCollector(doc); ICollection <RevitDB.Element> collection = collect.OfClass(typeof(RevitDB.View3D)).ToElements(); RevitDB.View3D view3d = null; foreach (RevitDB.Element element in collection) { RevitDB.View3D v = element as RevitDB.View3D; if (v.ViewName == "三维视图_" + view.ViewType.ToString() + "_" + view.ViewName) { if (!v.IsTemplate) { view3d = v; fg = false;//已生成过当前视图的三维视图 break; } } } if (fg) { RevitDB.ViewFamilyType viewFamilyType = null; collect = new RevitDB.FilteredElementCollector(doc); var viewFamilyTypes = collect.OfClass(typeof(RevitDB.ViewFamilyType)).ToElements(); foreach (RevitDB.Element e in viewFamilyTypes) { RevitDB.ViewFamilyType v = e as RevitDB.ViewFamilyType; if (v.ViewFamily == RevitDB.ViewFamily.ThreeDimensional) { viewFamilyType = v; break; } } view3d = RevitDB.View3D.CreateIsometric(doc, viewFamilyType.Id); view3d.ViewName = "三维视图_" + view.ViewType.ToString() + "_" + view.ViewName; } ts.Commit(); uidoc.ActiveView = view3d;//设置生成的三维视图为当前视图 RevitDB.Transaction tss = new RevitDB.Transaction(doc, "View3D_HideElements"); tss.Start(); if (fg) { view = doc.ActiveView; collect = new RevitDB.FilteredElementCollector(doc, view.Id).WhereElementIsNotElementType(); ICollection <RevitDB.ElementId> idss = collect.ToElementIds(); ICollection <RevitDB.ElementId> ds = idss; ds = idss.Except(ids).ToList(); ids.Clear(); foreach (RevitDB.ElementId id in ds) { RevitDB.Element element = doc.GetElement(id); if (element.CanBeHidden(view) == true) { ids.Add(id); } } view.HideElementsTemporary(ids);//临时隐藏其他图元 } tss.Commit(); } catch (Exception) { return(RevitUI.Result.Cancelled); } return(RevitUI.Result.Succeeded); }