Как можно найти расстояние между 2 объектами?

Автор Тема: Как можно найти расстояние между 2 объектами?  (Прочитано 17461 раз)

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

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

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

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

  • ADN OPEN
  • Сообщений: 19
  • Карма: 0
При нахождение короткого пути между 2 списками polyline  пишет ошибку: "System.NullReferenceException".
Как это исправляется

При первом прохождении 1 цикла все нормально работает. После второго прохождения первого цикла пишет ошибку выше.
Код - C# [Выбрать]
  1. foreach (Entity curvPoint in listPoint)//1-цикл
  2.                                 {
  3.                                         using (Curve curve1 = curvPoint.ObjectId.GetObject(OpenMode.ForRead) as Curve)
  4.                                         using (Curve3d c3d1 = curve1.GetGeCurve())
  5.                                         {
  6.                                                 foreach (Entity block in listPolyline)//2-цикл
  7.                                                 {
  8.                                                         try
  9.                                                         {
  10.                                                                 using (Curve curve2 = block as Curve)
  11.                                                                 using (Curve3d c3d2 = curve2.GetGeCurve())
  12.                                                                 {
  13.                                                                         PointOnCurve3d[] ptsOnc3d = c3d1.GetClosestPointTo(c3d2);
  14.                                                                                 AddLineBetweenDist(ptsOnc3d[0].Point, ptsOnc3d[1].Point);
  15.                                                                         acad.DocumentManager.MdiActiveDocument.Editor.WriteMessage("\n\r curve2 " + ptsOnc3d.Length + " x1=" + ptsOnc3d[0].Point.X + " y1=" +
  16.                                                                                 ptsOnc3d[0].Point.Y + " x2=" + ptsOnc3d[0].Point.X + " y2=" + ptsOnc3d[0].Point.Y);
  17.                                                                 }
  18.                                                         }
  19.                                                         catch { }
  20.                                                 }
  21.                                         }
  22.                                 }

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
При первом прохождении 1 цикла все нормально работает. После второго прохождения первого цикла пишет ошибку выше.
Запусти под отладчиком и найди место, где возникает исключение.
P.S.: В настройках VS измени величину табуляции (сравни мой код и свой) - читать такой сдвинутый на половину экрана код невозможно.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 19
  • Карма: 0
Ошибка возникает в Curve3d c3d2 = curve2.GetGeCurve(). Но при прохождении цикла в первый раз все нормально работает

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Ошибка возникает в Curve3d c3d2 = curve2.GetGeCurve(). Но при прохождении цикла в первый раз все нормально работает
Я так понимаю, что в этом случае curve2 == null, т.е. block as Curve возвращает null и соответственно block не наследник Curve. Проверяй что туда попадает.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Off-Topic: показать
В настройках VS измени величину табуляции (сравни мой код и свой) - читать такой сдвинутый на половину экрана код невозможно.
Дополню. В стандартных настройках VS, автоматическое выравнивание кода - Ctrl+K+D


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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
merta,
Стоп!!! А зачем вообще using в
Код - C# [Выбрать]
  1. using (Curve curve2 = block as Curve)
???
Ты понимаешь что происходит в этом случае или это просто копипастинг чужого кода?
Тогда объясню, что после завешения блока using curve2 будет закрыт (выполнен метод Close) и соответственно повторно к нему до его открытия обратиться нельзя. Так что этот using просто выкини из кода. Он в нём не нужен.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 19
  • Карма: 0
Александр Ривилис, Спасибо. Ещё раз прочитал, делает using все стало на свои места. Спасибо.