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

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

Как объединить отрезки и дуги в полилинию?Автор: Александр Ривилис

Эта статья навеяна темой на форуме Полилинии и дуги в одну полилинию

Начиная с AutoCAD 2011 для этой цели можно воспользоваться методами Entity.JoinEntity и Entity.JoinEntities из AutoCAD .NET API, а также AcDbJoinEntityPE::joinEntity и AcDbJoinEntityPE::joinEntities из ObjectARX. Интереснее показать как можно это реализовать самостоятельно в .NET и в ObjectARX:

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

Модифицируем Ассоциативный массив по траектории при помощи API

В этой статье мы рассмотрим как можно модифицировать ассоциативный массив по траектории при помощи API. Массив по траектории может зависеть или от расстояния между элементами или между количеством элементов в зависимости от свойств массива. Следующий образец кода уменьшает количество элементов или увеличивает расстояние между элементами для уменьшения количества элементов вдоль пути.

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

Создание прямоугольного облака (RevCloud) при помощи acedCommandS

Когда выполняется команда Облако (_RevCloud) из скрипта или при помощи функции acedCommandS (command или command-s в Lisp), опции в командной строке не соответствуют опциям в командной строке при запуске команды Облако из пользовательского интерфейса AutoCAD. Например, не появляется опция установки типа облака, когда запускается при помощи acedCommandS.

Опубликовано 15.10.2015     Читать далее >>>
16/09/2015

Как удалить профиль вращения после создания тела вращения

Иногда я получаю запросы от партнеров ADN о том что:

“После использования AcDb3dSolid::createRevolvedSolid() образующая кривая вращения видна в твердом теле.”

Профиль используемый для вращения виден в твёрдом теле как показано на картинке.

Он может быть удалён при помощи метода cleanBody класса AcDb3dSolid, который удаляет все грани и ребра, которые не нужны для поддержки топологии твердого тела.

Опубликовано 16.09.2015     Читать далее >>>
15/09/2015

Регистрация команды для функции обратного вызова UnknownCommand

Этот пример отвечает на множество вопросов по поводу функции обратного вызова unknownCommand и использования UnknownCommand.

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

В этом примере пользователь пытается ввести некоторую неизвестную команду, например, в функции обратного вызова, запущенной из реактора события unknownCommand, мы будем загружать наш "TestUknCom".

Опубликовано 15.09.2015     Читать далее >>>
21/08/2015

Как сохранить идентификатор объекта в словаре расширения другого объекта?

Следующий код показывает как это сделать. Обратите внимание, что необходимо преобразовать ObjectId в ads_name для сохранения результата в Xrecord, и наоборот для получения ObjectId из буфера результата Xrecord. Также отметьте, что необходимо передать ссылку на первый элемент цепочки буферов методу setFromRbChain() вместо указателя на resbuf.

Опубликовано 21.08.2015     Читать далее >>>
05/08/2015

О методе AcDbObject::releaseExtensionDictionary

В чем разница между вызовом метода erase() непосредственно для словаря расширения (extension dictionary) и вызовом releaseExtensionDictionary() для объекта-владельца?

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

Фундаментальное различие между вызовом releaseExtensionDictionary() для родительского объекта и вызовом erase() для словаря расширения становится совершенно очевидным если посмотреть на результаты вызова двух других методов работы со словарём расширения: extensionDictionary и createExtensionDictionary. Рассмотрим следующие две последовательности:

Опубликовано 05.08.2015     Читать далее >>>
05/08/2015

Как удалить полностью словарь расширения (ExtDict) примитива?Автор: Александр Ривилис

Вопрос:
Как удалить полностью словарь расширения (ExtDict) примитива?

Ответ:
В статье О методе AcDbObject::releaseExtensionDictionary описано как и для чего использовать этот метод. Однако для того, чтобы воспользоваться эти методом следует сначала очистить (т.е. удалить все элементы) словаря расширения. Следующий код показывает, как это сделать и результаты его работы:

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

Удаление меню из строки меню и из памяти

Вопрос:

Моё приложение создаёт меню и добавляет его используя IAcadPopupMenus.Add. Удаление его позднее при помощи RemoveMenuFromMenuBar или IAcadPopupMenu.RemoveFromMenuBar работает, но повторная попытка добавить тоже самое меню терпит неудачу. Почему и как это исправить?

Ответ:

Хотя пользовательское меню может быть удалено из строки меню после добавления, меню остаётся в памяти AutoCAD. Это можно проверить если сравнить значения IAcadPopupMenus.GetCount() до и после удаления меню – значение останется тем же, так как меню остаётся внутри коллекции меню. Пожалуйста проверьте демонстрационный код ниже: он добавляет 3 меню в первую группу меню. Запустите снова и код удалит одно меню, и сравните счетчик меню до и после удаления.

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

Преобразование из .NET в COM с использованием управляемого (Managed) C++

После выбора объекта при помощи .NET (управляемый C++), как его преобразовать в COM-объект? Сначала нужно получить IUnknow-указатель из свойства AcadObject объекта, а затем преобразовать его в COM-объект. Эта процедура позволяет вам сохранить счетчик ссылок COM объекта.

Следующий код показывает как это сделать и как получить его имя типа. Напоминаю, что нужно установить для проекта свойство Mixed mode. Это легко сделать создав проект при помощи ObjectARX Wizard и указав ему использовать .NET.

Опубликовано 16.07.2015     Читать далее >>>
14/07/2015

Получение свойств примитива в AccoreConsole

"dumpallproperties" – это простейший способ для получения все свойств примитива при помощи Lisp. Но это не работает в scr-файле в AccoreConsole. Простейший способ для получения свойств AccoreConsole - создать CRX-плагин, который использует НЕ-COM систему свойств.

Если вы еще не знакомы с НЕ-COM системой свойств, тогда почитайте статью: Перезентация (DevTV): Не-COM система свойств

Пример в этой статье использует порцию кода из предыдущей статьи для создания CRX-приложения. Вот соответствующий код, а полный пример проекта можно скачать здесь:

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