Example #1
0
        /***************************************************/
        /****               Public Methods              ****/
        /***************************************************/

        public static oM.Adapters.Revit.Elements.ViewPlan ViewPlanFromRevit(this ViewPlan revitViewPlan, RevitSettings settings = null, Dictionary <string, List <IBHoMObject> > refObjects = null)
        {
            settings = settings.DefaultIfNull();

            oM.Adapters.Revit.Elements.ViewPlan viewPlan = refObjects.GetValue <oM.Adapters.Revit.Elements.ViewPlan>(revitViewPlan.Id.IntegerValue);
            if (viewPlan != null)
            {
                return(viewPlan);
            }

            viewPlan = BH.Engine.Adapters.Revit.Create.ViewPlan(revitViewPlan.Name, revitViewPlan.GenLevel?.Name);
            View template = revitViewPlan.Document.GetElement(revitViewPlan.ViewTemplateId) as View;

            if (template != null)
            {
                viewPlan.TemplateName = template.Name;
            }

            ElementType elementType = revitViewPlan.Document.GetElement(revitViewPlan.GetTypeId()) as ElementType;

            if (elementType != null)
            {
                viewPlan.InstanceProperties = elementType.InstancePropertiesFromRevit(settings, refObjects);
            }

            viewPlan.Name = revitViewPlan.Name;

            //Set identifiers, parameters & custom data
            viewPlan.SetIdentifiers(revitViewPlan);
            viewPlan.CopyParameters(revitViewPlan, settings.ParameterSettings);
            viewPlan.SetProperties(revitViewPlan, settings.ParameterSettings);

            refObjects.AddOrReplace(revitViewPlan.Id, viewPlan);
            return(viewPlan);
        }
