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

25/04/2014

Используем ActiveX API GetBoundingBox в .NET

Ниже код, показывающий как использовать activeX API GetBoundingBox в AutoCAD.NET. Так как GetBoundingBox возвращает точки, нам понадобится вызывать метод "InvokeMember" с параметром "ParameterModifier".
Опубликовано 25.04.2014     Читать далее >>>
23/04/2014

Штриховка при помощи AutoCAD .NET API

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

Опубликовано 23.04.2014     Читать далее >>>
18/04/2014

Вызов PInvoke ObjectARX AcArray для Hatch.AppendLoop in C#

Это смешно, но иногда такие вещи встречаются. Совсем недавно общался с разработчиком, который рассказывал мне о проблемах использования смешанного (“mixed”) кода (C++) Ему приходилось привязываться к конкретной версии .NET, так как без этого не работали другие связанные с этой части программы.
Опубликовано 18.04.2014     Читать далее >>>
16/04/2014

Изменения в графике в AutoCAD 2015

Ниже важные изменения в графике (модули Autodesk.AutoCAD.GraphicsSystem и Autodesk.AutoCAD.GraphicsInterface) произошедшие в AutoCAD 2015.

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

Создание выноски-сплайна при помощи Jig

Ниже код, который позволяет создать выноску-сплайн при помощи EntityJig. Это модифицированная версия из этой статьи в блоге Киана.

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

Перемещение выбранного примитива в центр вида

Ниже код, который позиционирует выбранный примитив в центр вида. Большая часть кода подобна тому, который используется при зумировании примитива, за исключением того, что не меняется ни высота, ни ширина вида. Меняется лишь центр вида в DCS.
Опубликовано 11.04.2014     Читать далее >>>
29/03/2014

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

В течении продолжительного времени сообщество программистов просило дать возможность восстановления чертежей с помощью API. Этот запрос наконец-то был реализован в AutoCAD 2015. Теперь класс коллекции документов (DocumentCollection) приобрел новый метод AppContextRecoverDocument, которому передается имя чертежа для восстановления. Этот API присутствует и в ObjectARX и в .NET. В ObjectARX используется метод AcApDocManager::appContextRecoverDocument().

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