вторник, 20 октября 2009 г.

Revit API. Работа с элементами. Вступление.

В данной короткой статье хотелось бы рассказать об элементах (семействах, типах и их вхождениях) и как они представлены в 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 в проекте то в получите елементы всех ЗАГРУЖЕНЫХ типов, а не только типов, размещенных в проекте!

На этом думаю пока хватит.

Комментариев нет:

Отправить комментарий