Исключение eGeneralModelingFailure

Автор Тема: Исключение eGeneralModelingFailure  (Прочитано 2263 раз)

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

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

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

  • ADN Club
  • ***
  • Сообщений: 127
  • Карма: 1
Исключение eGeneralModelingFailure
« : 24-07-2020, 19:35:09 »
Ситуация следующая:
Мне нужно получить Region путем пересечения Solid3d с плосокостью, а затем из Region экструдированием получить Solid3d.
Вот код:
Код - C# [Выбрать]
  1.  Db.Region acRegion = acSol3D.GetSection(acPlane);
  2.  Solid3d tmpSolid = new Solid3d();
  3.  tmpSolid.Extrude(acRegion, 1, 0);
И тут возникает проблема. На рис. изображены два твердых тела. Красной линией показано положение секущей плоскости.
Так вот, если вышеприведенный код использовать в отношении верхнего тв.тела, то все работает. А, если для нижнего, то работа прерывается на 3-ей строке с сообщением:
Modeling Operation Error:
Error Code Number is 115094
eGeneralModelingFailure

В чем тут дело?

Заранее благодарен.
PS. Если остановить код после получения Region, то командой extrude в AutoCAD'е тв.тело удается получить.



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

  • Administrator
  • *****
  • Сообщений: 11407
  • Карма: 1476
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Исключение eGeneralModelingFailure
« Ответ #1 : 24-07-2020, 19:42:16 »
В чем тут дело?
Бывает. Как минимум нужно проанализировать действительным ли получился ли acRegion. Да и вообще попробуй это всё проделать вручную (командами AutoCAD).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 11407
  • Карма: 1476
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Исключение eGeneralModelingFailure
« Ответ #2 : 24-07-2020, 19:44:36 »
Какая версия AutoCAD и установлены ли все обновления?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ***
  • Сообщений: 127
  • Карма: 1
Re: Исключение eGeneralModelingFailure
« Ответ #3 : 24-07-2020, 20:02:03 »
Руками в AutoCAD'e все поулчается.
Версия AutoCAD 2021. Обновлений не устанавливал.

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

  • Administrator
  • *****
  • Сообщений: 11407
  • Карма: 1476
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Исключение eGeneralModelingFailure
« Ответ #4 : 24-07-2020, 20:04:40 »
Балиев,
Выложите dwg-файл с этим твердым телом и укажите плоскость, по которой сечется тело.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 11407
  • Карма: 1476
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Исключение eGeneralModelingFailure
« Ответ #5 : 24-07-2020, 20:09:58 »
Обновлений не устанавливал.
Установи. Возможно это уже исправлено.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ***
  • Сообщений: 127
  • Карма: 1
Re: Исключение eGeneralModelingFailure
« Ответ #6 : 24-07-2020, 20:18:33 »
Тело сечется по плосткости параллельной X на расстоянии 20 мм по Y от начала координат.

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

  • Administrator
  • *****
  • Сообщений: 11407
  • Карма: 1476
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Исключение eGeneralModelingFailure
« Ответ #7 : 24-07-2020, 23:16:15 »
Тело сечется по плосткости параллельной X на расстоянии 20 мм по Y от начала координат.
Баг имеет место. Метод Extrude в этом случае не работает. Работает ExtrudeAlongPath, но тоже как-то коряво. Выдавливает только одну часть, а вторую не трогает.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ***
  • Сообщений: 127
  • Карма: 1
