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

27/12/2013

API для работы с семействами. Создание типоразмеров. Выделение и изменение экземпляров семейства

Добро пожаловать во втроую часть подробного обсуждения API для работы с семействами.

Основная функциональность работы с семействами была представлена Стивеном Кэмпбелом (Steven Campbell) в его докладе Ключевые концепции при работе с семействами на Revit DevCamp в Москве. Первую часть статей по работе с семействами можете прочитать здесь.

Будет еще и третяя заключительная часть, которую мы рассмотрим чуть позднее.

Опубликовано 27.12.2013     Читать далее >>>
25/12/2013

Очистка набора предварительного выбора

Вы можете использовать метод “Editor.SetImpliedSelection” для очистки набора предварительного выбора. Код ниже получает список всех предварительно выбранных примитивов, а затем очищает его передавая пустой массив ObjectId в метод SetImpliedSelection.

Опубликовано 25.12.2013     Читать далее >>>
25/12/2013

Работа с семействами. Загрузка семейства и вставка экземпляра семейства

Начнем небольшую серию статей о работе с семействами и с редактором семейств с помощью Revit API.

Рассмотрим два главных аспекта работы с семействами с точки зрения программиста:

  1. Создание семейства. Т.е. работа с редактором семейства.
  2. Использование семейства. В большинстве случаев используются в файле проекта.

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

Опубликовано 25.12.2013     Читать далее >>>
23/12/2013

Добавление и удаление примитивов из набора предварительного выбора в ObjectARX

Вы можете воспользоваться функцией “acedSSSetFirst” для создания набора (с «ручками») предварительного выбора. Ниже пример команды, которая запрашивает выбор примитивов и помещает их в набор предварительного выбора. Код также показывает окно сообщений, и как только нажимаете «Да», набор удаляется из набора предварительного выбора. Заметим, что команда позволяющая выбирать и устанавливать набор предварительного выбора должна иметь флаги ACRX_CMD_USEPICKSET и ACRX_CMD_REDRAW

Опубликовано 23.12.2013     Читать далее >>>
21/12/2013

Editor.SelectAll с фильтром выбора примитивов и слоёв

При использовании метода “Editor.SelectAll” можно создать фильтр выбора для отсеивания ненужных примитивов. Код ниже показывает как можно отфильтровать Отрезки и Круги, которые находятся только на определённых слоях (0, Layer1, Layer2).

Опубликовано 21.12.2013     Читать далее >>>
20/12/2013

Получение информации из прокси-примитивов

Вы можете воспользоваться классом “AcDbProxyEntity” для получения оригинального имени класса, оригинального dxf-имени и числа ссылок на этот примитив в файле чертежа.

Ниже код, который получает “originalClassName” и “originalDxfName” прокси-примитива.

Опубликовано 20.12.2013     Читать далее >>>
20/12/2013

Определение типа общего параметра

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

Опубликовано 20.12.2013     Читать далее >>>
19/12/2013

Перечисление доступных пользователю Autodesk Vault хранилищ расширением в Vault Explorer

Заказчик хочет узнать как получить доступные хранилища для пользовательской группы из расширения для Vault Explorer при помощи API.

Опубликовано 19.12.2013     Читать далее >>>
18/12/2013

Удаление всех прокси-примитивов из чертежа средствами ObjectARX

Вопрос:

Я хочу работать с чертежом, содержащем пользовательские объекты, для которых у меня нет соответствующего приложения. Я бы хотел использовать данные из чертежа для построения новой «геометрии». Какие-то примитивы можно расчленить, а какие-то нет. И они отмечены как неудаляемые. Я создаю эквивалент для этих примитивов, а вот удалить их не могу. Возможно ли их удалить?

Ответ
Средствами ObjectARX можно заменить прокси-примитивы на какие-то другие. Следующий код делает именно это: проходит по всем примитивам чертежа, переключая все прокси-примитивы на анонимные блоки. Блоки содержат эквивалентную геометрию прокси-примитивов. Заметим, что нельзя создать примитив содержащий ту же информацию, что и исходный примитив.

Опубликовано 18.12.2013     Читать далее >>>
16/12/2013

Расчленение всех примитивов из набора

Ниже код для расчленения всех примитивов из набора. Мы используем метод explode() класса AcDbEntity class и результат расчленения сохраняется в массиве AcDbVoidPtrArray. Все примитивы из AcDbVo

Опубликовано 16.12.2013     Читать далее >>>
13/12/2013

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

Вопрос :

