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

22/06/2013

Как в своём коде используя AutoCAD .NET API переопределить команду ССЫЛРЕД (_REFEDIT)?Автор: Александр Ривилис

Как в своём коде используя AutoCAD .NET API переопределить команду ССЫЛРЕД (_REFEDIT)?

Вопрос: Мне нужно в своем коде переопределить команду _REFEDIT так, чтобы в некоторых случаях (например, имя чертежа содержало строку Test) вызывался мой код, а в некоторых стандартная команда _REFEDIT. Я проверил, что для команды ОТРЕЗОК (_LINE) работает такой код:

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

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

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

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

Введение в JavaScript API в AutoCAD 2014

Как вы, наверное, уже знаете, AutoCAD 2014 идет с новым JavaScript API, который позволит новой волне программистов взаимодействовать с ним. Если вы опытный веб-разработчик или полный новичок в этой области – в любом случае эта презентация (DevTV) проведёт вас через этапы, необходимые для начала программирования в AutoCAD с помощью JavaScript. Опыт работы с одной из существующих AutoCAD API, таких как ObjectARX или .NET будет очень полезен.

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

eInvalidInput при создании штриховки с пользовательским шаблоном

Если метод SetHatchPattern возбуждает исключение eInvalidInput при создании пользовательского шаблона штриховки, есть несколько моментов, которые стоит проверить:

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

Как установить путь к двум и более каталогам конфигурации принтеров (PrinterConfigPath) при помощи AutoCAD .NET API?Автор: Александр Ривилис

Как установить путь к двум и более каталогам конфигурации принтеров (PrinterConfigPath) при помощи AutoCAD .NETAPI?

Вопрос: Я пытаюсь установить два пути к каталогам конфигурации принтеров, но AutoCAD завершается с FATAL Error:

Dim pref As AcadPreferences = Autodesk.AutoCAD.ApplicationServices.Application.Preferences
pref.Files.PrinterConfigPath = "T:\wPlotters;T:\Plotters"

Если указан только один каталог, то всё работает нормально, а при двух и больше – аварийное завершение AutoCAD.

Ответ: Предыдущие версии AutoCAD не позволяли использовать более одного каталога в качестве пути доступа к файлам конфигурации принтеров. Поэтому метод, использующий AcadPreferences, не работает. Вместо него можно использовать метод чтения/установки переменной окружения PrinterConfigDir при помощи функций acedGetEnv/acedSetEnv (из состава ObjectARX). Для того, чтобы воспользоваться ими в AutoCAD .NET API используем P/Invoke. Ниже приведён код на C# и VB.NET:

Опубликовано 18.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     Читать далее >>>
12/06/2013

.NET DllImport метода определенного в C++

Предположим, что есть функция voidMyFunc() на C++, которую нужно вызвать из .NET. Вызов DllImport может распознавать только функции, объявленные с модификатором dllexport.

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

ObjectId.GetObject()

Большинство примеров для AutoCAD .NET API созданы с использованием метода Transaction.GetObject() для открытия объектов, содержашихся в базе чертежа. Код, который использует этот метод, обычно выглядит приблизительно так:

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

Управление прозрачностью слоев с помощью LISP

Вопрос:
Почему не работает код? vla-get-transparency подсвечивается синим в VLIDE, но я получаю текст ошибки: "Error: ActiveX Server returned the error: unknown name: Transparency"

Ответ:
Свойства, к которым Вы получаете доступ через COM, базируются на API ActiveX.
Если посмотреть на свойство Transparency в справке по ActiveX, Вы увидите, что оно доступно только для примитивов класса AcadRasterImage и AcadWipeout.

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

Как получить идентификаторы всех объектов (ObjectId), вставленных через буфер обмена.Автор: Александр Ривилис

Вопрос: Как средствами AutoCAD .NET API получить массив идентификаторов объектов, вставленных при помощи команды ВСТБУФЕР (_PASTECLIP).

Ответ: Для этой цели следует подписаться на два типа событий:

1) события начала и завершения команды.

2) события базы данных (добавление / удаление объекта в базу).

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

System.IO. FileNotFoundException: Невозможно загрузить файл или сборку 'Autodesk.AutoCAD. Interop, Version=18.0.0.0

Вопрос:

Моё .NET-приложение ссылается на версию Autodesk.AutoCAD.Interop 18.0.0.0 сборки из ObjectARX 2010 SDK, так что он должен работать с AutoCAD 2010, 2011 и 2012. К сожалению, если мое приложение выполняется на компьютере, где установлен только AutoCAD 2011 я получаю FileNotFoundException

System.IO.FileNotFoundException: Невозможно загрузить файл или сборку 'Autodesk.AutoCAD.Interop, Version=18.0.0.0, Culture=neutral, PublicKeyToken=eed84259d7cbf30b' или один из зависимых от них компонентов. Не удается найти указанный файл.
Имя файла: 'Autodesk.AutoCAD.Interop, Version=18.0.0.0, Culture=neutral, PublicKeyToken=eed84259d7cbf30b'

Ответ:

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

Чтение Таблицы Свойств Блока для динамического блока

Для динамического блока мы можем создать Таблицу Свойств Блока, которая определяет и управляет параметрами и свойствами. Она доступна, когда запущена команда БЛОКРЕД (BEDIT) для динамического блока, как показано ниже.

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

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

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

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

Чтение и изменение настроек AutoCAD (.NET)

Изменение настроек AutoCAD возможно при помощи прямого изменения реестра или с использованием ActiveX объекта Preferences. Заметим, что прямое изменение реестра не влияет на настройки текущей сессии AutoCAD. ActiveX объект Preferences

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

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

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

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

Хранение 64-битного целого в ResultBuffer

Вопрос:

Я не смог найти DXF код для хранения 64-битного целого в Расширенных данных (Extended Data). Есть ли такой?

Ответ:

Нет. Такого кода для хранения 64-битного значения в Расширенных данных (XData) нет. Это сделано специально, так как в противном случае предыдущие версии AutoCAD не смогли бы прочитать такой файл.

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

Установка камеры/объектива, цели, ширины и высоты вида

Вопрос:

Я хочу установить камеру, цели и поле зрения в окне модели, чтобы точно сфокусироваться на определенных объектах в перспективе. Я пытался это сделать различными способами, но никогда не получалось в точности то, что хотелось.

Решение:

В прикрепленном чертеже (Загрузить Окружности) у нас три круга: красный (r = 10), зеленый (r = 20) и голубой (r = 30). Они все параллельны и их центры лежат на одной прямой.

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

Удаление фильтров слоёв при помощи ObjectARX

Вопрос:

У меня есть клиент, который использует множество dwg-файлов с множеством фильтров слоёв. Как можно удалить эти фильтры с помощью программы?

Ответ:

Фильтры слоёв – это объекты типа AcDbXRecord в двух словарях (с именами ACAD_LAYERFILTERS и ACLYDICTIONARY) содержащихся в расширенном словаре таблицы слоёв. Чтобы удалить фильтры слоёв, вам необходимо пройтись по словарям ACAD_LAYERFILTERS и ACLYDICTIONARY и удалить все AcDbXRecord.

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