Создание цветовой области, похожей на область маскировки
Вопрос: Как можно программно создать область маскировки?
Ответ: К сожалению, в текущей версии API этого сделать нельзя.
Но есть и хорошая новость. В Revit 2013 API добавилась возможность создавать цветовую область.
Переменные окружения
Предлагаю поговорить насчет такой простой и элементарной вещи, как функция getenv. Достаточно простая функция, но у нее есть свои особенности. Если мы работаем внутри AutoCAD, то все переменные окружения (т.н. Environment Variables) можно поделить на 2 классаВыбор определенных примитивов из набора предварительного выбора
Системная переменная 'PICKFIRST' будучи установленной в '1' позволяет пользователю выбрать примитивы до запуска команды AutoCAD. Это применимо и к командам, созданным при помощи ObjectARX.
Есть две ARX-функции, которые позволяют получить набор предварительного выбора. Это функция acedSSGet() с опцией "_I", и чаще используемая функция acedSSGetFirst(). Это демонстрирует следующий код. Имя команды 'pfss'.
Если пользователь предварительно выберет примитивы и запустит команду 'pfss', эти примитивы попадут в набор 'pfSet'. Проверим , что число элементов в наборе больше нуля и если это так, то выполним цикл 'for'. В цикле 'for' получаем ObjectId каждого примитива и открываем примитив «для чтения». Проверяем примитив при помощи функции 'isA()'. Вы можете аналогично проверить и пользовательские примитивы если замените имя на имя пользовательского класса.
Лёгкое программирование под Autodesk Vault. Часть 1Автор: Дмитрий Емельянов
Предлагается ознакомиться с логикой общения с сервером Vault, создавая лаконичные программы на языке PowerShell, которые в дальнейшем могут быть использованы при администрировании сервера.
Как получить экземпляры семейств в заданном помещении
Работая над одной из своих задач мне понадобилось определить границы объектов, представляющих собой мебель и оборудование, для последующей манипуляции с ними на мобильном устройстве.
Перед тем как начать работать непосредственно с геометрией, нужно получить сами объекты, т.е. найти какие же экземпляры семейств находятся в выбранной комнате.
Как и всегда, для доступа к элементам из базы данных Revit воспользуемся классом FilteredElementCollector.
Vault API: Получение информации о сервере Vault
Вопрос: Пожалуйста, посоветуйте способ получения информации о версии Vault и какой-либо прочей информации посредством программирования.
Как определить направление вращения замкнутой полилинии?
Чтобы определить направление вращения полилинии по часовой или против часовой стрелки можно пройтись по всем сегментам полилинии и проверить лежит ли он справа или слева. Следующий код делает именно это. Он подсчитывает сумму числа поворотов для всех сегментов. Повороты возможны внутри сегментов (если они дуговые) или между последовательными сегментами. Результат работы функции – число поворотов. Если поворот налево – число положительное, если поворот направо – отрицательное. Заметим, что алгоритм не определяет, является ли полилиния самопересекающейся и может даже давать ошибочные результаты если полилиния действительно самопересекающаяся.
Изменение рабочего набора элемента
Мы уже обсуждали как можно получить текущий рабочий набор у отдельного элемента либо с помощью встроенного параметра ELEM_PARTITION_PARAM, или более легким способом с помощью метода Document.GetWorksetId.
Это еще один пример того, что одно и тоже свойство можно получить как с помощью параметра элемента, так и с помощью отдельного метода или свойства, помимо того, что мы недавно обсуждали в статье Изменение типа Видового экрана.
Однако хоть Revit API и содержит отдельное свойство для определения рабочего набора элемента, отдельного метода для изменения рабочего набора нет.
Простая альтернатива использованию COM-объекта Preferences в AutoCAD
Недавно один из разработчиков столкнулся с проблемой при написании кода на LISP, когда он пытался добавить несколько путей к свойству PrinterStyleSheetPath. Код выглядел примерно так:Vault API: Пользователи и роли, часть 3
Вопрос: Существует ли способ программно добавить пользователей в сервер Vault?
Облачные API для PLM 360
Отличается ли использование облачного API от использования любого другого клиент-серверного API?
Особенности API REST PLM 360
Итак, есть API для PLM 360. Что же мы можем с ним делать? Как он отличается от языка сценариев? Более того, что всё -таки значит «REST»?
Vault API: Пользователи и роли, часть 2
Вопрос: Как получить список ролей из сервера хранилища?
Группировка заголовков спецификации
Вопрос: Я пытаюсь сгруппировать заголовки спецификации с помощью метода ViewSchedule.GroupHeaders, но все время выскакивает ошибка: "Headers could not be grouped. Parameter name: right" (Заголовки не могут быть сгруппированы. Имя параметра: right)
Ответ: Действительно. Такая проблема существует. Мы уже обсуждали ее в прошлом и предлагали некоторые решения.
Передача списка значений в ObjectARX из Lisp приводит к ошибке
Вопрос:
Передача списка значений в ObjectARX-функцию из Lisp приводит к ошибкам в том случае, когда некоторые значения чисел (Пример: 5011, 25111) являются частью списка. Как этого избежать?
Ответ:
Некоторые числовые значения интерпретируются как DXF-коды, что и приводит к исключениям.
Vault API: Пользователи и роли, часть 1
Вопрос: Я хотел бы получить список пользователей, зарегистрированных на сервере хранилища. Не могли бы вы предоставить пример приложения для решения этой задачи, пожалуйста?
Получение копий сложных объектов без помещения их в базу
Используя ObjectARX вы можете создать копию одиночного простого объекта без помещения в базу при помощи методов clone() или copyFrom(). Но эти два метода не работают со сложными объектами, такими как AcDbBlockReference (вставка блока) с AcDbAttribute (атрибут). Как описано в документации, метод clone() вызывает метод copyFrom(), который делает поверхностную копию объекта. Другими словами, эти методы не копируют объекты атрибутов (AcDbAttribute). И не существует прямого метода в ObjectARX чтобы получить полную копию сложного объекта.
Как сделать невидимое определение атрибута в блоке видимым
Следующий код делает невидимые определения атрибутов в блоке видимыми, а также обновляет все вставки этого блока для того, чтобы отразить изменения в определении блока.Определения API PLM 360
Когда заходит речь о особенностях настройки или API, прежде всего эти особенности следует разбивать на трёх ключевых направления: поддерживаемые, неподдерживаемые и запрещенные. Позвольте объяснить, что это значит и как они относятся к API PLM 360.
Локализация общих параметров
Создавая приложения и add-in'ы, необходимо помнить, что их могут использовать на компьютере с языком интерфейса отличным от вашего. Или в Revit c другим языком интерфейса.
Очевидно, что приложение, которое корректно работает вне зависимости от языка интерфейса, гораздо легче реализовать и обслуживать, когда используемое API или фреймворк содержит методы для работы в различной языковой среде.
Revit API поддерживает создание таких надстроек. Яркий пример – использование, к примеру, перечисления BuiltInParameters и BuiltInCategories, вместо использования локализованных названий параметров и категорий, для работы со встроенными в Revit параметрами и категориями.