Использование 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. Это глобальная функция, которая получает информацию файла.
Как получить заштрихованный примитив из примитива штриховки (HATCH)?
Когда примитив заштрихован ассоциативной штриховкой (AcDbHatch) – штриховка ассоциирована с заштрихованным примитивом. Как можно найти эту штриховку?
Штриховка реагирует на изменение примитива путём уведомления. В действительности штриховка имеет постоянный реактор на заштрихованный примитив. Этим можно воспользоваться для получения штриховки. Следующий код демонстрирует это:
Как получить координаты курсора мыши в ПСК?
Следующий код (фильтр сообщений окна) получает и печатает координаты курсора мыши в ПСК. Координаты те же, что показывает AutoCAD в свой строке состояния.
Как получить доступ к флагу 'Задание пути' в диалоге ССЫЛКА?
Не существует ни системной переменной, ни пользовательской настройки, которая позволила бы получить доступ к этому флагу, кроме того, что обеспечивается с помощью команды ССЫЛКА (XREF). Тем не менее, при помощи кода можно установить путь внешней ссылки напрямую.
В каком случае набор выбора, возвращаемый acedGetCurrentSelectionSet() действителен в ObjectARX?
Вопрос:
Я не могу понять в каком случае acedGetCurrentSelectionSet() должен вернуть мне действительный набор выбора. Можете объяснить мне?
Кроме того, как мне очистить набор предварительного выбора (PICKFIRST)?
Ответ:
Функция acedGetCurrentSelectionSet() заполняет набор выбора значениями ObjectID всех примитивов из текущего набора выбора AutoCAD. «Текущий набор выбора» может быть одним из следующих:
Как показать правильно числовое значение в Панели Свойств (OPM)?
Вопрос:
Я создал COM-обертку для собственного примитива. Похоже, что любые плавающие значения, которые я добавляю в COM-обертку автоматически показываются так, как установлено в диалоге «Единицы чертежа». Например, значение 14.500 автоматически отображается в Панели Свойств AutoCAD как 1'-2½".
Есть ли способ переопределить это поведение Панели свойств, чтобы плавающее число не меняло свой вид и показывалось «как есть»?
Ответ:
По умолчанию Панель Свойств интерпретирует плавающие числа как значение расстояния.
Как восстановить потерянные границы штриховки?
Вопрос:
Как можно восстановить границы штриховки, если они были потеряны по каким-то причинам?
Ответ:
В AutoCAD’е нет отдельной команды, которая бы восстанавливала контур штриховки, но это можно сделать средствами ObjectARX API.
В какой системе координат возвращает точку GetClosestPointTo() для вставки блока при помощи ObjectARX
Вопрос:
Почему координаты ближайшей точки (с использованием GetClosestPointTo()) полученной для вставки блока не соответствуют ни МСК (WCS), ни ПСК (UCS)?
Ответ:
Точки получаются относительно системы координат AcDbBlockTableRecord владельца. Если вы хотите конвертировать из системы координат AcDbBlockTableRecord, в которой находится AcDbBlockReference, вам нужно преобразовать их при помощи AcDbBlockReference::blockTransform().