Quantcast
Channel: RevitNetAddinWizard & NavisworksNetAddinWizard
Viewing all articles
Browse latest Browse all 872

Revit .NET Creations API: Create Floor and Ceiling Views Based on Levels

$
0
0

It is good that the ViewPlan class has a Create method now which looks reasonable enough to create a ViewPlan accordingly.

ViewPlan.Create Method 
public static ViewPlan Create(
    Document document,
    ElementId viewFamilyTypeId,
    ElementId levelId
)
 
Its home looks much nicer than the one (ItemFactoryBase) of the obsolete NewViewPlan method.

ItemFactoryBase.NewViewPlan Method 
[ObsoleteAttribute("This method is Obsolete in Revit 2013.  Call ViewPlan.Create() instead.")]
public ViewPlan NewViewPlan(
    string pViewName,
    Level pLevel,
    ViewPlanType viewType
)

However, the former is not exactly the replacement for the latter. Instead, they are different animals, pretty much as dogs and wolfs. Though it is possible to train wolfs nowadays to make them docsile enough, it takes quite some efforts. 

    public class ViewCreation
    {
        public static IEnumerable<ViewFamilyType> FindViewTypes(RvtDocument doc, ViewType viewType)
        {
            IEnumerable<ViewFamilyType> ret = new FilteredElementCollector(doc)
                            .WherePasses(new ElementClassFilter(typeof(ViewFamilyType), false))
                            .Cast<ViewFamilyType>();

            switch (viewType)
            {
                case ViewType.AreaPlan:
                    return ret.Where(e => e.ViewFamily == ViewFamily.AreaPlan);
                case ViewType.CeilingPlan:
                    return ret.Where(e => e.ViewFamily == ViewFamily.CeilingPlan);
                case ViewType.ColumnSchedule:
                    return ret.Where(e => e.ViewFamily == ViewFamily.GraphicalColumnSchedule); //?
                case ViewType.CostReport:
                    return ret.Where(e => e.ViewFamily == ViewFamily.CostReport);
                case ViewType.Detail:
                    return ret.Where(e => e.ViewFamily == ViewFamily.Detail);
                case ViewType.DraftingView:
                    return ret.Where(e => e.ViewFamily == ViewFamily.Drafting);
                case ViewType.DrawingSheet:
                    return ret.Where(e => e.ViewFamily == ViewFamily.Sheet);
                case ViewType.Elevation:
                    return ret.Where(e => e.ViewFamily == ViewFamily.Elevation);
                case ViewType.EngineeringPlan:
                    return ret.Where(e => e.ViewFamily == ViewFamily.StructuralPlan); //?
                case ViewType.FloorPlan:
                    return ret.Where(e => e.ViewFamily == ViewFamily.FloorPlan);
                //case ViewType.Internal:
                //    return ret.Where(e => e.ViewFamily == ViewFamily.Internal); //???
                case ViewType.Legend:
                    return ret.Where(e => e.ViewFamily == ViewFamily.Legend);
                case ViewType.LoadsReport:
                    return ret.Where(e => e.ViewFamily == ViewFamily.LoadsReport);
                case ViewType.PanelSchedule:
                    return ret.Where(e => e.ViewFamily == ViewFamily.PanelSchedule);
                case ViewType.PresureLossReport:
                    return ret.Where(e => e.ViewFamily == ViewFamily.PressureLossReport);
                case ViewType.Rendering:
                    return ret.Where(e => e.ViewFamily == ViewFamily.ImageView); //?
                //case ViewType.Report:
                //    return ret.Where(e => e.ViewFamily == ViewFamily.Report); //???
                case ViewType.Schedule:
                    return ret.Where(e => e.ViewFamily == ViewFamily.Schedule);
                case ViewType.Section:
                    return ret.Where(e => e.ViewFamily == ViewFamily.Section);
                case ViewType.ThreeD:
                    return ret.Where(e => e.ViewFamily == ViewFamily.ThreeDimensional);
                case ViewType.Undefined:
                    return ret.Where(e => e.ViewFamily == ViewFamily.Invalid);  //?
                case ViewType.Walkthrough:
                    return ret.Where(e => e.ViewFamily == ViewFamily.Walkthrough);
                default:
                    return ret;
            }
        }

        public static ViewPlan NewViewPlan(string viewName, Level level, ViewType viewType)
        {
            ElementId viewTypeId = FindViewTypes(level.Document, viewType).First().Id;

            ViewPlan view = ViewPlan.Create(level.Document, viewTypeId, level.Id);
            view.ViewName = viewName;

            return view;
        }
    }
 
Here is some sample caller code.
...
List<Level> levels = LevelCreation.CreateLevels(
        CachedDoc,
        new double[] { 0.0, 9.0, 17.0, 24.0, 30.0 },
        new string[] { "L0", "L1", "L2", "L3", "L4", }
    );

foreach (Level l in levels)
{
    ViewCreation.NewViewPlan("Floor Plan - " + l.Name, l, ViewType.FloorPlan);
    ViewCreation.NewViewPlan("Ceiling Plan - " + l.Name, l, ViewType.CeilingPlan);
}
 …
Both the floor plan views and ceiling plan views will be successfully created based on the levels into the current document as can be seen from the following image.
  Levels2PlanViews

Revit Addin Wizard (RevitAddinWizard) provides various wizards, coders and widgets to help program Revit addins. It can be downloaded from the Download link at the bottom of the blog index page.


Viewing all articles
Browse latest Browse all 872

Trending Articles