Ограничение на количество точек полигона для метода Editor.SelectCrossingPolygon

Автор Тема: Ограничение на количество точек полигона для метода Editor.SelectCrossingPolygon  (Прочитано 19548 раз)

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

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Очень тепло, но нет! :)
А сообразил:
Код - C# [Выбрать]
  1.     if (pts.Count == 0 || pts[pts.Count-1].DistanceTo(p) >= FUZZ)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 554
  • Карма: 119
Очень тепло, но нет!
Код - C# [Выбрать]
  1.  [s](i != 0 || pts[i-1].DistanceTo(p) >= FUZZ)[/s]?
тоже перегрелся)

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
А сообразил
Да. Причём из-за этого Ваш код у меня работал очень странно. Он пропустил одну точку по условиям и далее по идее должно было быть исключение - индекс выходит за пределы коллекции. Но вместо этого возвращалась точка (0,0,0) и условие всегда выполнялось. Я FUZZ уже размером несколько десятков ставил - а результат не менялся. В общем, странное поведение Point3dCollection.

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Дмитрий Загорулькин,
Теперь нормально работает?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Да, работает как надо! Спасибо! Я пробовал FUZZ ставить поменьше: на 0,001 работает, а вот 0,0001 - уже нет.

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Дмитрий Загорулькин,
Отлично! Я исправил код, чтобы те кто им захочет воспользоваться, не выискивали исправления.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 554
  • Карма: 119
Я исправил код
возможно одной проверки может быть недостаточно, при контуре близком к линии?
Код - C# [Выбрать]
  1. // Повторять последнюю точку не нужно!!!
  2. if (pts[0].DistanceTo(pts[pts.Count - 1]) < FUZZ)
  3. {
  4. pts.RemoveAt(pts.Count - 1);
  5. }

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Я исправил код
возможно одной проверки может быть недостаточно, при контуре близком к линии?
Код - C# [Выбрать]
  1. // Повторять последнюю точку не нужно!!!
  2. if (pts[0].DistanceTo(pts[pts.Count - 1]) < FUZZ)
  3. {
  4. pts.RemoveAt(pts.Count - 1);
  5. }
Код не универсальный. В данном случае проверяется близость первой и последней вершин контура.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение