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

28/06/2016

Выполнение подрезки блока или внешней ссылки при помощи .NETАвтор: Александр Ривилис

Вопрос: Как средствами AutoCAD .NET API можно выполнить подрезку блока или внешней ссылки (по аналогии с командой _XCLIP)

Ответ: Для этой цели используется пространственный фильтр (SpatialFilter). Следующий код показывает как выполнить подрезку блока/внешней ссылки при помощи произвольного замкнутого многоугольника:

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

Обзор OAuth API

Общие сведения об OAuth API Autodesk Forge
Опубликовано 27.06.2016     Читать далее >>>
20/06/2016

Fusion API - Изменение внешнего вида тела

Особенности работы с материалом и внешним видом тела при помощи Fusion 360 API
Опубликовано 20.06.2016     Читать далее >>>
18/06/2016

Как сделать команды в плагине недоступными в .NET

Вопрос: Недавно я получил вопрос о том, как сделать недоступными команды из плагина в случае если проверка лицензии неудачна.

Ответ: Один из вариантов – проверить лицензию в методе IExtensionApplication.Initialize() и генерировать исключение если проверка лицензии потерпела неудачу. После генерации исключения ни одна из команд в плагине не будет доступна пользователю.

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

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

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

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

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

API движка AutoCAD I/O

Рассматриваются особенности работы с AutoCAD I/O Engine
Опубликовано 08.06.2016     Читать далее >>>
05/06/2016

Удаление пропущенных внешних ссылок из базы не в редакторе AutoCAD

Ниже вы видите код функции для удаления потерянных внешних ссылок из базы незагруженной в редактор AutoCAD:

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

Как можно передавать сообщения в Fusion 360 по-русски из C++Автор: Александр Ривилис

Когда я создал тестовое приложение для Fusion 360 на C++ я обратил внимание, что цифры и английские буквы показываются нормально, а вместо кириллицы я увидел абракадабру. При этом в приложении на JavaScript и Python русские буквы воспроизводятся нормально. В чем же проблема? Оказалось, что скрипты JavaScript и Python сохраняются в кодировке UTF8 (если сохранять их в другой кодировке, то русские буквы тоже заменяются на абракадабру), и строки передаются именно в этой кодировке. Значит и в C++ необходимо передавать строки в этой же кодировке. Это можно сделать следующим образом (спасибо за подсказку liujac с форума Autodesk):

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

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

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

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

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

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

Регистрация lisp-функции как команды

Существует несколько способов вызвать созданную lisp-функцию как обычную команду AutoCAD.
Опубликовано 30.05.2016     Читать далее >>>
27/05/2016

Добавление Stacked Split Button на ленту

Не решился переводить Stacked Split Button. Stacked Items – Элементы на ленте, расположенные в столбец. Split Button – кнопка, которая имеет подпункты в раскрывающемся списке, при этом на саму кнопку тоже можно назначить действия.

Вопрос: На текущий момент, Split Button нельзя создать с помощью метода AddStackedItems. Можно только PushButton, PullButton, ComboBox и TextBox. Можно как-то обойти это ограничение?

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

Установка величины прозрачности новому материалу с помощью .NET

Чтобы назначить величину прозрачности новому материалу в AutoCAD .NET API используется класс MaterialOpacityComponent. Следующий код добавляет новый материал в Библиотеку материалов с прозрачностью 90.

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

Отладка AutoCAD 2017 с использованием Visual Studio 2015

В настоящее время разработчики не могут полноценно отлаживать .NET модули в AutoCAD 2017 с использованием VS 2015. Как объясняется в статье Киана Уомсли для VS 2013 http://through-the-interface.typepad.com/through_the_interface/2013/11/debugging-autocad-using-visual-studio-2013.html, обходной путь для этой проблемы – это или включить отладку для машинного кода, или использовать режим совместимости в VS 2015.
Опубликовано 23.05.2016     Читать далее >>>
23/05/2016

Завершение сеанса AutoCAD

В AutoCAD.NET API есть метод “Application.Quit()” для завершения сеанса AutoCAD. Однако в настоящее время “Application.Quit()” не позволяет сохранить все пользовательские установки профиля (например, активную вкладку Ленты). Одним из альтернативных методов для завершения сеанса AutoCAD может быть запуск команды _QUIT (ВЫХОД) при помощи метода “SendStringToExecute”

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

Значения атрибутов из раскрывающегося списка

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

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

Как обновить выбранные поля не выполняя регенерацию всего чертежаАвтор: Александр Ривилис

Вопрос: Мне необходимо выполнить обновление некоторых полей в чертеже, но мне не хотелось бы выполнять полную регенерацию. Как это можно осуществить?

Ответ: В ObjectARX есть семейство функций acdbEvaluateFields, которые и позволяют обновить поля в чертеже. Пример использования функции acdbEvaluateFields смотрите ниже:

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

Как определить изменение вида в AutoCAD

Недавно один из партнеров ADN задал мне вопрос о том, как можно идентифицировать изменение вида в AutoCAD при выполнении зуммирования и панорамирования при помощи мыши. Чтобы отловить такое событие в ObjectARX следует использовать реактор редактора viewChanged() (AcEditorReactor::viewChanged()). А вот в AutoCAD.NET API эквивалентом этом реактору будет событие класса документа Document::ViewChanged
Опубликовано 10.05.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     Читать далее >>>