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

29/03/2014

API для проверки чертежа - новый в AutoCAD 2015

В AutoCAD 2015 вы можете программно проверить файл чертежа с использованием API для проверки чертежа. Вы можете даже попробовать исправить ошибки в чертеже если использовать соответствующий аргумент API. Это API появилось и в ObjectARX и в AutoCAD .NET API.

В ObjectARX используется функция Acad::ErrorStatus acedAudit(AcDbDatabase* , bool bFixErrors, bool bEcho).

Опубликовано 29.03.2014     Читать далее >>>
29/03/2014

SystemVariableEnumerator - новый класс в AutoCAD 2015

Новый класс SystemVariableEnumerator обеспечивает возможность пройтись по всем публичным системным переменным и получить их имена, типы данных, диапазон изменения (если есть), статус «только для чтения» и где они хранятся. В ObjectARX соответствующий класс называется AcEdSysVarIterator

Пример использования:

Опубликовано 29.03.2014     Читать далее >>>
14/03/2014

Когда метод IsEffectivelyErased возвращает True

Для объектов, которые содержатся в базе данных и которые не были сами удалены может быть три причины по которым isEffectivelyErased() может вернуть true:

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

Создание блока с многострочным определением атрибута

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

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

Где находятся сборки COM взаимодействия (Interop) ?

Начиная с AutoCAD 2013 мы прекратили регистрацию сборок взаимодействия с COM AutoCAD в Глобальном кэше сборок (GAC). Мы продолжаем поставлять их в составе ObjectARX SDK.

Правильный путь использования этих сборок следующий:

Опубликовано 10.03.2014     Читать далее >>>
05/03/2014

Нахождение примитивов под курсором в момент выбора примитивов

Функция обратного вызова PointMonitor в .Net позволяет получить доступ к примитивам, находящимся внутри апертуры курсора, когда пользователь наводит мышь, однако эта возможность заблокирована в момент, когда выполняется Editor.GetEntity.

Существует обходной путь для этой ситуации, который использует P/Invoke для вызова ряда методов ObjectARX. Ниже приводится пример на C#.

Опубликовано 05.03.2014     Читать далее >>>
03/03/2014

Получение вложенных примитивов под апертурой курсора с использованием .NET API

Некоторое время назад мне был задан вопрос членом ADN о возможности в реальном времени получать примитивы внутри апертуры курсора, когда пользователь перемещает указатель мыши. Вопрос не сложен пока нас не интересуют вложенные объекты, такие как объекты во внешних ссылках…

Получение примитивов в указанной точке к сожалению не обеспечивается управляемым (.NET) кодом, так что нам придется использовать P/Invoke, и в частности, функции acedSSGet and acedSSName с опцией “:N”. Но эти функции не возвращают вложенные примитивы, а основные как например вставку блока. Чтобы получить вложенные примитивы требуется вызов acedSSNameX, и сигнатура этого метода не слишком интуитивна для вызова P/Invoking из .Net: требуется объявление структуры “resbuf”, а также кусок небезопасного кода для того чтобы сопоставить управляемые и неуправляемые объекты.

Опубликовано 03.03.2014     Читать далее >>>
28/02/2014

Включение/выключение привязок

Чтобы включить или выключить привязку во время выполнения кода достаточно установить системную переменную SNAPMODE в 1 или 0.
Опубликовано 28.02.2014     Читать далее >>>
24/02/2014

Как получить список канонических имен для плоттера?

Следующий код позволяет получить правильный размер листа, определенный в диалоге параметров листа.
Опубликовано 24.02.2014     Читать далее >>>
17/02/2014

Как оставить видимыми элементы Ленты во время выполнения?

AutoCAD API для работы с Лентой - достаточно удобен для настройки интерфейса. Однако изменения в интерфейсе не являются постоянными. Это значит, что есть ситуации когда требуется дополнительный код для того, чтобы элементы Ленты, созданные через этот API, оставались видимыми: обычно это при переключении Рабочего пространства или когда что-то изменено в командах НПИ (_CUI) и БЫСТРНПИ (_QUICKCUI).

Вот как можно оставить эти элементы видимыми и убедиться, что ваша Лента остается видимой.

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

Как реализовать Windows хук с использованием acedRegisterFilterWinMsg в .NET

Имеется возможность установить хук для сообщений Windows, который на низком уровне перехватывает события в системе, которые производят большинство действий, таких как движение мыши или открытие диалога.

Внутри AutoCAD есть специальный метод для этой цели, который не пересекается со встроенными возможностями Windows, но имеет похожие возможности: acedRegisterFilterWinMsg

Опубликовано 13.02.2014     Читать далее >>>
11/02/2014

Использование стандартных диалогов AutoCAD для выбора цвета, типа линии, веса линии в .NET

AutoCAD имеет ряд удобных диалоговых окон, доступных в пространстве имен "Autodesk.AutoCAD.Windows". Следующий код показывает, как использовать три из них, в частности: ColorDialog, LinetypeDialog и LineWeightDialog. Эти три класса позволяют очень легко реализовать пользовательский интерфейс выбора соответствующих свойств.
Опубликовано 11.02.2014     Читать далее >>>
11/02/2014

Внутренние имена функций в утилите DependencyWalker

Утилита Dependency Walker, доступная www.dependencywalker.com, является “бесплатной утилитой, которая (…) выводит список всех функций, которые экспортируются модулем, и которые могут вызываться другими модулями”.

Для нас это представляет интерес для программирования AutoCAD так как некоторые API недоступны и/или недокументированы, но экспортируются из кода на C++. В этом случае в .NET для вызова этого кода нужно воспользоваться атрибутом DllImport.

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

Программное определение дублированных имен .NET команд

Неприятен факт связанный с атрибутом CommandMethod в AutoCAD .NET сборке: в нем может быть две разных команды имеющих одно имя но разные методы. Например, как в следующем коде:
Опубликовано 07.02.2014     Читать далее >>>
03/02/2014

Гиперссылки для атрибутов блоков

В настоящее время гиперссылка для вставки блока не отображается в атрибутах этой вставки блока. Единственный способ, чтобы у атрибутов отображалась гиперссылка – это установить эту гиперссылку для всех атрибутов этого блока, как показано в следующем коде.
Опубликовано 03.02.2014     Читать далее >>>
31/01/2014

Получение/установка путей изображений с помощью .NET API

Для получения и установки путей к файлу изображения используются свойства SourceFileName и ActiveFileName объекта RasterImageDef.

Вот пример кода изменяющий пути к файлу изображения

Опубликовано 31.01.2014     Читать далее >>>
29/01/2014

Как вставить растровое изображение с помощью .NET API?

Чтобы вставить растровое изображение необходимо сначала создать определение растрового изображения, так как растровое изображение – это только ссылка на определение растрового изображения. Следующий код показывает как открыть существующее определение изображения (т.е.. MY_IMAGE_NAME), а если его нет – создать его и затем создать ссылку на него.
Опубликовано 29.01.2014     Читать далее >>>
27/01/2014

Обновление и модификация растрового изображения

Следующий код показывает как следует модифицировать/обновлять источник растрового изображения. Код просит пользователя указать растровое изображение и находит определение растрового изображения. Обратите внимание, что изменение определения растрового изображения приводит к изменению всех связанных растровых изображений.
Опубликовано 27.01.2014     Читать далее >>>
24/01/2014

Как масштабировать неравномерно по осям изображение, чтобы заполнить область?

Растровые изображения относятся к категории примитивов, которые поддерживают неравномерное масштабирование по осям.
Опубликовано 24.01.2014     Читать далее >>>
17/01/2014

Выгрузка и удаление внешней ссылки при помощи .NET

В приложении ObjectARX чтобы получить уведомление после того, как внешняя ссылка выгружена или удалена необходимо переопределить методы "AcEditorReactor::xrefSubcommandUnloadItem" и "AcEditorReactor::xrefSubcommandDetachItem" класса реактора редактора. К сожалению, в AutoCAD .Net API нет соответствующих методов.
Опубликовано 17.01.2014     Читать далее >>>