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

21/07/2016

Как получить имя локализации с помощью ObjectARX

В ObjectARX SDK есть класс AcLocale, при помощи которого можно получить информацию о языке локализации AutoCAD. Класс AcLocale появился только в версии 2017.

Опубликовано 21.07.2016     Читать далее >>>
16/07/2016

Как определить был ли сохранён dwg-файл в ПО Autodesk или нет

Класс AcDbDatabase содержит метод dwgFileWasSavedByAutodeskSoftware для определения того был ли сохранён dwg-файл в ПО Autodesk или нет. Аналогично в AutoCAD .NET API в классе Database есть свойство DwgFileWasSavedByAutodeskSoftware.
Опубликовано 16.07.2016     Читать далее >>>
08/06/2016

Как получить цвет солнца

Цвет солнца вычисляется по географическому положению, дате и времени дня.

Начиная с ObjectARX 2017 у нас есть API для получения цвета солнца как из палитры свойств солнца:

Опубликовано 08.06.2016     Читать далее >>>
04/06/2016

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

В AutoCAD 2016 представлен новый класс AdApplicationFrame, который содержит множество API для доступа к фрейму приложения.

В этой статье мы покажем как создать и добавить свое меню вместо существующей строки меню AutoCAD (‘MENUBAR’).

При помощи экземпляра AdApplicationFrame мы можем добавлять MFC-элементы пользовательского интерфейса в наш AutoCAD.

Опубликовано 04.06.2016     Читать далее >>>
07/05/2016

Как средствами ObjectARX получить точки пересечения кривой и плоскостиАвтор: Александр Ривилис

Вопрос: Имеется кривая (наследник AcDbCurve) и задана плоскость AcGePlane. Каким образом можно получить все точки пересечения кривой и плоскости?

Ответ: Для этой цели мы воспользуемся геометрической библиотекой. Во-первых, при помощи функции acdbConvertAcDbCurveToGelibCurve мы преобразуем AcDbCurve (и любого его наследника) в AcGeCurve3d. Во-вторых, воспользуемся классом AcGeCurveSurfInt для получения точек пересечения кривой и плоскости.

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

Опубликовано 07.05.2016     Читать далее >>>
30/04/2016

Добавление иконки к имени команды без использования CUIXАвтор: Александр Ривилис

Вопрос: как программно добавить иконку для своей команды в контекстное меню, возникающее при наборе команды вручную? Один из способов мне известен – это регистрация команды в cuix-файле, как описано здесь: Adding Icon Next To Custom Command. Хотелось бы добиться такого же результата, но без создания cuix-файла.

Ответ: средствами ObjectARX это возможно. Думаю, что можно и при помощи AutoCAD .NET API, но понадобится активно использовать P/Invoke для большого числа функций из Win32 и ObjectARX. Я покажу здесь как это можно сделать при помощи ObjectARX:

Опубликовано 30.04.2016     Читать далее >>>
24/04/2016

Форматирование плавающего числа в строку

В ObjectARX для конвертации плавающего числа в строку используется функция acdbRToS. Эта функция также заботится о преобразовании строки в нужный формат ("Архитектурные", "Десятичные", "Инженерные", "Дробные" и "Научные"), как показано в коде ниже.
Опубликовано 24.04.2016     Читать далее >>>
30/03/2016

Конвертация AcDb3DSolid в AcDbPolyFaceMesh средствами ObjectARXАвтор: Александр Ривилис

Вопрос: Стоит задача получить на основе AcDb3DSolid сеть AcDbPolyFaceMesh. Как это можно сделать?

Ответ: Ниже код, который позволяет это сделать. Возможны вариации в настройке AcBrMesh2dControl, определяющей насколько сеть будет повторять контуры твердого тела и какие элементы будут в основе этой сети.

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

Установка цвета всем граням твёрдого тела

Ниже вы видите код, который показывает как пройти по всем граням твердого тела и покрасить каждую из граней в свой цвет:
Опубликовано 27.03.2016     Читать далее >>>
09/03/2016

Управление форматом вывода данных чисел в Панели свойств AutoCADАвтор: Александр Ривилис

Управление форматом вывода данных чисел в Панели свойств AutoCAD

В статье Как показать правильно числовое значение в Панели Свойств (OPM)? в общих чертах описывается возможность управлять форматом вывода числовых значений в Панели свойств. Всё более-менее просто если свойство статическое. В этом случае имеется возможность указать формат числа в idl-файле. А вот в случае динамического свойства требуется выполнить специальную подготовку. Форматом вывода управляют методы GetCurrentValueName и GetCurrentValueType. Вот пример, обеспечивающий независящее от единиц представление действительного числа:

Опубликовано 09.03.2016     Читать далее >>>
16/02/2016

Визуализация при помощи RenderToImage API