Example #2
0
        public static List <ViewPlan> DuplicateViewPlan(this ViewPlan viewPlan, IEnumerable <Level> levels = null, bool useExisting = false)
        {
            if (viewPlan == null || !viewPlan.IsValidObject || viewPlan.IsTemplate)
            {
                return(null);
            }

            Document document = viewPlan.Document;

            if (document == null)
            {
                return(null);
            }

            List <Level> levels_Temp = null;

            if (levels != null)
            {
                levels_Temp = new List <Level>(levels);
            }

            if (levels_Temp == null)
            {
                levels_Temp = new FilteredElementCollector(document).OfClass(typeof(Level)).Cast <Level>().ToList();
            }

            List <Element> elements_ColorFillLegend = new FilteredElementCollector(document, viewPlan.Id).OfCategory(BuiltInCategory.OST_ColorFillLegends).ToList();

            List <ViewPlan> result = new List <ViewPlan>();

            foreach (Level level in levels_Temp)
            {
                if (level.Id == viewPlan.GenLevel.Id)
                {
                    continue;
                }

                ViewPlan viewPlan_New = null;

                List <ViewPlan> viewPlans = new FilteredElementCollector(document).OfClass(typeof(ViewPlan)).Cast <ViewPlan>().ToList();
                string          name      = level.Name;
                if (useExisting)
                {
                    viewPlan_New = viewPlans.Find(x => x.Name == name);
                }

                if (viewPlan_New == null)
                {
                    viewPlan_New = ViewPlan.Create(document, viewPlan.GetTypeId(), level.Id);

                    // Check name uniqueness
                    string name_Temp = name;
                    int    count     = 0;
                    while (viewPlans.Find(x => x.Name == name_Temp) != null)
                    {
                        count++;
                        name_Temp = string.Format("{0} {1}", name, count);
                    }

                    viewPlan_New.Name = name_Temp;
                }

                foreach (Parameter parameter in viewPlan.ParametersMap)
                {
                    if (parameter.Id.IntegerValue == (int)BuiltInParameter.VIEW_NAME)
                    {
                        continue;
                    }

                    Definition definition = parameter?.Definition;
                    if (definition == null)
                    {
                        continue;
                    }

                    Parameter parameter_New = viewPlan_New.get_Parameter(parameter.Definition);
                    if (parameter_New == null)
                    {
                        continue;
                    }

                    CopyValue(parameter, parameter_New);
                }

                if (elements_ColorFillLegend != null && elements_ColorFillLegend.Count != 0)
                {
                    ElementTransformUtils.CopyElements(viewPlan, elements_ColorFillLegend.ConvertAll(x => x.Id), viewPlan_New, null, new CopyPasteOptions());
                }

                result.Add(viewPlan_New);

                IEnumerable <ElementId> elementIds_Dependent = viewPlan.GetDependentViewIds();
                if (elementIds_Dependent != null && elementIds_Dependent.Count() != 0)
                {
                    foreach (ElementId elementId_Dependent in elementIds_Dependent)
                    {
                        ViewPlan viewPlan_Dependent = document.GetElement(elementId_Dependent) as ViewPlan;
                        if (viewPlan_Dependent == null)
                        {
                            continue;
                        }

                        viewPlans = new FilteredElementCollector(document).OfClass(typeof(ViewPlan)).Cast <ViewPlan>().ToList();
                        string name_Dependent = name;
                        if (viewPlan_Dependent.Name.StartsWith(viewPlan.Name))
                        {
                            name_Dependent = level.Name + viewPlan_Dependent.Name.Substring(viewPlan.Name.Length);
                        }
                        else
                        {
                            Element scopeBox = viewPlan_Dependent.ScopeBox();
                            if (scopeBox != null)
                            {
                                name_Dependent = level.Name + " - " + scopeBox.Name;
                            }
                        }

                        ViewPlan viewPlan_Dependent_New = null;

                        if (useExisting)
                        {
                            viewPlan_Dependent_New = viewPlans.Find(x => x.Name == name_Dependent);
                        }

                        if (viewPlan_Dependent_New == null)
                        {
                            ElementId elementId_Dependent_New = viewPlan_New.Duplicate(ViewDuplicateOption.AsDependent);
                            if (elementId_Dependent_New == null || elementId_Dependent_New == ElementId.InvalidElementId)
                            {
                                continue;
                            }

                            viewPlan_Dependent_New = document.GetElement(elementId_Dependent_New) as ViewPlan;
                            if (viewPlan_Dependent_New == null)
                            {
                                continue;
                            }

                            // Check name uniqueness
                            string name_Dependent_Temp = name_Dependent;
                            int    count = 0;
                            while (viewPlans.Find(x => x.Name == name_Dependent_Temp) != null)
                            {
                                count++;
                                name_Dependent_Temp = string.Format("{0} {1}", name_Dependent, count);
                            }

                            viewPlan_Dependent_New.Name = name_Dependent_Temp;
                        }

                        foreach (Parameter parameter in viewPlan_Dependent.ParametersMap)
                        {
                            if (parameter.Id.IntegerValue == (int)BuiltInParameter.VIEW_NAME)
                            {
                                continue;
                            }

                            Definition definition = parameter?.Definition;
                            if (definition == null)
                            {
                                continue;
                            }

                            Parameter parameter_New = viewPlan_Dependent_New.get_Parameter(parameter.Definition);
                            if (parameter_New == null)
                            {
                                continue;
                            }

                            CopyValue(parameter, parameter_New);
                        }

                        result.Add(viewPlan_Dependent_New);
                    }
                }
            }

            return(result);
        }
        private List <string> getOpenPlanViewsTitles()
        {
            List <string> planViewsTitles = new List <string>();

            if (this.uidoc != null)
            {
                Document doc = this.uidoc.Document;
                if (doc != null)
                {
                    IList <UIView> uiviews   = this.uidoc.GetOpenUIViews();
                    IList <UIView> cluiviews = new List <UIView>();

                    for (int i = 0; i < uiviews.Count; i++)
                    {
                        UIView    curUIView = uiviews[i];
                        ElementId curViewId = curUIView.ViewId;
                        if (curViewId != null)
                        {
                            Element curElement = doc.GetElement(curViewId);
                            if (curElement != null)
                            {
                                string curElementTypeName = curElement.GetType().Name;
                                if (curElementTypeName == "ViewPlan")
                                {
                                    ViewPlan curViewPlan = curElement as ViewPlan;
                                    if (curViewPlan != null)
                                    {
                                        Autodesk.Revit.DB.ElementId   curElementId   = curViewPlan.GetTypeId();
                                        Autodesk.Revit.DB.ElementType curElementType = doc.GetElement(curElementId) as ElementType;

                                        if (curElementType != null)
                                        {
                                            if (curElementType.GetType().Name == "ViewFamilyType")
                                            {
                                                Autodesk.Revit.DB.ViewFamilyType curViewFamilyType = (ViewFamilyType)curElementType;

                                                if (curViewFamilyType != null)
                                                {
                                                    string curTitle = curViewFamilyType.Name + ": " + curViewPlan.Name;
                                                    planViewsTitles.Add(curTitle);
                                                }
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    cluiviews.Add(curUIView);
                                }
                            }
                        }
                    }

                    if (cluiviews.Count > 1)
                    {
                        while (cluiviews.Count > 0)
                        {
                            try
                            {
                                UIView curUIView = cluiviews.ElementAt(0);
                                cluiviews.RemoveAt(0);
                                if (curUIView != null)
                                {
                                    try
                                    {
                                        if (cluiviews.Count > 1)
                                        {
                                            curUIView.Close();
                                            curUIView.Dispose();
                                        }
                                    }
                                    catch (Exception exA)
                                    {
                                    }
                                }
                            }
                            catch (Exception exB)
                            {
                            }
                        }
                    }
                }
            }

            return(planViewsTitles);
        }