Как заставить две команды работать как одну
Когда одна команда запускает другую команду из приложения вы можете захотеть, чтобы AutoCAD воспринимал их как единую команду когда пользователь использует команду Отмени (Undo) или хочет повторить последнюю команду.Например, команда "Test1" запускает другую команду "Test2". Вы можете пожелать чтобы оба действия отменились AutoCAD’ом вместе при нажатии Ctrl+Z. Аналогично, когда вы повторяете команду нажатием клавиши Enter, вы хотите чтобы запускалась команда "Test1", а не "Test2".
Чтобы это сделать нужно «скрыть» команду "Test2" с помощью флагов "CommandFlags.NoHistory" и "CommandFlags.NoUndoMarker".
Программная имитация команды Burst
Команда "Burst" из Express Tools очень полезна при расчленении блока с атрибутами. В отличие от обычной команды Расчленить (Explode) она оставляет атрибуты неизменными при расчленении вставки блока.
Вот пример кода имитирующий команду Burst при помощи AutoCAD .Net API. Он сначала расчленяет блок и заменяет все определения атрибутов текстами (DBText).
Объект элемент в PLM360 - поля
Рассматриваются особенности полей в объектах элементов PLM360Основные понятия API Fusion
Рассматриваются особенности API FusionЭлемент в сценарии PLM360
Первый пост про самый главный объект PLM360 - элемент.Клонирование твердотельного объекта
Вопрос: Для клонирования твердотельных объектов мы использовали вот такой трюк:
static public Solid Clone( this Solid solid ){
if( solid == null )
{
return null;
}
return BooleanOperationsUtils
.ExecuteBooleanOperation( solid, solid,
BooleanOperationsType.Union );
}
С помощью этого метода мы копировали твердотельный объект и в дальнейшем использовали его для создания или редактирования объекта DirectShape. Этот способ работает замечательно в большинстве случаев. Однако на некоторых объектах DirectShape возникает исключение:
Копирование словаря расширения (ExtDictionary)
Следующий код показывает как скопировать словарь расширения одного примитива в другой примитив. Специальная логика устанавливает в конце имена словаря как у исходного примитива, так как “DeepCloneObjects” копирует их с другими именами в целевой примитив.Изоляция экземпляров семейства для дальнейшего экспорта в DWG
Проблема следующая: нужно взять оборудование, представленное в виде семейств категории Типовые модели на 3D виде и для каждого оборудования создать отдельный вид для дальнейшего экспорта в DWG.
Один из способов представлен ниже. Мы берем все экземпляры семейств типовых моделей на текущем виде, затем, соответствующие семейства. Потом создаем вид для каждого семейства создаем новый вид с названием семейства.
Список всех импортированных САПР файлов
Вы когда-нибудь беспокоились о том, есть ли у вас дубликаты импортов из САПР форматов?
Мой коллега Николай Шульга (Nikolay Shulga) из команды разработчиков Revit реализовал маленькую полезную утилиту для ответа на этот вопрос.
Вот что он пишет:
Когда-то я написал прототип приложения для вывода всех импортированных объектов в проект Revit. Идея состояла в том, чтобы вывести дублирующийся экземпляры. Люди часто импортируют одни и те же данные несколько раз.
Преобразование AcDbObjectIdArray в IAcadSelectionSet
Недавно я получил запрос от партнера ADN как передать массив ObjectID в Export COM API. Проблема заключается в том, что необходимо преобразование из C++ в COM
Прототип функции Export в COM описывается так :
Export ( /*[in]*/ BSTR FileName, /*[in]*/ BSTR Extension, /*[in]*/ struct IAcadSelectionSet * SelectionSet ) = 0;
Ей передаётся имя файла, расширение файла и IAcadSelectionSet – набор примитивов, тогда как у нас есть массив ObjectId.
Поставим перед собой цель выполнить экспорт набора примитивов в BMP-файл.
Как найти все поля (Field) в чертеже?
Словарь именованных объектов (NOD) в базе данных содержит запись “ACAD_FIELDLIST” если чертеж содержит хотя бы одно поле. Эта запись содержит записи класса “AcDbFieldList”, который к сожалению не доступен ни в ObjectARX, ни в .NET API.
Каждый объект AcDbField обычно доступен из словаря расширения (Extension Dictionary). Например, если мы создаём MText содержащий поле, мы можем получить доступ к MTextyou и посмотреть AcDbField в его ExtensionDictionary.
Чтобы получить все поля непосредственно – единственный путь получить все TypedValue (DxfCode – пары значений) из нашего AcDbFieldList, пройдя по ним по всем и отобрав все, у которых код = 330 и тип AcDbField.
Процесс проверки и тестирования приложений перед публикацией в AutodeskExchangeApps. Теория и практика.Автор: Ярослав Решетников
После того, как автор заполняет заявление на публикацию, загружает дистрибутив приложения и нажимает на кнопку «ОТПРАВИТЬ», начинается 2-ой этап публикации, в течение которого сформированное заявление и вся сопутствующая документация проходит проверку в Autodesk. Этот этап представляется многим авторам как «черный ящик», надеюсь, что данная статья ответит на ряд вопросов.
Нередко в процессе тестирования, эксперт со стороны Autodesk связывается с автором и пытается прояснить возникшие вопросы, а также указать на найденные ошибки.
Что же проверяют эксперты со стороны Autodesk?
Метод CopyElements и параметр View
Параметр View при использовании метода CopyElements, нужно использовать только в случае, если вы работает с элементами, зависимыми от конкретного вида, т.е. 2D элементами.
Это отметил Arnošt Löbel на форуме по Revit API в теме ElementTransformUtils.CopyElements из связанного документа.
Метод ScheduleDefinition.GetSchedulableFields возвращает больше полей чем в интерфейсе
Когда мы создаем спецификацию в Revit, то мы можем выбирать поля:
Соответствующий способ получить эти поля при помощи Revit API – это использование метода ViewSchedule.ScheduleDefinition.GetSchedulableFields(). Но по каким-то причинам он возвращает больше полей, чем мы видим в интерфейсе. Что за невидимые поля?
Использование ресурсной dll для CUIx с прозрачными растрами
Эту статью и пример кода любезно предоставил один из членов ADN: Michael Csikos. Спасибо Михаил!
Здесь показывается, как можно использовать ico-файлы в ресурсных dll для ваших cuix-файлов. По умолчанию, cuix-файлы принимают из dll bmp-файлы растров. Но bmp-файлы не поддерживают прозрачность, которая могла бы помочь сделать кнопки иконок намного симпатичнее в интерфейсе AutoCAD.
К сожалению этот подход нигде не документирован в документации, так что Michael раскопал следующее решение: редактирование вручную файла ресурсов (.rc) для вашей ресурсной dll позволяет добавить поддержку ico-файлов. Достаточно просто добавить новый ico-ресурс при помощи редактора Visual Studio и отредактировать свойства “ICO” ресурса в “RCDATA” как показано ниже:
Еще раз о списке элементов инженерной системыАвтор: Виктор Чекалин
Еще раз о списке элементов инженерной системы
Я уже писал о том, как можно получить список элементов инженерной системы, а также об улучшении алгоритма.
Однако, как оказалось, на реальном проекте с множеством систем и сотней тысяч элементов, данный поиск занимает ну очень много времени, так как фильтрация по значению параметра, относится к классу, так называемых медленных фильтров или низко производительных.
Управление SummaryInfo чертежа при помощи ObjectARX
Вам может понадобиться изменить свойства «Автор изменений» ("Last saved by") и «Редакция» ("Revision number"), а также другие пользовательские свойства чертежа. Класс AcDbDatabaseSummaryInfo из ObjectARX SDK вам поможет. Эквивалент в AutoCAD .Net API - структура "DatabaseSummaryInfo". Но в отличие от C++, некоторые свойства, такие как "LastSavedBy" и "RevisionNumber" только для чтения в .NET. Вы можете воспользоваться COM API для получения и установки этих свойств. Это особенно удобно в случае, когда вы управляете AutoCAD из внешнего приложения или используете VBA.
Реализация мультикопирования объектов с изюминкой
В недавнем запросе, разработчик упомянул о поведении команды _COPY в AutoCAD , которое, как я думаю, немного отличается от того, как ведут себя остальные команды. В команде _COPY, когда выбран режим мультикопирования, выбраны примитивы для копирования и после указания базовой точки AutoCAD размещает копии выбранных объектов. Но если нажать Enter, то мы как правило ожидаем прекращения команды, как и в большинстве других команд AutoCAD. Но в случае с командой _COPY , нажатие на клавишу Enter трактуется как "использовать первую точку в качестве смещения" и появляется новая копия до завершения команды.
Если вас не устраивает такое поведение, то возможно вам потребуется создать свою команду для копирования нескольких примитивов. Вот пример кода, который реализует это с помощью ObjectARX API и предоставляется в качестве Lisp-функции. Кроме того, при перетаскивании объектов позиция ограничена по оси X так же, как и координатный фильтр .YZ для родной команды _COPY.
Выравнивание MTEXT по кривой в указанной точке
На форуме Autodesk возник вопрос об автоматическом выравнивании объекта MText параллельно некоторой кривой без дополнительных запросов угла поворота.Переключение между вариантами конструкции с помощью UI Automation
Рассмотрим приложение, демонстрирующее функциональность по определению, перечислению и установки варианта конструкции с помощью самостоятельного отдельного приложения.
Приложение было создано пользователем Revitalizer. Вот его комментарии: