Как создать общие координаты?

Автор Тема: Как создать общие координаты?  (Прочитано 2087 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн HughАвтор темы

  • ADN OPEN
  • Сообщений: 12
  • Карма: 0
Добрый день. Никак не могу справиться сам, прошу помочь.
Есть проект, к нему добавлен связанный файл и вставлен один экземпляр этого связанного файла (это всё получилось сделать через API).
В свойствах экземпляра есть такое:
"Общая площадка": <не общедоступное>,
причём <не общедоступное> - это кнопка. Если на неё нажать, появляется диалоговое окно "Создание общих координат" с кнопкой "Согласовать". Я нажимаю "Согласовать" и в свойствах экземпляра становится так:
"Общая площадка": <Встроенный>

Как добиться того же результата с помощью API?
Вроде бы в Revit 2018 появился нужный метод, но у меня Revit 2017.


Отмечено как Решение Александр Ривилис 19-04-2018, 13:11:15

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Как создать общие координаты?
« Ответ #1 : 10-04-2018, 10:44:27 »
День добрый. К сожалению, доступными средствами API в Revit 2017 проблему не решить  :( и да, Вы совершенно правы, в Revit 2018 появился метод Document.PublishCoordinates. Вот пример использования:
Код - C# [Выбрать]
  1. [Transaction(TransactionMode.Manual)]
  2. public class PublishCoordinatesCommand : IExternalCommand
  3. {
  4.         public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
  5.         {
  6.                 var uiapp = commandData.Application;
  7.                 var uidoc = uiapp.ActiveUIDocument;
  8.                 var doc = uidoc.Document;
  9.  
  10.                 var linkInstance = uidoc
  11.                         .Selection
  12.                         .GetElementIds()
  13.                         .Select(doc.GetElement)
  14.                         .OfType<RevitLinkInstance>()
  15.                         .FirstOrDefault();
  16.                
  17.                 if (linkInstance == null)
  18.                         return Result.Cancelled;
  19.  
  20.                 var sharedSiteId = new LinkElementId(linkInstance.Id, FindProjectLocation(linkInstance.GetLinkDocument()));
  21.  
  22.                 using (var transaction = new Transaction(doc, "publish coordinates"))
  23.                 {
  24.                         transaction.Start();
  25.  
  26.                         doc.PublishCoordinates(sharedSiteId);
  27.  
  28.                         transaction.Commit();
  29.                 }
  30.                
  31.                
  32.                 return Result.Succeeded;
  33.         }
  34.  
  35.         private static ElementId FindProjectLocation(Document document)
  36.         {
  37.                 var collector = new FilteredElementCollector(document);
  38.  
  39.                 return collector
  40.                         .OfClass(typeof (ProjectLocation))
  41.                         .FirstElementId();
  42.         }
  43. }
  44.  

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