示例#1
0
        private bool CreateFiltersIfMissing(Document doc)
        {
            if (curLODfilter != null && tarLODfilter != null)
            {
                return(false);
            }
            ElementId val  = LODapp.GetLODparameter(doc, "Current_LOD").get_Id();
            ElementId val2 = LODapp.GetLODparameter(doc, "Target_LOD").get_Id();
            ParameterValueProvider     val3 = new ParameterValueProvider(val);
            ParameterValueProvider     val4 = new ParameterValueProvider(val2);
            FilterNumericRuleEvaluator val5 = new FilterNumericEquals();

            ElementParameterFilter[] array = (ElementParameterFilter[])new ElementParameterFilter[VALID_CURRENT_LOD_VALUES.Length];
            for (int i = 0; i < VALID_CURRENT_LOD_VALUES.Length; i++)
            {
                FilterIntegerRule val6 = new FilterIntegerRule(val3, val5, VALID_CURRENT_LOD_VALUES[i]);
                array[i] = new ElementParameterFilter(val6, true);
            }
            curLODfilter = new LogicalAndFilter((IList <ElementFilter>)array);
            ElementParameterFilter[] array2 = (ElementParameterFilter[])new ElementParameterFilter[VALID_TARGET_LOD_VALUES.Length];
            for (int j = 0; j < VALID_TARGET_LOD_VALUES.Length; j++)
            {
                FilterIntegerRule val7 = new FilterIntegerRule(val4, val5, VALID_TARGET_LOD_VALUES[j]);
                array2[j] = new ElementParameterFilter(val7, true);
            }
            tarLODfilter = new LogicalAndFilter((IList <ElementFilter>)array2);
            return(true);
        }
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            UIApplication val  = commandData.get_Application();
            Document      val2 = val.get_ActiveUIDocument().get_Document();
            Selection     val3 = val.get_ActiveUIDocument().get_Selection();

            try
            {
                ICollection <ElementId> elementIds = val3.GetElementIds();
                if (elementIds.Count == 0)
                {
                    IList <Reference> refs = val3.PickObjects(1, "Select target elements for LOD change");
                    elementIds = LODapp.GetElementIds(val2, refs);
                }
                View            viewFromElements = GetViewFromElements(val2, elementIds);
                IList <Element> list;
                if (viewFromElements == null)
                {
                    IList <Element> elements2 = LODapp.GetElements(val2, elementIds);
                    list = elements2;
                }
                else
                {
                    list = GetFilteredElementsFromView(val2, viewFromElements);
                    if (list == null)
                    {
                        return(1);
                    }
                }
                if (setLODform == null)
                {
                    setLODform = new SetLODform();
                }
                setLODform.ShowDialog();
                if (setLODform.DialogResult != DialogResult.OK)
                {
                    return(1);
                }
                string      selectedLODtype     = setLODform.SelectedLODtype;
                int         selectedLODvalue    = setLODform.SelectedLODvalue;
                Definition  parameterDefinition = LODapp.GetParameterDefinition(val2, selectedLODtype);
                Transaction val4 = new Transaction(val2, "Set LOD");
                val4.Start();
                LODapp.SetParameterOfElements((IEnumerable <Element>)list, parameterDefinition, selectedLODvalue);
                val4.Commit();
            }
            catch (OperationCanceledException)
            {
                return(1);
            }
            catch (Exception ex)
            {
                message = ex.Message;
                return(-1);
            }
            return(0);
        }
示例#3
0
        private IList <ElementId> CreateFiltersIfMissing(Document doc)
        {
            bool[] array = new bool[4];
            FilteredElementCollector val = new FilteredElementCollector(doc);

            val.OfClass(typeof(ParameterFilterElement));
            ICollection <ElementId> collection = val.ToElementIds();

            foreach (ElementId item2 in collection)
            {
                Element val2 = doc.GetElement(item2);
                for (int i = 0; i < filterNames.Length; i++)
                {
                    if (val2.get_Name() == filterNames[i])
                    {
                        array[i] = true;
                    }
                }
            }
            if (array.Any((bool b) => !b))
            {
                ElementId         val3 = LODapp.GetLODparameter(doc, "Current_LOD").get_Id();
                IList <ElementId> list = (from cat in LODapp.lodCatArray
                                          where (int)cat != -2000220
                                          select new ElementId(cat)).ToList();
                Transaction val4 = new Transaction(doc, "Create LOD filters");
                try
                {
                    val4.Start();
                    for (int j = 0; j < filterNames.Length; j++)
                    {
                        if (!array[j])
                        {
                            ParameterFilterElement val5 = ParameterFilterElement.Create(doc, filterNames[j], (ICollection <ElementId>)list);
                            FilterRule             item = ParameterFilterRuleFactory.CreateEqualsRule(val3, lodValues[j]);
                            val5.SetRules((IList <FilterRule>) new List <FilterRule>(1)
                            {
                                item
                            });
                        }
                    }
                    val4.Commit();
                }
                catch (Exception innerException)
                {
                    val4.RollBack();
                    throw new Exception("Failed to create filters.", innerException);
                }
            }
            return(GetLODfilters(doc));
        }
