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

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

Программное сохранение активного документа в C++/ARX приложении

Используем ActiveX интерфейс внутри ARX-приложения. Следующий пример кода показывает два подхода. Обратите внимание, что проект ARX-приложения должен поддерживать клиентские интерфейсы AutoCAD ActiveX. При помощи помощника (wizard) ARX это сделать очень просто.

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

Проверка состояния готовности AutoCAD с использованием OLE

Вопрос:
Как можно проверить статус готовности AutoCAD средствами OLE автоматизации? Как можно предотвратить диалог "Ошибка. Сервер занят" ("Server Busy Error")?

Ответ:
Для надежной проверки того доступен ли AutoCAD для вызова или нет вы можете использовать проверку IAcadState. Вам нужно создать глобальный инициализированный объект IAcadState в момент когда AutoCAD не занят. Для любых последующих запросов автоматизации вы можете проверять состояние занятости AutoCAD используя объект IAcadState, а затем или дождаться когда AutoCAD освободится или отменить запрос.

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

Преобразование координат точки из пространства Листа в пространство Модели средствами AutoCAD .NET API

Недавно я попытался найти какую-нибудь информацию о том, как преобразовать координаты точки из пространства Листа в пространство Модели и был шокирован тем, что нет простого кода для этого!!! Возможно, я упустил что-то очевидное, тем не менее, я решил создать свой собственный код и поделиться им с вами.

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

Преобразование AcGePoint3d в ads_point и наоборот

Функция asDblArray() позволяет преобразовать при необходимости AcGePoint3d в ads_point.

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

Получение размерных ограничений и их ассоциативных свойств в .NET

Вот полезный код для тех из вас, кто работает с .NET Associative API. Ниже пример на C# показывает как выполнить дамп всех размерных ограничений в текущем пространстве (Модели или Листа). Он так же показывает как по объектам, накладывающим ограничения найти зависимые примитивы и управляющие ими ассоциативные параметры.

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

Получение нормали к грани 3D-тела с помощью BREP .NET API

Следующая C#-статья иллюстрирует как получить нормаль к грани 3D-тела с помощью функционала BRep .NET API:

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

Получение координат контура подрезки

Вопрос:
Я могу установить контур подрезки при помощи метода AcadRasterImage.ClipBoundary, но как я могу получить координаты уже существующего контура подрезки? Я знаю, что если контур прямоугольный, то я могу получить граничный прямоугольник, ширину и высоту. А если контур подрезки имеет неправильную (непрямоугольную) форму, то я не могу найти ни одного метода, чтобы получить его координаты.

Решение:
Эквивалент метода из ObjectARX AcDbRasterImage::clipBoundary() не представлен в текущей модели ActiveX Automation.

Мы можем самостоятельно предоставить такой метод. Полный проект прилагается: ImgClipBoundary

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

Получение информации о гранях из AcDbPolyFaceMesh и AcDbPolygonMesh

Вопрос:

Я бы хотел получить информацию о гранях для примитивов полигональных и многогранных сетей. Есть ли пример как это можно сделать?

Ответ:

Следующие примеры кода рисуют отрезки поперёк всех граней выбранных примитивов полигональной и многогранной сетей.

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

Получение информации о гранях PolyFaceMesh в .NET

Это .NET версия этой статьи

Обычно достаточно просто мигрировать из кода ObjectARX в код AutoCAD .NET API, так как это просто обертки над ARX API. Вам нужно убрать префикс AcDb из имён классов базы данных, использовать foreach вместо функции создающей итератор, использовать транзакции, и большая часть следующего кода будет готова :)

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

Получение граней SubD Сети

Если вы хотите получить все грани геометрии поверхности AcDbSubDMesh (называемой просто "Сеть" в Палитре свойств), то вы можете использовать либо getFaceArray (возвращает базовый (уровня 0) список граней сети) или getSubDividedFaceArray (возврат список граней сглаженной сети).

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