Получение поверхности (Face) из ReferenceIntersector
Вопрос: С помощью API мне нужно получить поверхность, которая находится на пересечении заданной точки и заданного направления. Для этого я использую класс ReferenceIntersector. Вот пример моего кода:
ReferenceIntersector refIntersector= new ReferenceIntersector( id,
FindReferenceTarget.Face, selectedView );
XYZ origin = new XYZ( x, y, z );
ReferenceWithContext refContext
= refIntersector.FindNearest(
origin, new XYZ( 0, 0, -1 ) );
Reference refObject = refContext.GetReference();
А что мне делать дальше с refObject? Как мне в итоге получить ссылку на поверхность?
Как определить присоединен ли экземпляр семейства к другому элементу
Вопрос: Есть ли какой-нибудь метод, с помощью которого можно определить, присоединен ли экземпляр семейства к чему-либо?
Я попытался с помощью RevitLookup найти что-то похожее, но так и не увидел ничего, что позволило бы это определить.
Доступ к настройкам из ленты и закрепление всплывающей панели
Вопрос: Как можно с помощью Revit API получить доступ к кнопке закрепления всплывающей панели и стрелочке, по которой открываются настройки?
Как удалить описание общего параметра
Еще один небольшой пример, демонстрирующий достоинства утилиты RevitLookup.
В данной статье покажем это на примере удаления описания общего параметра, который предоставил нам Trevor Taylor из компании ZGF.
Задача
Когда я удаляю описание общего параметра, то оно исчезает в пользовательском интерфейсе. Однако, фактически оно не удаляется из самой модели.
Определение типа электрооборудования
Вопрос: Как правильно определить различия между распределительным щитом и щитом осветительных и бытовых приборов с помощью API? Например, из базового примера проекта Revit MEP, как мне определить тип оборудования SWB и MDP-1?
Уникальность наименования и класс NamingUtils
В Revit API полно сюрпризов. Вот один из них, которых правел нас к новому вспомогательному классу, который раньше был не замеченным.
Версия документа и количество сохранений
Александр Бушман (Alexander Buschmann) из компании IDAT Ingenieurbüro für Datenverarbeitung in der Technik GmbH прокомментировал статью о том, как отследить изменение семейства:
В Revit 2015 есть класс DocumentVersion, в котором есть свойства GUID и количество сохранений файла.
Имея эту информацию можно определить, были ли сделаны изменения или нет.
Можно сохранить эту информацию в параметр только для чтения и не надо изобретать никаких велосипедов по вычисления контрольной суммы.
Обработка случая дублирования типоразмеров при копировании элементов через API
При использовании метода ElementTransformUtils.CopyElements можно получить вот такое вот предупреждение:
Обработка случая дублирования типоразмеров при копировании элементов через API
Это окно может появится, когда вы копируете тип, которого не существует в проекте, но вложенный тип уже находится в этом же проекте.
Изменение стадии вида
Вопрос: Возможно ли изменение стадии вида? Например, хотелось бы видеть свойство типа View.Phase.
Я попробовал изменить стадию, но безрезультатно.
Спасибо за помощь.
Каждая кнопа на ленте привязана только к одной команде
Вопрос: Я бы хотел реализовать только одну внешнюю команду и вызывать ее при нажатии любой из кнопок, которые я создал в своем приложении. Все дело в том, что я хочу уменьшить количество кнопок на ленте, так как некоторые из них должны быть активны только в определенный момент. Как в методе Execute я могу определить какая именно кнопка была нажата, чтобы выполнить соответствующие действия? Например, можно ли определить название кнопки, на которую нажал пользователь?
Обновление файлов семейств без отображения диалога. Часть 2
Ранее я уже предлагал советы по обновлению файлов семейств без отображения диалога, появляющегося каждый раз при загрузке семейства в проект.
Предложения были такими:
- Использовать Revit file updater, разработанный командой ADN
- Обработать событие отображения сообщений с помощью различных технологий
- Определить версию Revit, в который был сохранен файл, до начала загрузки.
Разработчик, которого интересовал этот вопрос, попытался использовать эти способы. Я хотел бы обсудить что в итоге вышло.
Преобразование ссылок на геометрию объекта в связанных файлах
В Revit API 2014 появились дополнительные методы для работы со связанными файлами. Среди них:
- Reference.LinkedElementId
- Reference.CreateLinkReference
- Reference.CreateReferenceInLink
Эти методы нужны для преобразования ссылок на объекты, который находятся в связанном файле, на ссылки, которые находятся в текущей модели.
Обновление файлов семейств без отображения диалога
Вопрос: В моей надстройке мне необходимо загрузить большое количество заранее определенных семейств в проект. Проблема в том, что некоторые из этих файлов были созданы в предыдущей версии Revit и в результате появляются всплывающие окна для каждого из таких семейств.
Есть ли способ загрузить семейства в тихом режиме, т.е. без отображения каких-либо диалогов? Я хочу, чтоб семейство все-таки обновилось, но без предупреждений. Либо чтобы это предупреждение появлялось только один раз.
Фильтрация системных семейств
Вопрос: Возможно ли создать такой фильтр, чтобы получить только системные семейства, игнорируя пользовательские? Я пробовал использовать пример, описанный в статье http://adndevblog.typepad.com/aec/2012/05/accessing-system-families-in-a-revit-template.html, однако, этот фильтр возвратил все семейства.
Работа с кодом надстройки для различных версий RevitАвтор: Виктор Чекалин
Как правило, с выпуском новой версии Revit меняется и его API – появляются новые методы, исчезают старые. Надстройка же зачастую должна работать как в новой версии, так и в старой. Разработчик должен при этом должен как-то обслуживать код для различных версий Revit.
Данная проблема возникает естественно не только с Revit, но по сути с любым другим продуктом, поэтому описанный ниже подход годится не только для Revit.
Revit 2015 Обновление 3
Вышло третье обновление для Revit 2015.
Обновление включает в себя большое количество важных улучшений из них:
- 45 – для Revit Architecture
- 18 – для Revit MEP
- 7 – для Revit Structure
- 9 – для Revit API
Извлечение полезной информации об элементе
Вопрос: Я бы хотел определить, какие элементы лежат на другом элементе.
Например, у меня есть перекрытие, которое лежит на десяти колоннах. Я бы хотел получить программно эти колонны, которые поддерживают перекрытие.
Секция конструкции
Следующий пример по созданию секции конструкции был реализован Andrzej Trelinski из команды разработчиков Revit, за что ему большое спасибо.
В примере демонстрируется, как можно программно создать секцию конструкции для балки. Интересной особенностью, является то, что метод FamilySymbol.HasStructuralSection, не смотря на свое название (имеет секцию конструкции – прим. переводчика), возвращает ИСТИНА, в том случае, если типоразмер лишь может содержать в себе секцию конструкции.
Список элементов инженерной системы. ПродолжениеАвтор: Виктор Чекалин
Ранее я рассказывал, как можно получить список всех элементов, принадлежащих инженерной системе.
Для этого я использовал значение параметра элемента Имя системы и затем сравнивал его с наименованием конкретной системы. Для этого я использовал фильтр ElementParameterFilter, позволяющий выбирать элементы по значению параметра:
FilterableValueProvider valueProvider =new ParameterValueProvider(new ElementId(BuiltInParameter.RBS_SYSTEM_NAME_PARAM));
FilterRule filterRule =
new FilterStringRule(valueProvider, new FilterStringEquals(), system.Name, true);
ElementParameterFilter systemNameParameterFilter =
new ElementParameterFilter(filterRule);
Однако, данный способ работает лишь в том случае, если элемент привязан только к одной системе.