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

21/08/2014

Подрезка внешних ссылок при помощи ObjectARX

Этот класс используется для определения пространственного фильтра, который AutoCAD использует для создания определения объемного отсечения вхождения блока внешней ссылки в основном чертеже. AutoCAD использует эту пространственный фильтр, чтобы решить, будет ли этот объекты с указанными ID обрабатываться при регенерации.

Ниже небольшой пример. Примечание: команда должна быть определена с флагом ACRX_CMD_NOINTERNALLOCK

Опубликовано 21.08.2014     Читать далее >>>
20/08/2014

Метод AcDbRegion::transformBy

Вопрос: У меня есть ситуации, в которых использование метода AcDbRegion::transformBy дает различные результаты в AutoCAD 2015 и в AutoCAD 2014 Можете ли Вы объяснить, что изменилось в этом методе, что приводит к различным результатам?

Ответ: Этот сценарий работал в AutoCAD 2014, потому что мы использовали больший допуск (equalPoint равный 1.0E-8 и equalVector равный 1.0E-6). В AutoCAD 2015 установка допуска не делается, так что это повлияло на некоторые сценарии выполнения ряда методов. Ниже указано как можно обойти эту ситуацию. Спасибо партнеру ADN, который показал нам такой вариант поведения.

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

Преобразование цветов между RGB и AutoCAD ACI в ObjectARX

Преобразование цвета в RGB к ближайшему эквивалентному индексу в палитре индексов AutoCAD (ACI) может быть сделано при помощи методов loopUpACI и lookUpRGB, реализованных в классе AcCmEntityColor.

Следующий пример использует метод lookUpRGB() для конвертации индекса цвета 47 в соотвествующий цвет в RGB, а затем используя полученный RGB найдем ближайший индексный цвет при помощи метода lookUpACI()

Опубликовано 11.08.2014     Читать далее >>>
16/06/2014

Что значит getallobjects() в контексте вложенных транзакций?

Вопрос:

Можете ли вы объяснить мне как работает метод getAllObjects() в контексте сценария использования вложенных транзакций? Я не нашел объяснения в ObjectARX Developer's Reference/Guide.

Ответ:

Давайте рассмотрим такой сценарий (это псевдокод, все транзакции типа AcDbTransaction)

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

Сброс текущего цвета при установке текущим другого слоя

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

Итак. Как автоматически менять текущий цвет на цвет Послою (BYLAYER) при изменении текущего слоя?

Текущий цвет может быть установлен при помощи метода AcDbDatabase::setCecolor(). Вы можете получить уведомление об изменении системной переменной, если создадите реактор, унаследованный от AcEditorReactor и переопределите его метод sysVarChanged(). Системная переменная текущего слоя: CLAYER.

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

Удаление анонимных групп средствами ObjectARX

Когда пользователь создает группу в AutoCAD, он может создать группу анонимной. При этом любая группа (анонимная или нет) хранится в Словаре именованных объектов (NOD) в группе 'ACAD_GROUP'. Если группа анонимная, AutoCAD присваивает ей имена вида '*A1', '*A2' и так далее. Хотя группа и анонимная, но у каждой анонимной группы есть уникальное имя в базе чертежа.

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

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

Создание твердых тел выдавливанием полилинии

Примитив твердого тела может быть получен выдавливанием объекта область. Таким образом мы можем создать временную область, ограниченную существующей полилинией. Здесь мы расчленяем полилинию на отдельные кривые, составляющие границу, а затем создаем область из этих кривых.

Посмотрите на следующий пример кода:

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

Определение прерывания команды при выполнении acedCommandC

Выполнение команд в AutoCAD сейчас возможна двумя способами вместо одного варианта функции acedCommand. Функция acedCommandS проще для использования, но требует задания сразу всех параметров, которые необходимы AutoCAD для завершения команды и без ввода данных пользователем. При выполнении команды при помощи функции acedCommandS её нельзя прервать.

Функция acedCommandC используется в том случае когда может возникнуть необходимость паузы для ввода данных пользователем. Тут возможно прерывание пользователем выполнения команды вместо ввода данных. Чтобы идентифицировать это событие в коде используются функции "acedCmdCWasCancelled" и "acedCallBackOnCancel". Так же в силу асинхронности функции acedCommandC, завершение команды может быть идентифицировано только в функции обратного вызова, как в следующем коде.

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

Не-DWG окна в AutoCAD 2015

AutoCAD 2015 позволяет создавать Не-DWG окна и попросту окна содержащие не dwg-файлы. Не-DWG окна появляются как вкладки точно так же, как и обычные окна с чертежами.

В конце этой статьи вы найдете ссылку на скачивание готового C++ проекта для создания Не-DWG окна и показа как его использовать.

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

Периметр штриховки с помощью ObjectARX и .NET API

Примитив штриховки в AutoCAD хранит свою геометрию в своих "циклах". Перебирая циклы штриховки можно вычислить периметр штриховки, получая доступ к геометрии. Также, учитывая, какие циклы являются «внутренними», какие «внешние», нужно вычислить отдельно периметр внешний, и периметр внутренний. Здесь пример кода, который вычисляет периметр с использованием ObjectARX и AutoCAD .Net API. Проверка ошибок минимальна для того, чтобы код был более читабелен.
Опубликовано 21.04.2014     Читать далее >>>
09/04/2014

AutoCAD 2015: вызов команд

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

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

Доступность Visual Studio 2012

Как объясняется в другой теме в этом блоге и в прекрасном блоге Киана Уомсли(и конечно в документации ObjectARX 2015), AutoCAD 2015 не является совместимым на уровне двоичных кодов с предыдущими версиями AutoCAD. Это означает, что версия Visual Studio, которая требуется для создания ваших приложений, также изменилась. А вот какая именно версия вам нужна зависит от того, какой API вы используете.
Опубликовано 07.04.2014     Читать далее >>>
29/03/2014

Находим примитив под курсором при помощи Win32 и ObjectARX

Вопрос:
Как найти примитив под курсором с использованием чистого Win32?

Ответ:
Лучший способ для нахождения примитива под курсором/перекрестьем – использование класса AcEdInputPointMonitor. Но если вам нужно использовать только Win32, это можно сделать так …

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

Как определить нажата ли кнопка Отмена в диалоговом окне DCL

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

Допустим, вы используете командные реакторы чтобы определить, когда определенные команды отменяются, но когда команда имеет диалоговое окно, нет никакой разницы, если пользователь нажимает Отмена или Да (просто вызывается командный реактор редактора commandEnded). Так, как же вы можете обнаружить разницу между Да и Отмена при выборе в диалоговом окне?

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

Как получить текст из окна командной строки AutoCAD с использованием ObjectARX

ObjectARX API содержит функцию acedGetAcadTextCmdLine() которая возвращает доступ к CWnd MFC окна командной строки. Окно командной строки содержит множество дочерних окон (в зависимости от версии AutoCAD) так что нам понадобится пройтись по ним, чтобы найти текст, так что будем использовать Win32 API для итерации по окнам и получения текста.

Как-то так…

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

Необходимость использования Release версии библиотек MFC/CRT при компиляции ObjectARX приложения

Вопрос:
Мое приложение использует динамические версии MFC и DLL библиотеку времени выполнения. Когда я линкую Debug версию, появляется предупреждение о конфликте MSVCRT с другими библиотеками. Когда я использую ключ линковки /verbose:lib, я вижу, что линкуются debug-версии MFC и библиотеки времени выполнения. Руководство пользователя ObjectARX указывает не использовать debug-версии. Что следует сделать, чтобы линковать с release-версиями MFC?

Решение:
Все что нужно сделать – это убрать определение _DEBUG при включении файлов заголовков MFC header

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

Разрешение конфликтов MFC между ObjectARX MFC DLL и AutoCAD

Класс CAcModuleResourceOverride обеспечивает очень удобный способ для переключения дескриптора ресурсов MFC между AutoCAD и ресурсами вашего собственного ARX DLL приложения.

Если вам нужно использовать функции пользовательского интерфейса AutoCAD внутри ваших функций, вы можете использовать класс CAcModuleResourceOverride() опираясь на его деструктор (который восстанавливает дескриптор ресурсов MFC AutoCAD)

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

MFC: Проблемы с CAcModuleResourceOverride

Возможно вы замечали, что при использовании объекта CAcModuleResourceOverride для переключения дескриптора ресурсов по-умолчанию (дескриптора ресурсов AutoCAD) на дескриптор ресурсов вашего файла приложения, невозможно вызвать AutoCAD или некоторые ARX функции, такие как acedGetFileD().
Опубликовано 17.03.2014     Читать далее >>>
10/03/2014

Получение изолиний поверхности (Surface)

Это пример кода получающий изолинии вдоль направлений U и V поверхности. Полученные кривые изолиний добавляются в базу данных чертежа.
Опубликовано 10.03.2014     Читать далее >>>
26/02/2014

AutoCAD API для ленты с использованием C++/CLI

Есть уже несколько примеров на блоге иллюстрирующих использование API Ленты с помощью .NET, но пока нет ни одного использующего C++/CLI, так что пусть этот будет первым. Кроме того такой вопрос уже задавался членами ADN в прошлом…
Опубликовано 26.02.2014     Читать далее >>>