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

26/04/2015

Получение всех доступных имен плоттеров

Для того чтобы получить все доступные для AutoCAD плоттеры можно воспользоваться менеджером конфигурация плоттеров (класс PlotConfigManager). У этого класса есть свойство Devices, которое дает доступ ко всем плоттерам. Ниже процедура получения имён плоттеров:

Опубликовано 26.04.2015     Читать далее >>>
22/04/2015

Как найти сплайн в AutoCAD между двумя другими сплайнами в .NET

Я получил вопрос в комментариях к блогу:

Как найти «центральную» линию NurbCurve3dмежду двумя другими линиями NurbCurve3d?

Я интерпретирую это следующим образом: с учетом двух объектов NurbCurve3d, создать NurbCurve3d, который находится точно между ними. NurbCurve3d являются AcGe-классом - это означает, что это объект неграфический - так что я решил работать со сплайнами (Spline), поскольку они тесно связаны с классом NurbCurve3d (есть удобные методы для преобразования между этими двумя классами). Вот еще для интересующихся некоторая информация о NURBS.

Опубликовано 22.04.2015     Читать далее >>>
14/04/2015

Изменение путей к растрам в чертеже с абсолютных на относительные

Ниже показан пример кода, который позволяет изменить абсолютные пути к файлам растров на относительные пути (по отношению к пути к файлу чертежа). Те же пути к растрам, которые уже были относительными, остаются неизменными.
Опубликовано 14.04.2015     Читать далее >>>
10/04/2015

Запрет всплывания диалоговых окон в AutoCAD

Большинство появляющихся диалоговых окон AutoCAD могут быть подавлены при необходимости при помощи ряда системных переменных или вызова команды с предшествующим знаком "-" для вызова команды в режиме командной строки. Вы можете прочитать об этом в этой статье:

Переключение между диалоговыми окнами и командной строкой (англ)

Опубликовано 10.04.2015     Читать далее >>>
19/03/2015

Сохранение чертежа в DXF-формате

Вы можете использовать метод Database.DxfOut для экспорта/сохранения чертежа в DXF-файле. Ниже простой код показывает процедуру сохранения текущего чертежа в различные версии DXF

DwgVersion.AC1027 – для AutoCAD 2013 версии
DwgVersion.AC1024 – для AutoCAD 2010 версии
DwgVersion.AC1021 – для AutoCAD 2007 версии
DwgVersion.AC1800 – для AutoCAD 2004 версии
DwgVersion.AC1015 – для AutoCAD 2000 версии
DwgVersion.AC1009 – для AutoCAD R12 версии

Опубликовано 19.03.2015     Читать далее >>>
12/03/2015

Установка направления пристыковки палитры по-умолчанию

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

Следующий код показывает, как это можно сделать:

Опубликовано 12.03.2015     Читать далее >>>
10/03/2015

Разрешаем использование глобальных имён команд в AutoCAD с помощью .NET

Идея заключается в том, чтобы позволить использование вводить английские имена команд без необходимости использовать подчеркивание. В коде определяется что команда неизвестна (“unknown”) и выполняется попытка выполнить её повторно с префиксом подчеркивания для запуска глобальной команды. Это конечно может сработать или не сработать и чтобы предотвратить бесконечный цикл необходимо установить флаг установки подчеркивания.

Кроме того нам придётся отключить автокоррекцию и автозавершение команд для того чтобы наш код работал корректно. Так как нет специальных системных переменных то это придётся сделать при помощи команды.

Опубликовано 10.03.2015     Читать далее >>>
16/02/2015

Установка данных геолокации в чертеже AutoCAD с использованием .NET

API геолокации AutoCAD - это очень актуальная и перспективная тема, которую пришло время обсудить. Итак начнем. :-)

Ниже пример кода на основе показанной на ADN DevDays в конце 2013 года - для AutoCAD версии 2014, - но тогда API оказалась не полностью реализованным (по крайней мере, насколько я помню – если я не прав, то поправьте меня) до версии 2015.

Я воспользовался возможностью для того, чтобы использовать Editor.Command (), чтобы вызвать пару команд синхронно - для включения информации Geomap и для зумирования до окружности, которую мы создаем вокруг нашего места – теперь этот API доступен.

Опубликовано 16.02.2015     Читать далее >>>
13/02/2015

Модификация Ленты

Вопрос:

Я хочу изменить содержимое Ленты (Ribbon) – добавлять/удалять панели, и т.д.. Как это можно сделать?

Ответ:

Это доступно только при помощи AutoCAD .NET API.

Есть два набора функций:

1) RibbonRuntimeAPI – содержащееся в AdWindows.dll в пространстве имён Autodesk.Windows

Позволяет модифицировать Ленту, но изменения не будут сохраняться в CUIx файл, так что при перезапуске AutoCAD, или даже при переключении рабочего пространства (системной переменной WSCURRENT) или при перезагрузке меню все сделанные вами изменения пропадут и вам понадобится всё повторять.

Опубликовано 13.02.2015     Читать далее >>>
12/02/2015

