вторник, 30 июля 2080 г.

понедельник, 3 октября 2016 г.

[Revit - Электрика] - Копирование цепей

Если выбрать электроприборы с щитом и скопировать их, то цепи пропадают.
Чтобы при копировании электроприборов цепи не пропадали, выбирать их нужно через диспетчер инженерных систем, а не на виде.

Подробнее смотрите в видео:


воскресенье, 2 октября 2016 г.

[Revit - Электрика] - Connect2ElPanel

Оформил ещё один свой плагин.

Позволяет быстро подключить электрические приборы к электрощиту по одному.
Выбираем элементы, вызываем команду, при необходимости выбираем коннектор и щит, к которому требуется выполнить подсоединение.
Если часть приборов предварительно объединена в цепь, то к электрощиту подсоединяется эта цепь.

Совместимо с Revit 2015-2017.

Скачать можно тут

Если будут вопросы по использованию - пишите в форму обратной связи на блоге.

Небольшое видео, демонстрирующее работу плагина:




вторник, 27 сентября 2016 г.

[Revit] - CheckLinks - проверка положения связанных моделей

Этот небольшой плагин позволяет проверить:
 - точку вставки связанной модели (если точка вставки соответствует началу координат, то не выводится)
 - прикреплена ли связанная модель (если точка вставки соответствует началу координат, и модель не прикреплена, то прикрепление выполняется автоматически, информация не выводится)
 - рабочие наборы типоразмера и экземпляра связанной модели.

Совместимо с Revit 2015-2017.

Скачать можно тут

Вызов:
панель "Надстройки" -> "Внешние инструменты" -> Check Links

Если будут вопросы по использованию - пишите в форму обратной связи на блоге.

Небольшое видео, демонстрирующее работу плагина:



UPD: Обновил ссылку, сделал небольшие правки.
          Спасибо за обратную связь!

пятница, 19 августа 2016 г.

[Revit] - Горизонтальные связи на наклонной плоскости

Здесь я описываю принцип построения элементов на наклонной плоскости:


Основные этапы построения вида для работы на наклонной плоскости:




Удачи!

воскресенье, 24 июля 2016 г.

[Revit] - Стены, плиты и секущий диапазон.

Когда я впервые встретился с этими исключениями, то это ввело меня в ступор.
Как так? Что происходит? Опытным путём удалось выявить в чём дело. Ну и да, чтение справки бывает очень полезным для понимания работы программы.

Об исключении при отображении стен:


здесь данный вопрос освещён в тексте.

Об исключении при отображении перекрытий:


Удачи!

пятница, 1 апреля 2016 г.

[Revit API] - Задание произвольной подрезки границы вида

Скачайте файл ChangeViewCropRegion.rvt,
откройте его, при загрузке нажмите на кнопку "Включить макросы для данного документа" зайдите в управление -> Диспетчер макросов -> Выбрать макрос  -> Редактировать
Откроется SharpDevelop, нажмите наверху на кнопку "Собрать текущий проект"

Затем вернитесь в Revit и запустите макрос "RRabbit"

воскресенье, 20 декабря 2015 г.

[Revit API] - Особенности работы с макросами.

Виктор Чекалин разместил ряд статей на adn-cis.org на тему работы с макросами:

Работа с макросами в Revit - Введение
Работа с макросами в Revit - Первый макрос
Работа с макросами в Revit - Выбор языка программирования
Работа с макросами - Изучение Revit API

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

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

1. Прекрасно подходят для новичков. Не нужно заморачиваться с созданием проекта, писать файл манифеста, можно быстро написать короткий код.

2. Для проверки работы макроса не требуется каждый раз перезагружать Revit. Если единожды запустил плагин, созданный в Visual Studio, то Revit занимает файл сборки dll и её не удаётся перезаписать, пока не перезагрузишь Revit.
С макросами такой проблемы не существует. Собрал решение, запустил из диспетчера макросов.

3. Очень хорошо подходят для тестовых проработок. Если нужно быстро что-то проверить, посмотреть как работает пример кода.

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 вставьте сохранённый код в редакторе макроса. 

2. Возможны проблемы при совместной работе. Могут занять рабочий набор с макросом (да, да, макрос тоже имеет свой рабочий набор!), не удастся выполнить синхронизацию. Был противоположный случай - я редактировал макрос, занял его рабочий набор, синхронизировался, закрыл файл и другие участники проекта не смогли синхронизироваться.

3. Распространение и запуск макроса для пользователей. Макрос живёт в проекте, а следовательно чтобы подгрузить его в другой проект, то нужно открыть файл с макросом, скопировать его текст в свой файл. Конечно можно сделать отдельный проект Revit с макросами, держать его открытым, макросы из него будут запускаться в другом проекте, но это о-о-о-чень напряжно для пользователей. Гораздо проще запускать плагины кнопкой с панели.

4. Обновление макроса. Допустим, я получил сообщение об ошибке в моём макросе. Мои действия: отладил, поправил. Теперь нужно обновить макрос в файле пользователя. Я не вижу другого пути, кроме как через копирование кода из окна редактора в моём файле и вставку кода в файле пользователя. А если проект не один? Может есть какой-то другой подход, не знаю, но мне проще обновить dll-ки на сервере, чем морочить голову пользователям макросами.

5. Разрастание кода. При тестовых проработках нужно внимательно следить за тем, чтобы маленький тест не разросся в полноценный проект. Появление нового класса или появление более пяти методов является для меня сигналом к переходу на Visual Studio.

6. InteliSense не подхватывает некоторые методы. Например, для объекта Element не отображается метод get_Parameter.

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

Удачи!

пятница, 11 декабря 2015 г.

[Revit API] - Как получить линии из условного обозначения отверстия (продолжение)

Всё-таки нашёл решение с получением линий из семейства категории "Типовые аннотации". Как и обещал, пишу продолжение.

Google не помог, в руководстве пользователя тоже ничего не смог обнаружить.
На этот раз выручил сайт revitapisearch.com. Этот сайт - последний рубеж в моих изысканиях.
Если что-то совсем не выходит или нужно окончательно убедиться в том, что невозможно сделать через Revit API - захожу туда, нажимаю на кнопку "Members" и забиваю в поиске на страничке слова по смыслу.
Довольно-таки муторное занятие:


И далее F3, F3, F3 по всей простыне.
На 118-м найденном слове наткнулся на метод:


Ага, на этот раз охота оказалась удачной.

Строку из предыдущего сообщения

GeometryElement geometryElement = element.get_Geometry(geomOption);

заменяю на

FamilyInstance fi = (FamilyInstance)element;
GeometryElement geometryElement = fi.GetOriginalGeometry(geomOption);

Код скомпилировался и даже сработал, но в итоге я получил какую-то козявку в базовой точке проекта:


Видимо OriginalGeometry - это описание геометрии внутри семейства.

В объекте типа FamilyInstance есть метод GetTransform()
Смотрю что есть интересного в линии:

Добавляю строчку с трансформацией линии:

if (l != null)
{
    l = (Line)l.CreateTransformed(fi.GetTransform());
    lines.Add(l);
}

В итоге получаю список линий, с изменённым положением и отмасштабированных таким же образом, как и семейства аннотаций:
Удачи!