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

ADN Club => Revit API => Тема начата: Алексей (IdeaSoft) от 22-10-2019, 12:51:58

Название: Перенести лист в другой раздел структуры документа
Отправлено: Алексей (IdeaSoft) от 22-10-2019, 12:51:58
Проектировщики по ошибке лист занесли не в тот раздел.
Нужно перекинуть этот лист из раздела "КР.5" в раздел "КР.7"
(ниже картинка структуры проекта)

Перебираю в цикле по набор элементов ViewSheet

Код - C# [Выбрать]
  1. var coll = new FilteredElementCollector(doc).OfClass(typeof(ViewSheet));
  2. IList<Element> ee = coll.ToElements();
  3. foreach (RVT_DB.Element e in ee) {
  4.    ViewSheet vs = e as ViewSheet;
  5.    // Проверяю по имени нужный мне лист
  6.     if (vs.Name.indexof("Материалы") != -1)
  7.     {
  8.         //  А вот тут хочу объект vs переместить в другой раздел структурного дерева    
  9.         // как мне это сделать?
  10.      }
  11. }
  12.  

(https://i.postimg.cc/2V3rbZGr/Revit-struct.jpg) (https://postimg.cc/2V3rbZGr)
Название: Re: Перенести лист в другой раздел структуры документа
Отправлено: Александр Пекшев aka Modis от 22-10-2019, 12:54:44
В каком "разделе" окажется лист зависит от того, что написано в определенном параметре, по которому настроена сортировка в диспетчере проекта. Вам нужно знать что за параметр. Ну и потом просто поменять значение этого параметра.
А вот то, что вы это все программно делаете наводит на плохие мысли...
Название: Re: Перенести лист в другой раздел структуры документа
Отправлено: Александр Ривилис от 22-10-2019, 13:00:03
Алексей (IdeaSoft),
И кто будет форматировать код?
Название: Re: Перенести лист в другой раздел структуры документа
Отправлено: Алексей (IdeaSoft) от 22-10-2019, 13:13:15
Алексей (IdeaSoft),
И кто будет форматировать код?

Это одноразовая задачка. Нужно просто обработать 600 листов документации
Вручную сами понимаете мне лень.

Все листы сделаны по одному образу и подобию

(https://i.postimg.cc/9DPvMdSx/Name-azdel.png) (https://postimg.cc/9DPvMdSx)


Может есть какое свойство у этого элемента наименование раздела?
Я бы просто поменял его и все.

Название: Re: Перенести лист в другой раздел структуры документа
Отправлено: Алексей (IdeaSoft) от 22-10-2019, 13:15:58
Тот лист который нужно перенести содержит ключевое слово "Материалы"
И это в рамках алгоритма меня устраивает.

Название: Re: Перенести лист в другой раздел структуры документа
Отправлено: Алексей (IdeaSoft) от 22-10-2019, 13:26:49
А вот то, что вы это все программно делаете наводит на плохие мысли...
А что тут такого страшного хочу переименовать имя раздела.
Название: Re: Перенести лист в другой раздел структуры документа
Отправлено: Алексей (IdeaSoft) от 22-10-2019, 13:35:16
И кто будет форматировать код?
Ой это вы про форматирование кода на форуме.
Забыл отформатировать.
А я то уж подумал что это поддержка кода в работе плагина.
Название: Re: Перенести лист в другой раздел структуры документа
Отправлено: Александр Пекшев aka Modis от 22-10-2019, 14:00:03
Может есть какое свойство у этого элемента наименование раздела?
Я бы просто поменял его и все.
Я вам уже ответил - это свойство - это какой-то параметр листа. Это может быть системный параметр, а может быть общий параметр из ФОП. Только вы можете это знать, так как это относится к организации работы в вашей фирме.
Вы не знаете как поменять параметр? Вот так:
Код - C# [Выбрать]
  1. vs.LookupParameter(":Наименование раздела")?.Set("КР.7")

А что тут такого страшного хочу переименовать имя раздела.
А страшно то, что это делается стандартными средствами Ревита без особых проблем. Самое простое - сделать спецификацию листов с отображением параметра ":Наименование раздела", сгруппировать по значению параметра и просто поменять значение в спецификации. Делов на 30 секунд. Но если вы в организации стремитесь это сделать программно, значит ваша организация пожалела денег и времени на обучение сотрудников Ревиту и наем толкового BIM-Координатора. И теперь у вас происходит потеря времени на вот такие бесполезные задачи.
И то, что вы реально считаете что в Ревите есть какие-то "Разделы" лишь подтверждает мои слова
Название: Re: Перенести лист в другой раздел структуры документа
Отправлено: Алексей (IdeaSoft) от 22-10-2019, 16:53:07
Я скоре
А страшно то, что это делается стандартными средствами Ревита без особых проблем. Самое простое - сделать спецификацию листов с отображением параметра ":Наименование раздела", сгруппировать по значению параметра и просто поменять значение в спецификации. Делов на 30 секунд. Но если вы в организации стремитесь это сделать программно, значит ваша организация пожалела денег и времени на обучение сотрудников Ревиту и наем толкового BIM-Координатора. И теперь у вас происходит потеря времени на вот такие бесполезные задачи.
И то, что вы реально считаете что в Ревите есть какие-то "Разделы" лишь подтверждает мои слова

Я скорее всего ошибся в формулировке не 600 листов в одном проекте.
А 600 проектов , каждый в своем  файле rvt

Просто все 600 проектов однотипных.

 
Название: Re: Перенести лист в другой раздел структуры документа
Отправлено: Александр Ривилис от 22-10-2019, 16:58:14
Алексей (IdeaSoft),
Выложи один из этих rvt-файлов, чтобы было понятно точное имя параметра для изменения.
Название: Re: Перенести лист в другой раздел структуры документа
Отправлено: Алексей (IdeaSoft) от 22-10-2019, 17:13:52
vs.LoockupParameter(":Наименование раздела")?.Set("КР.7")
Спасибо вам большое за оперативную помощь. Вот этот фрагмент кода решил мою проблему.
Единственное что я добавил код транзакции
Код - C# [Выбрать]
  1.                     if (vs.Name.ToUpper().IndexOf("МАТЕРИАЛЫ") != -1)
  2.                     {
  3.                         using (RVT_DB.Transaction tr = new RVT_DB.Transaction(doc, "replace param"))
  4.                         {
  5.                             tr.Start();
  6.                             vs.LookupParameter(":Наименование раздела").Set("КР.7");
  7.                             tr.Commit();
  8.                         }
  9.                     }
Название: Re: Перенести лист в другой раздел структуры документа
Отправлено: Александр Пекшев aka Modis от 22-10-2019, 17:40:06
Единственное что я добавил код транзакции
Только я вам пример написал с проверкой параметра на null, а в её убрали. Можете словить NullReferenceException, если параметра не будет