Сообщество программистов Autodesk в СНГ

ADN Club => Revit API => Тема начата: Алексей (IdeaSoft) от 20-12-2018, 10:50:40

Название: Присвоить имя семейства элементу TextNode
Отправлено: Алексей (IdeaSoft) от 20-12-2018, 10:50:40
Создаю объект Autodesk.REvit.DB.TextNode
Как мне назначить ему нужно семейство?
Подозреваю что это последний параметр
 TypeId в конструкторе TextNode.Create(...., TypeId);
Название: Re: Присвоить имя семейства элементу TextNode
Отправлено: Александр Игнатович от 20-12-2018, 10:54:26
Подозреваю, что таки TextNote, а не TextNode.

В общем, всё довольно просто. Есть 2 варианта:
1) использовать FilteredElementCollector, найти нужный TextNoteType
2) найти используемый по умолчанию
Код - C# [Выбрать]
  1. doc.GetDefaultElementTypeId(ElementTypeGroup.TextNoteType)
Название: Re: Присвоить имя семейства элементу TextNode
Отправлено: Александр Пекшев aka Modis от 20-12-2018, 10:54:33
Подозреваю что это последний параметр
Правильно понимаете. С помощью FilteredElementCollector собираете все типоразмеры для TextNote, по имени (если вам так нужно) находите среди них нужный и передаете его id
Название: Re: Присвоить имя семейства элементу TextNode
Отправлено: Алексей (IdeaSoft) от 20-12-2018, 11:07:40
1) использовать FilteredElementCollector, найти нужный TextNoteType
2) найти используемый по умолчанию

Я так понял мне нужно получить Id семейства.
А как это сделать, если я знаю имя семейства?

Я заранее знаю имя семейства текста "2.0 мм ГОСТ"


Есть что-то типа того doc.GetIdFromName(string Name)
Название: Re: Присвоить имя семейства элементу TextNode
Отправлено: Александр Игнатович от 20-12-2018, 11:11:02
Код - C# [Выбрать]
  1. var collector = new FilteredElementCollector(doc);
  2. var textNoteType = collector.OfClass(typeof(TextNoteType)).FirstOrDefault(x => x.Name == "2.0 мм ГОСТ");
  3.  
  4. if (textNoteType != null) //.... use textNoteType.Id
Название: Re: Присвоить имя семейства элементу TextNode
Отправлено: Алексей (IdeaSoft) от 20-12-2018, 11:14:43
С помощью FilteredElementCollector собираете все типоразмеры для TextNote
Т.е. эта инструкция вернет коллекцию типоразмеров текcтов.
А я потом цикле могу сравнить с нужным мне именем?

Название: Re: Присвоить имя семейства элементу TextNode
Отправлено: Алексей (IdeaSoft) от 20-12-2018, 11:15:19
var collector = new FilteredElementCollector(doc);
var textNoteType = collector.OfClass(typeof(TextNoteType)).FirstOrDefault(x => x.Name == "2.0 мм ГОСТ");
 
if (textNoteType != null) //.... use textNoteType.Id
Ага, понял. Спасибо!
Название: Re: Присвоить имя семейства элементу TextNode
Отправлено: Александр Игнатович от 20-12-2018, 11:17:01
Вот еще решение, имхо лучше (на Revit Python Shell, думаю, на C# переделаете):
Код - Python [Выбрать]
  1. collector = FilteredElementCollector(doc)
  2.  
  3. rule = ParameterFilterRuleFactory.CreateEqualsRule(ElementId(BuiltInParameter.SYMBOL_NAME_PARAM), "2.0 мм ГОСТ", False)
  4.  
  5. nameFilter = ElementParameterFilter(rule)
  6.  
  7. typeId = collector.OfClass(TextNoteType).WherePasses(nameFilter).FirstElementId()
  8.  
  9. if typeId != ElementId.InvalidElementId:
  10.         print typeId