Какой командой API выполнить команду Ревита Соединить ?

Автор Тема: Какой командой API выполнить команду Ревита Соединить ?  (Прочитано 3221 раз)

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

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

  • ADN OPEN
  • **
  • Сообщений: 65
  • Карма: 0
Всем привет !
Прошу помочь, подскажите, пожалуйста, какой командой API выполнить команду ПРИСОЕДИНИТЬ ЭЛЕМЕНТЫ ГЕОМЕТРИИ ?


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

  • Administrator
  • *****
  • Сообщений: 1091
  • Карма: 322
  • Skype: alexandr.ignatovich.itc
Если в модели (не в редакторе семейств), смотри методы JoinGeometryUtils

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

  • Administrator
  • *****
  • Сообщений: 1091
  • Карма: 322
  • Skype: alexandr.ignatovich.itc
Если в редакторе семейств, то Document.CombineElements + стоит посмотреть в сторону SolidSolidCutUtils

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

  • ADN OPEN
  • **
  • Сообщений: 65
  • Карма: 0
Да, спасибо за информацию.
Посмотрел команду JoinGeometryUtils.JoinGeometry, это то, что надо, но по параметрам в ней задается первый и второй элемент для объединения, как в ручном режиме в ревите, а как можно выполнить эту команду сразу для группы элементов, собрать их в список элементов и сразу группу соединить ?

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

  • Administrator
  • *****
  • Сообщений: 1091
  • Карма: 322
  • Skype: alexandr.ignatovich.itc
Нет, по одному

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

  • ADN OPEN
  • **
  • Сообщений: 65
  • Карма: 0
Плохо. Когда в ревите пытаешься соединить два несоприкасающихся элемента, то ревит, предупреждает об этом, не нашел в JoinGeometryUtils команду проверки соприкасаются элементы или нет, есть такая команда ?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13064
  • Карма: 1684
  • Рыцарь ObjectARX
  • Skype: rivilis
не нашел в JoinGeometryUtils команду проверки соприкасаются элементы или нет, есть такая команда ?
Наверное только вот так: https://forums.autodesk.com/t5/revit-api-forum/check-intersection-between-solid-objects/m-p/7467536#M25786
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 65
  • Карма: 0
Спасибо, буду разбираться

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

  • Administrator
  • *****
  • Сообщений: 1091
  • Карма: 322
  • Skype: alexandr.ignatovich.itc
Можно попробовать с помощью Failure API отлавливать warning и разъединять обратно

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

  • ADN OPEN
  • **
  • Сообщений: 65
  • Карма: 0
Failure API - интересный вариант, только ни разу не пользовался, можно на примере как отловить ошибку в ревите или сообщение ?

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

  • Administrator
  • *****
  • Сообщений: 1091
  • Карма: 322
  • Skype: alexandr.ignatovich.itc
Например, как-то так. Определяешь препроцессор:
Код - 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.  

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

  • ADN OPEN
  • **
  • Сообщений: 65
  • Карма: 0
Спасибо, буду разбираться.