GetGeneratingElementIds - ошибка "It is invalid to use in looking up the necess"

Автор Тема: GetGeneratingElementIds - ошибка "It is invalid to use in looking up the necess"  (Прочитано 1899 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Александр Пекшев aka ModisАвтор темы

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Всем привет. У элементов существует метод GetGeneratingElementIds, который позволяет получить идентификаторы элементов, которые являются генераторами для проверяемого геометрического объекта.
Имеется вот такой код:
Код - C# [Выбрать]
  1. private void CheckInserts(Element element, Options options, ICollection<Element> checkedElements)
  2. {
  3.     try
  4.     {
  5.         if (element is HostObject hostObject)
  6.         {
  7.             var inserts = hostObject.FindInserts(true, true, true, true).ToList();
  8.             inserts.ForEach(insertId =>
  9.             {
  10.                 var insertElement = element.Document.GetElement(insertId);
  11.                 var stop = false;
  12.                 var geometryElement = hostObject.get_Geometry(options);
  13.                 if (geometryElement != null)
  14.                 {
  15.                     foreach (GeometryObject geometryObject in geometryElement)
  16.                     {
  17.                         if (stop)
  18.                             break;
  19.                         if (geometryObject is Solid solid)
  20.                         {
  21.                             foreach (Face face in solid.Faces)
  22.                             {
  23.                                 try
  24.                                 {
  25.                                     if (hostObject.GetGeneratingElementIds(face).Any(x => x == insertId))
  26.                                     {
  27.                                         if (checkedElements.All(x => x.Id != insertId))
  28.                                         {
  29.                                             checkedElements.Add(insertElement);
  30.                                             stop = true;
  31.                                             break;
  32.                                         }
  33.                                     }
  34.                                 }
  35.                                 catch (Exception exception)
  36.                                 {
  37.                                     // может возникать неясная ошибка в методе GetGeneratingElementIds (в справке не описана)
  38.                                     Debug.Print(exception.Message + Environment.NewLine + exception.StackTrace);
  39.                                 }
  40.                             }
  41.                         }
  42.                     }
  43.                 }
  44.             });
  45.         }
  46.     }
  47.     catch (Exception exception)
  48.     {
  49.         _loginAction($"При поиске вхождений элемента {element.Id.IntegerValue} произошла ошибка: {exception.Message}");
  50.     }
  51. }

И вот метод GetGeneratingElementIds может кидать такую ошибку
Цитировать
It is invalid to use in looking up the necessary information.
Если проверяемых элементов не много, то особо не страшно - ошибка "проглатывается", да и ладно. Но когда таких элементов десятки тысяч, то постоянное срабатывание try{} catch{} становится очень затратным.

Есть ли какой-либо способ проверить геометрический (GeometryObject) заранее, чтобы не отправлять его в метод GetGeneratingElementIds? При отладке по свойствам не заметил разницы у граней (face), которые выдавали ошибку и граней, которые не выдавали ошибку

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Пример модельки и где смотреть приложить сможете?

Оффлайн Александр Пекшев aka ModisАвтор темы

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Пример модельки и где смотреть приложить сможете?
Хотел сделать файл для тестов, взяв элементы из рабочего проекта и выяснил, что ошибка возникает не во всех файлах. Буду в течении дня проверять на всех проектах, которые придется проверять и тогда сделаю файлик

Отмечено как Решение Александр Пекшев aka Modis 20-08-2019, 11:07:20

Оффлайн Александр Пекшев aka ModisАвтор темы

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Как оказалось, причина возникновения этой ошибки кроется в Options, а конкретно в свойстве IncludeNonVisibleObjects - если его установить в значение true, то эти самые невидимые геометрические объекты тоже будут пытаться обрабатываться и выдавать такую ошибку

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Хм. Окей, будем иметь ввиду, спасибо.