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

09/09/2013

Использование ActiveX интерфейса AutoCAD при его завершении

Мы можем попробовать использовать в ObjectARX-приложении ActiveX интерфейс AutoCAD для установки пользовательского профиля при старте и завершении AutoCAD при помощи интерфейсов IAcadApplication и IAcadPreferences

Опубликовано 09.09.2013     Читать далее >>>
30/08/2013

Выбор примитивов пространства Модели из пространства Листа без предварительного выбора видового экрана средствами ObjectARX

Вопрос:
Как можно выбрать примитивы Модели находясь в Листе без предварительного выбора видового экрана?

Ответ:
В ObjectARX есть недокументированная функция acedNEntSelPEx(), которая позволяет сделать именно это. Она даже позволяет передать точку указания при помощи параметра ‘pickflag’, так что вы сами можете обеспечить точку в пространстве листа.

Опубликовано 30.08.2013     Читать далее >>>
28/08/2013

Генерация миниатюры dwg-файла при помощи функции acdbMakeDrawingPreview

Вопрос:
Как сгенерировать миниатюру dwg-файла, который создан при помощи AcDbDatabase::wblock/saveas API?

Ответ:
arx-файл acblock.arx экспортирует функцию, которая позволяет сгенерировать миниатюру dwg-файла. Заметим, что эта функция недокументированная и неподдерживаемая. Заметим также, что её сигнатура может измениться или функция вообще не будет доступна в будущем.

Опубликовано 28.08.2013     Читать далее >>>
22/08/2013

Использование транзитной графики

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

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

Опубликовано 22.08.2013     Читать далее >>>
19/08/2013

Добавление атрибутов к определению блока с использованием C++ COM/ActiveX Automation в ObjectARX

Фокус в том, чтобы сделать это используя интерфейсы I * Ptr интерфейсы (например, IAcadDocumentPtr), так что бы подсчет COM-ссылок осуществлялся автоматически.
А другой фокус в том, чтобы использовать VARIANT как можно реже, настолько насколько это возможно - для этого у нас есть AcAx-классы. Вот код:

Опубликовано 19.08.2013     Читать далее >>>
19/08/2013

Загрузка управляемой .NET сборки из ObjectARX приложения

Вопрос:

Как загрузить управляемую .NET сборку из ObjectARX приложения?

Ответ:

Чтобы загрузить управляемую сборку из arx-приложения, вы можете использовать экспортируемую из acdbmgd.dll функцию LoadManagedDll.

Опубликовано 19.08.2013     Читать далее >>>
16/08/2013

Задание примитиву свойства прозрачности используя метод setAlphaPercent

Это пример на ObjectARX задающий примитиву прозрачность, используя метод "setAlphaPercent". Этот метод можно использовать вместо метода "setAlpha" если вы хотите задать альфа-значение в процентах.

Опубликовано 16.08.2013     Читать далее >>>
09/08/2013

Как FACETRES/VIEWRES соотносятся с AcGiCommonDraw::deviation() в ObjectARX

Вопрос:

Вы можете подробно объяснить как FACETRES и VIEWRES соотносятся с методом deviation() в классе AcGiCommonDraw?

Ответ:

Отклонение - (2D и 3D) это значение, которое управляет тонкостью тесселяции. Если значения стремится к нулю, тесселяция увеличивается...

Опубликовано 09.08.2013     Читать далее >>>
08/08/2013

Как вычислить длину примитива в ObjectARX/.NET

Вы можете использовать методы getStartParam() и getEndParam() для получения начального и конечного параметров кривой - унаследованного от AcDbCurve примитива. Затем используя метод getDistAtParam() можно получить длину кривой. Смотрите ниже код для получения длины:

Опубликовано 08.08.2013     Читать далее >>>
07/08/2013

Делаем быстрыми worldDraw и viewportDraw пользовательского объекта

Вопрос:

Мой пользовательский примитив довольно сложный, и всякий раз, когда мои пользователи вызывают команды ПОВЕРНУТЬ (ROTATE) или ПЕРЕНЕСТИ (MOVE) или что-то, что требует постоянного обновления графики, эти операции становятся очень прерывистыми и медленными. Как я могу исправить эту ситуацию?

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

Создание поверхности сопряжения ассоциированной с краями.

