Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        // Создание фильтров 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);
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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));
            }
        }