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

20/02/2022

Внедрение изображения в чертеж

В этой статье мы рассмотрим создание пользовательского объекта, унаследованного от AcDbRasterImageDef, который сохраняет / загружает данные изображения в / из чертежа с помощью ATIL. Это гарантирует, что ваш чертеж не зависит от внешнего файла изображения, и данные изображения будут загружены в AcDbRasterImageDef, если ARX загружен в AutoCAD. Для других способов встроить изображение на рисунке, не имея зависимости от внешнего файла изображения, пожалуйста, обратитесь к этой статье: https://adn-cis.org/vstraivanie-izobrazheniya-v-chertezh.html

Опубликовано 20.02.2022     Читать далее >>>
24/01/2022

Установка стиля печати

Вы можете обнаружить, что при попытке назначить стиль печати слою с помощью AcDbLayerTableRecord::setPlotStyleName() иногда возвращается «eKeyNotFound»? Это связано с тем, что PlotStyles и plotStyleNames не совпадают. PlotStyleNames — это просто записи в словаре plotStyleName (ACAD_PLOTSTYLENAME). Они не полагаются на plotStyles в файлах STB и автоматически не генерируются plotStyles. Намерение противоположно тому, что вы могли бы подумать; наоборот plotStyleName используется в качестве имени поиска, когда AutoCAD ищет plotStyle.

Когда setPlotStyleName возвращает "Acad::eKeyNotFound", это указывает на отсутствие такой записи в словаре plotStyleName. Чтобы создать нужную запись в этом словаре, вы можете использовать метод AcDbDatabase::getPlotStyleNameDictionary() для получения указателя на словарь plotStyleName (это объект типа класса AcDbDictionaryWithDefault, производный от AcDbDictionary). Затем вам нужно создать новый объект AcDbPlaceHolder и добавить его в словарь plotStyleName, используя нужное вам plotStyleName в качестве ключа записи.

Обратите внимание, что в словаре plotStyleName есть запись по умолчанию "Нормальный" класса AcDbPlaceHolder. А функция setPlotStyleName возвращает статус ошибки, если стиль печати не может быть найден в текущей таблице стилей печати (как в этом случае) или если PlotStyleMode чертежа настроен на использование стилей печати на основе цвета.

Опубликовано 24.01.2022     Читать далее >>>
24/01/2022

Вставка растрового файла в AutoCAD при помощи ObjectARX

Внутри ObjectARX есть два класса, которые мы используем для представления изображений: один — AcDbRasterImage, а другой — AcDbRasterImageDef.

Объект AcDbRasterImage (объект изображения) работает с объектом AcDbRasterImageDef (объект определения изображения) для реализации растровых изображений внутри AutoCAD. Связь между этими двумя классами очень похожа на связь между объектом определения блока AutoCAD и объектом вставки блока.

Объект изображения — это объект AutoCAD с возможностью рисования и выбора, который помещает растровое изображение в пространство модели или листа в определенном месте и с определенной ориентацией. Объект изображения связан ровно с одним объектом определения изображения, которому он отправляет запросы на операции обработки изображения, необходимые для отображения и печати изображений. Поскольку объект определения изображения управляет всей информацией об изображении, его объект изображения относительно мал. Помимо местоположения и ориентации изображения, он содержит границу подрезки, параметры затухания изображения, контрастности и яркости, а также другие типичные свойства AcDbEntity, такие как слой и цвет.

Опубликовано 24.01.2022     Читать далее >>>
24/01/2022

Как создать несколько видовых экранов модели с помощью API?

Вопрос:

Я хотел бы создать несколько видовых экранов в пространстве модели, например, четыре видовых экрана, которые делили бы экран на четыре равных части, как четыре разных вида одной и той же модели. Кроме того, я хотел бы делать это автоматически для каждого чертежа, который я создаю из пользовательского интерфейса. Как этого можно добиться при помощи ObjectARX?

Ответ:

В приведенном ниже примере кода показано, как создать четыре видовых экрана в пространстве модели с возможными разными представлениями модели. Для простоты задаются только параметры просмотра первого видового экрана.

Что касается выполнения этой обработки на каждом новом чертеже, то нам поможет выполнение нашего кода в реакторе AcApDocManagerReactor::documentCreated

Опубликовано 24.01.2022     Читать далее >>>
24/01/2022

Установка текущего визуального стиля при помощи ObjectARX

Вы можете использовать функцию acdbSetViewportVisualStyle для установки необходимого визуального стиля. Пример того, как установить визуальный стиль Реалистичный (Realistic).
Опубликовано 24.01.2022     Читать далее >>>
24/01/2022

Ошибка Acad::eWrongObjectType при вызове AcDbDictionary::setAt()

Ошибка Acad::eWrongObjectType при вызове AcDbDictionary::setAt()

Acad::eWrongObjectType error with AcDbDictionary::setAt()

Что же может заставить при вызове AcDbDictionary::setAt() вернуть ошибку Acad::eWrongObjectType ?

К сожалению эта ошибка не документирована в ObjectARX SDK для метода AcDbDictionary::setAt, но может быть несколько причин, по которым вы можете столкнуться с этой ошибкой.

Если вы добавляете пользовательский объект (Custom object) в словарь, вы должны зарегистрировать его класс в AutoCAD. Если этого не сделать, то это может привести именно к этой ошибке.

Опубликовано 24.01.2022     Читать далее >>>
09/12/2021

Как создать конус средствами ObjectARX , который можно было бы редактироватьАвтор: Александр Ривилис

Вопрос: Если создавать конус при помощи команды КОНУС (_CONE), то конус создаётся параметрическим – у него есть ручки и в свойствах этого 3DSOLID видно, что это конус и у него есть параметры (радиусы и высота). Если же я использую для создания конуса метод AcDb3dSolid:: createFrustum, то конус создаётся не параметрическим и его можно только переносить, но не изменять параметрически. Как средствами ObjectARX можно воспроизвести поведение команды Конус.

Ответ: Для этой цели достаточно включить запись истории редактирования 3DSOLID. Ниже приведён полный пример кода, который это проделывает:

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

Как создать конус, направленный вдоль заданной осиАвтор: Александр Ривилис

Вопрос: Как при помощи AutoCAD .NET API можно создать конус, который бы был направлен вдоль заданной пользователем оси?

Ответ: Для того, чтобы создать конус достаточно воспользоваться методом Solid3d.CreateFrustum. Созданный таким образом конус направлен вдоль оси Z, и начало координат находится в середине оси конуса. Дальше следует выполнить трансформацию конуса. Ниже исходный текст программы:

Опубликовано 01.12.2021     Читать далее >>>
23/11/2021

Доступны записи вебинаров с онлайн-тренинга по платформе Autodesk Forge для программистов на русском языкеАвтор: Юлия Еремеева

Доступны записи вебинаров с онлайн-тренинга по платформе Autodesk Forge для программистов на русском языке
Опубликовано 23.11.2021     Читать далее >>>
31/10/2021

Конец поддержки Internet Explorer 11 в Forge Viewer

Microsoft завершает поддержку Internet Explorer 11 (IE11) настольного приложения в июне 2022 года. Соответственно поддержка IE11 в Forge Viewer будет прекращена в конце января 2022 года.

Внимание: Некоторые продукты Autodesk, которые используют Forge Viewer, уже прекратили поддержку IE 11.

Если у вас есть вопросы или замечания по этому поводу – пишите на e-mail: forge.help@autodesk.com

По поводу анонса Microsoft читайте эту статью.

Источник: https://forge.autodesk.com/blog/end-internet-explorer-11-support-forge-viewer

Опубликовано 31.10.2021     Читать далее >>>
31/10/2021

Как обеспечить синхронизацию AcDbMLeader с его стилем AcDbMLeaderStyleАвтор: Александр Ривилис

Вопрос: Если создавать мультивыноску (класс AcDbMLeader) при помощи команды _MLEADER, то эта мультивыноска будет следовать изменениям в её стиле мультивыноски (класс AcDbMLeaderStyle). А если создавать при помощи кода, то мультивыноска не следует за изменениями в стиле мултивыноски. Почему? И как сделать, чтобы поведение созданной программно мультивыноски было такой же, что и у созданной в команде _MLEADER?

Ответ: Для того, чтобы сделать такое поведение необходимо выполнить два условия:

1) Необходимо вызвать метод AcDbMLeader::setOverride с параметром isOverride == false (это значит, что параметр не переопределён в мултивыноске и используется тот, который в стиле мультивыноски) и параметром propertyType соответствующим тому свойству, которое должно браться из стиля мультивыноски. Вызывать этот метод можно несколько раз с разными значениями propertyType.

2) Необходимо вызвать метод AcDbMLeaderStyle::addPersistentReactor для того, чтобы добавить AcDbMLeader::objectId() к стилю мультивыноски, чтобы стиль был в курсе какие мультивыноски следует обновлять.

Опубликовано 31.10.2021     Читать далее >>>
02/10/2021

Поддержка DWF и PDF в Forge Viewer

Forge Viewer (7.36) позволяет легко загружать и просматривать PDF и DWF файлы естественным путём. В прошлом эти файлы необходимо было обрабатывать дополнительно при помощи Model Derivative service но сейчас мы можем использовать расширения Autodesk.DWF и Autodesk.PDFдля загрузки этих файлов, аналогично тому, как это делает расширение Autodesk.glTF (https://forge.autodesk.com/blog/gltf-20-support-forge-viewer). Всё что от вас требуется – это вызвать методы loadExtension и loadModel в соответствии с выбранным типом расширения файла.

Опубликовано 02.10.2021     Читать далее >>>
02/10/2021

Использование клавиши табуляции для циклического выбора

В Revit можно использовать клавишу TAB для выбора различных вложенных элементов. Анимация в Revit показывает выбранные элементы, в статусбаре (слева внизу) показывая имена.
Опубликовано 02.10.2021     Читать далее >>>
13/09/2021

Создаём четыре видовых экрана модели и назначаем ортогональные виды

Недавно пользователю понадобилось модифицировать код для создания раздельных видовых экранов в модели и установить каждому из них различные ортогональные виды. Код ниже создаёт четыре раздельных видовых экрана в модели. Для этого мы создаём новые ViewportTableRecord, которые представляют новые видовые экраны, а их параметры устанавливаем на основе текущей ViewportTableRecord. Это гарантирует, что ViewportTableRecord будет правильно настроен для установки орфографического представления. И в конечном итоге мы выполняем показ до границ. Вот скриншот результирующего расположения видовых экранов.

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

Имитация штриховки при помощи DrawableOverrule

Если вам нужно временно заштриховать примитив – для этой цели можно воспользоваться DrawableOverrule. Рисование шаблона штриховки в WorldDraw / ViewportDraw может быть как простым, так и сложным в зависимости от того, какой шаблон штриховки используется. Чтобы корректно заштриховать границу штриховки при помощи шаблона штриховки можно воспользоваться подрезкой по контуру, создаваемой в Overrule. Это упрощает реализацию Overrule, так как отсечка шаблона штриховки за пределами объекта обеспечивается подрезкой по заданным границам объекта.

Опубликовано 13.09.2021     Читать далее >>>
10/08/2021

Доступ к файлам стандартов оформления AutoCAD (.dws)

У меня появился шанс исследовать эту проблему, когда я наткнулся на запрос на форуме.

Когда пользователь вызывает команду _LAYTRANS, появляется диалоговое окно транслятора слоёв, и пользователю разрешено сопоставление из загруженного рисунка на текущий рисунок.

Слои из загруженного чертежа сопоставляются со слоями в текущем чертеже или могут быть сопоставлены пользователем.

Эта настройка может быть сохранена в качестве файла стандартов (.dws), для будущего использования, когда пользователь получает рисунок от клиента, пользователь может проверить, соответствует ли чертеж указанным файлам стандартов.

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

Например, в этом файле есть соответствие между слоями A,B,C и 1,2,3. Тогда слои A,B,C файла стандартов (исходного) транслируются в слои 1,2,3 текущего чертежа (назначения)

Чтение dws-файлов точно такое же как и чтение dwg-файлов, только с другим расширением (спасибо Lee за подсказку).

Опубликовано 10.08.2021     Читать далее >>>
02/08/2021

Установка исходной точки штриховки при её создании в .NET

У нас был вопрос, поднятый клиентом по поводу установки исходной точки штриховки в процессе её создания.

Было обнаружено, что исходную точку штриховки следует задавать не в той транзакции, в которой эта штриховка создаётся, для того чтобы исходная точка была установлена корректно.

Ниже код, который можно использовать для проверки :

Опубликовано 02.08.2021     Читать далее >>>
01/08/2021

Метод Editor.Snap для изменения режима привязки точки

При использовании метода Editor.GetEntity часто требуется получить в точности все координаты точки указания, используемые для выбора объекта.

Например, рассмотрим следующую ситуацию. Построим окружность с центром в точке point (0,0,5) и радиусом 5 в плоскости XY МСК при виде сверху.

При выборе точке на окружности с использованием Editor.GetEntity, PromptEntityResult.PickedPoint вернул : (3.50064192661003 , 3.35618169844321 , 0)

Опубликовано 01.08.2021     Читать далее >>>
11/07/2021

Удаление выбранных примитивов из групп, в которых они содержатсяАвтор: Александр Ривилис

Вопрос: Как средствами ObjectARX можно удалить выбранные примитивы из групп, в которых они содержатся?

Ответ: Для этого в первую очередь необходимо отключить групповой выбор (PICKSTYLE должно быть равно 0 или 2), чтобы можно было выбирать отдельные примитивы из групп. Ниже приведен код, позволяющий удалять выбранные примитивы из групп:

Опубликовано 11.07.2021     Читать далее >>>
06/07/2021

Как выполнить расчленение группы примитивов при помощи ObjectARXАвтор: Александр Ривилис

Следующий код показывает как можно расчленить группу, заданную её именем:
Опубликовано 06.07.2021     Читать далее >>>