ADN Club > Revit API

Фильтр по материалам

(1/2) > >>

Alexander:
Добрый день!

В проекте есть несколько перекрытий(полы), которые состоят из нескольких материалов(например бетон, плитка и т.д.). Мне нужно отфильтровать эти материалы, чтобы получить их описание и записать в общий параметр, который является параметром перекрытие.
Поскольку в проекте несколько уровней, фильтр должен быть ещё и по уровням.  То есть сначала фильтр по уровням, потом по перекрытиям и по материалам.
Создать фильтр для материалов по уровням или для перекрытий по уровням у меня получилось, но всё вместе пока не получается.
Возможен ли такой фильтр?

Виктор Чекалин:
Добрый день.

Речь идет о создании фильтра в спецификации?

Alexander:
Нет

Виктор Чекалин:
А о каком? FilteredElementCollector?

Так как вы написали, что у вас получилось сделать фильтр по отдельности, а вместе - нет, то неплохо было бы привести пример кода, дабы посмотреть что там не верно.

Alexander:
           
--- Код - C# [Выбрать] ---        public static ElementId FindLevelId(Document doc, string name)        {            FilteredElementCollector collectorLevels = new FilteredElementCollector(doc);            collectorLevels.OfClass(typeof(Level));             // Now use LINQ to see if one exists with provided name.            ElementId idLevel = ElementId.InvalidElementId;            try            {                Element levelMatched = collectorLevels.First(level => level.Name.Equals(name));                if (levelMatched != null)                    idLevel = levelMatched.Id;            }            catch (System.InvalidOperationException)            {            }            catch (System.ArgumentNullException)            {            }            return idLevel;        }             ElementId levelFirstId = FindLevelId(activeDoc, level_first);            ElementLevelFilter filterElementsOnLevelOne = new ElementLevelFilter(levelFirstId);            FilteredElementCollector filteredElementCollectorWallOne = new FilteredElementCollector(activeDoc);            var LevelOneParam = filteredElementCollectorWallOne.OfClass(typeof(Floor));            LevelOneParam.OfCategory(BuiltInCategory.OST_Floors);            LevelOneParam.WherePasses(filterElementsOnLevelOne);             foreach (Floor floor in LevelOneParam)            {                Parameter parameterDescription = floor.get_Parameter("Описание1");                Parameter parameterMatName = floor.get_Parameter(BuiltInParameter.MATERIAL_NAME);                             var text = parameterMatName.AsString();                var res = floor.get_Parameter("Описание1").Set(" слово ");            }
В таком случае он не найдёт parameterMatName , но в общий параметр Описание1 можно записать символы.
Вопрос в том, как создать фильтр, чтобы ещё и parameterMatName был виден.

Фильтр для материалов:

--- Код - C# [Выбрать] ---        ElementId levelFirstId = FindLevelId(activeDoc, _level_first);            FilteredElementCollector collector1 = new FilteredElementCollector(activeDoc);            BuiltInParameter bip = BuiltInParameter.FAMILY_LEVEL_PARAM;            ParameterValueProvider provider = new ParameterValueProvider(new ElementId(bip));            FilterNumericRuleEvaluator evaluator = new FilterNumericEquals();            FilterRule ruleOne = new FilterElementIdRule(provider, evaluator, levelFirstId);            ElementParameterFilter filterOne = new ElementParameterFilter(ruleOne);            collector1.OfClass(typeof(Material)).OfType<Material>();            //collector1.OfCategory(BuiltInCategory.OST_Materials);            //collector1.WherePasses(filterOne);            ICollection<Element> LevelOneParam = collector1.ToElements();                        foreach (Materials materials in LevelOneParam)            {                Parameter parameterDescription = materials.get_Parameter("Описание1");                Parameter parameterMatName = materials.get_Parameter(BuiltInParameter.MATERIAL_NAME);                             var text = parameterMatName.AsString();                var res = materials.get_Parameter("Описание1").Set(" слово ");            }

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии