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

26/08/2015

Очистка словарных записей в файле dwg

Достаточно давно на работе я столкнулся с необходимостью очистки файла dwg от словарных записей. Основная работа выполняется в AutoCAD2009x64, и, казалось бы, ничего сложного быть не должно.
Опубликовано 26.08.2015     Читать далее >>>
25/08/2015

Доступ к IfcGUID импортированной стены

Вопрос: У меня есть стена, которая в IFC файле задана с идентификатором ‘3lDzp1LFjDqwXDAihsyNrA’ и выглядит примерно так:

Код: [Выделить]
  #615 = IFCWALLSTANDARDCASE( '3lDzp1LFjDqwXDAihsyNrA',

    #42, '\X2\6A196E9658C1\X0\:(P)PC200:1185289', $,

    '\X2\6A196E9658C1\X0\:(P)PC200:794115',

    #587, #613, '1185289' );

Как можно получить IFC GUID '3lDzp1LFjDqwXDAihsyNrA' для этой стены в модели Revit?

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

Получение списка видимых примитивов в динамическом блоке

Членом ADN был задан следующий вопрос:

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

Решение основывается на предложении Тони Танзилло из этого сообщения на форуме.

Решение:

К сожалению API динамических блоков ограничено и нет прямого пути для получения этой информации. Эта информация в словаре расширения динамического блока и требуется смотреть на свойства экземпляра класса "AcDbBlockVisibilityParameter" (это родной класс ObjectARX, но он недоступен через публичные API ни в C++, ни в .NET).

Так что требуется несколько больше работы для получения этой информации. Вот несколько шагов:

Опубликовано 25.08.2015     Читать далее >>>
21/08/2015

Как сохранить идентификатор объекта в словаре расширения другого объекта?

Следующий код показывает как это сделать. Обратите внимание, что необходимо преобразовать ObjectId в ads_name для сохранения результата в Xrecord, и наоборот для получения ObjectId из буфера результата Xrecord. Также отметьте, что необходимо передать ссылку на первый элемент цепочки буферов методу setFromRbChain() вместо указателя на resbuf.

Опубликовано 21.08.2015     Читать далее >>>
19/08/2015

Добавление словаря расширения

Для каждого объекта AutoCAD можно сохранить его пользовательские данные. Обычно это делается для графических примитивов, когда для них сохраняется неграфическая информация. Например, для отрезка AutoCAD можно сохранить строку и/или число (в его словаре расширения). Следующий код показывает как можно добавить в словарь расширения плавающее число и строку.
Опубликовано 19.08.2015     Читать далее >>>
14/08/2015

Добавление нового положения файла при помощи Sheetset API

Вот кусок кода, добавляющий новое положение файла и устанавливает новое положение листа при помощи Sheetset API :
Опубликовано 14.08.2015     Читать далее >>>
13/08/2015

Реакторы внешних ссылок

На работе понадобилось "причесать" стандартный механизм обработки внешних ссылок, используемый в AutoCAD. VISRETAIN (о которой недавно была статья) установлена равной 1. Файл подосновы вставляется как вставленная ссылка в файл основных решений. В файле основных решений выключаются и/или замораживаются некоторые слои. Файл, естественно, сохраняется. Потом файл основных решений используется как внешняя ссылка в текущей работе. И вот тут вылезает очень интересная штука: при вставке "основных решений" состояние слоев "подосновы" не подхватывается и берется именно в том виде, в каком оно есть в исходном файле ("подосновы"). Оставлю за скобками правильность такого решения Autodesk, равно как и требования пользователей "брать то состояние слоев, которое есть в файле основных решений" - надо сделать так, чтобы читалось. Понятно, что надо обрабатывать в реакторах. Вот об этом и расскажу.
Опубликовано 13.08.2015     Читать далее >>>
10/08/2015

Как удалить полностью словарь расширения (ExtDict) примитива средствами .NET?Автор: Александр Ривилис

Как удалить полностью словарь расширения (ExtDict) примитива средствами .NET?

В статье Как удалить полностью словарь расширения (ExtDict) примитива? описано как это сделать средствами ObjectARX. Ниже приводится код как тоже самое можно сделать при помощи AutoCAD .NET API:

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

Установка положения MText для каждого из масштабов аннотаций

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

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

Как показать иерархическое меню в Ленте

Если вам нужно показать простой (одноранговый) список – подойдёт RibbonSplitButton. О нём есть соответствующая статья. Но если вам нужно организовать иерархическое меню - подойдёт RibbonMenuButton. Ниже пример кода, создающий меню как на следующей картинке:
Опубликовано 06.08.2015     Читать далее >>>
05/08/2015

О методе AcDbObject::releaseExtensionDictionary

В чем разница между вызовом метода erase() непосредственно для словаря расширения (extension dictionary) и вызовом releaseExtensionDictionary() для объекта-владельца?

Это API предоставлено для возможности полного удаления словаря расширения объекта. Этот метод позволяет создавать полностью новый словарь расширения вместо того, чтобы очищать существующий в текущей сессии редактирования чертежа.

Фундаментальное различие между вызовом releaseExtensionDictionary() для родительского объекта и вызовом erase() для словаря расширения становится совершенно очевидным если посмотреть на результаты вызова двух других методов работы со словарём расширения: extensionDictionary и createExtensionDictionary. Рассмотрим следующие две последовательности:

Опубликовано 05.08.2015     Читать далее >>>
05/08/2015

Как удалить полностью словарь расширения (ExtDict) примитива?Автор: Александр Ривилис

Вопрос:
Как удалить полностью словарь расширения (ExtDict) примитива?

Ответ:
В статье О методе AcDbObject::releaseExtensionDictionary описано как и для чего использовать этот метод. Однако для того, чтобы воспользоваться эти методом следует сначала очистить (т.е. удалить все элементы) словаря расширения. Следующий код показывает, как это сделать и результаты его работы:

Опубликовано 05.08.2015     Читать далее >>>
04/08/2015

НПИ (CUI) и прозрачные картинки

До AutoCAD 2014 включительно, AutoCAD использует только формат BMP в CUI. Так как формат BMP не поддерживает прозрачность, AutoCAD использует RGB-цвет 192,192,192 как прозрачный. Пользователи AutoCAD могут использовать эту особенность в CUI.

Но это ограничивает возможность использования прозрачности только фоновым цветом 192,192,192. Любые другие фоновые цвета становятся видимыми в CUI.

Начиная с AutoCAD 2015 (и в более новых версиях), вы можете использовать формат PNG для картинок. Так как PNG формат поддерживает прозрачность, вы можете установить прозрачность для картинки и не ограничены только фоновым цветом 192,192,192.

Если у вас есть картинка в формате BMP с фоновым цветом (типа 192,192,192) тогда вызов “Bitmap.MakeTransparent” API поможет конвертировать этот цвет в прозрачный. Следующий код конвертирует BMPс фоновым цветом 192,192,192 в прозрачный PNG

Опубликовано 04.08.2015     Читать далее >>>
03/08/2015

Visretain и слои внешних ссылок

Системная переменная VISRETAIN существует достаточно давно и ее описание вроде бы внятно и понятно. Но вот стоит поставить ее равной 1 и вылезают некоторые моменты, предусмотреть которые я в свое время не смог.
Опубликовано 03.08.2015     Читать далее >>>
01/08/2015

Сервис хранения объектов Object Storage Service (OSS)

p>О сервисе

API Сервиса хранения объектов предоставляет простой, быстрый и безопасный способ для хранения и доступа к объектам в Autodesk Cloud. Все обращения к OSS зачищены при помощи технологии OAuth 2.0.

Опубликовано 01.08.2015     Читать далее >>>
29/07/2015

Чтение доступных методов определения потерь

Недавно мы рассматривали, как можно получить данные таблицы ASHRE. Эта информация хранится в Расширяемой области хранения и связана с элементом параметром  RBS_DUCT_FITTING_LOSS_METHOD_SERVER_PARAM в виде GUID значения.

А как мы можем получить список всех доступных методов определения потерь?

 

Опубликовано 29.07.2015     Читать далее >>>
29/07/2015

Твердые тела и поверхности Fusion - Часть 1

Рассматриваются особенности топологии Fusion 360
Опубликовано 29.07.2015     Читать далее >>>
25/07/2015

Документы, изделия, комплектующие, вхождения, и прокси в Fusion 360

Рассматриваются особенности сущностей Fusion 360
Опубликовано 25.07.2015     Читать далее >>>
24/07/2015

Связывание атрибутов блоков с использованием DataExtraction API

Команда ДАННЫЕИЗВЛ (_EATTEXT) в AutoCAD позволяет извлекать данные, такие как тексты и атрибуты блока и показывать их в таблице. Вот пример кода, который использует DataExtraction API и создаёт таблицу, связывая её с данными.
Опубликовано 24.07.2015     Читать далее >>>
23/07/2015

Удаление меню из строки меню и из памяти

Вопрос:

Моё приложение создаёт меню и добавляет его используя IAcadPopupMenus.Add. Удаление его позднее при помощи RemoveMenuFromMenuBar или IAcadPopupMenu.RemoveFromMenuBar работает, но повторная попытка добавить тоже самое меню терпит неудачу. Почему и как это исправить?

Ответ:

Хотя пользовательское меню может быть удалено из строки меню после добавления, меню остаётся в памяти AutoCAD. Это можно проверить если сравнить значения IAcadPopupMenus.GetCount() до и после удаления меню – значение останется тем же, так как меню остаётся внутри коллекции меню. Пожалуйста проверьте демонстрационный код ниже: он добавляет 3 меню в первую группу меню. Запустите снова и код удалит одно меню, и сравните счетчик меню до и после удаления.

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