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

20/02/2016

Как отключить Ленту средствами .NET

Мне попался интересный вопрос на форуме AutoCAD .NET, заданный Pete Elliott:

Когда AutoCAD загружается, я вижу что мои панели выключены (серые) до того момента, когда он не закончит загружаться. Наша программа выполняет дополнительную загрузку данных после того, как AutoCADпопадает в состояние «простоя». Но если пользователь нажмёт одну из кнопок на панели до того, как все данные будут загружены, AutoCADаварийно завершит свою работу. Есть ли способ отключить панели (как это делает AutoCAD) пока загрузка не выполнена, а затем включить их? Я не смог найти API, которое бы позволило это сделать. Приму любые предложения с благодарностью!

Мне кажется, что это будет полезно знать всем. Для сегодняшней статьи я буду считать, что под "Панелями " Pete имеет в виду Ленту. (Это мне подходит, так как я нашел способ как это сделать для Ленты, но я сделаю все возможное, чтобы опубликовать последующую статью для Панелей если в этом возникнет потребность.

Основной подход достаточно прост: вы получаете доступ к текущему "Набору палитр Ленты " при помощи класса RibbonServices (мы вызываем метод для создания новой Ленты, но обычно он возвращает существующую Ленту если вызывается из команды). Затем мы используем его, чтобы отключить "Элемент управления Ленты ", а также его фоновое отображение вкладок. Мы также отключим отображение всплывающих подсказок на то время, пока Лента отключена.

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

Изменение установок Профиля AutoCAD при помощи .NET

Есть много параметров, используемых AutoCAD, которые хранятся в различных частях реестра. Многие из них также можно читать и писать через getenv / setenv в LISP или acedGetEnv / acedSetEnv в ObjectARX и вот так в .NET:

Простая альтернатива использованию COM-объекта Preferences в AutoCAD

Если это не переменная окружения и к ней нет доступа через getenv/setenv к ней можно получить доступ при помощи API Реестра для чтения/модификации значений.
Замечание: если интересующее значение является строчным, тогда к нему можно получить доступ при помощи объекта UserConfigurationManager для чтения/записи:
http://through-the-interface.typepad.com/through_the_interface/2008/05/storing-custom.html

В качестве примера попробуем изменить переключатель "Разрешить уведомления" для печати из .NET.

Если вы хотите выяснить где данная настройка сохраняется в реестре (если она действительно хранится там), то вы можете использовать такой инструмент, как Process Monitor, чтобы увидеть, какое свойство в реестре модифицируется при изменении настройки с помощью пользовательского интерфейса. В случае печати это свойство было найдено здесь:

Так что мы можем его изменить при помощи следующего кода:

Опубликовано 17.02.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     Читать далее >>>
11/02/2016

Интерфейс OData

Особенности работы с интерфейсом OData
Опубликовано 11.02.2016     Читать далее >>>
10/02/2016

Пошаговая инструкция по AutoCAD I/O API

Введение в создание приложений при помощи AutoCAD I/O API
Опубликовано 10.02.2016     Читать далее >>>
09/02/2016

Захват изображения текущего документа AutoCAD с использованием .NET

Эта тема уже несколько раз поднималась в этом блоге, когда мы обсуждали систему 3D графики для захвата изображения и в серии сообщений про плагин месяца "Снимок Изображения" несколько лет назад. Я подумал, что следует её пересмотреть с учетом того, что я не использовал это API раньше.

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

Вставка определённой страницы PDF-файла в качестве подложки в чертеж.Автор: Александр Ривилис

На форме возник вопрос как можно вставить в dwg-файл конкретную страницу из pdf-файла. По умолчанию вставляется первая (или единственная) страница. Оказалось, что это сделать не сложно. Достаточно задать PdfDefinition.ItemName, указав строковое представление номера страницы. Немного переработанный код из http://adn-cis.org/kak-sozdat-pdf-podlozhku-sredstvami-autocad-net.html будет выглядеть так:

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

Работа с макросами. Исключения

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

Как создать pdf-подложку средствами AutoCAD .NET?

PDF подложки представлены классами PdfDefinition и PdfReference classes в AutoCAD .NET API. Вставка подложка (в данном случае PDF) должна ссылаться на совместимое определение подложки. Вставка подложка определяет положение контента в чертеже, определение подложки определяет контент подложки.

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

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

Группы хранятся как постоянные реакторы в примитиве AutoCAD, так что можно воспользоваться методом DbObject.GetPersistentReactorIds для получения списка групп, с которыми ассоциирован примитив. Следующий код показывает как это можно сделать:

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

Перебор всех групп в чертеже

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

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

Доступ к группам AutoCAD при помощи .NET

Так же, как и у других объектов, у групп есть идентификатор (ObjectId), к которым можно получить доступ при помощи словаря. Этот пример показывает как прочитать этот словарь, и что внутри него есть.

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

Запуск команд Fusion

Запуск команд Fusion при помощи объекта CommandDefinition
Опубликовано 19.01.2016     Читать далее >>>
18/01/2016

Ошибка 8000 при получении файла из AVFS

Рассматривается причины ошибки 8000 при получении файла из Autodesk Vault Filestore Server и методы её устранения
Опубликовано 18.01.2016     Читать далее >>>
15/01/2016

Ошибочное поведение столбца изображений элемента управления Vault Browser

Рассматривается неправильное поведение столбца изображений элемента управления Vault Browser и метод его обхода
Опубликовано 15.01.2016     Читать далее >>>
15/01/2016

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

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

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

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

AcquireFiles() не исправляет ссылки на переименованные файлы

AcquireFiles() не исправляет ссылки на переименованные файлы для Autodesk Vault
Опубликовано 14.01.2016     Читать далее >>>