У меня есть набор предварительного выбора и я хотел бы получить его копию сразу и целиком, а не копировать последовательно каждый примитив из набора при помощи вызова функции acedCommand (RTSTR, "_copy",..). Есть ли возможность вызвать однократно acedCommand (RTSTR, "_copy",..) для всего набора, как это делает AutoCAD?

Ответ :
Вы можете использовать набор, передав RTPICKS и набор в функцию acedCommand:

Опубликовано 13.12.2013     Читать далее >>>
13/12/2013

Создание цветовой области, похожей на область маскировки

Вопрос: Как можно программно создать область маскировки?

Ответ: К сожалению, в текущей версии API этого сделать нельзя.

Но есть и хорошая новость. В Revit 2013 API добавилась возможность создавать цветовую область.

Опубликовано 13.12.2013     Читать далее >>>
12/12/2013

Переменные окружения

Предлагаю поговорить насчет такой простой и элементарной вещи, как функция getenv. Достаточно простая функция, но у нее есть свои особенности. Если мы работаем внутри AutoCAD, то все переменные окружения (т.н. Environment Variables) можно поделить на 2 класса
Опубликовано 12.12.2013     Читать далее >>>
11/12/2013

Выбор определенных примитивов из набора предварительного выбора

Системная переменная 'PICKFIRST' будучи установленной в '1' позволяет пользователю выбрать примитивы до запуска команды AutoCAD. Это применимо и к командам, созданным при помощи ObjectARX.

Есть две ARX-функции, которые позволяют получить набор предварительного выбора. Это функция acedSSGet() с опцией "_I", и чаще используемая функция acedSSGetFirst(). Это демонстрирует следующий код. Имя команды 'pfss'.

Если пользователь предварительно выберет примитивы и запустит команду 'pfss', эти примитивы попадут в набор 'pfSet'. Проверим , что число элементов в наборе больше нуля и если это так, то выполним цикл 'for'. В цикле 'for' получаем ObjectId каждого примитива и открываем примитив «для чтения». Проверяем примитив при помощи функции 'isA()'. Вы можете аналогично проверить и пользовательские примитивы если замените имя на имя пользовательского класса.

Опубликовано 11.12.2013     Читать далее >>>
10/12/2013

Лёгкое программирование под Autodesk Vault. Часть 1Автор: Дмитрий Емельянов

Предлагается ознакомиться с логикой общения с сервером Vault, создавая лаконичные программы на языке PowerShell, которые в дальнейшем могут быть использованы при администрировании сервера.

Опубликовано 10.12.2013     Читать далее >>>
10/12/2013

Как получить экземпляры семейств в заданном помещении

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

Перед тем как начать работать непосредственно с геометрией, нужно получить сами объекты, т.е. найти какие же экземпляры семейств находятся в выбранной комнате.

Как и всегда, для доступа к элементам из базы данных Revit воспользуемся классом FilteredElementCollector.

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

Vault API: Получение информации о сервере Vault

Вопрос: Пожалуйста, посоветуйте способ получения информации о версии Vault и какой-либо прочей информации посредством программирования.

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

Как определить направление вращения замкнутой полилинии?

Чтобы определить направление вращения полилинии по часовой или против часовой стрелки можно пройтись по всем сегментам полилинии и проверить лежит ли он справа или слева. Следующий код делает именно это. Он подсчитывает сумму числа поворотов для всех сегментов. Повороты возможны внутри сегментов (если они дуговые) или между последовательными сегментами. Результат работы функции – число поворотов. Если поворот налево – число положительное, если поворот направо – отрицательное. Заметим, что алгоритм не определяет, является ли полилиния самопересекающейся и может даже давать ошибочные результаты если полилиния действительно самопересекающаяся.

Опубликовано 09.12.2013     Читать далее >>>
07/12/2013

Изменение рабочего набора элемента

Мы уже обсуждали как можно получить текущий рабочий набор у отдельного элемента либо с помощью встроенного параметра ELEM_PARTITION_PARAM, или более легким способом с помощью метода Document.GetWorksetId.

 

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

Однако хоть Revit API и содержит отдельное свойство для определения рабочего набора элемента, отдельного метода для изменения рабочего набора нет.

Опубликовано 07.12.2013     Читать далее >>>
06/12/2013

Простая альтернатива использованию COM-объекта Preferences в AutoCAD

Недавно один из разработчиков столкнулся с проблемой при написании кода на LISP, когда он пытался добавить несколько путей к свойству PrinterStyleSheetPath. Код выглядел примерно так:
Опубликовано 06.12.2013     Читать далее >>>