В данной короткой статье хотелось бы рассказать об элементах (семействах, типах и их вхождениях) и как они представлены в Revit API.
Всё с чем мы оперируем в API представлено через класс Element. Именно из таких элементов можно получить набор после применения фильтров:
List<element> CatElem = new List<element>();
CategoryFilter catFilt = vnCommandData.Application.Create.Filter.NewCategoryFilter(cat);
Filter OkCatFilt = vnCommandData.Application.Create.Filter.NewLogicAndFilter(catFilt, filt);
vnCommandData.Application.ActiveDocument.get_Elements(OkCatFilt, CatElem);
(прим.1)
или после получения выбранных элементов:
List<element> el = new List<element>();
el = vnCommandData.Application.ActiveDocument.Selection.Elements;.
(прим.2)
Уже из этого набора можно получить некоторые параметры. Но в данном случае каждый из этих элементов может относиться к разным классам. Например FamilyInstance (вхождение СЕМЕЙСТВА), Wall (вхождение СТЕНЫ), FamilySymbol (Тип СЕМЕЙСТВА) и т.д.). Поэтому если набор так сказать разношерстный (пример 1 это будут элементы категории как вхождения, так и типов загруженных в проект. Пример 2 это фактически все варианты вождений, стены, марки, текст, пол и т.д.), нужно изначально отсеивать их по классам:
if (El.GetType() ==typeof( Autodesk.Revit.Elements.Wall))
//Если стена
{
Autodesk.Revit.Elements.Wall StenaInst = El as Autodesk.Revit.Elements.Wall;
// Далее работаем как с классом Wall
{
Это делается для того что у каждого класса есть свои особые параметры и получив их в виде Element в большенстве случаев до них не добраться.
Почти у каждого класса вхождения есть доступ к его типу и семейству (в случае если это семейство). Например
FamilyInstance Inst = El as FamilyInstance;
Family Fam=Inst.Symbol.Family;
FamilySymbol Tip = Inst.Symbol;
Далее из класса Symbol можно выцепить параметры типа (Tip.Parameters). Учтите что если получать через фильтры типы Symbol в проекте то в получите елементы всех ЗАГРУЖЕНЫХ типов, а не только типов, размещенных в проекте!
На этом думаю пока хватит.
Комментариев нет:
Отправить комментарий