Поиск оси сечения на границе трассы

Автор Тема: Поиск оси сечения на границе трассы  (Прочитано 8081 раз)

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

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Здравствуйте!
У меня вопрос по методу SampleLineGroup.GetSampleLineIds(Double, Double). Этот метод позволяет найти нужную ось сечения, принадлежащую группе, по указанию пикета трассы и точности поиска. Но, на мой взгляд, у него есть довольно нелогичная (а главное - недокументированная!) особенность, которая мне много нервов попортила.
Предположим, что трасса имеет конечный пикет 25.0. В конце трассы располагается объект Structure. Я вычисляю его пикетаж по трассе. В результате, значение вычисленного пикетажа колодца-структуры у меня может получиться 25.00001 (например, из-за погрешности операций с плавающей точкой). Далее, мне нужно проверить, есть ли ось сечения в этом пикетаже. Казалось бы, что может быть проще при наличии такого метода? Зная про погрешности вычисления, я задаю допуск 0.001 и пробую искать.
Но, запросив SampleLineGroup.GetSampleLineIds(25.00001, 0.001) я получаю исключение - значение пикета выходит за рамки трассы! Какой бы там ни был допуск - хоть 3000, на ситуацию это не повлияет.
Как вы считаете, является это багом или это вполне нормальное поведение?
 
« Последнее редактирование: 19-02-2014, 21:50:03 от Загорулькин Дмитрий »

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

  • Administrator
  • *****
  • Сообщений: 13877
  • Карма: 1785
  • Рыцарь ObjectARX
  • Skype: rivilis
Как вы считаете, является это багом или это вполне нормальное поведение?
Вопрос конечно интересный. Прими во внимание, что я не знаком с Civil3D API, но знаю что в AutoCAD API если запросить точку на линии (методом Curve.GetPointAtDist)  и передать ему расстояние большее, чем длина линии, то тоже возникнет исключение. И это нормально. Скорее всего это взаимосвязанные вещи и соответственно не следует этому методу давать значение большее, чем он может принять. :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Но там же нет параметра "допуск", поэтому это вполне логично. Если передается значение дистанции вне кривой, то вариантов, кроме как исключение, нет никаких.
А в случае с GetSampleLineIds:
С учетом допуска, диапазон "попадания" из моего примера: от 24.99901 до 25.00101. Он перекрывается с диапазоном пикетов трассы на промежутке от 24.99901 до 25.0000, значит, есть пространство для деятельности! На мой взгляд, было бы логичнее выдавать исключение, если значение с учетом допуска выходит за пределы трассы.

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

  • Administrator
  • *****
  • Сообщений: 13877
  • Карма: 1785
  • Рыцарь ObjectARX
  • Skype: rivilis
С учетом допуска, диапазон "попадания" из моего примера: от 24.99901 до 25.00101.
А вот тут (IMHO) ты совершенно не прав. Да и документация говорит о том, что исключение возникнет:
Цитировать
Thrown when the specified station is out of the range of the alignment.
А диапазон до 25, а не до 25.00001
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Ну как же неправ:

Нечетко говорит. Не хватает что-то типа: Excluding tolerance. Поведение не очевидное, для меня по крайней мере.

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

  • Administrator
  • *****
  • Сообщений: 13877
  • Карма: 1785
  • Рыцарь ObjectARX
  • Skype: rivilis
Поведение не очевидное, для меня по крайней мере
Возможно и не вполне очевидное, но теперь ты знаешь как он себя ведет. Думаю просто этот метод в конечном счете сам использует что-то типа Curve.GetPointAtDist - отсюда и исключение.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение