private static FilterRule CreateRule(ElementId ParameterId, string Function, ElementId ValueId) { switch (Function) { case "Равно": return(ParameterFilterRuleFactory.CreateEqualsRule(ParameterId, ValueId)); case "Не равно": return(ParameterFilterRuleFactory.CreateNotEqualsRule(ParameterId, ValueId)); case "Больше": return(ParameterFilterRuleFactory.CreateGreaterRule(ParameterId, ValueId)); case "Больше или равно": return(ParameterFilterRuleFactory.CreateLessOrEqualRule(ParameterId, ValueId)); case "Меньше": return(ParameterFilterRuleFactory.CreateLessRule(ParameterId, ValueId)); case "Меньше или равно": return(ParameterFilterRuleFactory.CreateLessOrEqualRule(ParameterId, ValueId)); default: return(null); } }
// Создание фильтров IdentityDataAnalysis_Visibility и IdentityDataAnalysis_AnVisibility, // назначение им правил private void CreateFilters(UIDocument uiDoc, Parameter parameter, List <Element> elements) { IList <FilterRule> visibilityFilterRules = new List <FilterRule>(); visibilityFilterRules.Add(ParameterFilterRuleFactory.CreateEqualsRule(parameter.Id, "", true)); ElementParameterFilter visibilityFilter = new ElementParameterFilter(visibilityFilterRules); IList <FilterRule> anVisibilityFilterRules = new List <FilterRule>(); anVisibilityFilterRules.Add(ParameterFilterRuleFactory.CreateNotEqualsRule(parameter.Id, "", true)); ElementParameterFilter anVisibilityFilter = new ElementParameterFilter(anVisibilityFilterRules); List <ElementId> categorysIds = GetUniquCategorysIds(elements); ParameterFilterElement filterForVisibility = CreateFilterElement(uiDoc.Document, "IdentityDataAnalysis_Visibility", categorysIds, visibilityFilter); ParameterFilterElement filterForAnVisibility = CreateFilterElement(uiDoc.Document, "IdentityDataAnalysis_AnVisibility", categorysIds, anVisibilityFilter); }
private static FilterRule CreateRule(ElementId ParameterId, string Function, string Value) { switch (Function) { case "Равно": return(ParameterFilterRuleFactory.CreateEqualsRule(ParameterId, Value, true)); case "Не равно": return(ParameterFilterRuleFactory.CreateNotEqualsRule(ParameterId, Value, true)); case "Больше": return(ParameterFilterRuleFactory.CreateGreaterRule(ParameterId, Value, true)); case "Больше или равно": return(ParameterFilterRuleFactory.CreateLessOrEqualRule(ParameterId, Value, true)); case "Меньше": return(ParameterFilterRuleFactory.CreateLessRule(ParameterId, Value, true)); case "Меньше или равно": return(ParameterFilterRuleFactory.CreateLessOrEqualRule(ParameterId, Value, true)); case "Содержит": return(ParameterFilterRuleFactory.CreateContainsRule(ParameterId, Value, true)); case "Не содержит": return(ParameterFilterRuleFactory.CreateNotContainsRule(ParameterId, Value, true)); case "Начинается с": return(ParameterFilterRuleFactory.CreateBeginsWithRule(ParameterId, Value, true)); case "Не начинается с": return(ParameterFilterRuleFactory.CreateNotBeginsWithRule(ParameterId, Value, true)); case "Заканчивается на": return(ParameterFilterRuleFactory.CreateEndsWithRule(ParameterId, Value, true)); case "Не заканчивается на": return(ParameterFilterRuleFactory.CreateNotEndsWithRule(ParameterId, Value, true)); case "Поддерживает": return(ParameterFilterRuleFactory.CreateSharedParameterApplicableRule(Value)); default: return(null); } }
public static Autodesk.Revit.DB.FilterRule GetElementIdRule(ElementId paramId, CriteriaName selectedCriteria, ElementId ruleValue) { Autodesk.Revit.DB.FilterRule rule = null; try { switch (selectedCriteria) { case CriteriaName.equals: rule = ParameterFilterRuleFactory.CreateEqualsRule(paramId, ruleValue); break; case CriteriaName.isgreaterthan: rule = ParameterFilterRuleFactory.CreateGreaterRule(paramId, ruleValue); break; case CriteriaName.isgreaterthanorequalto: rule = ParameterFilterRuleFactory.CreateGreaterOrEqualRule(paramId, ruleValue); break; case CriteriaName.islessthan: rule = ParameterFilterRuleFactory.CreateLessRule(paramId, ruleValue); break; case CriteriaName.islessthanorequalto: rule = ParameterFilterRuleFactory.CreateLessOrEqualRule(paramId, ruleValue); break; case CriteriaName.doesnotequal: rule = ParameterFilterRuleFactory.CreateNotEqualsRule(paramId, ruleValue); break; } } catch (Exception ex) { System.Windows.MessageBox.Show("Failed to get integer filter rule.\n" + ex.Message, "Get Integer Filter Rule", MessageBoxButton.OK, MessageBoxImage.Warning); } return(rule); }
public static Autodesk.Revit.DB.FilterRule GetStringRule(ElementId paramId, CriteriaName selectedCriteria, string ruleValue) { Autodesk.Revit.DB.FilterRule rule = null; try { switch (selectedCriteria) { case CriteriaName.beginswith: rule = ParameterFilterRuleFactory.CreateBeginsWithRule(paramId, ruleValue, false); break; case CriteriaName.contains: rule = ParameterFilterRuleFactory.CreateContainsRule(paramId, ruleValue, false); break; case CriteriaName.endswith: rule = ParameterFilterRuleFactory.CreateEndsWithRule(paramId, ruleValue, false); break; case CriteriaName.equals: rule = ParameterFilterRuleFactory.CreateEqualsRule(paramId, ruleValue, false); break; case CriteriaName.isgreaterthan: rule = ParameterFilterRuleFactory.CreateGreaterRule(paramId, ruleValue, false); break; case CriteriaName.isgreaterthanorequalto: rule = ParameterFilterRuleFactory.CreateGreaterOrEqualRule(paramId, ruleValue, false); break; case CriteriaName.islessthan: rule = ParameterFilterRuleFactory.CreateLessRule(paramId, ruleValue, false); break; case CriteriaName.islessthanorequalto: rule = ParameterFilterRuleFactory.CreateLessOrEqualRule(paramId, ruleValue, false); break; case CriteriaName.doesnotbeginwith: rule = ParameterFilterRuleFactory.CreateNotBeginsWithRule(paramId, ruleValue, false); break; case CriteriaName.doesnotcontain: rule = ParameterFilterRuleFactory.CreateNotContainsRule(paramId, ruleValue, false); break; case CriteriaName.doesnotendwith: rule = ParameterFilterRuleFactory.CreateNotEndsWithRule(paramId, ruleValue, false); break; case CriteriaName.doesnotequal: rule = ParameterFilterRuleFactory.CreateNotEqualsRule(paramId, ruleValue, false); break; } } catch (Exception ex) { System.Windows.MessageBox.Show("Failed to get string filter rule.\n" + ex.Message, "Get String Filter Rule", MessageBoxButton.OK, MessageBoxImage.Warning); } return(rule); }
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { // Add an EventLogTraceListener object System.Diagnostics.Trace.Listeners.Add( new System.Diagnostics.EventLogTraceListener("Application")); // Lay the hands on the active document UIDocument uidoc = commandData.Application.ActiveUIDocument; Document doc = uidoc.Document; // ensure that the shared parameters are defined in the current doc int foundParams = 0; List <ElementId> paramIds = new List <ElementId>(); DefinitionBindingMapIterator itr = doc.ParameterBindings.ForwardIterator(); while (itr.MoveNext()) { InternalDefinition def = itr.Key as InternalDefinition; if (def.Name == BLOCK_PARAMETER || def.Name == FLAT_NO_PARAMETER || def.Name == FLAT_AREA_PARAMETER || def.Name == FLAT_AREA_RDC_PARAMETER || def.Name == ROOM_AREA_RDC_PARAMETER || def.Name == REDN_COEFF_PARAMETER) { ++foundParams; if (def.Name != FLAT_AREA_PARAMETER && def.Name != FLAT_AREA_RDC_PARAMETER && def.Name != ROOM_AREA_RDC_PARAMETER && def.Name != REDN_COEFF_PARAMETER) { paramIds.Add(def.Id); } } } if (foundParams < 6) { TaskDialog.Show("Error", "Either not all of the required parameters are defined in the document or not all of the necessary parameters are assigned values." + ".\n\nPlease ensure that the following parameters exit:" + $"\n\n{BLOCK_PARAMETER} - shall not be empty.\n{FLAT_NO_PARAMETER} - shall not be empty.\n{FLAT_AREA_PARAMETER}" + $"\n{FLAT_AREA_RDC_PARAMETER}\n{ROOM_AREA_RDC_PARAMETER}\n{REDN_COEFF_PARAMETER}"); return(Result.Failed); } // Set up a timer Timing myTimer = new Timing(); myTimer.StartTime(); List <ElementFilter> parameters = new List <ElementFilter>(); try { foreach (ElementId paramId in paramIds) { parameters.Add(new ElementParameterFilter (ParameterFilterRuleFactory .CreateNotEqualsRule(paramId, "", false))); } LogicalAndFilter andFilter = new LogicalAndFilter(parameters); var elementsCollected = new FilteredElementCollector(doc, doc.ActiveView.Id) .WherePasses(new Autodesk.Revit.DB.Architecture.RoomFilter()) .WherePasses(andFilter) .ToElements() .Cast <Autodesk.Revit.DB.Architecture.Room>() .ToList(); if (elementsCollected.Count == 0) { TaskDialog.Show("Error", "No room has been detected."); return(Result.Failed); } var groupedByBlockNo = from elem in elementsCollected group new { elem.Id, elem.Area, FlatNo = elem.LookupParameter(FLAT_NO_PARAMETER).AsString(), Factor = elem.LookupParameter(REDN_COEFF_PARAMETER).AsDouble() != 0 ? elem.LookupParameter(REDN_COEFF_PARAMETER).AsDouble() : 1 } by elem.LookupParameter(BLOCK_PARAMETER).AsString() into grp select grp; foreach (var grpByBlock in groupedByBlockNo) { var groupedByFlatNo = from elem in grpByBlock group elem by elem.FlatNo into grpByFlat select grpByFlat; using (Transaction t = new Transaction(doc, "Set Room & Flat Areas")) { t.Start(); foreach (var grp in groupedByFlatNo) { double area = 0; double reducedArea = 0; foreach (var rm in grp) { area += rm.Area; reducedArea += rm.Area * rm.Factor; doc.GetElement(rm.Id) .LookupParameter(ROOM_AREA_RDC_PARAMETER) .Set(rm.Area * rm.Factor); } foreach (var rm in grp) { Element rmAsElem = doc.GetElement(rm.Id); rmAsElem.LookupParameter(FLAT_AREA_PARAMETER).Set(area); rmAsElem.LookupParameter(FLAT_AREA_RDC_PARAMETER).Set(reducedArea); } } t.Commit(); } } return(Result.Succeeded); } catch (Autodesk.Revit.Exceptions.OperationCanceledException) { return(Result.Cancelled); } catch (Exception ex) { TaskDialog.Show("Exception", string.Format("{0}\n{1}", ex.Message, ex.StackTrace)); System.Diagnostics.Trace.Write(string.Format("{0}\n{1}", ex.Message, ex.StackTrace)); return(Result.Failed); } finally { myTimer.StopTime(); System.Diagnostics.Trace .Write(string.Format("Time elapsed: {0}s", myTimer.Duration.TotalSeconds)); } }