Как поймать ошибку метода Solid3d.GetSection(Plane)

Автор Тема: Как поймать ошибку метода Solid3d.GetSection(Plane)  (Прочитано 6841 раз)

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

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

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

  • ADN OPEN
  • Сообщений: 34
  • Карма: 0
Здравствуйте!

Проблема такая: когда мы сечем Solid3d плоскостью Plane (с целью получения региона), то в случае, когда Plane простирается вне Solid3d - происходит фатальная ошибка,
обработать которую не удается.
Почти уверен - вопрос банален, но ответа на него найти не смог.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Версия AutoCAD?
Fatal Error или обычный Exception?
Нужен тестовый чертеж с одним Solid3d и код.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 34
  • Карма: 0


AutoCad 2016х64
Происходит Fatal Error. Пример кода приложу чуть позже.

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

  • ADN OPEN
  • Сообщений: 34
  • Карма: 0
Вот пример кода:

Код - vb.net [Выбрать]
  1. Imports Autodesk.AutoCAD.Runtime
  2. Imports Autodesk.AutoCAD.ApplicationServices
  3. Imports Autodesk.AutoCAD.DatabaseServices
  4. Imports Autodesk.AutoCAD.Geometry
  5.  
  6. Namespace Test
  7.     Public Class MyCommands
  8.         <CommandMethod("Test")> _
  9.         Public Sub MyMain()
  10.             Dim doc As Document = Application.DocumentManager.MdiActiveDocument
  11.             Dim db As Database = doc.Database
  12.             Using myTrans As Transaction = db.TransactionManager.StartTransaction()
  13.                 Dim bt As BlockTable = myTrans.GetObject(db.BlockTableId, OpenMode.ForRead)
  14.                 Dim btr As BlockTableRecord = myTrans.GetObject(bt(BlockTableRecord.ModelSpace), OpenMode.ForWrite)
  15.                 '' создаем Solid3d
  16.                 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  17.                 Dim Wedge As Solid3d = New Solid3d()
  18.                 Wedge.CreateWedge(10, 15, 20)
  19.                 btr.AppendEntity(Wedge)
  20.                 myTrans.AddNewlyCreatedDBObject(Wedge, True)
  21.                 ''вариант 1 - секущая плоскость попадает на Solid3d - работает Ok
  22.                 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  23.                 Dim Plan As Plane = New Plane(Point3d.Origin, New Vector3d(1, 0, 0))
  24.                 Dim SectRegion As Region = Wedge.GetSection(Plan)
  25.                 SectRegion.ColorIndex = 1
  26.                 btr.AppendEntity(SectRegion)
  27.                 myTrans.AddNewlyCreatedDBObject(SectRegion, True)
  28.                 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  29.                 ''вариант 2 - секущая плоскость не попадает на Solid3d - происходит Fatal Error
  30.                 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  31.                 Plan = New Plane(New Point3d(7, 0, 0), New Vector3d(1, 0, 0))
  32.                 SectRegion = Wedge.GetSection(Plan)
  33.                 SectRegion.ColorIndex = 1
  34.                 btr.AppendEntity(SectRegion)
  35.                 myTrans.AddNewlyCreatedDBObject(SectRegion, True)
  36.                 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  37.                 myTrans.Commit()
  38.             End Using
  39.         End Sub
  40.  
  41.     End Class
  42.  
  43. End Namespace
« Последнее редактирование: 03-03-2017, 14:24:36 от Александр Ривилис »

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Похоже на баг.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 34
  • Карма: 0
Обидно, однако...

Придется выкрутится иначе. Спасибо!

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Я отправлю в ADN DevHelp - возможно что-нибудь подскажут.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 34
  • Карма: 0
Спасибо, Александр!


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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Проверил в AutoCAD 2017 - этой ошибки нет. Если плоскость не пересекает тело, то возникает исключение eNoIntersections, которое легко отлавливается и обрабатывается:

Это говорит о том, что разработчики в курсе и в AutoCAD 2017 эту ошибку исправили. Видимо в AutoCAD 2016 к ней решили не возвращаться. Так что на положительный ответ я бы не слишком рассчитывал.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 34
  • Карма: 0
Теперь знаю и не рассчитываю. А свою проблему я уже почти решил по-другому.
Спасибо, Александр!

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Теперь знаю и не рассчитываю. А свою проблему я уже почти решил по-другому.
Спасибо, Александр!
Тем не менее запрос в ADN DevHelp я уже отправил. Подождём результата.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 34
  • Карма: 0
Подождем...

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 805
  • Карма: 166
    • Мои плагины к Автокаду
Похоже та же ситуация как и со Slice http://adn-cis.org/forum/index.php?topic=7502.msg23754#msg23754

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

  • ADN OPEN
  • Сообщений: 34
  • Карма: 0
Да, действительно... Проблема не нова.

Отмечено как Решение Александр Ривилис 10-03-2017, 13:05:15

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Получил ответ из ADN DevHelp. Баг признали. В качестве обходного пути предложили пользоваться Section.GenerateSectionGeometry
Пример использования здесь: http://through-the-interface.typepad.com/through_the_interface/2008/05/sectioning-an-a.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 34
  • Карма: 0
Спасибо, огромное, Александр!