Сообщество программистов Autodesk в СНГ

ADN Club => Revit API => Тема начата: GIPPY от 14-09-2021, 17:42:20

Название: Какой командой API выполнить команду Ревита Соединить ?
Отправлено: GIPPY от 14-09-2021, 17:42:20
Всем привет !
Прошу помочь, подскажите, пожалуйста, какой командой API выполнить команду ПРИСОЕДИНИТЬ ЭЛЕМЕНТЫ ГЕОМЕТРИИ ?

Название: Re: Какой командой API выполнить команду Ревита Соединить ?
Отправлено: Александр Игнатович от 14-09-2021, 17:44:10
Если в модели (не в редакторе семейств), смотри методы JoinGeometryUtils
Название: Re: Какой командой API выполнить команду Ревита Соединить ?
Отправлено: Александр Игнатович от 14-09-2021, 17:47:23
Если в редакторе семейств, то Document.CombineElements + стоит посмотреть в сторону SolidSolidCutUtils
Название: Re: Какой командой API выполнить команду Ревита Соединить ?
Отправлено: GIPPY от 14-09-2021, 18:37:06
Да, спасибо за информацию.
Посмотрел команду JoinGeometryUtils.JoinGeometry, это то, что надо, но по параметрам в ней задается первый и второй элемент для объединения, как в ручном режиме в ревите, а как можно выполнить эту команду сразу для группы элементов, собрать их в список элементов и сразу группу соединить ?
Название: Re: Какой командой API выполнить команду Ревита Соединить ?
Отправлено: Александр Игнатович от 14-09-2021, 18:40:01
Нет, по одному
Название: Re: Какой командой API выполнить команду Ревита Соединить ?
Отправлено: GIPPY от 14-09-2021, 18:43:08
Плохо. Когда в ревите пытаешься соединить два несоприкасающихся элемента, то ревит, предупреждает об этом, не нашел в JoinGeometryUtils команду проверки соприкасаются элементы или нет, есть такая команда ?
Название: Re: Какой командой API выполнить команду Ревита Соединить ?
Отправлено: Александр Ривилис от 14-09-2021, 19:10:14
не нашел в JoinGeometryUtils команду проверки соприкасаются элементы или нет, есть такая команда ?
Наверное только вот так: https://forums.autodesk.com/t5/revit-api-forum/check-intersection-between-solid-objects/m-p/7467536#M25786
Название: Re: Какой командой API выполнить команду Ревита Соединить ?
Отправлено: GIPPY от 14-09-2021, 19:26:55
Спасибо, буду разбираться
Название: Re: Какой командой API выполнить команду Ревита Соединить ?
Отправлено: Александр Игнатович от 14-09-2021, 22:51:58
Можно попробовать с помощью Failure API отлавливать warning и разъединять обратно
Название: Re: Какой командой API выполнить команду Ревита Соединить ?
Отправлено: GIPPY от 15-09-2021, 18:51:35
Failure API - интересный вариант, только ни разу не пользовался, можно на примере как отловить ошибку в ревите или сообщение ?
Название: Re: Какой командой API выполнить команду Ревита Соединить ?
Отправлено: Александр Игнатович от 16-09-2021, 16:17:03
Например, как-то так. Определяешь препроцессор:
Код - C# [Выбрать]
  1. public class JoinsFailurePreprocessor : IFailuresPreprocessor
  2. {
  3.         public FailureProcessingResult PreprocessFailures(FailuresAccessor failuresAccessor)
  4.         {
  5.                 var joinWarningMessages = failuresAccessor
  6.                         .GetFailureMessages(FailureSeverity.Warning)
  7.                         .Where(x => x.GetFailureDefinitionId() == BuiltInFailures.JoinElementsFailures.JoiningDisjointWarn)
  8.                         .ToList();
  9.  
  10.                 foreach (var failureMessageAccessor in joinWarningMessages)
  11.                 {
  12.                         failureMessageAccessor.SetCurrentResolutionType(FailureResolutionType.DetachElements);
  13.  
  14.                         failuresAccessor.ResolveFailure(failureMessageAccessor);
  15.                 }
  16.  
  17.                 return FailureProcessingResult.ProceedWithCommit;
  18.         }
  19. }
  20.  

Используешь его как-то примерно так:
Код - C# [Выбрать]
  1. using (var transaction = new Transaction(doc, "join elements"))
  2. {
  3.         var failureHandlingOptions = transaction.GetFailureHandlingOptions();
  4.  
  5.         failureHandlingOptions.SetFailuresPreprocessor(new JoinsFailurePreprocessor());
  6.  
  7.         transaction.SetFailureHandlingOptions(failureHandlingOptions);
  8.  
  9.         transaction.Start();
  10.  
  11.         JoinGeometryUtils.JoinGeometry(doc, ...);
  12.  
  13.         transaction.Commit();
  14. }
  15.  
Название: Re: Какой командой API выполнить команду Ревита Соединить ?
Отправлено: GIPPY от 16-09-2021, 18:09:35
Спасибо, буду разбираться.