Как стать автором
Обновить

Что такое Revit Api и с чем его едят

Revit прекрасен и ужасен

Начнём с виновника сея торжества и это revit, на данный момент последний из доступных 2023 года выпуска. На самом деле revit это крайне ультимативный инструмент создания не просто 3D модели здания, а 3D модели содержащей в себе исчерпывающую информацию об проектируемом объекте, что даёт данному ПО огромное преимущество перед другими CAD системами, хотя и сравнение немного неуместно ведь Revit всё таки BIM система, но речь не об этом.

Но Revit не так прост, с ним крайне тяжело работать всем, начиная от людей, которые непосредственно и работают в нём до сис.админов, которые при достаточном объёме проектирования должны обслуживать настоящие data-центры для хранения моделей, которые бывают весят по 100-300 гиктаров только для одного объёкта, а таких моделей может быть ооооочень много и для передачи которых (хоть и сильно сжатых) требуется неслабая такая сетка, заканчивая такими программистами как я и именно о бытие штатного программиста надстроек для Revit'a и пойдёт речь сегодня.

Ну и что же такого сложного в работе с уже готовым API

В жизни каждого программиста наступает момент когда приходит задача где нужно пользоваться API.

В моём случае это был Revit Api и первом взгляде на него это просто сказка, казалось бы столько возможностей, делай что хочешь и как хочешь, такой объёмный инструмент в твоих руках, можно хоть всех проектировщиков увольнять и ставить всё на конвейер IT индустрии но нет.

Revit API на самом деле очень сложный, не структурированный и крайне объёмный, очень много ненужный и попросту бесполезных функций, которые почти никогда не нужны (называть я их не буду, это просто половина API) но ладно, хорошо что эти функции есть, еду они не просят но проблема в том, что как раз ооочень нужных функций попросту нет, нельзя просто так и программно открыть файл с нужными именно мне рабочими наборами, на выбор мне даётся:

  1. Со всеми сразу (не советую, если не хотите взорвать ПК при открытии сводной модели)

  2. С последними открытыми

  3. Вообще без рабочего набора

И ладно если я могу отрыть модель без рабочего набора и потом отрыть их после, но нет, таких функций в Revit не предусмотрено и делай с этим что хочешь, а вот когда я писал надстройку для быстрой и удобной массовой выгрузки в Navisworks мне бы очень хотелось это иметь под рукой

Далее по списку идёт галемотня с классами. В API есть такое базовое и интересное разделение элементов на те которые есть в модели (family instance) и просто общие элементы в модели представленные классом element. Штука очень интересная что element представляет собой общий родительский класс для всех элементов модели в Revit и для труб, и для стен, и для дверей, и для того самого family instance и в большинстве случаев всё работает с приведением классов, но это же Revit API и тут без камней никак и некоторые, почти выборочные классы такие как класс pipe, нормально привести его из family instance (то есть просто элемента расположенного в где-то в модели) в element без потери данных очень сложно приходится городить огороды и надеяться что всё будет ок.

И это не мой косяк, мол я не умею кодить (хотя я далеко не мастер в этом деле), API само пишет что нельзя family instance в котором УКАЗАН ЕГО ТИП КАК PIPE привести к типу pipe а вот если привести его сначала к типу element потом к pipe можно получить пустые поля данных, хотя это и понятно почему, и только выдумав вундервафлю можно пройти сквозь этот ужас, хотя по логике и опыту работы такое происходит редко и только с избранными элементами и классами.

Документация к API

Документация в программирование вообще вещь обязательная, мало какое ПО написано так что без помощи в документации в нём можно полноценно разобраться. Это же и касается Revit API, но подводный камень вот в чём, документация к API написана очень слабо и из неё мало какую действительно важную инфу вытащишь, в ней много нужной инфы но только в самых поверхностных классах и даже в самых распространенных классах не всегда есть вся инфа что уже говорить про менее используемые из-за чего многое приходится делать на ощупь, что крайне замедляет разработку

И что самое весёлое примеров кода очень мало и все они проходятся по верхам, есть только один человек который смог приблизиться к полному описанию Revit API - это великий и ужасный Jeremy Tammik, он есть на всех форумах по Revit, он есть во всех обсуждениях по Revit, короче говоря если вы вдруг будете возле Revit то скорее всего он уже будет позади вас. Но с его кодом далеко не всё хорошо, зачастую он оооочень древний, прям когда еще мамонты по земле ходили тогда этот код писался, из-за чего я считаю большую его часть нерелевантной в наше время, ну или хотя бы нужно его не просто "ctl c + ctl v" а полазить в нём и заменить старые методы на новые

Но не всё так плохо

Но как бы всё не было плохо с документацией, самим API, примерами кода, Revit API это ультимативная вещь с помощью которой можно провернуть крайне полезные вещи.

Наша группа проектировщиков уже не может представить жизнь без некоторых плагинов, например, квартирография, плагин, который сам проставляет площадь квартир, номера помещений, сам заполняет спецификацию и ставит марки. BIM отдел не может жить без "автозаменятора семейств" который просто-напросто ускоряет загрузку семейств в тонны файлов раз в 10 а некоторые спецификации (по сложному семейству гнущихся труб) нормально собрать без плагинов попросту просто нельзя.

И моим любимым проектом был калькулятор стоимости объекта, прекрасная вещь которая может собрать всю инфу по проекту и посчитать его стоимость по каждой из работ за пару минут.

Так что я советую все тем кто работает с Revit и хоть немного понимает в программировании попробовать себя в этом деле, да это сложно, но оно точно того стоит.

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.