Грамотная настройка Tolerance

Автор Тема: Грамотная настройка Tolerance  (Прочитано 4362 раз)

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

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

  • ADN Club
  • *****
  • Сообщений: 818
  • Карма: 166
    • Мои плагины к Автокаду
Как правильно задать точность геометрических расчетов, когда метод принимает Geometry.Tolerance ?
С параметром EqualPoint все ясно - если мне надо получить 3 значащих цифры, то делим габарит объекта на 1000 и получили EqualPoint. Например, для отрезка в миллион единиц, мне придется ставить EqualPoint = 1000. Катастрофически неудобный способ настройки, требуется постоянно вычислять габариты, но куда деваться, альтернативы нет.
А вот с EqualVector разобраться не могу. Во всех примерах он берется в 10 раз меньше чем EqualPoint. В документации сказано:
Цитировать
Two vectors, v1 and v2, are equal if
(v1 - v2).length() <= equalVector
т.е. такое же сравнение в лоб, как и для EqualPoint. Значит надо брать EqualVector = EqualPoint. Но! Тут же:
Цитировать
Two vectors, v1 and v2, are parallel if
(v1/v1.length() - v2/v2.length()).length() < equalVector ...
т.е. для углов и направлений используются уже единичные векторы. Их разница не может быть больше двух! Если я назначу EqualVector  = 2 и более, то даже противоположные направления будут считаться одинаковыми! Значит EqualVector  надо назначать от 0 до 1 и это не зависит от габаритов объектов. Можно прикинуть исходя из этого, что для точности углов в пол градуса EqualVector  = 0.0087. Так?
Так сколько же ставить для крупного объекта  - 1000 или 0.0087 ???? Нифига себе разбросик... Как вообще можно в одинаковых единицах мерить и углы и линейные размеры? Я явно что-то не понимаю. И что-бы окончательно разрушить мой мозг, в документации есть примечание:
Цитировать
These rules mean that two lines are close to each other as point sets in the part of the modeling space of diameter diam only if the tolerance equalVector is set tighter than equalPoint/diam.
Что за диаметр, какой набор точек? Я понял только, что EqualVector  надо обязательно(?) назначать по жестче, чем EqualPoint. Но почему - не понял.
Спасите, помогите!



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

  • Administrator
  • *****
  • Сообщений: 13880
  • Карма: 1786
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Грамотная настройка Tolerance
« Ответ #1 : 23-10-2016, 00:48:09 »
avc
Однозначно могу сказать, что ты полез куда-то не туда. Теперь постараюсь объяснить почему.
1. Теория эта очень туманна и никто даже в Autodesk тебе не сможет объяснить зачем в некоторые методы передаётся Tolerance, что внутри этих методов из него используется (EqualPoint  или EqualVector или они оба и с какими операндами - всё достаточно индивидуально). В 2015 с глобальным Tolerance поигрались и зачем-то загрубили его значения. В результате перестала работать куча методов из BREP API (соответственно с Solid3d и Region)
2.
С параметром EqualPoint все ясно - если мне надо получить 3 значащих цифры, то делим габарит объекта на 1000 и получили EqualPoint.
Извини, но это полный бред привязывать количество значащих цифр к EqualPoint, а использовать EqualPoint = 1000 - IMHO бред в кубе. Мне не известны случаи в из реальной жизни, когда необходим EqualPoint > 1. Это ты потом можешь округлять значение, но вычислять меньше 6 значащих цифр в реальном мире это ...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение