Что означает ошибка eNotApplicable

Автор Тема: Что означает ошибка eNotApplicable  (Прочитано 3732 раз)

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

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

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Вот в этом коде исключение eNotApplicable
Что может быть?
Код - C# [Выбрать]
  1.  
  2. using CAD_DBS = Autodesk.AutoCAD.DatabaseServices;
  3. using CAD_GEO = Autodesk.AutoCAD.Geometry;
  4. using CAD_APS = Autodesk.AutoCAD.ApplicationServices;
  5.  
  6. using CIV_APS = Autodesk.Civil.ApplicationServices;
  7.  
  8. ...
  9.  
  10.                     CAD_APS.Document doc = CAD_APS.Application.DocumentManager.MdiActiveDocument;
  11.                     CAD_DBS.Database db = doc.Database;
  12.                     CIV_APS.CivilDocument civ_doc = CIV_APS.CivilDocument.GetCivilDocument(db);
  13.                     CAD_DBS.ObjectIdCollection alignColl = civ_doc.GetAlignmentIds();
  14.  
  15. ...
  16.  
  17.                       List<CAD_DBS.Entity> ents = new List<CAD_DBS.Entity>();
  18.                      // Точка в плане, которая лежит на трассе                      
  19.                      CAD_GEO.Point3d pntPlan
  20.  
  21.  
  22. ...
  23.  
  24.                     using (CAD_DBS.Transaction tr = db.TransactionManager.StartTransaction())
  25.                     {
  26.                         foreach (CAD_DBS.ObjectId alignId in alignColl)
  27.                         {
  28.                             CIV_DBS.Alignment trs = (CIV_DBS.Alignment)tr.GetObject(alignId, CAD_DBS.OpenMode.ForRead);
  29.                             try
  30.                             {
  31.                                // Расстояние в профиле по точке в плане
  32.                                double dist = trs.GetDistAtPoint(pntPlan);
  33.                                 // Цикл по видам профиля для трассы
  34.                                 ObjectIdCollection ids = trs.GetProfileViewIds();
  35.                                 foreach (ObjectId id in ids)
  36.                                 {
  37.                                     CIV_DBS.ProfileView pv = tr.GetObject(id, CAD_DBS.OpenMode.ForRead) as CIV_DBS.ProfileView;
  38.                                     if (pv != null)
  39.                                     {
  40.                                         try {
  41.                                             MY_SKV skv =  kkk[Convert.ToInt16(NUM) - 1];
  42.                                             double x = 0.0, y = 0.0;
  43.                                             pv.FindXYAtStationAndElevation(dist, skv.Ustie, ref x, ref y);
  44.                                             CAD_DBS.Entity e = (CAD_DBS.Entity)skv.blkref.Clone();
  45.                                             (e as CAD_DBS.BlockReference).Position = new CAD_GEO.Point3d(x, y - 100, 0);    
  46.                                             ents.Add(e);
  47.                                         }
  48.                                         catch { }
  49.                                     }
  50.                                 }
  51.                             }
  52.                             catch (System.Exception ex )
  53.                             {
  54.                                 MessageBox.Show(ex.Message); // ВЫВОД ТЕСТОВОГО СООБЩЕНИЯ ТЕКСТА ИСКЛЮЧЕНИЯ
  55.                             }
  56.                         }
  57.                     }
« Последнее редактирование: 31-07-2018, 22:10:54 от Алексей (IdeaSoft) »

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Что означает ошибка eNotApplicable
« Ответ #1 : 31-07-2018, 18:15:03 »
// ВОТ ТУТ ВОЗНИКАЕТ ИСКЛЮЧЕНИЕ
Исключение возникает не там, оно там обрабатывается. А возникает оно где-то выше. Надо пробежаться отладкой и посмотреть, где именно.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Что означает ошибка eNotApplicable
« Ответ #2 : 31-07-2018, 19:09:14 »
Вот в этом коде исключение eNotApplicable
Что может быть?
Это означает "неприменимо". А вот где и почему можно найти только отладкой/трассировкой, как написал Дмитрий Загорулькин.
Или убери try/catch и оно само покажет где возникло исключение.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Что означает ошибка eNotApplicable
« Ответ #3 : 31-07-2018, 21:48:59 »
Спасибо, посмотрю что там не так.

Интересно, то что функция всегда отрабатывала хорошо.
А тут проектировщики дали еще один файл с видами профилей
И причем по некоторым видам профилей функция отработала хорошо, а по некоторым с этой вот ошибкой

Вообщем завтра в отладке гляну в чем причина.
Если нарою что-то интересное - отпишусь.


Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Что означает ошибка eNotApplicable
« Ответ #4 : 31-07-2018, 22:12:41 »
А возникает оно где-то выше.
Где-то с 32 по 37 строки кода нужно смотреть причину.

Отмечено как Решение Александр Ривилис 02-08-2018, 13:17:34

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Что означает ошибка eNotApplicable
« Ответ #5 : 01-08-2018, 00:41:45 »
Где-то с 32 по 37 строки кода нужно смотреть причину.
Очень может быть, что ошибка здесь:
Код - C# [Выбрать]
  1. double dist = trs.GetDistAtPoint(pntPlan);
Если точка не в точности лежит на линии, то будет исключение. Поэтому обычно сначала находят точку на линии, ближайшую к заданной, а затем уже вызывают метод GetDistAtPoint для полученной точки.
« Последнее редактирование: 01-08-2018, 01:29:12 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Что означает ошибка eNotApplicable
« Ответ #6 : 01-08-2018, 10:44:00 »
Посмотрел я в отладчике ругается
на функцию GetDistAtPoint
вот в этой строке вычисления дистанции
double dist = trs.GetDistAtPoint(pntPlan)

Код - C# [Выбрать]
  1. CAD_DBS.Circle cir = ...;
  2. ...
  3. CAD_GEO.Point3d pntPlan = cir.Center;
  4. CIV_DBS.Alignment trs = ... ;
  5. ...
  6. double dist = trs.GetDistAtPoint(pntPlan)

Что с трассой может быть не так?


Кружочки на плане расставлял с объектной
привязкой точно на ось трассы.
И также пробовал расставлять их без привязки.


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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Что означает ошибка eNotApplicable
« Ответ #7 : 01-08-2018, 11:21:15 »
Что с трассой может быть не так?
Я всё написал выше. В том числе и что следует делать.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Что означает ошибка eNotApplicable
« Ответ #8 : 01-08-2018, 12:12:08 »
Вообще, у трассы есть свой собственный метод для определения пикетажа в точке. И применение GetDistAtPoint в данном случае может привести к ошибкам - трасса не всегда начинается с пикетажа 0.0. Так что, следует заменить этот метод на Alignment.StationOffset
И ещё, мне встречались трассы, у которых в некоторых точках определить пикетаж невозможно. Так что, если не поможет замена, выкладывайте чертёж с трассой.

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Что означает ошибка eNotApplicable
« Ответ #9 : 01-08-2018, 12:21:07 »
Разобрался. Кружочки не привязал не верно.
Они не лежат на оси трассы.
Сместил их на трассу и все заработало.
Вообщем все Хорошо!!