示例#4
0
        public void Execute(UpdaterData data)
        {
            Document doc = data.GetDocument();

            if (!doc.get_IsFamilyDocument())
            {
                Definition parameterDefinition = LODapp.GetParameterDefinition(doc, "Current_LOD");
                if (parameterDefinition != null)
                {
                    ICollection <ElementId> addedElementIds = data.GetAddedElementIds();
                    IList <Element>         elems           = (from ElementId id in addedElementIds
                                                               select doc.GetElement(id)).ToList();
                    LODapp.SetParameterOfElementsIfNotSet((IEnumerable <Element>)elems, parameterDefinition, 200);
                }
            }
        }
示例#5
0
 public bool IsCommandAvailable(UIApplication appData, CategorySet selectedCategories)
 {
     try
     {
         Document   doc = appData.get_ActiveUIDocument().get_Document();
         Definition parameterDefinition = LODapp.GetParameterDefinition(doc, "Current_LOD");
         if (parameterDefinition == null)
         {
             return(true);
         }
         return(false);
     }
     catch
     {
         return(false);
     }
 }
示例#6
0
        public void Execute(UpdaterData data)
        {
            Document val = data.GetDocument();
            ICollection <ElementId> modifiedElementIds = data.GetModifiedElementIds();
            Definition curLODdef = LODapp.GetParameterDefinition(val, "Current_LOD");
            Definition tarLODdef = LODapp.GetParameterDefinition(val, "Target_LOD");

            CreateFiltersIfMissing(val);
            IEnumerable <Element> enumerable = new FilteredElementCollector(val, modifiedElementIds).WherePasses(curLODfilter).ToElements();
            bool flag = false;
            IEnumerable <Element> source = new FilteredElementCollector(val, modifiedElementIds).WherePasses(tarLODfilter).ToElements();
            bool flag2 = true;

            source = from e in source
                     where e.get_Parameter(tarLODdef).get_HasValue()
                     select e;

            if (enumerable.Count() > 0)
            {
                int    num  = enumerable.First().get_Parameter(curLODdef).AsInteger();
                string text = "Invalid Current_LOD Value: " + num;
                TaskDialog.Show("Invalid Value", text);
                foreach (Element item in enumerable)
                {
                    item.get_Parameter(curLODdef).Set(200);
                }
            }
            if (source.Count() > 0)
            {
                int    num2  = source.First().get_Parameter(tarLODdef).AsInteger();
                string text2 = "Invalid Target_LOD Value: " + num2;
                TaskDialog.Show("Invalid Value", text2);
                foreach (Element item2 in source)
                {
                    item2.get_Parameter(tarLODdef).Set(200);
                }
            }
        }
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            Application val  = commandData.get_Application().get_Application();
            Document    val2 = commandData.get_Application().get_ActiveUIDocument().get_Document();
            Definition  val3 = LODapp.GetParameterDefinition(val2, "Current_LOD");
            Definition  val4 = LODapp.GetParameterDefinition(val2, "Target_LOD");
            Definition  val5 = LODapp.GetParameterDefinition(val2, "MEA");
            Definition  val6 = LODapp.GetParameterDefinition(val2, "Zone");
            Transaction val7 = new Transaction(val2, "Create LOD Parameter");

            try
            {
                val7.Start();
                string tempPath = Path.GetTempPath();
                tempPath += "LODmanager\\";
                Directory.CreateDirectory(tempPath);
                string     text       = tempPath + "RevitParameters.txt";
                FileStream fileStream = File.Create(text);
                fileStream.Close();
                val.set_SharedParametersFilename(text);
                DefinitionFile  val8 = val.OpenSharedParameterFile();
                DefinitionGroup val9 = val8.get_Groups().Create("BIM");
                if (val3 == null)
                {
                    ExternalDefinitionCreationOptions val10 = new ExternalDefinitionCreationOptions("Current_LOD", 2);
                    val10.set_Description("The Current Level of Development of the Object. \nOptions: 100, 200, 300, 350, 400. \nSee LOD Specification for details.");
                    val3 = val9.get_Definitions().Create(val10);
                }
                if (val4 == null)
                {
                    ExternalDefinitionCreationOptions val11 = new ExternalDefinitionCreationOptions("Target_LOD", 2);
                    val11.set_Description("The Target Level of Development of the Object. \nOptions: 100, 200, 300, 350, 400. \nSee LOD Specification for details.");
                    val4 = val9.get_Definitions().Create(val11);
                }
                if (val5 == null)
                {
                    ExternalDefinitionCreationOptions val12 = new ExternalDefinitionCreationOptions("MEA", 1);
                    val12.set_Description("The Model Element Author for the Object.");
                    val5 = val9.get_Definitions().Create(val12);
                }
                if (val6 == null)
                {
                    ExternalDefinitionCreationOptions val13 = new ExternalDefinitionCreationOptions("Zone", 1);
                    val13.set_Description("The Zone in which this Object resides.");
                    val6 = val9.get_Definitions().Create(val13);
                }
                CategorySet       val14       = val.get_Create().NewCategorySet();
                BuiltInCategory[] lodCatArray = LODapp.lodCatArray;
                foreach (BuiltInCategory val15 in lodCatArray)
                {
                    Category val16 = val2.get_Settings().get_Categories().get_Item(val15);
                    val14.Insert(val16);
                }
                InstanceBinding val17 = val.get_Create().NewInstanceBinding(val14);
                val2.get_ParameterBindings().Insert(val3, val17, -5000175);
                val2.get_ParameterBindings().Insert(val4, val17, -5000175);
                val2.get_ParameterBindings().Insert(val5, val17, -5000175);
                val2.get_ParameterBindings().Insert(val6, val17, -5000175);
                val7.Commit();
            }
            catch (Exception ex)
            {
                val7.RollBack();
                message = ex.ToString();
                return(-1);
            }
            val7 = new Transaction(val2, "Set Default LOD Values");
            try
            {
                val7.Start();
                BuiltInCategory[] lodCatArray2 = LODapp.lodCatArray;
                foreach (BuiltInCategory val18 in lodCatArray2)
                {
                    FilteredElementCollector val19 = new FilteredElementCollector(val2);
                    val19.OfCategory(val18);
                    IEnumerable <Element> elems = val19.ToElements();
                    LODapp.SetParameterOfElementsIfNotSet(elems, val3, 200);
                }
                val7.Commit();
            }
            catch (Exception ex2)
            {
                val7.RollBack();
                message = ex2.ToString();
                return(-1);
            }
            return(0);
        }
