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

26/02/2016

Особенности работы с макросами

Андрей Фазлеев часто использует макросы для своих задач. Во время работы с ними, у него сложилось собственное восприятие работы с макросами, и он любезно решил поделиться с нами этими особенностями.

Далее, привожу текст с его слов:

Чуть больше года назад я начинал свои первые программы с создания макросов, за время работы накопился некоторый опыт работы с ними.

Для начала опишу плюсы работы с макросами:

  1. Прекрасно подходят для новичков. Не нужно заморачиваться с созданием проекта, писать файл манифеста, можно быстро написать короткий код.
  2. Для проверки работы макроса не требуется каждый раз перезагружать Revit. Если единожды запустил плагин, созданный в Visual Studio, то Revit занимает файл сборки dll и её не удаётся перезаписать, пока не перезагрузишь Revit. С макросами такой проблемы не существует. Собрал решение, запустил из диспетчера макросов.
  3. Прекрасно подходят для тестовых проработок. Если нужно быстро что-то проверить, посмотреть как работает пример кода.
  4. 4. Возможно сделать отладку макроса, не перезагружая каждый раз Revit. Как выполнить отладку макроса я уже писал ранее, повторюсь:
    Для отладки в макросах служит кнопка "Войти в блок" в диспетчере макросов. Подробнее см. справку                                                                                                                    Команда "Войти в блок" в справке неверно переведена как "ШагВ", что поначалу сбило меня с толку.
  5. Мне очень нравится, что SharpDevelop не подсвечивает ошибки в коде сразу же после набора. Ошибки подчёркиваются после компиляции решения. В Visual Studio меня очень раздражает, когда происходит подчёркивание незавершённого кода.

Теперь о том, почему я отказался от регулярной работы с макросами и перешёл на Visual Studio:

  1. Макрос хранится в файле Revit со всеми вытекающими последствиями. Если будет сбой с вылетом из Revit, то не закрывайте SharpDevelop.

Варианты действий после аварийного завершения Revit:

- скопируйте куда-нибудь код из окна редактора

- сохраните файл с кодом

 

- найдите решение с макросом во временной папке пользователя.

Вот как выглядит путь к папке с решением на моём компьютере:

%username%\AppData\Local\Temp\{6586EA70-C4F5-4461-8CEB-FD58406E0247}\Revit\DocHookups9148\890337088\test\Source

После открытия проекта Revit вставьте сохранённый код в редакторе макроса.

На самом деле макрос может храниться не только в файле Revit, но и в профиле пользователя. Зависит от того, как создавали макрос: для приложения или для файла – Виктор Ч.

  1. Возможны проблемы при совместной работе. Могут занять рабочий набор с макросом (да, да, макрос тоже имеет свой рабочий набор!), не удастся выполнить синхронизацию. Был противоположный случай - я редактировал макрос, занял его рабочий набор, синхронизировался, закрыл файл и другие участники проекта не смогли синхронизироваться.
  2. Распространение и запуск макроса для пользователей. Макрос живёт в проекте, а следовательно чтобы подгрузить его в другой проект, то нужно открыть файл с макросом, скопировать его текст в свой файл. Конечно можно сделать отдельный проект Revit с макросами, держать его открытым, макросы из него будут запускаться в другом проекте, но это о-о-о-чень напряжно для пользователей. Гораздо проще запускать плагины кнопкой с панели.
  3. Обновление макроса. Допустим, я получил сообщение об ошибке в моём макросе. Мои действия: отладил, поправил. Теперь нужно обновить макрос в файле пользователя. Я не вижу другого пути, кроме как через копирование кода из окна редактора в моём файле и вставку кода в файле пользователя. А если проект не один? Может есть какой-то другой подход, не знаю, но мне проще обновить dll-ки на сервере, чем морочить голову пользователям макросами.
  4. Разрастание кода. При тестовых проработках нужно внимательно следить за тем, чтобы маленький тест не разросся в полноценный проект. Появление нового класса или появление более пяти методов является для меня сигналом к переходу на Visual Studio.
  5. InteliSense не подхватывает некоторые методы. Например, для объекта Element не отображается метод get_Parameter.

Но не стоит совсем отказываться от работы с макросами.

Это идеальный инструмент для начала работы с Revit API. Когда небольшой макрос перерастает в полноценный плагин, то я рекомендую переносить проект в Visual Studio.

Сейчас применяю макросы в тестовых проработках и при изысканиях. Быстренько набрал небольшой код, проверил, отладил, скопировал методы в проект Visual Studio.

Удачи!

Обсуждение: http://adn-cis.org/forum/index.php?topic=

Опубликовано 26.02.2016