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

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     Читать далее >>>
15/01/2014

Синхронизация Ленты и системной переменной

Это пример кода, который показывает в комбобоксе Ленты список возможных значений системной переменной LUNITS и обеспечивает синхронизацию этой переменной и комбобокса. Системная переменная LUNITS используется только для демонстрации возможности синхронизации и этот код легко адаптируется для других системных переменных AutoCAD.
Опубликовано 15.01.2014     Читать далее >>>
10/01/2014

Как завершить "Editor.GetSelection" при выборе ключевого слова

Один из путей выхода из метода “GetSelection” по ключевому слову – это создать исключение в обработчике события ввода ключевых слов. Ниже простой пример объясняющий эту технику. При нажатии любого ключевого слова генерируется исключение “Autodesk.AutoCAD.Runtime.ErrorStatus.OK” с передачей ключевого слова. Это исключение обрабатывается в коде для идентификации введенного ключевого слова.
Опубликовано 10.01.2014     Читать далее >>>
08/01/2014

Доступ к COM-приложениям из Таблицы исполняющихся объектов (ROT)

Вот тема, которая то и дело всплывает: как перейти к определенному экземпляру COM-приложения, если есть несколько экземпляров имеющих аналогичный ProgId? Вызов GetActiveObject (progId) может вернуть только один объект, так что нет никакого способа, чтобы выбрать нужный конкретный экземпляр.

Обойти это ограничение можно используя Таблицу исполняющихся объектов (Running Object Table), которая может предоставить вам доступ к каждому экземпляру COM, работающему на машине.

Опубликовано 08.01.2014     Читать далее >>>
30/12/2013

Выбор вставок блоков с использованием фильтра

Этот пример запрашивает у пользователя выбор нескольких примитивов, а затем фильтрует все вставки блока с именем "ABC". А затем проходит по всему набору и вызывает метод erase() для каждой вставки блока.

Опубликовано 30.12.2013     Читать далее >>>
28/12/2013

Определение записи таблицы блоков связанной с Листом

Чтобы добавить примитивы на Лист, необходимо найти запись таблицы блоков, связанную с этим листом. Каждый лист хранит ObjectId записи таблицы блоков, с которой он ассоциирован. Ниже код добавляющий окружность к выбранному Листу.

Опубликовано 28.12.2013     Читать далее >>>
27/12/2013

Создаем блок из набора примитивов

Код ниже показывает алгоритм создания нового блока из выбранных на экране примитивов. Важнейшим методом для этого является “DeepCloneObjects” который получает набор ObjectId примитивов для копирования. Второй параметр – новый «владелец» скопированных примитивов. В следующем коде запись таблицы блоков с именем «тест» передаётся как новый владелец, так что копии выбранных примитивов попадают в этот блок.

Опубликовано 27.12.2013     Читать далее >>>
25/12/2013

Очистка набора предварительного выбора

Вы можете использовать метод “Editor.SetImpliedSelection” для очистки набора предварительного выбора. Код ниже получает список всех предварительно выбранных примитивов, а затем очищает его передавая пустой массив ObjectId в метод SetImpliedSelection.

Опубликовано 25.12.2013     Читать далее >>>
21/12/2013

Editor.SelectAll с фильтром выбора примитивов и слоёв

При использовании метода “Editor.SelectAll” можно создать фильтр выбора для отсеивания ненужных примитивов. Код ниже показывает как можно отфильтровать Отрезки и Круги, которые находятся только на определённых слоях (0, Layer1, Layer2).

Опубликовано 21.12.2013     Читать далее >>>
06/12/2013

Простая альтернатива использованию COM-объекта Preferences в AutoCAD

Недавно один из разработчиков столкнулся с проблемой при написании кода на LISP, когда он пытался добавить несколько путей к свойству PrinterStyleSheetPath. Код выглядел примерно так:
Опубликовано 06.12.2013     Читать далее >>>
29/11/2013

Как сделать невидимое определение атрибута в блоке видимым

Следующий код делает невидимые определения атрибутов в блоке видимыми, а также обновляет все вставки этого блока для того, чтобы отразить изменения в определении блока.
Опубликовано 29.11.2013     Читать далее >>>