Есть ли способ обхода Fatal Error

Автор Тема: Есть ли способ обхода Fatal Error  (Прочитано 7218 раз)

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

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

  • ADN Club
  • *****
  • Сообщений: 828
  • Карма: 168
    • Мои плагины к Автокаду
Я нашел уже несколько ситуаций когда функция API стабильно вызывает фатал Автокада. Например, сейчас мучаюсь с тем что Solid3d.Slice(Surface, bool) убивает Автокад, если поверхность и солид не пересекаются). try не спасает. Проверить ВСЕ возможные варианты заранее как правило невозможно. Может есть какой-то способ безопасного вызова подобных функций? Чтоб получить обычное исключение, а не фатал. Есть панацея?

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

  • Administrator
  • *****
  • Сообщений: 13894
  • Карма: 1789
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Есть ли способ обхода Fatal Error
« Ответ #1 : 07-12-2016, 18:26:26 »
Может есть какой-то способ безопасного вызова подобных функций? Чтоб получить обычное исключение, а не фатал. Есть панацея?
Нет. Fatal Error невозможно обработать на уровне .NET. Да и в чистом C++ перехват этого исключения тебя бы не спас. В любом случае или память AutoCAD уже испорчена, или чертеж или и то и другое.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Есть ли способ обхода Fatal Error
« Ответ #2 : 07-12-2016, 18:30:21 »
В ветке уже была тема, где обсуждались алгоритмы разрезки солидов, насколько я помню. Тема создавалась мною, _Дима показывал более оптимальный вариант, но написанный на F#. Юзай поиск.

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

  • Administrator
  • *****
  • Сообщений: 13894
  • Карма: 1789
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Есть ли способ обхода Fatal Error
« Ответ #3 : 07-12-2016, 18:33:52 »
В ветке уже была тема, где обсуждались алгоритмы разрезки солидов, насколько я помню.
У тебя резка шла плоскостью (Plane), у него поверхностью Surface - разница существенна.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13894
  • Карма: 1789
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Есть ли способ обхода Fatal Error
« Ответ #4 : 07-12-2016, 18:35:04 »
Например, сейчас мучаюсь с тем что Solid3d.Slice(Surface, bool) убивает Автокад, если поверхность и солид не пересекаются
Нужен правильно оформленный пример для отправки в Autodesk.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 828
  • Карма: 168
    • Мои плагины к Автокаду
Re: Есть ли способ обхода Fatal Error
« Ответ #5 : 07-12-2016, 18:45:37 »
Да, при резке плоскостью будет обычное исключение. А при резке поверхностью обязательны как минимум 2 проверки:
Код - C# [Выбрать]
  1.           if (!solid.Check()) return false; // первая обязательная проверка - иначе ФАТАЛ!
  2.           using (Solid3d test = surface.Thicken(-0.00001, false)) // А вот тут танцуйте с бубном. "Минус чуть чуть" сработает только в моем коде, но НЕ ВСЕГДА
  3.             using (Solid3d clone = solid.Clone() as Solid3d)
  4.             {
  5.               clone.BooleanOperation(BooleanOperationType.BoolIntersect, test);
  6.               if (clone.IsNull) return false; // вторая проверка. если не пересеклись (и даже если просто касались) - будет ФАТАЛ!
  7.             }
  8.           Solid3d sloy = solid.Slice(surface, true); // Крайне опасный вызов. Избегать всеми способами!
  9.  

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

  • Administrator
  • *****
  • Сообщений: 13894
  • Карма: 1789
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Есть ли способ обхода Fatal Error
« Ответ #6 : 07-12-2016, 18:55:31 »
Я так понимаю, что ты это написал для себя, так как такой код в Autodesk отправлять бессмысленно. Где пример чертежа? Где полный код примера? Где указание на версию AutoCAD? Где видео, которое подтверждает получение ошибки?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 828
  • Карма: 168
    • Мои плагины к Автокаду
Re: Есть ли способ обхода Fatal Error
« Ответ #7 : 07-12-2016, 19:00:04 »
При чем тут Автодеск? Я для читателей форума пишу. По слову Slice тут больше статей нет. Пусть люди будут в курсе. Разве не для этого форум?

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

  • Administrator
  • *****
  • Сообщений: 13894
  • Карма: 1789
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Есть ли способ обхода Fatal Error
« Ответ #8 : 07-12-2016, 19:23:38 »
Пусть люди будут в курсе. Разве не для этого форум?
Всё правильно. Я просто думал, что кроме как поделится сведениями, тебе еще не помешала бы помощь от Autodesk. Но если в этом нет необходимости, то и не надо... :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение