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

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

Загружаем тип линии в неактивный документ

Следующий код загружает типы линий, начинающиеся на литеру 'H' из файла acad.lin во все открытые документы. Заметим что команда должна быть зарегистрирована для контекста приложения (т.е. с флагом ACRX_CMD_SESSION).

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

Создаем копию текущего документа в новом документе.

Вопрос:
Как можно создать точную копию текущего документа в новом документе?

Решение:
Одно из решений – сначала создание временного файла-шаблона из текущего файла, а затем создание нового чертежа из этого шаблона. Затем шаблон можно удалить. Вот шаги, которые последовательно нужно проделать:

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

Подавление команд AutoCAD

Метод acedRegCmds->removeCmd(), работает только с командами, зарегистрированными из ARX приложения. Этим способом нельзя отменить встроенные команды AutoCAD. Команда AutoCAD _UNDEFINE предназначена именно для подавления встроенных команд. Так как после команд _OPEN и/или _NEW команды переопределяются AutoCAD’ом, необходимо вызывать команду _UNDEFINE каждый раз, когда AutoCAD посылает уведомление kLoadDwgMsgвашей программе.
Опубликовано 15.02.2014     Читать далее >>>
04/02/2014

Сохранение собственных значений на уровне dwg-файлаАвтор: Александр Ривилис

Вопрос:
Есть необходимость хранить в чертеже (dwg-файле) информацию, относящуюся ко всему чертежу. Формат информации – целые или вещественные числа, строки и координаты точек. Необходимо обеспечить соответствие имени переменной (например, Scale) и его значению (например, 1.0). Как это проще и удобнее всего сделать.

Ответ:
Для таких целей удобнее всего использовать Named Object Dictionary (NOD):

Для этой цели в корневом словаре мы создаем дочерний словарь с именем заданным переменной appName и внутри него для каждой из созданных переменных с именем varName будем хранить их значения varValue в примитиве XRecord.

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

Вставка растрового изображения с использованием буфера изображения

Можно использовать метод AcDbRasterImageDef::setImage в случае если вы не хотите указывать путь к файлу растрового изображения при вставке изображения. Это можно считать еще одним подходм для выполнения того, что объясняется в этой статье.
Опубликовано 22.01.2014     Читать далее >>>
20/01/2014

Встраивание изображения в чертеж

Вопрос:

Как можно встроить изображение в чертеж так, чтобы не было необходимости передавать отдельный от чертежа растровый файл?

Ответ:

Это можно сделать двумя способами. Метод зависит от ваших требований.

Опубликовано 20.01.2014     Читать далее >>>