Способы отловить вылеты AutoCAD

Автор Тема: Способы отловить вылеты AutoCAD  (Прочитано 8295 раз)

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

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

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
AutoCAD2010

В чертеже есть объекты СПДС.
объект - дверь из СПДС графика.

1. Если СПДС не подгружен, при попытке выделить объект AutoCAD вылетает без сообщений.

2. Если СПДС подгружен все ок. Можно выделять.

Обнаружил, что если СПДС не подгружен, фаталит на функции entity.GetGripPoints

Попытался отловить
Код - C# [Выбрать]
  1. try
  2. {
  3.    entity.GetGripPoints(grips , curViewUnitSize , gripSize , curViewDir , bitFlags);
  4. }
  5.    catch (System.Exception e)
  6. {
  7. }
не помогает

Существуют ли еще способы отловить ошибку, без аварийного завершения?
« Последнее редактирование: 06-06-2019, 15:37:48 от Александр Ривилис »

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Способы отловить вылеты AutoCAD
« Ответ #1 : 06-06-2019, 15:34:51 »
Существуют ли еще способы отловить ошибку, без аварийного завершения?
В общем случае нет.
Обнаружил, что если СПДС не подгружен, фаталит на функции entity.GetGripPoints
А проверить загружены ли модули СПДС или нет? Кстати, о каком СПДС идёт речь? О SPDS Extension от Autodesk или СПДС GraphiCS?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Способы отловить вылеты AutoCAD
« Ответ #2 : 06-06-2019, 15:37:19 »
Вообще-то если это Custom Entity и не загружен соответствующий dbx-модуль, то это ProxyEntity, что можно отследить.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Re: Способы отловить вылеты AutoCAD
« Ответ #3 : 06-06-2019, 15:43:12 »
А проверить загружены ли модули СПДС или нет? Кстати, о каком СПДС идёт речь? О SPDS Extension от Autodesk или СПДС GraphiCS?
СПДС GraphiCS
Вообще-то если это Custom Entity и не загружен соответствующий dbx-модуль, то это ProxyEntity, что можно отследить.
Загружен ObjectEnabler, по необходимости СПДС.
Т.е. это не ProxyEntity, а ImpCurve (entity.GetType().Name)

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Способы отловить вылеты AutoCAD
« Ответ #4 : 06-06-2019, 15:45:21 »
Привалов Дмитрий,
Так ты можешь отследить что модули загружены или нет?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Способы отловить вылеты AutoCAD
« Ответ #5 : 06-06-2019, 15:50:23 »
Т.е. это не ProxyEntity, а ImpCurve (entity.GetType().Name)
Не лучший метод проверки. Правильнее:
Код - C# [Выбрать]
  1. string clsname = entity.ObjectId.ObjectClass.Name;
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Re: Способы отловить вылеты AutoCAD
« Ответ #6 : 06-06-2019, 16:02:53 »
учший метод проверки. Правильнее
Наверное могу, только пока не знаю как. Не было необходимости до этого.

Причем фаталят не все объекты СПДС, а некоторые.
В идеале бы отлавливать невозможность получить GetGripPoints. Т.к. подгрузка СПДС может и не требоваться.

Не лучший метод проверки. Правильнее:
Код - C# [Выбрать]
  1. string clsname = entity.ObjectId.ObjectClass.Name;
Так я хотел отловить все прокси с подгруженным ObjectEnabler.
а entity.ObjectId.ObjectClass.Name насколько я понимаю вернет имя класса примитива?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Способы отловить вылеты AutoCAD
« Ответ #7 : 06-06-2019, 16:06:32 »
Так я хотел отловить все прокси с подгруженным ObjectEnabler.
ObjectEnable не означает наличие .NET Wrapper для этого объекта/примитива. И соответственно ты получаешь ImpCurve для всех примитивов унаследованных от AcDbCurve.
В идеале бы отлавливать невозможность получить GetGripPoints.
Ну это явно какой-то баг в конкретной версии AutoCAD. Такое ты не отловишь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Re: Способы отловить вылеты AutoCAD
« Ответ #8 : 06-06-2019, 16:28:34 »
ObjectEnable не означает наличие .NET Wrapper для этого объекта/примитива. И соответственно ты получаешь ImpCurve для всех примитивов унаследованных от AcDbCurve.
Это я понимаю. Если подробнее откуда ноги растут:

Есть пользователи которые делают "замечательные чертежи"
Замечательны они обилием Z координат везде. и часто это типа Z=7*10^-11. Т.е. около нуля.

Просто копируют откуда-то натыкают размеров, отрезков и типа чертеж готов.
Все бы хорошо, но шрифт ISOCPEUR.TTF т.е. объекты, которые содержат текст могут выглядеть чуть жирнее, что видно, при печати в PDF.

Конечно бегут и спрашивают как так и что делать.
Естественно "замечательных пользователей" не устраивают никакие варианты решения, все не так и все не то. (Команда "_flatten" и печать)

Ну и решил им помочь, написал сброс Z.

Работает норм, но как всегда есть нюансы.
...ну т.к. много замечательного было наделано, то имеются объекты СПДС выноски, уровни высот и т.д. у которых управляющие точки на разной высоте

полез в GripPoints а т.к. им не пользовался, немного подзавис:
то не все точки можно двигать -> вылетает(вроде обошел),
то вот этот случай, не всегда можно запросить список точек -> вылетает.

Ну это явно какой-то баг в конкретной версии AutoCAD. Такое ты не отловишь.
Так и подумал, но на всякий случай решил спросить. В любом случае спасибо за ответы.

Дальше попробую двигать ручки "объектов СПДС" с подгруженным СПДС.