Обработка ошибки при создании не валидного элемента с помощью Failure API
Мы уже ранее обсуждали примеры использования Failure API:
Вот еще одна немного запутанная ситуация, заставляющая нас снова вернуться к обсуждению этой темы с другого ракурса. Проблему озвучил Стефен Фауст (Stephen Faust) из компании Revolution Design, Inc.
Удаление неиспользуемых опорных плоскостей
Как-то во время проведения тренинга по Revit API, участники тренинга придумали вопрос, решение которого можно использовать для демонстрации использования FilteredElementCollector. В результате получилось вполне полезная команда. Необходимо было удалить все опорные плоскости, которые не содержат ни одного элемента. Так я создал команду DeleteUnnamedNonHostingReferencePlanes.
Команда удаляет из проекта все опорные плоскости, которые не имеют названия и не содержат ни одного элемента.
Настройки видимости с использованием параметра GEOM_VISIBILITY_PARAM
В статье обсуждается полезный и интересный пример с форума Revit API, в котором принимали участие Remy van den Bor из компании ICN Solutions, Rudolf Honke из Mensch und Maschine acadGraph, а также Joe Ye и команда разработчиков Revit. В теме обсуждалось как можно задать настройки видимости элемента в редакторе семейств.
Легкое создание кнопок на ленте для вызова внешних командАвтор: Виктор Чекалин
Создавая собственную внешнюю команду в интерфейсе Revit ее можно вызвать двумя способами:
Описать внешнюю команду в файле манифеста addin
<?xml version="1.0" encoding="utf-8"?><RevitAddIns>
<AddIn Type="Command">
<Text>Command PipeCreation</Text>
<Description>Some description for PipeCreation</Description>
<Assembly>PipeCreation.dll</Assembly>
<FullClassName>PipeCreation.Command</FullClassName>
<ClientId>da5307a6-0182-4f28-8387-dd0de47446ec</ClientId>
<VendorId>ADNCIS</VendorId>
<VendorDescription>http://adn-cis.org </VendorDescription>
</AddIn>
</RevitAddIns>
В этом случае Revit автоматически добавит команду в раскрывающийся список Внешние инструменты на вкладке Надстройки
Создание трубы с помощью метода Pipe.CreateАвтор: Виктор Чекалин
В статье создание наклонного сегмента между двумя трубами Джереми столкнулся с проблемой создания трубы с помощью метода Pipe.Create.
Статический метод Pipe.Create появился в Revit API 2014 на замену методу Document.Create.NewPipe.
Метод принимает следующие параметры:
- document. Проект, в котором нужно создать трубу.
- systemTypeId. Идентификатор типа системы.
- pipeTypeId. Идентификатор типа трубы.
- levelId. Идентификатор уровня, на котором нужно создать трубу.
- firstPoint. Координаты начала трубы
- secondPoint. Координаты окончания трубы.
Простое создание наклонного сегмента трубопровода с отводами
Продолжу свою работу по созданию наклонного сегмента трубопровода. Мы рассмотрели уже следующие темы, связанные с этой задачей: вычисление длины наклонного сегмента, создание трубы, соединение всех труб в одну систему, а также собственную реализацию программного создание отводов.
Явное создание отводов при создании наклонного сегмента трубопровода
Продолжаем усовершенствовать создание наклонного сегмента трубопровода. Мы уже научились вычислять длину наклонного сегмента, создавать трубу, и также присоединять все элементы трубопровода в одну систему.
В завершении рассмотрим создание и вставку соответствующих фитингов.
Присоединение наклонного сегмента трубопровода к соседним трубам
Статья является продолжением предыдущих моих статей по вычислению наклонного сегмента между двумя трубами и созданию наклонного сегмента.
Следующий шаг состоит в том, что нужно корректно соединить все трубы в единую систему.
До сих пор я предполагал, что просто соединив трубы друг с другом, Revit автоматически создаст соответствующие фитинги.
К сожалению, мое предположение было ошибочным.
Создание наклонного сегмента между двумя трубами
Недавно я рассказывал о своем небольшим проекте по вычислению наклонного сегмента между двумя трубами.
Сразу же возникает очевидный вопрос: «отлично. Но только как же теперь вставить реальный сегмент трубы, вместо того, чтобы просто отобразить линию, отображающую результат расчета сегмента?».
Расчет длины наклонного сегмента между двумя трубами
В посте мы обсудим интересную команду, связанную с MEP, которую я реализовал для вычисления наклонного сегмента на хакатоне CASE BIM на AU по предложению Гарри Маттисона (Harry Mattison) и Мэтью Нельсона (Matthew Nelson).
Команда вычисляет длину сегмента между двумя выбранными трубами и создает видимую линию в модели, для визуализации результата.
Как получить ссылку (Reference) центра дуги
Вопрос: Как можно получить доступ к ссылке на центр дуги?
Работая с выдавливанием в файле семейства, можно получить доступ к его эскизу и геометрии каждого элемента выдавливания, например, с помощью вот такого кода на Managed C++:
Extrusion ^ext = createExtrusion(...)CurveArrArray ^sketchCvArrArr = ext->Sketch->Profile;
for each( CurveArray ^oneCvLoop in sketchCvArrArr )
{
for each( Curve ^oneSketchCv in oneCvLoop )
{
// ...
}
}
Доступ к определениям общих параметров проектаАвтор: Виктор Чекалин
Работая со статьей Определение типа общего параметра я вспомнил об одной проблемке, с которой я сам сталкивался при работе с общими параметрами проекта.
Мне нужно было определить, есть ли в проекте общий параметр с определенным GUID или именем и в случае если такой есть в проекте, то удалить его из списка общих параметров проекта. Предпочтительней конечно по GUID, так как параметров с одинаковым именем может быть несколько.
API для работы с семействами. Типоразмеры вложенного семейства, поиск типоразмеров и экземпляров семейства
Приветствую вас в третьей, заключительно части серии статей посвященных API для работы с семействами в проекте.
В последней части мы рассмотрим следующие темы:
- Поиск определенных типоразмеров в проекте
- Поиск определенных экземпляров конкретного семейства
- Отображение типоразмеров семейства Дверь
- Изменение типоразмера вложенного семейства.
API для работы с семействами. Создание типоразмеров. Выделение и изменение экземпляров семейства
Добро пожаловать во втроую часть подробного обсуждения API для работы с семействами.
Основная функциональность работы с семействами была представлена Стивеном Кэмпбелом (Steven Campbell) в его докладе Ключевые концепции при работе с семействами на Revit DevCamp в Москве. Первую часть статей по работе с семействами можете прочитать здесь.
Будет еще и третяя заключительная часть, которую мы рассмотрим чуть позднее.
Работа с семействами. Загрузка семейства и вставка экземпляра семейства
Начнем небольшую серию статей о работе с семействами и с редактором семейств с помощью Revit API.
Рассмотрим два главных аспекта работы с семействами с точки зрения программиста:
- Создание семейства. Т.е. работа с редактором семейства.
- Использование семейства. В большинстве случаев используются в файле проекта.
Однако вставить семейство можно не только в проект, но и также в другое семейство. Поэтому второй аспект может рассматриваться, как и в контексте файла проекта так и в контексте редактора семейств. В него входят такие задачи как загрузка семейства, вставка экземпляра семейства, работа с типоразмерами и с существующими экземплярами семейств.
Определение типа общего параметра
В статье обсудим вопрос, который задали мне недавно, но его мы также обсуждали и ранее, о том как определить является ли параметр, из списка всех общих параметров проекта, параметром Типа или Экземпляра.
Создание цветовой области, похожей на область маскировки
Вопрос: Как можно программно создать область маскировки?
Ответ: К сожалению, в текущей версии API этого сделать нельзя.
Но есть и хорошая новость. В Revit 2013 API добавилась возможность создавать цветовую область.
Как получить экземпляры семейств в заданном помещении
Работая над одной из своих задач мне понадобилось определить границы объектов, представляющих собой мебель и оборудование, для последующей манипуляции с ними на мобильном устройстве.
Перед тем как начать работать непосредственно с геометрией, нужно получить сами объекты, т.е. найти какие же экземпляры семейств находятся в выбранной комнате.
Как и всегда, для доступа к элементам из базы данных Revit воспользуемся классом FilteredElementCollector.
Изменение рабочего набора элемента
Мы уже обсуждали как можно получить текущий рабочий набор у отдельного элемента либо с помощью встроенного параметра ELEM_PARTITION_PARAM, или более легким способом с помощью метода Document.GetWorksetId.
Это еще один пример того, что одно и тоже свойство можно получить как с помощью параметра элемента, так и с помощью отдельного метода или свойства, помимо того, что мы недавно обсуждали в статье Изменение типа Видового экрана.
Однако хоть Revit API и содержит отдельное свойство для определения рабочего набора элемента, отдельного метода для изменения рабочего набора нет.
Группировка заголовков спецификации
Вопрос: Я пытаюсь сгруппировать заголовки спецификации с помощью метода ViewSchedule.GroupHeaders, но все время выскакивает ошибка: "Headers could not be grouped. Parameter name: right" (Заголовки не могут быть сгруппированы. Имя параметра: right)
Ответ: Действительно. Такая проблема существует. Мы уже обсуждали ее в прошлом и предлагали некоторые решения.