Как вы возможно уже знаете API графической системы было изменено в AutoCAD 2015, как описано в статье Изменения в графике в AutoCAD 2015. В AutoCAD 2016 рендер RapidRT заменил рендер MentalRay, который использовался в предыдущих версиях. В свете этого в ObjectARX 2016 появился новый класс AcDbRapidRTRenderSettings. Все эти изменения требуют изменений в вашем коде в случае, если вы использовали метод AcGsView::RenderToImage для генерации изображения модели AutoCAD.

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

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

Опубликовано 16.02.2016     Читать далее >>>
13/02/2016

Программное создание диалога "Сохрани как..."

Эта статья появилась как результат запроса от пользователя. Здесь я покажу простую реализацию диалога для сохранения файла.

Хотя у нас есть функция acedGetNavDialog, но у неё нет возможности управлять списком форматов чертежей.

Опубликовано 13.02.2016     Читать далее >>>
15/01/2016

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

Есть несколько способов, чтобы получить уведомление в случае, когда экран обновляется при помощи колеса мыши или полос прокрутки.

Самый простым способом может быть субклассирование окна AutoCAD, и отлов всех сообщений WM_VSCROLL, WM_HSCROLL и WM_MOUSEWHEEL. Вы знаете, что экран будет обновляться, когда AutoCAD получит эти сообщения, и вы можете контролировать или фильтровать сообщения AutoCAD путем реализации монитора или фильтра сообщений AutoCAD. Но есть одна загвоздка. В монитор контролируемое сообщение попадёт до того, как AutoCAD отработает его. И на самом деле нет чистого способа для отслеживания сообщений AutoCAD сразу после их обработки AutoCAD. Таким образом, простейшим решением было бы установить таймер с минимальной временной задержкой, который будет использоваться для уведомления о завершении обновления экрана AutoCAD. Это подразумевает, что экран AutoCAD будет обновлен в течение этого времени, так что возможно это значение придётся изменить.

Опубликовано 15.01.2016     Читать далее >>>
13/01/2016

Создание многолистового PDF файла при помощи DSD

У нас уже была статья как это сделать при помощи .NET, но может потребоваться некоторое время для конвертации этого кода в ARX, так что вот он.

Он не совсем такой, как в .NET, но очень похож :)

Опубликовано 13.01.2016     Читать далее >>>
23/12/2015

Получение доступа к каталогам поддержки и проекта

Я получил недавно запрос о том, как програмно получить доступ к каталогам поддержки и файлам проекта, которые доступны на вкладке Свойства/Файлы.

Мы можем воспользоваться ActiveX API AcadPreferences.Files для получения доступа к каталогам поддержки и файлам проекта.

Чтобы получить информацию о каталогах поддержки можно также прочитать системную переменную «ACADPREFIX» или выполнить следующий код:

Опубликовано 23.12.2015     Читать далее >>>
22/12/2015

Преобразование даты из Юлианского календаря

Простейший способ для преобразования Юлианской даты (формат системной переменной DATE) в формат день, месяц, год, часы минуты, секунды, миллисекунды – это использование класса AcDbDate. Вот пример его использования:

Опубликовано 22.12.2015     Читать далее >>>
19/12/2015

Чтение свойств чертежа (SummaryInfo) из внешнего приложения.Автор: Александр Ривилис

Вопрос:

Средствами ObjectARX и AutoCAD .NET API можно получить информацию о dwg-файле, которую записывает команда DWGPROPS. А можно ли прочитать эту информацию из внешнего C++ приложения без запуска AutoCAD?

Ответ:

Это возможно. Пример кода, который позволяет это сделать ниже:

Опубликовано 19.12.2015     Читать далее >>>
17/11/2015

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

В этом статье мы рассмотрим создание пользовательского объекта, унаследованного от класса AcDbRasterImageDef, который сохраняет/загружает растровые данные в/из рисунка при помощи ATIL. Это гарантирует независимость чертежа от внешнего файла изображения и данные будут доступны если будет загружен ваш arx-файл в AutoCAD.

Другие способы встраивания растра в чертеж без зависимости от внешнего растрового файла описаны в этой статье:

Опубликовано 17.11.2015     Читать далее >>>
12/11/2015

Как получить доступ и изменить свойства динамического блока в ARX и .NET

Вопрос:

У моего динамического блока есть свойство "Visibility", которое может быть в двух состояниях. Как мне получить доступ к этому свойству и изменить его?

Ответ:

Запустите следующий код с присоединённым в конце статьи чертежом. Выберите вставку динамического блока, код получит доступ к свойству Visibility и изменит его состояние. Вы сможете сразу увидеть результат после завершения работы кода.

Опубликовано 12.11.2015     Читать далее >>>
10/11/2015

Создание таблицы с содержимым только для чтения

Содержимое таблицы можно сделать с признаком «только для чтения» если установить соответствующее состояние ячейкам таблицы.

Следующий код создаёт таблицу с ячейками, которым установлено состояние "AcDb::kCellStateContentReadOnly"

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