Пример использования метода PostRequestForElementTypePlacement
Метод NewFamilyInstance предоставляет возможность программно создать новый экземпляр семейства в проекте или вложенный экземпляр семейства в редакторе семейств.
Но он совсем не поддерживает какие-либо взаимодействие с пользователем.
Небольшое взаимодействие с пользователем появилось в методе PromptForFamilyInstancePlacement, который был представлен в Revit 2011 API.
По крайней мере он показывает пред просмотр экземпляра семейства и предлагает пользователю выбрать месторасположение экземпляра.
Множество примеров использования этого метода было уже представлено. Последний из них - Прерывание вставки экземпляра семейства.
Однако, этот метод не предлагает все возможные варианты взаимодействия с пользователем, доступные при ручной вставке семейства в пользовательском интерфейсе.
В Revit 2015 API был представлен новый метод – PostRequestForElementTypePlacement. Метод предоставляет полный доступ взаимодействия с пользователем.
Еще одно интересное обсуждение на форуме Revit API – параметр изменение месторасположения элемента для метода PromptForFamilyInstancePlacement – также содержит пример кода по использованию метода PostRequestForElementTypePlacement.
Использование метода очень простое, так как надстройка просит Revit сделать всю работу без участия API.
Все что нужно – это передать ElementType того элемента, который вы хотите вставить в интерфейс:
- [Transaction( TransactionMode.Manual )]
- class CmdPostRequestInstancePlacement : IExternalCommand
- {
- public Result Execute(
- ExternalCommandData commandData,
- ref string message,
- ElementSet elements )
- {
- UIApplication uiapp = commandData.Application;
- UIDocument uidoc = uiapp.ActiveUIDocument;
- Document doc = uidoc.Document;
- ElementType elementType
- = new FilteredElementCollector( doc )
- .OfCategory( BuiltInCategory.OST_Walls )
- .OfClass( typeof( ElementType ) )
- .FirstElement() as ElementType;
- uidoc.PostRequestForElementTypePlacement(
- elementType );
- return Result.Succeeded;
- }
- }
Вызов метода не нужно заключать в транзакцию.
Однако, если вы попытаетесь вызвать этот метод в команде, помеченной атрибутом [Transaction(TransactionMode.ReadOnly)], то получите исключение:
Я реализовал этот пример в примерах The Building Coder. Команда CmdPostRequestInstancePlacement.
Источник: http://thebuildingcoder.typepad.com/blog/2015/03/postrequestforelementtypeplacement.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=1918
Опубликовано 10.03.2015