Как проверить, что при редактировании XREF он сохранён или отвергнут
Когда пользователь редактирует внешнюю ссылку по месту, то невозможно определить сохранил ли он изменения или отверг их.А что если вашей программе необходимо определиться сохранена ли внешняя ссылка или нет:
Как из arx-приложения получить все загруженные в AutoCAD .NET-сборкиАвтор: Александр Ривилис
Как из arx-приложения получить все загруженные в AutoCAD .NET-сборки
Arx-приложение может быть native и mixed. В любом случае, чтобы получить все .NET-сборки нужно воспользоваться методом AppDomain:: GetAssemblies. Для mixed-кода это совсем просто:
Как определить, что lisp-функцию можно вызвать из arx-приложения?Автор: Александр Ривилис
Как определить, что lisp-функцию можно вызвать из arx-приложения?
Основное документированное средство для вызова lisp-функций из arx-приложения – это функция acedInvoke. Для того, чтобы ею воспользоваться необходимо одно из двух условий:
- Функция имеет имя вида C:XXX, т.е. имя аналогичное тому, как используется в AutoLisp для определения команды AutoCAD.
- Функция зарегистрирована при помощи lisp-функции (vl-acad-defun ‘имя_функции)
Как можно определить, что хотя бы одно из этих условий выполняется? Ниже приведён подробно документированный код:
Как сделать вставку точки в разрыв кривой?Автор: Александр Ривилис
Как сделать вставку точки в разрыв кривой?
На форуме мне задали вопрос о том, как можно эмулировать команду _BREAK и вставлять в разрыв точку? Ниже код, показывающий как используя метод getSplitCurves можно добиться результата.
Удаление границы штриховки
Класс AcDbHatch предоставляет методы для получения границ и для удаления границ. Каждая граница представляет собой так называемый цикл. С помощью методов класса AcDbHatch вы можете выполнять итерацию всех циклов. Затем вы можете получить все объекты, принадлежащие одному циклу. Все, что вам нужно сделать, это сравнить метки объектов цикла с меткой граничного объекта, который должен быть удален из объекта штриховки. Если у одного из объектов цикла есть дескриптор, который вы ищете, вы можете использовать AcDbHatch :: removeLoopAt (), чтобы удалить петлю из штриховки.
Следующая функция делает именно это. Параметр handleRemove является меткой примитива, принадлежащего к циклу, который следует удалить.
Создание штриховки и установка её масштаба
Вопрос:
Как можно создать штриховку и установить ей масштаб? Я написал функцию, которая создаёт штриховку. Но я обратил внимание, что она не в состоянии назначить масштаб штриховки и мне приходится это делать вручную. Почему это происходит?
Ответ:
Причина может быть в том, что вызов метода setPatternScale() происходит не в тот момент, когда это следует делать. Обратите внимание, что вы должны установить свойства штриховки, такие как угол, масштаб, ассоциативность и имя штриховки сразу же после создания AcDbHatch. После добавления границ штриховки вы можете установить другие свойства, такие как слой, цвет, стиль штриховки и т.д. Затем следует вызвать метод evaluateHatch() чтобы штриховка правильно отобразилась на экране. И после этого штриховку следует добавить к базе чертежа AutoCAD и закрыть. Следующий код показывает как это следует делать. Более детальную информацию можно найти в ObjectARX документации для класса AcDbHatch.
Ассоциативность AcDbHatch
После того как я создал объект штриховки, добавил его в базу, установил стиль и т.д. у неё нет ассоциативности к объектам границы. Чтобы сделать её ассоциативной нужно сделать объект штриховки постоянным реактором для примитивов, которые штрихуются. Следующий пример кода демонстрирует как создать штриховку и сделать её ассоциативной к примитивам её границы (прямоугольник и круг).Как удалить переменную из Диспетчера параметров AutoCAD средствами ARXАвтор: Александр Ривилис
Следующий код покажет как это можно сделать:Как получить пересечение прямой и твердого тела?
Это можно сделать при помощи B-Rep API. Следующий код иллюстрирует как получить пересечение линейного примитива (ОТРЕЗОК, ЛУЧ, ПРЯМАЯ) с примитивом, который представляется в виде ACIS (т.е. твердое тело - SOLID, область - REGION, или тело - BODY).Изменение установок экранного разрешения при помощи API
Мы можем установить все четыре установки в Экранном разрешении в Настройке.Как получить порядковые номера для экспортируемых AEC-функций
Порядковые номера функций могут быть полезны в RealDWG-приложениях. Например, такой сценарий, когда RealDWG-приложение расчленяет любые AEC-примитивы, которые являются зависимыми от вида, расчленение примитива в определенном виде с получением геометрии зависящей от вида, может требовать установку вида примитива в чертеже, а затем его расчленение.Как проверить действительность объекта ShapeManager для Solid3D
Если Solid3D имеет недействительный объект shape manager – это практически всегда приводит к аварийному завершению AutoCAD если не выполнить соответствующую проверку.Как получить имя примитива из Панели свойств?Автор: Александр Ривилис
Как получить имя примитива из Панели свойств?
Вопрос: В панели свойств есть название примитива, который находится в наборе предварительного выбора (pickfirst):
Это название – локализованная строка. Например, в русской локализации – Дуга, в английской – Arc. Как можно имея идентификатор AcDbObjectId этого примитива узнать его имя?
Ответ: Ниже приводится полный код, который печатает имя выбранного примитива:
Пример SubEntity из ObjectARX SDK 2009 для версии 2017Автор: Александр Ривилис
Вопрос: В ObjectARX SDK 2009 имелся пример SubEntity, который демонстрирует возможность работы с подобъектами, добавление их свойств в Панель свойств (OPM) и т.д. К сожалению этот пример не входит в состав ObjectARX SDK версий позднее 2009-ой. Можно ли его адаптировать к версии ObjectARX SDK 2017?
Ответ: Этот пример, адаптированный для ObjectARX SDK 2013, привёл Balaji Ramamoorthy здесь
Мне оставалось адаптировать его для ObjectARX SDK 2017. Результат работы можете посмотреть здесь: SubEntity2017.zip
Изменения в методе AcadAppInfo::writeToRegistry в AutoCAD 2017
В AutoCAD 2017 в методе AcadAppInfo::writeToRegistry, параметры Boolean удалены. Это потому что нет гарантии, что AutoCAD запущен с соответствующими привилегиями для записи в Local Machine, что всегда проблематично через API. Теперь writeToRegistry работает аналогично writeToRegistry(false, true) в AutoCAD 2016. (Пишем для текущего пользователя в секцию AutoCAD).
Создание фильтра примитивов унаследованных от полилинийАвтор: Александр Ривилис
Вопрос: У меня есть собственные примитивы, унаследованные от AcDbPolyline. Я хочу иметь возможность фильтровать их, а также другие типы полилиний (AcDb2dPolyline и AcDb3dPolyline), при помощи функции acedSSGet. Я пробовал создавать фильтр при помощи такого кода:
Московская конференция "День Разработчика Autodesk 2016"
Московская конференция «День Разработчика Autodesk 2016»
Уважаемые коллеги, приглашаем вас 26 января 2017 г на очередную конференцию «День Разработчика Autodesk 2016». Если вы планируете или уже разрабатываете приложения с использованием технологий Autodesk, хотите узнать, в каком направлении Autodesk развивает свои облачные и десктопные API, то эта конференция для вас.
На этот раз девиз конференции: «Data at the Center». Это новый подход к работе с данными, который стал возможным благодаря облачным технологиям. Отдельно мы рассмотрим Autodesk Forge, платформу для решения инженерных и бизнес-задач, объединяющую новое поколение облачных API и веб сервисов.
В ходе конференции вы узнаете свежие новости о разработке приложений для облачных и десктопных платформ Autodesk, мы подробно остановимся на новых возможностях Data Management API, Model Derivative API, Viewer, Design Automation API, 3D Print API, BIM 360 API, Reality Capture API и Fusion 360 Client API и, конечно же, не забудем про наши десктопные платформы AutoCAD, Revit, Civil 3D, Inventor, Vault. Отдельно расскажем об использовании онлайн-магазина приложений Autodesk App Store для популяризации ваших приложений.
Как в ObjectARX выбрать грани 3DSOLID и изменить им цветАвтор: Александр Ривилис
Оказалось, что на такой, казалось бы простой и распространенный вопрос найти примера в интернете не удается. Более того несколько функций, которые я использовал для решения этой задачи входят в состав ObjectARX SDK начиная с версии 2008, но никогда ни в одном примере не фигурировали. Есть готовые примеры как найти выбранную грань 3DSOLID, но они очень громоздки, зависят от ПСК, точки зрения, точки указания и т.д. В этом же примере всё очень просто и лаконично и основывается на функции обычного выбора примитивов acedSSGet:
Динамические размеры в AcEdJig с использованием ObjectARXАвтор: Александр Ривилис
Вопрос:
Не могу найти готовые примеры использования динамических размеров в AcEdJig в интернете и в ObjectARX SDK, а описания этого процесса в документации ObjectARX SDK нет. Подскажите как их использовать? Хочется иметь возможность использовать динамические размеры по аналогии с тем, как это делается в командах AutoCAD.
Ответ:
В составе ObjectARX SDK 2007 и 2008 был пример Grip, в котором разъяснялась техника использования динамических размеров. К сожалению этот пример отсутствует в более новых версиях ObjectARX SDK. Я адаптировал этот пример для AutoCAD 2017 и ObjectARX SDK 2017.
Для проверки загрузите этот пример, перестройте приложение и загрузите grip.arx в AutoCAD 2017. Запустите команду RECTJIG и вы увидите как можно задать размеры по горизонтали и вертикали в динамических размерах.