Получение положения мыши (курсора) без события
AutoCAD API реализует интерфейс AcEdInputPointManager.InputPointMonitor который отслеживает любой ввод пользователя, в том числе и перемещение мыши. При помощи API можно отслеживать и сообщения в очереди Windows. Иногда нужно получить текущее положение мыши без наступления какого-либо события. Следующий код демонстрирует как это можно сделать. В действительности достаточно получить текущее положение курсора Windows и преобразовать его в координаты AutoCAD. Следует учитывать также ПСК.Как реагировать на клавиши курсора (без передачи их в AutoCAD) используя ObjectARX?
В ObjectARX вы можете добавить фильтр в функцию обработки окна AutoCAD можно использовать PInvoke для использования этой функциональности в .NET).
Описание метода Database.ResolveXrefs
Если вам интересно, что за параметры используются в методе…public void Database.ResolveXrefs(bool useThreadEngine, bool doNewOnly)
…тогда взгляните описание эквивалентной функции в ObjectARX Reference Guide…
Зумирование, панорамирование и орбита текущего вида AutoCAD с помощью ObjectARX
Наш коллега Киан написал статью о зумировании, панорамировании и орбите текущего вида при помощи .NET. Я переписал этот код с помощью ObjectARX.Длина имен ключей в словаре
К именам ключей в словаре применимы те же правила, что и к именам в символьных таблицах: не больше 255 символов, должны быть буквенно-цифровые и могут содержать символы доллара ($), подчеркивания (_) и переноса (-). Можно использовать функцию acdbSNValid() для проверки допустимости имени.
Закрытие документов из унаследованного от CAdUiDialog диалога
Вопрос:
Я не могу закрыть документы с использованием closeDocument API из диалога, унаследованного от CAdUiDialog, так как AutoCAD сообщает, что документ занят. Почему это происходит?
Использование ActiveX интерфейса AutoCAD при его завершении
Мы можем попробовать использовать в ObjectARX-приложении ActiveX интерфейс AutoCAD для установки пользовательского профиля при старте и завершении AutoCAD при помощи интерфейсов IAcadApplication и IAcadPreferences
Выбор примитивов пространства Модели из пространства Листа без предварительного выбора видового экрана средствами ObjectARX
Вопрос:
Как можно выбрать примитивы Модели находясь в Листе без предварительного выбора видового экрана?
Ответ:
В ObjectARX есть недокументированная функция acedNEntSelPEx(), которая позволяет сделать именно это. Она даже позволяет передать точку указания при помощи параметра ‘pickflag’, так что вы сами можете обеспечить точку в пространстве листа.
Генерация миниатюры dwg-файла при помощи функции acdbMakeDrawingPreview
Вопрос:
Как сгенерировать миниатюру dwg-файла, который создан при помощи AcDbDatabase::wblock/saveas API?
Ответ:
arx-файл acblock.arx экспортирует функцию, которая позволяет сгенерировать миниатюру dwg-файла. Заметим, что эта функция недокументированная и неподдерживаемая. Заметим также, что её сигнатура может измениться или функция вообще не будет доступна в будущем.
Использование транзитной графики
В статье мы рассматривали использование графических функций, обеспечивающих показ временной графики с помощью AutoCAD API. В этой статье мы рассмотрим использование API транзитной графики для отображения временной графики. Это API обеспечивает значительно лучшее управление над отображением графики по сравнению с графическими функциями.
Это пример кода который использует транзитную графику для отображения точек пересечения прямоугольника и луча. Чтобы проверить его нарисуйте прямоугольник и выберите внутреннюю точку направления луча, когда программа спросит.
Добавление атрибутов к определению блока с использованием C++ COM/ActiveX Automation в ObjectARX
Фокус в том, чтобы сделать это используя интерфейсы I * Ptr интерфейсы (например, IAcadDocumentPtr), так что бы подсчет COM-ссылок осуществлялся автоматически.
А другой фокус в том, чтобы использовать VARIANT как можно реже, настолько насколько это возможно - для этого у нас есть AcAx-классы. Вот код:
Загрузка управляемой .NET сборки из ObjectARX приложения
Вопрос:
Как загрузить управляемую .NET сборку из ObjectARX приложения?
Ответ:
Чтобы загрузить управляемую сборку из arx-приложения, вы можете использовать экспортируемую из acdbmgd.dll функцию LoadManagedDll.
Задание примитиву свойства прозрачности используя метод setAlphaPercent
Это пример на ObjectARX задающий примитиву прозрачность, используя метод "setAlphaPercent". Этот метод можно использовать вместо метода "setAlpha" если вы хотите задать альфа-значение в процентах.
Как FACETRES/VIEWRES соотносятся с AcGiCommonDraw::deviation() в ObjectARX
Вопрос:
Вы можете подробно объяснить как FACETRES и VIEWRES соотносятся с методом deviation() в классе AcGiCommonDraw?
Ответ:
Отклонение - (2D и 3D) это значение, которое управляет тонкостью тесселяции. Если значения стремится к нулю, тесселяция увеличивается...
Как вычислить длину примитива в ObjectARX/.NET
Вы можете использовать методы getStartParam() и getEndParam() для получения начального и конечного параметров кривой - унаследованного от AcDbCurve примитива. Затем используя метод getDistAtParam() можно получить длину кривой. Смотрите ниже код для получения длины:
Делаем быстрыми worldDraw и viewportDraw пользовательского объекта
Вопрос:
Мой пользовательский примитив довольно сложный, и всякий раз, когда мои пользователи вызывают команды ПОВЕРНУТЬ (ROTATE) или ПЕРЕНЕСТИ (MOVE) или что-то, что требует постоянного обновления графики, эти операции становятся очень прерывистыми и медленными. Как я могу исправить эту ситуацию?
Создание поверхности сопряжения ассоциированной с краями.
Это пример кода, создающего поверхность сопряжения, которая ассоциативно связана с краями двух других поверхностей. Ассоциативность подразумевает, что при изменении любой из этих поверхностей средствами AutoCAD, поверхность сопряжения будет автоматически изменена.
В этом коде создаются две выдавленных поверхности. Информация о краях этих поверхностей используется для создания профиля по сечениям. Профиль по сечениям используется для создания поверхности сопряжения.
Как преобразовать AcGeCircArc3d в AcDbArc и наоборот?
Следующий код показывает как это сделать:
Как получить свойство документа?
Если вы хотите получить доступ к свойству документа, как это делает команда СВОЙСТВАРИС (DWGPROPS) вам нужно будет воспользоваться функцией acdbGetSummaryInfo. Это глобальная функция, которая получает информацию файла.