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

19/05/2015

Как найти все поля (Field) в чертеже?

Словарь именованных объектов (NOD) в базе данных содержит запись “ACAD_FIELDLIST” если чертеж содержит хотя бы одно поле. Эта запись содержит записи класса “AcDbFieldList”, который к сожалению не доступен ни в ObjectARX, ни в .NET API.

Каждый объект AcDbField обычно доступен из словаря расширения (Extension Dictionary). Например, если мы создаём MText содержащий поле, мы можем получить доступ к MTextyou и посмотреть AcDbField в его ExtensionDictionary.

Чтобы получить все поля непосредственно – единственный путь получить все TypedValue (DxfCode – пары значений) из нашего AcDbFieldList, пройдя по ним по всем и отобрав все, у которых код = 330 и тип AcDbField.

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

Использование ресурсной dll для CUIx с прозрачными растрами

Эту статью и пример кода любезно предоставил один из членов ADN: Michael Csikos. Спасибо Михаил!

Здесь показывается, как можно использовать ico-файлы в ресурсных dll для ваших cuix-файлов. По умолчанию, cuix-файлы принимают из dll bmp-файлы растров. Но bmp-файлы не поддерживают прозрачность, которая могла бы помочь сделать кнопки иконок намного симпатичнее в интерфейсе AutoCAD.

К сожалению этот подход нигде не документирован в документации, так что Michael раскопал следующее решение: редактирование вручную файла ресурсов (.rc) для вашей ресурсной dll позволяет добавить поддержку ico-файлов. Достаточно просто добавить новый ico-ресурс при помощи редактора Visual Studio и отредактировать свойства “ICO” ресурса в “RCDATA” как показано ниже:

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

Как определить, что PaletteSet только что создан в первый раз

В ряде случаев вам может понадобиться узнать создан ли ваш PaletteSet в первый раз или нет, для того чтобы задать его пристыковку (Docking) или еще для каких-то целей. Чтобы сделать это, можно сохранить собственное значение одновременно с сохранением PaletteSet, и которого нет и быть не может при первом создании этого PaletteSet.

Ниже пример кода, который устанавливает пристыковку по умолчанию к левой границе (DockSides.Left) при первом создании PaletteSet. В следующей сессии вариант пристыковки уже не меняется и PaletteSet должен вернуть позицию, в которую его установил пользователь.

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

Пользовательский выбор файла, подчиняющийся системной переменной FILEDIA

Когда мы создаем пользовательскую команду, мы хотим чтобы она подчинялась общим правилам AutoCAD. Одним из правил является подчинение переменной FILDEIA, которая управляет появлением диалога при выборе файлов.

Многие разработчики используют напрямую класс Autodesk.AutoCAD.Windows.OpenFileDialog, который напрямую вызывает диалог. Альтернативой ему является класс PromptSaveFileOptions, который подчиняется системной переменной FILEDIA.

Опубликовано 26.04.2015     Читать далее >>>
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     Читать далее >>>