ADN Club > Civil 3D API

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

(1/2) > >>

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

Александр Ривилис:

--- Цитата: Загорулькин Дмитрий от 19-02-2014, 11:02:58 ---Как вы считаете, является это багом или это вполне нормальное поведение?
--- Конец цитаты ---
Вопрос конечно интересный. Прими во внимание, что я не знаком с Civil3D API, но знаю что в AutoCAD API если запросить точку на линии (методом Curve.GetPointAtDist)  и передать ему расстояние большее, чем длина линии, то тоже возникнет исключение. И это нормально. Скорее всего это взаимосвязанные вещи и соответственно не следует этому методу давать значение большее, чем он может принять. :)

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

Александр Ривилис:

--- Цитата: Загорулькин Дмитрий от 19-02-2014, 13:30:53 ---С учетом допуска, диапазон "попадания" из моего примера: от 24.99901 до 25.00101.
--- Конец цитаты ---
А вот тут (IMHO) ты совершенно не прав. Да и документация говорит о том, что исключение возникнет:

--- Цитировать ---Thrown when the specified station is out of the range of the alignment.
--- Конец цитаты ---
А диапазон до 25, а не до 25.00001

Дмитрий Загорулькин:
Ну как же неправ:

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

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии