Присвоить имя семейства элементу TextNode

Автор Тема: Присвоить имя семейства элементу TextNode  (Прочитано 4798 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Создаю объект Autodesk.REvit.DB.TextNode
Как мне назначить ему нужно семейство?
Подозреваю что это последний параметр
 TypeId в конструкторе TextNode.Create(...., TypeId);

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Подозреваю, что таки TextNote, а не TextNode.

В общем, всё довольно просто. Есть 2 варианта:
1) использовать FilteredElementCollector, найти нужный TextNoteType
2) найти используемый по умолчанию
Код - C# [Выбрать]
  1. doc.GetDefaultElementTypeId(ElementTypeGroup.TextNoteType)

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Подозреваю что это последний параметр
Правильно понимаете. С помощью FilteredElementCollector собираете все типоразмеры для TextNote, по имени (если вам так нужно) находите среди них нужный и передаете его id

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
1) использовать FilteredElementCollector, найти нужный TextNoteType
2) найти используемый по умолчанию

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

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


Есть что-то типа того doc.GetIdFromName(string Name)

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Код - 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

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
С помощью FilteredElementCollector собираете все типоразмеры для TextNote
Т.е. эта инструкция вернет коллекцию типоразмеров текcтов.
А я потом цикле могу сравнить с нужным мне именем?


Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
var collector = new FilteredElementCollector(doc);
var textNoteType = collector.OfClass(typeof(TextNoteType)).FirstOrDefault(x => x.Name == "2.0 мм ГОСТ");
 
if (textNoteType != null) //.... use textNoteType.Id
Ага, понял. Спасибо!

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Вот еще решение, имхо лучше (на 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