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

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

Удаление вершины у 3D-полилинии (AcDbPolyline3d) средствами ObjectARX

Удаление вершины у 3D-полилинии несколько сложнее, чем вы можете себе представить. AcDbPolyline3d – это составной тип примитива, данные ее вершин содержатся в отдельных внешних примитивах AcDbVertex3d. Так что для того, чтобы удалить вершину её нужно найти, а затем удалить при помощи метода erase().

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

Точки останова в пользовательской форме не обрабатываются при отладке .NET - приложения для AutoCAD 2012 в Visual Studio 2010

Вопрос:

Я пытаюсь создать .NET – приложение для AutoCAD 2012 в Visual Studio 2010. Точки останова в общих классах обрабатываются (то есть при отладке на них происходит остановка), а вот в пользовательских формах не обрабатываются. Я прочитал эту статью: http://through-the-interface.typepad.com/through_the_interface/2010/04/hitting-breakpoints-in-net-class-libraries-while-debugging-with-visual-studio-2010.html. Но она не помогла. Я пробовал и “Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog(oForm)” и “oForm.ShowDialog()”, но результат один и тот же. Что еще можно сделать?

Ответ:

Отладчик VS2010 достаточно плохо работает с фиберами (fiber); решение заключается в том, чтобы отключить фибера в AutoCAD .

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

Текстовые примитивы в собственных примитивах не скрываются после команды СКРЫТЬ (HIDE)

Возьмем такой пример: Вы создали собственный примитив (Custom Entity) и среди других примитивов в методе worldDraw, вы рисуете текст (mode->geometry().text). После создания собственного примитива, когда выполнилась команда СКРЫТЬ (HIDE) в режиме 2D-каркас, текст в собственном примитиве оказывается не скрытым. Кроме того, когда текст рисуется как часть собственного примитива, некоторые другие примитивы могут быть скрыты неправильно. Такого не случается в собственных примитивах, не содержащих текстовые примитивы.

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

Список определений подложек DWF в чертеже

Каждое определение DWF-подложки хранится в словаре именованных объектов (NOD) в словаре с именем "ACAD_DWFDEFINITIONS". Следующий код показывает как можно пройтись по словарю "ACAD_DWFDEFINITIONS" и распечатать все определения всех DWF-подложек.

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

Создание новой ViewTableRecord с камерой и целью

Этот пример на C# запрашивает точки цели и камеры. Положение камеры может быть вычислено как сумма вектора направления ViewTableRecord и точки цели.

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

Создание BMP-файла из выбранных примитивов

Если вы хотите создать/сохранить BMP-файл из выбранных примитивов вы можете воспользоваться методом Export() класса AcadDocument из состава ActiveX Automation API AutoCAD’а

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

Свойства примитивов в JIG не появляются в OPM (Панель свойств)

Вопрос:

Мой код очень точно следует примеру "ObjectARX 2009 SDK\samples\editor\Palettes\BoltSolution", но свойства примитивов во время JIG не появляются в Панели свойств (OPM).

Ответ:

После просмотра кода стало ясно, что вы забыли добавить флаг ACRX_CMD_INTERRUPTIBLE к флагам команды, которая стартует JIG:

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

Рисование горизонтального текста в собственном примитиве

Вопрос:

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

Ответ:

Вы можете использовать метод AcGiViewport::getCameraUpVector() чтобы получить вектор, направленный вверх для текущего вида. Имея этот вектор вы легко можете получить направление для отрисовки горизонтального текста в этом виде.

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

Рекомендуемый способ для получения доступа к AutoCAD COM интерфейсу с помощью C++

Общий способ доступа к объекту интерфейсу AutoCAD – вызов функции GetActiveObject, но он может вернуть NULL в ряде случаев (и в частности в событии On_kInitAppMsg), а также не гарантируется доступ к текущему AutoCAD...

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

Расчленение текстовых примитивов

Вопрос:

Как расчленить основанные на SHX-шрифтах примитивы AcDbText на входящие в их состав линии?

Ответ:

Вы можете “расчленить” или тессиллировать текстовый примитив, используя метод AcGiTextEngine::tessellate(). Но этот метод возвращает необработанную информацию о точках, которая может быть использована для создания отдельных линий. Метод этот не учитывает свойства текстового стиля и высоту текста, а ширина подразумевается единичной.

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

Разрешить отладку JavaScript в AutoCAD 2014

В AutoCAD 2014 появился новый API - JavaScript API. Не вдаваясь сейчас в излишние подробности (более детально это будет рассмотрено в другом месте) он позволяет разработчикам размещать свои приложения в интернете (через URL), а не посредством модели загрузка / инсталляция – это очень здорово.

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