Перенести лист в другой раздел структуры документа

Автор Тема: Перенести лист в другой раздел структуры документа  (Прочитано 8344 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Проектировщики по ошибке лист занесли не в тот раздел.
Нужно перекинуть этот лист из раздела "КР.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.  


« Последнее редактирование: 22-10-2019, 12:59:45 от Александр Ривилис »

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
В каком "разделе" окажется лист зависит от того, что написано в определенном параметре, по которому настроена сортировка в диспетчере проекта. Вам нужно знать что за параметр. Ну и потом просто поменять значение этого параметра.
А вот то, что вы это все программно делаете наводит на плохие мысли...

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Алексей (IdeaSoft),
И кто будет форматировать код?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Алексей (IdeaSoft),
И кто будет форматировать код?

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

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




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


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

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Тот лист который нужно перенести содержит ключевое слово "Материалы"
И это в рамках алгоритма меня устраивает.


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

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
А вот то, что вы это все программно делаете наводит на плохие мысли...
А что тут такого страшного хочу переименовать имя раздела.

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

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
И кто будет форматировать код?
Ой это вы про форматирование кода на форуме.
Забыл отформатировать.
А я то уж подумал что это поддержка кода в работе плагина.

Отмечено как Решение Александр Ривилис 22-10-2019, 17:26:19

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Может есть какое свойство у этого элемента наименование раздела?
Я бы просто поменял его и все.
Я вам уже ответил - это свойство - это какой-то параметр листа. Это может быть системный параметр, а может быть общий параметр из ФОП. Только вы можете это знать, так как это относится к организации работы в вашей фирме.
Вы не знаете как поменять параметр? Вот так:
Код - C# [Выбрать]
  1. vs.LookupParameter(":Наименование раздела")?.Set("КР.7")

А что тут такого страшного хочу переименовать имя раздела.
А страшно то, что это делается стандартными средствами Ревита без особых проблем. Самое простое - сделать спецификацию листов с отображением параметра ":Наименование раздела", сгруппировать по значению параметра и просто поменять значение в спецификации. Делов на 30 секунд. Но если вы в организации стремитесь это сделать программно, значит ваша организация пожалела денег и времени на обучение сотрудников Ревиту и наем толкового BIM-Координатора. И теперь у вас происходит потеря времени на вот такие бесполезные задачи.
И то, что вы реально считаете что в Ревите есть какие-то "Разделы" лишь подтверждает мои слова
« Последнее редактирование: 22-10-2019, 17:28:12 от Александр Ривилис »

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

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Я скоре
А страшно то, что это делается стандартными средствами Ревита без особых проблем. Самое простое - сделать спецификацию листов с отображением параметра ":Наименование раздела", сгруппировать по значению параметра и просто поменять значение в спецификации. Делов на 30 секунд. Но если вы в организации стремитесь это сделать программно, значит ваша организация пожалела денег и времени на обучение сотрудников Ревиту и наем толкового BIM-Координатора. И теперь у вас происходит потеря времени на вот такие бесполезные задачи.
И то, что вы реально считаете что в Ревите есть какие-то "Разделы" лишь подтверждает мои слова

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

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

 

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Алексей (IdeaSoft),
Выложи один из этих rvt-файлов, чтобы было понятно точное имя параметра для изменения.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
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.                     }

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Единственное что я добавил код транзакции
Только я вам пример написал с проверкой параметра на null, а в её убрали. Можете словить NullReferenceException, если параметра не будет