2015-01-21 2 views
0

Я хотел бы добавить плагин, который читает в файле данных, который содержит строку RevitIds и рисует их.Как получить список всех элементов в revit с помощью C#

Я не могу понять, как найти данный элемент в Revit на основе элемента stringId с использованием C#.

UIApplication uiApp = commandData.Application; 
Document doc = uiApp.ActiveUIDocument.Document; 

Я знаю, что это дает мне документ, но я не знаю, как получить все идентификаторы. Я думал о наличии цикла foreach, который проверяет строку идентификатора элемента с показателем всего документа, пока не найдет совпадение. Тогда я могу манипулировать им.

ответ

0

Один из способов - использовать FilteredElementCollector, чтобы перебирать определенные типы элементов, чтобы получить их элементы elementId.

FilteredElementCollector docCollector = new FilteredElementCollector(document).OfCategory(BuiltInCategory.OST_Walls); 

с последующим (как вы предложили):

foreach(Element el in docCollector) 
{ 
ElementId elID = el.Id; 
//.... 
} 

Модифицированная версия:

List<ElementId> ids = new FilteredElementCollector(document).OfCategory(BuiltInCategory.OST_Walls).ToElementIds().ToList(); 

с последующим (как вы предложили):

foreach(ElementId elId in ids) 
{ 
//.... 
} 

Если вы думать об итерации через ВСЕ элементы I предложите посмотреть этот пост в блоге от The Building Coder: Do Not Filter For All Elements

+0

что вы предлагают чрезвычайно дорого - займет намного больше времени, чем было предложено ниже, - и я предлагаю сделать то, что предложил Даррен ниже. – konrad

+0

Абсолютно. Чтобы получить элемент из ElementId, используйте ответ ниже. Однако вторая часть вопроса спросила, как получить все элементы ElementId. Мой ответ показал, как получить ElementId из определенной категории. – mtumminello

+0

OP явно является noob. Теперь он также явно заявляет, что ему нужен «цикл», который проверяет строку идентификатора элемента с именем всего документа, пока не найдет совпадение ». Это не требует цикла. Вы можете сделать то, что предложил Дарен ниже, и если GetElement() не возвращает ничего, что означает, что ваш идентификатор строки не существует в документе. Просто переходите к следующему. – konrad

2

Вы можете использовать метод Document.GetElement, чтобы получить элемент по его ElementId. Ответ на ваш вопрос немного зависит, если у вас есть UniqueId или ElementId в строчном представлении. Проверьте здесь для некоторого уточнения: https://boostyourbim.wordpress.com/2013/11/18/getting-an-element-from-a-string-id/

Предполагая, что у вас есть ElementId (не GUID, просто номер), вы можете сделать это:

int idInt = Convert.ToInt32(idAsString); 
ElementId id = new ElementId(idInt); 
Element eFromId = doc.GetElement(id); 

Или еще короче:

Element element = doc.GetElement(new ElementId(Convert.ToInt32(idAsString)));