Re: Исключение eGeneralModelingFailure
« Ответ #8 : 25-07-2020, 11:52:22 »
Баг имеет место. Метод Extrude в этом случае не работает. Работает ExtrudeAlongPath, но тоже как-то коряво. Выдавливает только одну часть, а вторую не трогает.
ОК. Будем ждать исправления...

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

  • Administrator
  • *****
  • Сообщений: 11407
  • Карма: 1476
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Исключение eGeneralModelingFailure
« Ответ #9 : 25-07-2020, 14:07:15 »
Отправил в ADN DevHelp. Надеюсь на их творческий подход и на то, что они найдут workaround для этой проблемы.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Балиев 26-07-2020, 11:50:52

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

  • Administrator
  • *****
  • Сообщений: 11407
  • Карма: 1476
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Исключение eGeneralModelingFailure
« Ответ #10 : 25-07-2020, 15:26:22 »
Придумал как с этим можно бороться:
Код - C# [Выбрать]
  1. /// <summary>
  2. /// Trying to get section (Solid3d.GetSection) and extrude (Solid3d.Extrude)
  3. /// </summary>
  4. [CommandMethod("TestGetSection")]
  5. public void TestGetSection()
  6. {
  7.   // Put your command code here
  8.   Document doc = Application.DocumentManager.MdiActiveDocument;
  9.   if (doc == null)
  10.     return;
  11.  
  12.   Editor ed = doc.Editor;
  13.   Database db = doc.Database;
  14.   PromptEntityOptions prEnt = new PromptEntityOptions("\nSelect Solid3d: ");
  15.   prEnt.SetRejectMessage("It is not a Solid3d");
  16.   prEnt.AddAllowedClass(typeof(Solid3d), true);
  17.   PromptEntityResult rsEnt = ed.GetEntity(prEnt);
  18.   if (rsEnt.Status != PromptStatus.OK)
  19.     return;
  20.   // Vertical plane with origin point (0,20,0)
  21.   Plane plane = new Plane(new Point3d(0, 20, 0), Vector3d.YAxis);
  22.   using (Transaction tr = doc.TransactionManager.StartOpenCloseTransaction())
  23.   {
  24.     try {
  25.       BlockTableRecord btr =
  26.         tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;
  27.       Solid3d sol = tr.GetObject(rsEnt.ObjectId, OpenMode.ForWrite) as Solid3d;
  28.       Region reg = sol.GetSection(plane);
  29.       DBObjectCollection col = new DBObjectCollection();
  30.       reg.Explode(col);
  31.       //
  32.       // Если расчленяется на Region'ы, то будем выдавливать их поотдельности
  33.       //
  34.       if (col.Count > 0 && col[0] is Region)
  35.       {
  36.         foreach (DBObject obj in col)
  37.         {
  38.           if (obj is Region)
  39.           {
  40.             btr.AppendEntity(obj as Region);
  41.             tr.AddNewlyCreatedDBObject(obj, true);
  42.           }
  43.         }
  44.  
  45.       } else {
  46.         col.Clear();
  47.         col.Add(reg);
  48.         btr.AppendEntity(reg);
  49.         tr.AddNewlyCreatedDBObject(reg, true);
  50.       }
  51.  
  52.       Solid3d solColExt = new Solid3d();
  53.       foreach (DBObject obj in col) {
  54.         Solid3d solExt = new Solid3d();
  55.         solExt.Extrude(obj as Region, 1, 0);
  56.         btr.AppendEntity(solExt);
  57.         tr.AddNewlyCreatedDBObject(solExt, true);
  58.         solColExt.BooleanOperation(BooleanOperationType.BoolUnite, solExt);
  59.       }
  60.  
  61.       btr.AppendEntity(solColExt);
  62.       tr.AddNewlyCreatedDBObject(solColExt, true);
  63.     }
  64.     finally {
  65.       tr.Commit();
  66.     }
  67.   }
  68. }
  69.  

Основная идея в том, что если Region получается в результате GetSection составной, то он не хочет выдавливаться. Тогда расчленяем его на отдельные Region'ы, выдавливаем их по одному, а затем объединяем.
« Последнее редактирование: 26-07-2020, 13:00:08 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ***
  • Сообщений: 127
  • Карма: 1
Re: Исключение eGeneralModelingFailure
« Ответ #11 : 25-07-2020, 15:40:59 »
Основная идея в том, что если Region получается в результате GetSection составной, то он не хочет выдавливаться. Тогда расчленяем его на отдельные Region'ы, выдавливаем их по одному, а затем объединяем.
Да, идея понятна. Попробую использовать.

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

  • ADN Club
  • ***
  • Сообщений: 127
  • Карма: 1
Re: Исключение eGeneralModelingFailure
« Ответ #12 : 26-07-2020, 11:50:47 »
Попробовал. Все работает (только перед 46 строкой нужно почистить коллекцию: "col.Clear();", а то в ней ошметки после Explode застревают). Так что, спасибо за подсказку!

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

  • Administrator
  • *****
  • Сообщений: 11407
  • Карма: 1476
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Исключение eGeneralModelingFailure
« Ответ #13 : 26-07-2020, 13:39:20 »
Попробовал. Все работает (только перед 46 строкой нужно почистить коллекцию: "col.Clear();", а то в ней ошметки после Explode застревают). Так что, спасибо за подсказку!

Согласен. Исправил.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение