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

24/02/2015

Получение значений свойств из COM-обертки примитива

Когда создаём AutoCAD-приложение, достаточно просто получить свойства примитива без использования COM-обертки примитива. Но когда создается приложение RealDWG, может быть необходимым получить свойства примитива именно из COM-обертки.

Если вы используете .NET-языки, то можно воспользоваться «отражением». Вот эта статья может помочь:

Получение свойств и методов класса ActiveX/COM из .NET

Если вы используете C++ вы можете таким образом изменить пример DumpDwg из RealDWG SDK. В этом примере мы получаем свойства примитива, используя интерфейс IDispatch его COM-обертки. Например, если чертеж содержит примитив "AsdkPoly" из примера "ObjectARX 2015\samples\entity\polysampPolySamp".

Опубликовано 24.02.2015     Читать далее >>>
20/02/2015

Используем геолокацию с помощью ObjectARX

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

Чтобы попробовать этот код, вы должны быть подписаны на использование Autodesk 360 внутри AutoCAD.

Опубликовано 20.02.2015     Читать далее >>>
06/02/2015

Ассоциация гиперссылки с BlockTableRecord

В ObjectARX BlockTableRecord обеспечивает доступ к коллекции своих гиперссылок при помощи AcDbEntityHyperlinkPE интерфейса. В AutoCAD 2015 к гиперссылкам можно получить доступ и при помощи AutoCAD .NET API.

Вот образцы кода на C++ и на .NET, которые создают блок с гиперссылкой к блогу AutoCAD DevBlog:

Опубликовано 06.02.2015     Читать далее >>>
26/01/2015

Просмотр нормалей к граням сети

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

В этом случае желательно было увидеть нормали к сети. Следующий код показывает как это сделать:

Опубликовано 26.01.2015     Читать далее >>>
12/01/2015

Прозрачность слоев в ObjectARX

Следующий код показывает процедуру изменения «прозрачности» слоя при помощи ObjectARX. Он устанавливает слою 0 прозрачность 60%. Чтобы на экране отобразились изменения требуется регенерация.

Опубликовано 12.01.2015     Читать далее >>>
25/12/2014

Разработка CRX приложений

Мы получили несколько общих вопросов от разработчиков использующих AcCoreConsole. Это два вопроса (и ответы любезно предоставленные членом нашей команды разработчиков AutoCAD) …

Вопрос 1: Какие библиотеки ObjectARX я могу прилинковать к моей DLL для загрузки в AcCoreConsole (или другого AcCore-продукта, который Autodeskможет выпустить в будущем)?

Опубликовано 25.12.2014     Читать далее >>>
22/12/2014

Уведомление в элементе статусной строки

В ObjectARX 2004 SDK был прекрасный пример на C++, который добавлял элементы в статусную строку и показывал уведомления для одного из этих элементов. Я выполнил миграцию этого примера для работы с AutoCAD 2015 и полный проект можно скачать здесь:

StatusBar

Опубликовано 22.12.2014     Читать далее >>>
17/12/2014

Создание 3DSolid из набора SubDMesh

Если у вас имеется коллекция subDMesh и вы хотите создать из неё 3DSolid, сначала нужно сконвертировать каждую из сетей в поверхность. Если поверхности вместе образуют замкнутый объём, тогда из них можно создать твердое тело. Ниже пример кода:

Опубликовано 17.12.2014     Читать далее >>>
15/12/2014

Совет по миграции: ACAD2011\12 в 13\14\15

Этот совет связан не только с ACAD, но и с перспективами Visual Studio и будет полезен всем, кто использует шаблон CMap, где ключом является AcDbHandle&

CMap<AcDbHandle, AcDbHandle&, CString, CString> handleMap;

Я недавно получил запрос, когда программист получил сообщение об ошибке C2440: 'typecast' : cannot convert from 'AcDbHandle' to 'long' , хотя этот код прекрасно работает в компиляторе VS 90.0 compiler но дает ошибку в VS 100.0\110.0. После небольшого исследования я обнаружил, что изменился шаблон по-умолчанию

Опубликовано 15.12.2014     Читать далее >>>
24/11/2014

Сохранение порядка отрисовки примитивов при операции клонирования блоков

WblockClone API не гарантирует сохранение порядка отрисовки примитивов (DrawOrder) при клонировании блоков, т.к. операция WblockClone – это очень низкоуровневая операция, которая только копирует примитивы. Так что программисту придется самому позаботится о сохранении порядка отрисовки примитивов в блоке при его клонировании.
Опубликовано 24.11.2014     Читать далее >>>
14/11/2014

Разрешение конфликта имён при связывании внешней ссылки

Недавно разработчик сообщил о странном поведении, при котором несколько примитивов исчезли после связывания внешней ссылки при помощи API. При анализе чертежа и внешних ссылок было установлено, что это странное поведение связано с тем, что блок с точно таким же именем присутствовал и в основном чертеже и в одной из внешних ссылок.

Хотя определения блоков находились в разных файлах, но у них одно и тоже имя. Когда такая внешняя ссылка связывается с основным чертежом в качестве определения блока используется блок из основного чертежа.

Опубликовано 14.11.2014     Читать далее >>>
12/11/2014

Координаты точек в примитиве Облако точек

Для примитива PointCloud, созданного с использованием PCG файла, простейший способ для получения координат точек будет вставка пространственного фильтра при помощи метода acdbModifyPointCloudDataView. Для примитива PointCloud созданного из RCP файла, нужно вставить пространственный фильтр при помощи методаAcDbPointCloudEx::addSpatialFilter. Когда пространственный фильтр создан можно получить доступ ко всем координатам. Другой метод – использовать AcDbPointCloudEx::traverseAllPointData.
Опубликовано 12.11.2014     Читать далее >>>
06/11/2014

Импортирование Палитры инструментов/Группы палитр из XTP/XPG файлов

Импортирование Палитры инструментов или Группы палитр инструментов из xtp и xpg файлов требует в AutoCAD взаимодействия с пользователем. Вот пример кода на ObjectARX для автоматизации этого. Часть кода получает информацию из xtp / xtg файлов при помощи чтения чистого XML документа. Этот код работает для простых файлов xtp и xpg, которые я использовал для тестов. Возможно потребуется дополнительная проверка и обработка ошибок в вашем конкретном случае.

Опубликовано 06.11.2014     Читать далее >>>
28/10/2014

Получение угла поворота и оси из матрицы AcGeMatrix3d

Метод AcGeMatrix3d::rotation возвращает новую матрицу с определенным углом поворота. А как из существующей матрицы получить угол поворота? Следующий код это делает.

Опубликовано 28.10.2014     Читать далее >>>
09/10/2014

Получение габаритного контейнера сплайна с помощью ObjectARX

Вопрос:

Я хочу получить габаритный контейнер сплайна, но метод getGeomExtents() дает неточные результаты. Как можно получить точный габаритный контейнер для сплайна?

Ответ:

Для AcDbSpline метод getGeomExtents() возвращает неточный габаритный контейнер, т.к. вычисление точного контейнера сопряжено с временными тратами.

Чтобы получить точный габаритный контейнер вам придется вычислить его самостоятельно. Вы можете воспользоваться методом getPointAtParam() для прохода по сплайну и вычисления максимальных/минимальных координат X и Y. Точность вычисления габаритного контейнера зависит от того насколько частей кривая поделена. Коэффициент 1e6 даёт приемлемую точность и допустимое время для подсчета. Функции показанные ниже показывают как это можно сделать. Запустите команду SplineBB и выберите сплайн. Команда нарисует два габаритных контейнера. Красный возвращает метод getGeomExtents(), а желтый – это тот, который мы вычислили.

Опубликовано 09.10.2014     Читать далее >>>
07/10/2014

Настройка CAdUiListCtrl

Если мы пользуемся классом CAdUiListCtrl и хотим его настроить получше, мы можем использовать пользовательское рисование. Это делается точно так же, как и с любым другим элементом управления MFC. Хорошую статью о том, как это делать (на английском) для элемента управления CListCtrl вы найдете здесь.
Опубликовано 07.10.2014     Читать далее >>>
25/09/2014

Как используя Visual C++ запустить AutoCAD и заставить его выполнять некоторые действия.Автор: Александр Ривилис

AutoCAD представляет собой COM-сервер и для работы с ним имеется AutoCAD ActiveX/COM API. По этому API есть и документация, которая ориентирована на VBA и немного на VisualLisp (на английском языке), но которая позволяет понять структуру и возможности этого API.

AutoCAD 2015 – Developer's Guide и AutoCAD 2015 – Reference Guide

Кроме того документацию можно скачать полностью: http://images.autodesk.com/adsk/files/autocad_2013_activex_help.zip

Я сделал готовый пример с комментариями, который используя некоторые средства AutoCAD ActiveX/COM API, позволяет понять как можно сделать диалоговое окно с кнопкой, по которой будет запущен AutoCAD, будет создан новый документ, отрисованы некоторые примитивы, а затем этот документ будет сохранен в указанном месте. После этого работа AutoCAD будет завершена. Основная проблема при работе с AutoCAD через ActiveX API заключается в том, что в это время с AutoCAD может работать пользователь, или AutoCAD занимается своими делами и занят. В ряде случае он возвращает коды ошибки при работе с ним:

Опубликовано 25.09.2014     Читать далее >>>
13/09/2014

Ассоциативный Массив и его API

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

Опубликовано 13.09.2014     Читать далее >>>
26/08/2014

Синхронизация видов Пространства Модели

Это пример кода синхронизирующий параметры двух ВЭкранов пространства Модели. Для простоты код подразумевает, что Пространство Модели уже разделено вертикально на два ВЭкрана одинаковой ширины. Если ширина ВЭкранов не одинакова код сделает её одинаковой перед синхронизацией параметров ВЭкранов.

Опубликовано 26.08.2014     Читать далее >>>
25/08/2014

Добавление пространственного фильтра к вставке блока

В этой статье сделаны небольшие исправления для существующей статьи написанной моим коллегой Xiaodongв 2013, связанные с внутренними изменениями, которые приводят к аварийному завершению AutoCAD 2015 на 32-разрядных машинах. Чтобы предотвратить это я написал универсальный код.
Опубликовано 25.08.2014     Читать далее >>>