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

ADN Club => Revit API => Тема начата: GIPPY от 27-07-2021, 13:02:42

Название: Изменение название типа у семейства
Отправлено: GIPPY от 27-07-2021, 13:02:42
Всем привет.
Подскажите, пожалуйста, какой командой изменить название типа у семейства ?

(https://i.postimg.cc/SjCdPxvH/Image1.jpg) (https://postimg.cc/SjCdPxvH)
Название: Re: Изменение название типа у семейства
Отправлено: Александр Игнатович от 27-07-2021, 13:13:29
Свойство Name присвоить
Название: Re: Изменение название типа у семейства
Отправлено: GIPPY от 27-07-2021, 13:17:35
не срабатывает почему-то .....
Название: Re: Изменение название типа у семейства
Отправлено: Александр Игнатович от 27-07-2021, 13:39:53
Отладчик? 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()
Название: Re: Изменение название типа у семейства
Отправлено: GIPPY от 27-07-2021, 15:10:50
Я приложил файл от ревита 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 вписать в список имен и кодом присвоить имя выбранному элементу из списка, а сейчас получается я меняю имя в списке.
(https://i.postimg.cc/87qgJyMf/Image2.jpg) (https://postimg.cc/87qgJyMf)
Название: Re: Изменение название типа у семейства
Отправлено: Александр Игнатович от 27-07-2021, 15:31:51
Честно? Не очень понял, чего конкретно ты пытаешься добиться.

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

Чтобы задать уникальные "имена" инстансов, нужно создать по типоразмеру и назначить его инстансу. Берёшь существующий типоразмер, вызываешь метод Duplicate, присваиваешь имя. У инстанса вызываешь .ChangeTypeId
Название: Re: Изменение название типа у семейства
Отправлено: GIPPY от 27-07-2021, 15:41:59
Я понял, что кодом я меняю имя в списке, поэтому получается у всех автоматом инстансов имя меняется.

Как кодом не поменять имя, а присвоить другое из списка имен ? (это то, что я делаю вручную)
И можно примером про создание уникального имени.
Большое спасибо за помощь.
Название: Re: Изменение название типа у семейства
Отправлено: Александр Игнатович от 27-07-2021, 15:48:20
Как кодом не поменять имя, а присвоить другое из списка имен ? (это то, что я делаю вручную)

В чём отличие первого от второго?
Название: Re: Изменение название типа у семейства
Отправлено: GIPPY от 27-07-2021, 15:56:37
в списке есть имена, я могу изменить имя в этом списке, в данном случае у всех инстансов автоматом поменяется название этого имени.
У меня в файле инстансов 18 штук, у всех разом меняется имя. Если вручную в ревите выбираю один инстанс и из списка выбираю другое имя, то у выбранного инстанса имя меняется, а у оставшихся 17 остаются прежнее.
Название: Re: Изменение название типа у семейства
Отправлено: Александр Игнатович от 27-07-2021, 16:04:28
Да ну?!

Переименовываем
(https://i.postimg.cc/7GwBqPnY/Screenshot-2021-07-27-160234.png) (https://postimg.cc/7GwBqPnY)

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

(https://i.postimg.cc/LYxVRtsN/Screenshot-2021-07-27-160348.png) (https://postimg.cc/LYxVRtsN)

Разберись, пожалуйста, как Revit работает, как модели устроены сначала
Название: Re: Изменение название типа у семейства
Отправлено: GIPPY от 27-07-2021, 16:18:09
это вы переименовали, а не выбрали из списка другое имя

(https://i.postimg.cc/FkcrW7cG/Image1.jpg) (https://postimg.cc/FkcrW7cG)


(https://i.postimg.cc/gnFkwHF7/Image2.jpg) (https://postimg.cc/gnFkwHF7)



(https://i.postimg.cc/xX9f5jdy/Image3.jpg) (https://postimg.cc/xX9f5jdy)
Название: Re: Изменение название типа у семейства
Отправлено: Александр Игнатович от 27-07-2021, 16:20:08
ChangeTypeId
Название: Re: Изменение название типа у семейства
Отправлено: GIPPY от 27-07-2021, 16:26:36
Спасибо за подсказку, только я ни разу не пользовался этой командой, вы можете показать пример ?
Название: Re: Изменение название типа у семейства
Отправлено: Александр Игнатович от 27-07-2021, 16:30:22
Эм, ну там ничего сложного нет. Подставляешь Id типоразмера, на который тебе нужно поменять.

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

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

Дальше длинная-предлинная дискуссия на 3 часа, которой бы не было, если бы ты сразу спросил, что-то вроде "как программно поменять типоразмер семейства".
Название: Re: Изменение название типа у семейства
Отправлено: GIPPY от 27-07-2021, 20:34:35
После долгих мучений, все получилось, спасибо большое.