Как найти все внешние ссылки в текущей базе с помощью C#

Метод Database.GetHostDwgXrefGraph() возвращает иерархию внешних ссылок для текущего чертеж в виде объекта XrefGraph. Ниже простой пример, демонстрирующий его использование – печать структуры этой иерархии для текущего чертежа в командной строке.
Опубликовано 12.02.2015     Читать далее >>>
11/02/2015

При использовании WblockCloneObjects скопированные в Пространство Модели примитивы исчезают в текущем чертеже

Это известное поведение метода Database.WblockCloneObjects() когда он используется с чертежом, открытым в AutoCAD. Проделайте следующие шаги для того, чтобы обойти это ограничение:
  1. Сделайте целевой чертеж текущим документом
  2. Вызовите метод TransactionManager.QueueForGraphicsFlush() для запроса обновления графики

Пожалуйста не забудьте сделать целевой чертеж текущим до использования TransactionManager.QueueForGraphicsFlush() в противном случае это не даст никакого эффекта. Также не забудьте блокировать/разблокировать документ.

Опубликовано 11.02.2015     Читать далее >>>
09/02/2015

Получение глобального имени DIMLDRBLK в локализованной версии AutoCAD

Когда мы используем английскую версию AutoCAD, вы можете непосредственно получить имя системной переменной стрелки выноски, используя системную переменную DIMLDRBLK. Но когда используется локализованная версия AutoCAD, эта системная переменная хранит локализованную системную переменную, например, "Punkt" в немецкой и "Точка" в русской версии для стрелки выноски DOT.

Опубликовано 09.02.2015     Читать далее >>>
07/02/2015

Использование WeakEventManager с событиями AutoCAD

Недавно мы получили вопрос от разработчика об использовании Менеджера Слабых Событий (WeakEventManager) при работе с событиями AutoCAD. В этой статье мы увидим три разных версии подписки на событие завершение команды (CommandEnded) класса Document. Преимущество использования WeakEventManager в предотвращение утечки памяти, когда на событие подписаны, но они уже не нужны. Но при этом использование WeakEventManager имеет свою цену, так как события теперь доставляются через менеждер событий. Дополнительная цена использования шаблона слабых событий отлично расписана в этой статье Reed Copsey.

Рекомендуется отписываться от событий AutoCAD вручную, но следующие образцы кода должны продемонстрировать использование WeakEventManager в том случае если он вам нужен.

Опубликовано 07.02.2015     Читать далее >>>
04/02/2015

Управляемая альтернатива ExplodeAllProxy

Андрей Бушман у себя на сайте опубликовал код, решающий те же задачи, что и знаменитый ExplodeAllProxy от Александра Ривилиса. Пользуясь выцыганенным у Андрея разрешением, публикую мои изменения его кода.
Опубликовано 04.02.2015     Читать далее >>>
29/01/2015

Показ модальных и немодальных HTML страниц в AutoCAD

Начиная с AutoCAD 2014 появились два новых API для показа HTML-страниц в AutoCAD за счет небольших дополнений к существующим API:

Опубликовано 29.01.2015     Читать далее >>>
27/01/2015

Отслеживание меток примитивов в команде БЛОКРЕД

Метки примитивов в AutoCAD являются уникальными внутри базы, но AutoCAD может их менять, при этом оставляя их уникальными. Редактирование блока при помощи команды БЛОКРЕД (BEDIT) – это одна из операций, когда можно ожидать что метки примитивов будут меняться. Если ваш код хранит значений меток примитивов внутри BlockTableRecord, вам может быть интересным отследить изменение значений меток примитивов при редактировании блока.

Опубликовано 27.01.2015     Читать далее >>>
26/01/2015

Выбор примитивов для изменения свойств

Чтобы выбрать примитивы и оставить видимыми свойства выбранных примитивов в Панели Свойств необходимо вашей команде установить флаг CommandFlags.Redraw. Это гарантирует то, что AutoCAD оставит выбранные примитивы подсвеченными. После этого вы можете изменить их общие свойства по своему разумению. Далее небольшой фрагмент кода для выбора всех примитивов:
Опубликовано 26.01.2015     Читать далее >>>
14/01/2015

Установка прозрачности слоя в .NET

Слою можно назначить (начиная с версии AutoCAD 2011) прозрачность при помощи диалога команды слой.

Это пример того, как можно достигнуть такого же результата при помощи AutoCAD .Net API.

Перед тем как попробовать этот код не забудьте установить системную переменную TRANSPARENCYDISPLAY в 1.

Опубликовано 14.01.2015     Читать далее >>>
24/12/2014

Быстрое получение количества примитивов в Пространстве Модели

LINQ предлагает легкий способ нахождения числа примитивов в Пространстве Модели без итерации по ней. Интерфейс IEnumerator обеспеченный классом BlockTableRecord может быть приведён к IEnumerable<ObjectId> для подсчета количества. Ниже пример кода :
Опубликовано 24.12.2014     Читать далее >>>