image
Revit — программный комплекс, реализующий принцип информационного моделирования зданий. Изначально программа предназначалась для архитекторов. Теперь все больше компаний при устройстве на работу требуют от инженеров умения работы в Revit. Autodesk Revit предоставляет мощный .NET API, позволяющий разрабатывать собственные приложения для решения различных задач. В данной статье хочу поделиться опытом создания однолинейных схем в Revit.


Главными преимуществами Revit для инженера являются:

— работа с актуальными планировками;
— совместная работа нескольких инженеров в одном файле;
— контроль пересечения инженерных коммуникаций;
— обмен заданиями;
— создание автоматически обновляемых спецификаций.

Revit также позволяет проектировать системы электроснабжения и вести расчет нагрузок в табличном виде. Недостатком является то, что нельзя вести расчеты, производить выбор оборудования и оформлять схемы в соответствии с нормативными документами, действующими на территории РФ. Создание однолинейных схем довольно трудозатратная процедура, отнимающая массу времени.

Когда я работал в Autocad, я использовал для расчета таблицу Excel: заносил мощность подключенного оборудования, названия, место расположения, тип, длины и еще множество параметров, производил расчет, а затем чертил схемы с помощью плагина для Autocad.

Теперь, при работе с Revit, все эти данные можно получить из BIM модели. Например данный плагин получает следующую информацию:

— Номер выключателя;
— Электрические нагрузки;
— Напряжение;
— Количество полюсов;
— Коэффициент мощности;
— Тип кабеля;
— Классификацию электрических нагрузок;
— Сечение нейтрального проводника;
— Длину кабельной линии.

Остальная информация рассчитываются на основе полученных и введенных пользователем параметров.

Работа плагина состоит из трех этапов:

1) Получение необходимых данных из BIM-модели и загрузки в форму для редактирования;
2) Редактирование пользователем параметров;
3) Создание схемы.

Плагин можно загрузить по ссылке.


Чтобы извлечь параметры электрических систем, получаем доступ к активному документу:

UIApplication uiapp = commandData.Application;
UIDocument uidoc = uiapp.ActiveUIDocument;
Application app = uiapp.Application;
Document doc = doc.Document;

Далее извлекаем необходимые параметры из BIM-модели. В данном примере рассмотрим как получить параметры цепи (номер, коэффициент мощности, тип кабеля), а также материал жилы кабеля из настроек кабельных линий. Поиск нужных параметров ведется по ID с помощью списка BuiltInParameters. Такой способ поиска параметра не будет зависеть от локализации Revit.

//Выбираем электрические цепи, относящиеся к щиту "ЩС"
ParameterValueProvider provider 
= new ParameterValueProvider(new ElementId((int)BuiltInParameter.RBS_ELEC_CIRCUIT_PANEL_PARAM));
FilterStringRule rule = new FilterStringRule(provider, new FilterStringEquals(), "ЩС", true);
ElementParameterFilter filter = new ElementParameterFilter(rule);
ICollection<Element> docCircuits =         
                (new FilteredElementCollector(doc))
                .OfCategory(BuiltInCategory.OST_ElectricalCircuit)
                .WherePasses(filter)
                .ToArray();
 foreach (Element docCircuit in docCircuits)
{
  //Номер цепи
  num = docCircuit.get_Parameter(BuiltInParameter.RBS_ELEC_CIRCUIT_NUMBER)?
  .Element.Name;
  //Коэффициент мощности
  powerFactor = 
  docCircuit.get_Parameter(BuiltInParameter.RBS_ELEC_POWER_FACTOR)?
  .AsValueString();
   //Тип кабеля
  cableType = 
  docCircuit.get_Parameter(BuiltInParameter.RBS_ELEC_CIRCUIT_WIRE_TYPE_PARAM)?
  .AsValueString(); 
  //Материал жилы  
  Element wireType = new FilteredElementCollector(doc)
                .OfClass(typeof(WireType))
                .FirstOrDefault<Element>(
                e => e.Name.Equals(cableType));
  string coreMaterial = wireType.get_Parameter(BuiltInParameter.RBS_WIRE_MATERIAL_PARAM)
  .AsValueString();   
}                          

После получения необходимых параметров можно приступать к созданию схемы. Создаем транзакцию и вставляем элементы схемы в файл. Кстати, единицы измерения — футы, поэтому при вставке элементов нужно не забывать про это.

using (Transaction tx = new Transaction(doc))
 {
   tx.Start("Создание однолинейной схемы");
   double xCoord = 0;
   // Вставляем отходящие линии
   foreach (Circuit circuit in panel.circuits)
   {              
     //Получаем семейство из активного документа по имени.
     FamilySymbol lineSymbol = FilteredElementCollector(doc)
                         .OfClass(typeof(FamilySymbol))
                         .Where(q => q.Name == "SLD_АВ")
                         .First() as FamilySymbol;
     //Переводим координаты точки вставки из миллиметров в футы
     XYZ coords = new XYZ(xCoord, 0, 0).ToFeets();
     //Вставляем семейство с именем SLD_АВ
     FamilyInstance line = doc.Create.NewFamilyInstance(coords, lineSymbol, uidoc.ActiveView);
     //Получаем все параметры семейства
     ParameterSet parametersLineOut = line.Parameters;
     //Записываем значение в параметр семейства
     foreach (Parameter param in parametersLineOut)
     {
      switch (param.Definition.Name)
       {
          case "Номер группы": param.Set(circuit.number); break;
          case "Тип кабеля": param.Set(circuit.cableType); break;
          case "Коэффициент мощности": param.Set(circuit.powerFactor); break;
       }
     }
     xCoord = xCoord + 25;
    }
      tx.Commit();
 }     

Все, схема готова!
Поделиться с друзьями
-->

Комментарии (6)


  1. MikhailKh
    05.06.2017 08:44
    -1

    Revit — это вертикальное решение на базе автокада. Причем да — для архитектуры.

    Делать из BIM рисовалку электросхем — прикольно конечно. Но уж больно дорого. На голом Автокаде всё тоже самое будет работать быстрее, лучше, лицензия дешевле.


    1. BoxaShu
      05.06.2017 15:27
      +1

      Revit — это вертикальное решение на базе автокада.

      Вы ошибаетесь.
      Причем да — для архитектуры.

      Вы ошибаетесь.


      1. MikhailKh
        05.06.2017 18:41
        -1

        В линейке Autodesk произошли качественные изменения, и Revit вдруг обзавелся собственным ядром?

        А можно по подробнее?

        По поводу целесообразности, вопрос снимаю. Хотя всё равно не оставляет чувство, что пушкой по воробьям стреляют.


        1. BoxaShu
          06.06.2017 07:10
          +1

          В линейке Autodesk произошли качественные изменения, и Revit вдруг обзавелся собственным ядром?

          Ревит, изначально не проект автодеска, он был куплен. Соответственно у ребят, которые начали его делать, не было ядра автокада, т.о. у ревита с самого начала было собственное ядро.
          Подробнее тут https://ru.wikipedia.org/wiki/Revit

          А по поводу только архитектуры, то вот фрагмент оф. сайта поясняющий этот вопрос
          image


      1. MikhailKh
        05.06.2017 18:42

        В линейке Autodesk произошли качественные изменения, и Revit вдруг обзавелся собственным ядром?

        А можно по подробнее?

        По поводу целесообразности, вопрос снимаю. Хотя всё равно не оставляет чувство, что пушкой по воробьям стреляют.


        1. Bumbum
          05.06.2017 21:32
          +1

          Revit никогда не был на ядре Автокада.

          Даже сейчас, спустя более чем 10 лет после приобретения его Автодеском, двумерное черчение и оформление в нем сильно отстает от када.

          Изначально он был для архитектуры, потом разделили на три продукта:
          Achitecture, Structure, MEP (инженерные сети, в т.ч. электрика). Потом, года 4 назад, снова объединили в Revit Building.