Временная графика в AutoCAD
Часто бывает необходимо визуально увидеть результаты наших геометрических вычислений. В составе ObjectARX и AutoCAD .NET API есть несколько методов, которые очень удобно использовать при таком сценарии.
.NET DllImport метода определенного в C++
Предположим, что есть функция voidMyFunc() на C++, которую нужно вызвать из .NET. Вызов DllImport может распознавать только функции, объявленные с модификатором dllexport.
ObjectId.GetObject()
Большинство примеров для AutoCAD .NET API созданы с использованием метода Transaction.GetObject() для открытия объектов, содержашихся в базе чертежа. Код, который использует этот метод, обычно выглядит приблизительно так:
Управление прозрачностью слоев с помощью LISP
Вопрос:
Почему не работает код? vla-get-transparency подсвечивается синим в VLIDE, но я получаю текст ошибки:
"Error: ActiveX Server returned the error: unknown name: Transparency"
Ответ:
Свойства, к которым Вы получаете доступ через COM, базируются на API ActiveX.
Если посмотреть на свойство Transparency в справке по ActiveX, Вы увидите, что оно доступно только для примитивов класса AcadRasterImage и AcadWipeout.
Как получить идентификаторы всех объектов (ObjectId), вставленных через буфер обмена.Автор: Александр Ривилис
Вопрос: Как средствами AutoCAD .NET API получить массив идентификаторов объектов, вставленных при помощи команды ВСТБУФЕР (_PASTECLIP).
Ответ: Для этой цели следует подписаться на два типа событий:
1) события начала и завершения команды.
2) события базы данных (добавление / удаление объекта в базу).
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'
Ответ:
Чтение Таблицы Свойств Блока для динамического блока
Для динамического блока мы можем создать Таблицу Свойств Блока, которая определяет и управляет параметрами и свойствами. Она доступна, когда запущена команда БЛОКРЕД (BEDIT) для динамического блока, как показано ниже.
Чтение размерного текста в ARX
Размерный текст нельзя прочитать непосредственно, т.к. информация хранится в примитиве AcDbMText, содержащемся в записи таблицы блоков. Из AcDbDimension (или производных классов) можно получить идентификатор записи таблицы блоков при помощи метода dimBlockId(). Затем можно в записи таблицы блоков AcDbBlockTableRecord найти примитив AcDbMText и вызвать его метод contents().
Чтение и изменение настроек AutoCAD (.NET)
Изменение настроек AutoCAD возможно при помощи прямого изменения реестра или с использованием ActiveX объекта Preferences. Заметим, что прямое изменение реестра не влияет на настройки текущей сессии AutoCAD. ActiveX объект Preferences
Чтение и изменение настроек AutoCAD
Изменение настроек AutoCAD возможно при помощи прямого изменения реестра или с использованием ActiveX объекта Preferences. Заметим, что прямое изменение реестра не влияет на настройки текущей сессии AutoCAD. ActiveX объект Preferences экспортирует многие свои свойства через интерфейс, который можно использовать в VBA/VB.NET или в C++/MFC приложениях. Ниже пример кода (на VB и C++), который добавляет новый путь к существующим путям доступа к вспомогательным файлам AutoCAD.
Хранение 64-битного целого в ResultBuffer
Вопрос:
Я не смог найти DXF код для хранения 64-битного целого в Расширенных данных (Extended Data). Есть ли такой?
Ответ:
Нет. Такого кода для хранения 64-битного значения в Расширенных данных (XData) нет. Это сделано специально, так как в противном случае предыдущие версии AutoCAD не смогли бы прочитать такой файл.
Установка камеры/объектива, цели, ширины и высоты вида
Вопрос:
Я хочу установить камеру, цели и поле зрения в окне модели, чтобы точно сфокусироваться на определенных объектах в перспективе. Я пытался это сделать различными способами, но никогда не получалось в точности то, что хотелось.
Решение:
В прикрепленном чертеже (Загрузить Окружности) у нас три круга: красный (r = 10), зеленый (r = 20) и голубой (r = 30). Они все параллельны и их центры лежат на одной прямой.
Удаление фильтров слоёв при помощи ObjectARX
Вопрос:
У меня есть клиент, который использует множество dwg-файлов с множеством фильтров слоёв. Как можно удалить эти фильтры с помощью программы?
Ответ:
Фильтры слоёв – это объекты типа AcDbXRecord в двух словарях (с именами ACAD_LAYERFILTERS и ACLYDICTIONARY) содержащихся в расширенном словаре таблицы слоёв. Чтобы удалить фильтры слоёв, вам необходимо пройтись по словарям ACAD_LAYERFILTERS и ACLYDICTIONARY и удалить все AcDbXRecord.
Удаление вершины у 3D-полилинии (AcDbPolyline3d) средствами ObjectARX
Удаление вершины у 3D-полилинии несколько сложнее, чем вы можете себе представить. AcDbPolyline3d – это составной тип примитива, данные ее вершин содержатся в отдельных внешних примитивах AcDbVertex3d. Так что для того, чтобы удалить вершину её нужно найти, а затем удалить при помощи метода erase().
Точки останова в пользовательской форме не обрабатываются при отладке .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 .
Текстовые примитивы в собственных примитивах не скрываются после команды СКРЫТЬ (HIDE)
Возьмем такой пример: Вы создали собственный примитив (Custom Entity) и среди других примитивов в методе worldDraw, вы рисуете текст (mode->geometry().text). После создания собственного примитива, когда выполнилась команда СКРЫТЬ (HIDE) в режиме 2D-каркас, текст в собственном примитиве оказывается не скрытым. Кроме того, когда текст рисуется как часть собственного примитива, некоторые другие примитивы могут быть скрыты неправильно. Такого не случается в собственных примитивах, не содержащих текстовые примитивы.
Список определений подложек DWF в чертеже
Каждое определение DWF-подложки хранится в словаре именованных объектов (NOD) в словаре с именем "ACAD_DWFDEFINITIONS". Следующий код показывает как можно пройтись по словарю "ACAD_DWFDEFINITIONS" и распечатать все определения всех DWF-подложек.
Создание новой ViewTableRecord с камерой и целью
Этот пример на C# запрашивает точки цели и камеры. Положение камеры может быть вычислено как сумма вектора направления ViewTableRecord и точки цели.
Создание BMP-файла из выбранных примитивов
Если вы хотите создать/сохранить BMP-файл из выбранных примитивов вы можете воспользоваться методом Export() класса AcadDocument из состава ActiveX Automation API AutoCAD’а
Свойства примитивов в JIG не появляются в OPM (Панель свойств)
Вопрос:
Мой код очень точно следует примеру "ObjectARX 2009 SDK\samples\editor\Palettes\BoltSolution", но свойства примитивов во время JIG не появляются в Панели свойств (OPM).
Ответ:
После просмотра кода стало ясно, что вы забыли добавить флаг ACRX_CMD_INTERRUPTIBLE к флагам команды, которая стартует JIG: