Изменение название типа у семейства

Автор Тема: Изменение название типа у семейства  (Прочитано 6959 раз)

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

Оффлайн GIPPYАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 65
  • Карма: 0
Всем привет.
Подскажите, пожалуйста, какой командой изменить название типа у семейства ?



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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Свойство Name присвоить

Оффлайн GIPPYАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 65
  • Карма: 0
не срабатывает почему-то .....

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Отладчик? Revit lookup?

На самом деле, подумал, вдруг и вправду не работает так. Проверил. Набросал простенький скрипт на Python shell. Работает.
Код - Python [Выбрать]
  1. tx = Transaction(doc, "rename")
  2. tx.Start()
  3.  
  4. elementType = doc.GetElement(s0.GetTypeId()) # типоразмер выбранного элемента
  5.  
  6. elementType.Name = "new name"
  7.  
  8. tx.Commit()

Оффлайн GIPPYАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 65
  • Карма: 0
Я приложил файл от ревита 2019 в котором семейства с именем ИГЭ-3. Вручную в ревите я могу у каждого поменять имя, выбрав его из списка.
Кодом у меня меняются все имена у этих семейств разом одинаково.
ниже код, где я поочередно меняю имя от 0 до 2, не получается сделать как вручную задать имя индивидуально каждому объекту.

Код - vb.net [Выбрать]
  1.    'делее переименовываем семейства
  2.             Dim collector40 As New FilteredElementCollector(doc)
  3.             Dim list_level40 As New List(Of Element)
  4.             level_count = collector40.OfClass(GetType(FamilySymbol)).Count
  5.             list_level40 = collector40.OfClass(GetType(FamilySymbol)).ToElements
  6.             If level_count >= 1 Then
  7.                 ik = 0
  8.                 Dim transaction7 As New Transaction(doc, "RvtCmd_LoadFamilySymbol")
  9.                 transaction7.Start()
  10.                 For i_count = 0 To level_count - 1
  11.                     If list_level40.Item(i_count).Name = "ИГЭ-3" Then
  12.                         list_level40.Item(i_count).Name = Str(ik)
  13.                         ik = ik + 1
  14.                         If ik = 3 Then ik = 0
  15.                     End If
  16.  
  17.                 Next
  18.                 transaction7.Commit()
  19.  
  20.             End If

По хорошему мне нужно мои имена 0,1 и 2 вписать в список имен и кодом присвоить имя выбранному элементу из списка, а сейчас получается я меняю имя в списке.


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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Честно? Не очень понял, чего конкретно ты пытаешься добиться.

При изменении имени типоразмера меняются "имена" всех инстансов, вне зависимости от того, делаешь ты это вручную или программно.

Чтобы задать уникальные "имена" инстансов, нужно создать по типоразмеру и назначить его инстансу. Берёшь существующий типоразмер, вызываешь метод Duplicate, присваиваешь имя. У инстанса вызываешь .ChangeTypeId

Оффлайн GIPPYАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 65
  • Карма: 0
Я понял, что кодом я меняю имя в списке, поэтому получается у всех автоматом инстансов имя меняется.

Как кодом не поменять имя, а присвоить другое из списка имен ? (это то, что я делаю вручную)
И можно примером про создание уникального имени.
Большое спасибо за помощь.

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Как кодом не поменять имя, а присвоить другое из списка имен ? (это то, что я делаю вручную)

В чём отличие первого от второго?

Оффлайн GIPPYАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 65
  • Карма: 0
в списке есть имена, я могу изменить имя в этом списке, в данном случае у всех инстансов автоматом поменяется название этого имени.
У меня в файле инстансов 18 штук, у всех разом меняется имя. Если вручную в ревите выбираю один инстанс и из списка выбираю другое имя, то у выбранного инстанса имя меняется, а у оставшихся 17 остаются прежнее.

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Да ну?!

Переименовываем


Выбираем другой экземпляр:



Разберись, пожалуйста, как Revit работает, как модели устроены сначала

Оффлайн GIPPYАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 65
  • Карма: 0
это вы переименовали, а не выбрали из списка другое имя










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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
ChangeTypeId

Оффлайн GIPPYАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 65
  • Карма: 0
Спасибо за подсказку, только я ни разу не пользовался этой командой, вы можете показать пример ?

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Эм, ну там ничего сложного нет. Подставляешь Id типоразмера, на который тебе нужно поменять.

Я, всё-таки, ещё раз попрошу тебя потратить день-другой разобраться, как работает Revit.

Вот ты сначала пишешь:
изменить название типа

Дальше длинная-предлинная дискуссия на 3 часа, которой бы не было, если бы ты сразу спросил, что-то вроде "как программно поменять типоразмер семейства".

Оффлайн GIPPYАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 65
  • Карма: 0
После долгих мучений, все получилось, спасибо большое.