Создание твердых тел выдавливанием полилинии
Примитив твердого тела может быть получен выдавливанием объекта область. Таким образом мы можем создать временную область, ограниченную существующей полилинией. Здесь мы расчленяем полилинию на отдельные кривые, составляющие границу, а затем создаем область из этих кривых.
Посмотрите на следующий пример кода:
Определение прерывания команды при выполнении acedCommandC
Выполнение команд в AutoCAD сейчас возможна двумя способами вместо одного варианта функции acedCommand. Функция acedCommandS проще для использования, но требует задания сразу всех параметров, которые необходимы AutoCAD для завершения команды и без ввода данных пользователем. При выполнении команды при помощи функции acedCommandS её нельзя прервать.Функция acedCommandC используется в том случае когда может возникнуть необходимость паузы для ввода данных пользователем. Тут возможно прерывание пользователем выполнения команды вместо ввода данных. Чтобы идентифицировать это событие в коде используются функции "acedCmdCWasCancelled" и "acedCallBackOnCancel". Так же в силу асинхронности функции acedCommandC, завершение команды может быть идентифицировано только в функции обратного вызова, как в следующем коде.
Не-DWG окна в AutoCAD 2015
AutoCAD 2015 позволяет создавать Не-DWG окна и попросту окна содержащие не dwg-файлы. Не-DWG окна появляются как вкладки точно так же, как и обычные окна с чертежами.В конце этой статьи вы найдете ссылку на скачивание готового C++ проекта для создания Не-DWG окна и показа как его использовать.
Периметр штриховки с помощью ObjectARX и .NET API
Примитив штриховки в AutoCAD хранит свою геометрию в своих "циклах". Перебирая циклы штриховки можно вычислить периметр штриховки, получая доступ к геометрии. Также, учитывая, какие циклы являются «внутренними», какие «внешние», нужно вычислить отдельно периметр внешний, и периметр внутренний. Здесь пример кода, который вычисляет периметр с использованием ObjectARX и AutoCAD .Net API. Проверка ошибок минимальна для того, чтобы код был более читабелен.AutoCAD 2015: вызов команд
Как указывается в предыдущем сообщении, фиберы в AutoCAD 2015 неактивны (соответствующий код остался, в первую очередь для средств тестирования, но его не следует включать для обычного использования продукта).
Доступность Visual Studio 2012
Как объясняется в другой теме в этом блоге и в прекрасном блоге Киана Уомсли(и конечно в документации ObjectARX 2015), AutoCAD 2015 не является совместимым на уровне двоичных кодов с предыдущими версиями AutoCAD. Это означает, что версия Visual Studio, которая требуется для создания ваших приложений, также изменилась. А вот какая именно версия вам нужна зависит от того, какой API вы используете.Находим примитив под курсором при помощи Win32 и ObjectARX
Вопрос:
Как найти примитив под курсором с использованием чистого Win32?
Ответ:
Лучший способ для нахождения примитива под курсором/перекрестьем – использование класса AcEdInputPointMonitor. Но если вам нужно использовать только Win32, это можно сделать так …
Как определить нажата ли кнопка Отмена в диалоговом окне DCL
Сейчас довольно редко используются диалоговые окна с помощью DCL в AutoCAD, но если вы используете их, то следующая информация может быть вам полезна.Допустим, вы используете командные реакторы чтобы определить, когда определенные команды отменяются, но когда команда имеет диалоговое окно, нет никакой разницы, если пользователь нажимает Отмена или Да (просто вызывается командный реактор редактора commandEnded). Так, как же вы можете обнаружить разницу между Да и Отмена при выборе в диалоговом окне?
Как получить текст из окна командной строки AutoCAD с использованием ObjectARX
ObjectARX API содержит функцию acedGetAcadTextCmdLine() которая возвращает доступ к CWnd MFC окна командной строки. Окно командной строки содержит множество дочерних окон (в зависимости от версии AutoCAD) так что нам понадобится пройтись по ним, чтобы найти текст, так что будем использовать Win32 API для итерации по окнам и получения текста.Как-то так…
Необходимость использования Release версии библиотек MFC/CRT при компиляции ObjectARX приложения
Вопрос:
Мое приложение использует динамические версии MFC и DLL библиотеку времени выполнения. Когда я линкую Debug версию, появляется предупреждение о конфликте MSVCRT с другими библиотеками. Когда я использую ключ линковки /verbose:lib, я вижу, что линкуются debug-версии MFC и библиотеки времени выполнения. Руководство пользователя ObjectARX указывает не использовать debug-версии. Что следует сделать, чтобы линковать с release-версиями MFC?
Решение:
Все что нужно сделать – это убрать определение _DEBUG при включении файлов заголовков MFC header
Разрешение конфликтов MFC между ObjectARX MFC DLL и AutoCAD
Класс CAcModuleResourceOverride обеспечивает очень удобный способ для переключения дескриптора ресурсов MFC между AutoCAD и ресурсами вашего собственного ARX DLL приложения.Если вам нужно использовать функции пользовательского интерфейса AutoCAD внутри ваших функций, вы можете использовать класс CAcModuleResourceOverride() опираясь на его деструктор (который восстанавливает дескриптор ресурсов MFC AutoCAD)
MFC: Проблемы с CAcModuleResourceOverride
Возможно вы замечали, что при использовании объекта CAcModuleResourceOverride для переключения дескриптора ресурсов по-умолчанию (дескриптора ресурсов AutoCAD) на дескриптор ресурсов вашего файла приложения, невозможно вызвать AutoCAD или некоторые ARX функции, такие как acedGetFileD().Получение изолиний поверхности (Surface)
Это пример кода получающий изолинии вдоль направлений U и V поверхности. Полученные кривые изолиний добавляются в базу данных чертежа.AutoCAD API для ленты с использованием C++/CLI
Есть уже несколько примеров на блоге иллюстрирующих использование API Ленты с помощью .NET, но пока нет ни одного использующего C++/CLI, так что пусть этот будет первым. Кроме того такой вопрос уже задавался членами ADN в прошлом…Загружаем тип линии в неактивный документ
Следующий код загружает типы линий, начинающиеся на литеру 'H' из файла acad.lin во все открытые документы. Заметим что команда должна быть зарегистрирована для контекста приложения (т.е. с флагом ACRX_CMD_SESSION).
Создаем копию текущего документа в новом документе.
Вопрос:
Как можно создать точную копию текущего документа в новом документе?
Решение:
Одно из решений – сначала создание временного файла-шаблона из текущего файла, а затем создание нового чертежа из этого шаблона. Затем шаблон можно удалить. Вот шаги, которые последовательно нужно проделать:
Подавление команд AutoCAD
Метод acedRegCmds->removeCmd(), работает только с командами, зарегистрированными из ARX приложения. Этим способом нельзя отменить встроенные команды AutoCAD. Команда AutoCAD _UNDEFINE предназначена именно для подавления встроенных команд. Так как после команд _OPEN и/или _NEW команды переопределяются AutoCAD’ом, необходимо вызывать команду _UNDEFINE каждый раз, когда AutoCAD посылает уведомление kLoadDwgMsgвашей программе.Сохранение собственных значений на уровне dwg-файлаАвтор: Александр Ривилис
Вопрос:
Есть необходимость хранить в чертеже (dwg-файле) информацию, относящуюся ко всему чертежу. Формат информации – целые или вещественные числа, строки и координаты точек. Необходимо обеспечить соответствие имени переменной (например, Scale) и его значению (например, 1.0). Как это проще и удобнее всего сделать.
Ответ:
Для таких целей удобнее всего использовать Named Object Dictionary (NOD):
Для этой цели в корневом словаре мы создаем дочерний словарь с именем заданным переменной appName и внутри него для каждой из созданных переменных с именем varName будем хранить их значения varValue в примитиве XRecord.
Вставка растрового изображения с использованием буфера изображения
Можно использовать метод AcDbRasterImageDef::setImage в случае если вы не хотите указывать путь к файлу растрового изображения при вставке изображения. Это можно считать еще одним подходм для выполнения того, что объясняется в этой статье.Встраивание изображения в чертеж
Вопрос:Как можно встроить изображение в чертеж так, чтобы не было необходимости передавать отдельный от чертежа растровый файл?
Ответ:
Это можно сделать двумя способами. Метод зависит от ваших требований.