示例#8
0
 public void Execute(UpdaterData data)
 {
     if (!Paused)
     {
         Document         doc  = data.GetDocument();
         List <ElementId> list = data.GetAddedElementIds().ToList();
         list.AddRange(data.GetModifiedElementIds());
         IList <Element> list2 = (from ElementId id in list
                                  select doc.GetElement(id)).ToList();
         Definition                parameterDefinition = LODapp.GetParameterDefinition(doc, "Zone");
         ElementId                 val  = LODapp.GetLODparameter(doc, parameterDefinition).get_Id();
         ParameterValueProvider    val2 = new ParameterValueProvider(val);
         FilterStringRuleEvaluator val3 = new FilterStringContains();
         FilterStringRuleEvaluator val4 = new FilterStringEquals();
         FilterStringRuleEvaluator val5 = new FilterStringBeginsWith();
         foreach (Element item in list2)
         {
             string text = item.LookupParameter("Name").AsString();
             if (!string.IsNullOrWhiteSpace(text))
             {
                 FilterRule[] array = (FilterRule[])new FilterRule[3]
                 {
                     new FilterStringRule(val2, val4, text, true),
                     new FilterStringRule(val2, val5, text + ", ", true),
                     new FilterStringRule(val2, val3, ", " + text, true)
                 };
                 ElementParameterFilter      val6        = new ElementParameterFilter((IList <FilterRule>)array);
                 IList <Element>             list3       = new FilteredElementCollector(doc).WhereElementIsNotElementType().WherePasses(val6).ToElements();
                 BoundingBoxIntersectsFilter val7        = new BoundingBoxIntersectsFilter(ToOutline(item.get_BoundingBox(null)));
                 IList <Element>             list4       = new FilteredElementCollector(doc).WhereElementIsNotElementType().WherePasses(val7).ToElements();
                 IEnumerable <Element>       enumerable  = list3.Except(list4, new EqualUniqueId());
                 IEnumerable <Element>       enumerable2 = list4.Except(list3, new EqualUniqueId());
                 foreach (Element item2 in enumerable)
                 {
                     Parameter val8 = item2.get_Parameter(parameterDefinition);
                     if (val8 != null)
                     {
                         string text2 = val8.AsString() ?? string.Empty;
                         string text3;
                         if (text2.Length > text.Length)
                         {
                             int num = text2.IndexOf(text);
                             text3 = ((num < 2 || text2[num - 2] != ',') ? text2.Remove(num, text.Length + 2) : text2.Remove(num - 2, text.Length + 2));
                         }
                         else
                         {
                             text3 = string.Empty;
                         }
                         val8.Set(text3);
                     }
                 }
                 foreach (Element item3 in enumerable2)
                 {
                     Parameter val9  = item3.get_Parameter(parameterDefinition);
                     string    text4 = (((int)val9 != 0) ? val9.AsString() : null) ?? string.Empty;
                     string    text5 = (text4.Length <= 0) ? text : (text4 + ", " + text);
                     Parameter val10 = item3.get_Parameter(parameterDefinition);
                     if ((int)val10 != 0)
                     {
                         val10.Set(text5);
                     }
                 }
             }
         }
     }
 }