Это пример кода, создающего поверхность сопряжения, которая ассоциативно связана с краями двух других поверхностей. Ассоциативность подразумевает, что при изменении любой из этих поверхностей средствами AutoCAD, поверхность сопряжения будет автоматически изменена.

В этом коде создаются две выдавленных поверхности. Информация о краях этих поверхностей используется для создания профиля по сечениям. Профиль по сечениям используется для создания поверхности сопряжения.

Опубликовано 05.08.2013     Читать далее >>>
02/08/2013

Как преобразовать AcGeCircArc3d в AcDbArc и наоборот?

Следующий код показывает как это сделать:

Опубликовано 02.08.2013     Читать далее >>>
29/07/2013

Как получить свойство документа?

Если вы хотите получить доступ к свойству документа, как это делает команда СВОЙСТВАРИС (DWGPROPS) вам нужно будет воспользоваться функцией acdbGetSummaryInfo. Это глобальная функция, которая получает информацию файла.

Опубликовано 29.07.2013     Читать далее >>>
27/07/2013

Как получить заштрихованный примитив из примитива штриховки (HATCH)?

Когда примитив заштрихован ассоциативной штриховкой (AcDbHatch) – штриховка ассоциирована с заштрихованным примитивом. Как можно найти эту штриховку?

Штриховка реагирует на изменение примитива путём уведомления. В действительности штриховка имеет постоянный реактор на заштрихованный примитив. Этим можно воспользоваться для получения штриховки. Следующий код демонстрирует это:

Опубликовано 27.07.2013     Читать далее >>>
25/07/2013

Как получить координаты курсора мыши в ПСК?

Следующий код (фильтр сообщений окна) получает и печатает координаты курсора мыши в ПСК. Координаты те же, что показывает AutoCAD в свой строке состояния.

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

Как получить доступ к флагу 'Задание пути' в диалоге ССЫЛКА?

Не существует ни системной переменной, ни пользовательской настройки, которая позволила бы получить доступ к этому флагу, кроме того, что обеспечивается с помощью команды ССЫЛКА (XREF). Тем не менее, при помощи кода можно установить путь внешней ссылки напрямую.

Опубликовано 23.07.2013     Читать далее >>>
22/07/2013

В каком случае набор выбора, возвращаемый acedGetCurrentSelectionSet() действителен в ObjectARX?

Вопрос:

Я не могу понять в каком случае acedGetCurrentSelectionSet() должен вернуть мне действительный набор выбора. Можете объяснить мне?

Кроме того, как мне очистить набор предварительного выбора (PICKFIRST)?

Ответ:

Функция acedGetCurrentSelectionSet() заполняет набор выбора значениями ObjectID всех примитивов из текущего набора выбора AutoCAD. «Текущий набор выбора» может быть одним из следующих:

Опубликовано 22.07.2013     Читать далее >>>
20/07/2013

Как показать правильно числовое значение в Панели Свойств (OPM)?

Вопрос:

Я создал COM-обертку для собственного примитива. Похоже, что любые плавающие значения, которые я добавляю в COM-обертку автоматически показываются так, как установлено в диалоге «Единицы чертежа». Например, значение 14.500 автоматически отображается в Панели Свойств AutoCAD как 1'-2½".

Есть ли способ переопределить это поведение Панели свойств, чтобы плавающее число не меняло свой вид и показывалось «как есть»?

Ответ:

По умолчанию Панель Свойств интерпретирует плавающие числа как значение расстояния.

Опубликовано 20.07.2013     Читать далее >>>
19/07/2013

Как восстановить потерянные границы штриховки?

Вопрос:

Как можно восстановить границы штриховки, если они были потеряны по каким-то причинам?

Ответ:

В AutoCAD’е нет отдельной команды, которая бы восстанавливала контур штриховки, но это можно сделать средствами ObjectARX API.

Опубликовано 19.07.2013     Читать далее >>>
19/07/2013

В какой системе координат возвращает точку GetClosestPointTo() для вставки блока при помощи ObjectARX

Вопрос:

Почему координаты ближайшей точки (с использованием GetClosestPointTo()) полученной для вставки блока не соответствуют ни МСК (WCS), ни ПСК (UCS)?

Ответ:

Точки получаются относительно системы координат AcDbBlockTableRecord владельца. Если вы хотите конвертировать из системы координат AcDbBlockTableRecord, в которой находится AcDbBlockReference, вам нужно преобразовать их при помощи AcDbBlockReference::blockTransform().

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