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

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     Читать далее >>>
18/07/2013

Как определить что свойства примитива изменены при помощи Панели Свойств?

Вопрос:

Как я могу узнать, что свойства примитива изменены через Панель свойств (OPM)?

Ответ:

Панель свойств при изменении объекта запускает уведомления о событиях начала и конца модификации, используя строку "OPM_CHGPROP"

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

Как использовать метод AcDbRegion::getAreaProp()

Первые три параметра метода описываются как:

  • origin — Возвращает начальную точку области
  • xAxis — Возвращает ось X области
  • yAxis — Возвращает ось Y области

Но учитывая объявления этих параметров как const :

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

Как использовать класс AcadAppInfo для чтения и записи информации из реестра

Вопрос:
Как можно использовать класс AcadAppInfo для чтения и записи информации из (в) реестр?

Ответ:
Следующий код подразумевает, что вы загрузили пример POLYSAMP в AutoCAD. (Вы можете найти этот пример в каталоге ObjectARX SDK\Samples\entity\). Измените имя приложения в аргументе функции setAppName() чтобы получить собственную информацию вашего приложения из реестра.

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

Как использовать длинные транзакции для эмуляции команды -ССЫЛРЕД

Команды -ССЫЛРЕД (-REFEDIT) и ССЫЛРЕД (REFEDIT) обеспечивают возможность контекстного редактирования блока (по месту). Они позволяют переключатся между вложенными ссылками блока. Тогда AutoCAD принимает подсвеченную вставку блока для редактирования по месту. Приложение посылает команду -ССЫЛРЕД для переключения в режим редактирования для удобства пользователя.

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

Как заставить команду УВЕЛИЧИТЬ работать с пользовательским примитивом

Команда УВЕЛИЧИТЬ (LENGTHEN) может работать только со следующими классами или пользовательскими объектами, унаследованными от этих классов:

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

Visual Studio 2008 для ObjectARX 2010/11/12

Правильная версия для работы с ObjectARX SDK 2010, 2011, 2012 – это VisualStudio 2008 с ServicePack 1.

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

API для ГРАФНАСТР (3DCONFIG)

Вопрос:

Мне известно, что я могу воспользоваться версией команды 3DCONFIG для командной строки, чтобы изменить установки графической подсистемы, т.е. SendStringToExecute(). Однако было бы хорошо сделать тоже самое непосредственно при помощи API.

Ответ:

Вы можете это сделать при помощи класса AcGsConfig.

Опубликовано 27.06.2013     Читать далее >>>
24/06/2013

AutoCAD 2014 API (ObjectARX)

Филипп Леефсма (Philippe Leefsma) создал презентацию (DevTV) о новшествах в AutoCAD 2014 API. Вы можете скачать её отсюда (на английском).

Опубликовано 24.06.2013     Читать далее >>>
24/06/2013

Как загрузить из неуправляемого arx-приложения управляемую .NET сборку в AutoCAD?Автор: Александр Ривилис

Вопрос: У меня есть arx-приложение и dll-сборка (.NET-сборка). Я бы хотел загружать dll-сборку в AutoCAD непосредственно из arx-приложения, а не использовать отложенную загрузку меняя ключи реестра или команду _NETLOAD. Я пробовал функцию acrxDynamicLinker->loadModule(), но она не работает с управляемыми сборками.

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

Опубликовано 24.06.2013     Читать далее >>>
21/06/2013

AutoCAD 2014 и Безопасность

Вы уже загрузили и установили AutoCAD 2014 ? Если да, то вы могли заметить новый набор функций безопасности

Опубликовано 21.06.2013     Читать далее >>>
17/06/2013

readDwgFile показывает ошибку DBX CAS 4 если вызывается из DBX - модуля

DBX модули или ‘Object Enablers’ созданы с единственной целью определения пользовательского объекта / примитива в ObjectARX. Модуль должен определить один или несколько пользовательских классов объекта, каждый из которых содержит пользовательские элементы и переопределяет необходимые методы, подходящие для конкретных целей. Взаимодействие с внешними базами данных или объектов в той же базе данных, которые не связаны напрямую (через ObjectID-ссылки), для пользовательских объектов не поддерживается.

Опубликовано 17.06.2013     Читать далее >>>
14/06/2013

AcDb::ePermanentlyErased при открытии клонированных методом wblock объектов внутри одного DWG

Вопрос:
Возможно ли открыть клонированные объекты в реакторах AcEditorReactor::beginDeepCloneXlation() или AcEditorReactor::endDeepClone() если выполняется ПБЛОК (WBLOCK) внутри одного dwg-файла?

Попытка открыть их в AcEditorReactor::beginDeepCloneXlation() или endDeepClone(), приводит к получению кода возврата "ePermanentlyErased". Нам требуется доступ к ним в режиме kForWrite для дополнительной обработки.

Ответ:
Проблема связана с тем, что в контексте операции wblock внутри одного чертежа, AutoCAD выполняет «быструю» операцию wblock, что означает, что AutoCAD в действительности не клонирует объекты, а симулирует эту операцию т.к. целью является сохранить клоны в файл. Чтобы предотвратить возможность модификации клонированных объектов (т.к. и клон и оригинальный объект – это один и тот же объект) AutoCAD возвращает код ошибки "ePermanentlyErased" когда приложение пытается открыть и модифицировать клон.

Опубликовано 14.06.2013     Читать далее >>>
13/06/2013

Временная графика в AutoCAD

Часто бывает необходимо визуально увидеть результаты наших геометрических вычислений. В составе ObjectARX и AutoCAD .NET API есть несколько методов, которые очень удобно использовать при таком сценарии.

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

Чтение размерного текста в ARX

Размерный текст нельзя прочитать непосредственно, т.к. информация хранится в примитиве AcDbMText, содержащемся в записи таблицы блоков. Из AcDbDimension (или производных классов) можно получить идентификатор записи таблицы блоков при помощи метода dimBlockId(). Затем можно в записи таблицы блоков AcDbBlockTableRecord найти примитив AcDbMText и вызвать его метод contents().

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

Чтение и изменение настроек AutoCAD

Изменение настроек AutoCAD возможно при помощи прямого изменения реестра или с использованием ActiveX объекта Preferences. Заметим, что прямое изменение реестра не влияет на настройки текущей сессии AutoCAD. ActiveX объект Preferences экспортирует многие свои свойства через интерфейс, который можно использовать в VBA/VB.NET или в C++/MFC приложениях. Ниже пример кода (на VB и C++), который добавляет новый путь к существующим путям доступа к вспомогательным файлам AutoCAD.

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