Крыши как не видел, так и не видит.Крыши это системное семейство. Для них другой алгоритм.
Крыши это системное семейство. Для них другой алгоритм.
Каждое системное семейство в API представлено своим классом. В общем виде не получится извлечь. Для крыш будет так:Код - C# [Выбрать]
var collector = new FilteredElementCollector(ActiveUIDocument.Document); var roofs = collector .OfClass(typeof(RoofBase)) .WhereElementIsNotElementType();
А есть еще какие-то семействаВсе системные семейства - стены, перекрытия, крыши, воздуховоды, трубы, кабельные лотки... Возможно еще что то упустил. Для каждого из таких семейств есть свой класс в API
Все системные семейства - стены, перекрытия, крыши, воздуховоды, трубы, кабельные лотки... Возможно еще что то упустил. Для каждого из таких семейств есть свой класс в API
Возможно еще что то упустил
А есть где-нибудь перечень всех системных семейств и названия их классов?Списка такого вроде нет. Первое что пришло в голову - вот так:
Не могу врубиться, что такое «e»?Лямбда-выражения (https://msdn.microsoft.com/ru-ru/library/bb397675.aspx).
Мне сначала нужно сделать выборку элементов и для каждого элемента выполнить этот код?Нет, выполнить как есть
Правильно ли я понимаю, что сначала нужна эта строка:Нет. Она просто лишняя. New FilteredElementCollector(Doc.Document) и так уже возвратит коллекцию Element.
Код - vb.net: [Выделить]
Dim collector As FilteredElementCollector = New FilteredElementCollector(Doc.Document).OfClass(GetType(Element))
' Здесь Ваш код, который я пока переписать на VB не могу )))Гуглитть по словам Linq VB.NET :) записать это вроде можно на vb.net
Гуглитть по словам Linq VB.NET записать это вроде можно на vb.net
Усложню задачу, нужно узнать сколько экземпляров каждого типа семейства , количество типов не ограниченно.
То есть допустим есть список значения какого нибудь параметра семейства:
ширина=[300, 300,500,500,1000,100,100,100]
тут видно что есть экземпляры с одинаковым типом, единственное что я придумал это сортировка по одинаковым значениям , но проблема в том что таких параметров десятки
Усложню задачу, нужно узнать сколько экземпляров каждого типа семействаОчевидно, что нужно узнать тип каждого экземпляра, и посчитать количество в разрезе типов.
Если это так, то можно у данного семейства проверить список FamilySymbolSet, если справочник не обманывает )))в 2016 эта коллекция удаленна ((
Правильно ли я Вас понимаю, что речь идет об одном и том же семействе, просто у семейства имеются множество (список) типоразмеров с разными значениями свойств?не только разные значения но и разные типы семейства , тоесть значения могут совпадать абсолютно все но это другой тип.
Очевидно, что нужно узнать тип каждого экземпляра, и посчитать количество в разрезе типов.ну да в принципе , так и иду :
Поможет LINQ и группировка:спасибо , будем гуглить тогда и разбираться :) думал что есть в самом API что то чтобы не изобретать велосипед.......
detail = collector2.OfClass(FamilyInstance).ToElements()в коде между detail и detail2 разницы нет:)
detail2 = collector2.OfType(FamilyInstance).ToElements()
думал что есть в самом API что тоТак вроде и нет велосипеда:) Используется API в чистом виде без всяких велосипедов для удовлетворения ваших нужд. Для этого API и нужно. Какой вы метод ожидали в API? GetAllFamilySymbolsWithInstances?
Так вроде и нет велосипеда:)ну я увидел LINQ и у меня сразу возник перед глазами такой хороший циклокрос ) я так понимаю это множественный критерий сортировки, тогда в Python нужно еще почитать как это реализуется
detail = collector2.OfClass(FamilyInstance).ToElements()А так вижу, что напрямую collector2.OfType(FamilySymbol) лучше не применять. В этом случае фильтрация идет не средствами Revit, а выбираются абсолютно все элементы и после этого с помощью LINQ идет фильтрация.
detail2 = collector2.OfType(FamilySymbol).ToElements()
а так ?
ну я увидел LINQ и у меня сразу возник перед глазами такой хороший циклокрос ) я так понимаю это множественный критерий сортировки, тогда в Python нужно еще почитать как это реализуетсяLINQ это не велосипед, а инструмент, которым как и любым другим надо правильно уметь пользоваться.
А так вижу, что напрямую collector2.OfType(FamilySymbol) лучше не применять.не спорю , это пока что мысли
поэтому и подумал что это нечто сложноеВ целом идея такова. Метода, который бы выдал нам количество экземпляров конкретного типа - нет. Но есть все, для того чтобы это посчитать.
В целом идея такова. Метода, который бы выдал нам количество экземпляров конкретного типа - нет. Но есть все, для того чтобы это посчитать.
Варианта 2.
1) Либо мы сначала берем все экземпляры, который нам нужны, затем группируем их по типу. Как группируем - с помощью LINQ или циклами - не важно.
2) Если у нас есть список типов, для которых мы хотим посчитать количество экземпляров, то с помощью FilteredElementCollector в цикле выбираем все экземпляры заданного типа и соответственно берем их количество.
проблема в том что список не постоянный , туда может залетать "сам" любой тип семейства.Тогда вариант 1
как связать количество экземпляров типа с параметрами каждого типаЯ абсолютно не понял зачем их связывать. Одинаковые типы имеют одинаковые параметры. Соответственно тот тип 2, который есть в начале, будет иметь те же самые параметры, что и типы 2 в самом конце. Потому что это один и тот же объект (тип)