Измененить параметр "Номер цепи" в электрической системе

Автор Тема: Измененить параметр "Номер цепи" в электрической системе  (Прочитано 7044 раз)

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

Оффлайн Сергей ПетровАвтор темы

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
  • Skype: sergey..a..petrov
Здравствуйте!
Задача поменять местами электрические цепи в диспетчере инженерных систем, аналогично командам "Переместить вверх" и "Переместить вниз" при редактировании принципиальной схемы щита.
Возможно ли изменить параметр "Номер цепи" (CircuitNumber) в электрической системе? Он является параметром только для чтения, и напрямую методом Set() не изменяется. Возможно как-то обойти это ограничение? Значение этого параметра также соответствует параметру "Name" электрической системы, но и его у меня изменить не получается.
Либо можно как-то добраться до системных команд "Переместить вверх" и "Переместить вниз"?

Оффлайн Сергей ПетровАвтор темы

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
  • Skype: sergey..a..petrov
Есть идея отсоединить от панели две группы, которые надо поменять местами , и после подключить в нужном порядке.

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Сергей, я никогда не работал с электрикой в Revit, поэтому было бы неплохо, если бы вы приложили скриншот с командами
"Переместить вверх" и "Переместить вниз" при редактировании принципиальной схемы щита

Возможно ли изменить параметр "Номер цепи" (CircuitNumber) в электрической системе? Он является параметром только для чтения, и напрямую методом Set() не изменяется. Возможно как-то обойти это ограничение?
Однозначно это невозможно. В данном случае через API можно сделать не больше, чем в интерфейсе.

Оффлайн Сергей ПетровАвтор темы

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
  • Skype: sergey..a..petrov
Кнопки переместить вверх/вниз появляются при редактировании схемы щита (см. вложение).

Решение нашёл. Как и предположил ранее, необходимо было системы отсоединить, а после подключить в нужном порядке:
Код - C# [Выбрать]
  1. using Autodesk.Revit.DB.Electrical;
  2.  
  3. public static void Swap(this ElectricalSystem system1, ElectricalSystem system2)
  4. {
  5.     if (system1.BaseEquipment.Id == system2.BaseEquipment.Id) // проверка на подключение к одной панели
  6.     {
  7.         // экземпляр панели
  8.         FamilyInstance panel = system1.BaseEquipment;
  9.  
  10.         // получить номера цепей (метод GetSystemNumber() представлен ниже)
  11.         int
  12.             numSystem1 = system1.GetSystemNumber(),
  13.             numSystem2 = system2.GetSystemNumber();
  14.  
  15.         // отсоединить системы от панели
  16.         system1.DisconnectPanel();
  17.         system2.DisconnectPanel();
  18.  
  19.         // если система 1 была выше системы 2, систему 2 подключить к панели первой, затем систему 1
  20.         if (numSystem1 < numSystem2)
  21.         {
  22.             system2.SelectPanel(panel);
  23.             system1.SelectPanel(panel);
  24.         }
  25.         // иначе первой подключить к панели систему 1, затем систему 2
  26.         else
  27.         {
  28.             system1.SelectPanel(panel);
  29.             system2.SelectPanel(panel);
  30.         }
  31.     }
  32.     else { }
  33. }
  34.  
  35. private static int GetSystemNumber(this ElectricalSystem system)
  36. {
  37.     string numSystemTxt = system.CircuitNumber; // номер цепи; для трёхфазной системы представляет собой строку формата "1,2,3"
  38.     if (numSystemTxt.Contains(','))
  39.         numSystemTxt = numSystemTxt.Substring(0, numSystemTxt.IndexOf(',')); // для трёхфазной системы оставить номер первой фазы
  40.     return Convert.ToInt16(numSystemTxt); // преобразовать текстовое значения номера цепи в целое число
  41. }
« Последнее редактирование: 27-10-2015, 09:48:07 от Виктор Чекалин »