Перестраивание ребра между смежными треугольниками
<< Click to Display Table of Contents >> Navigation: РЕЖИМЫ РАБОТЫ В ОКНАХ-ЧЕРТЕЖАХ > < Работа с триангулированными моделями поверхностей > Перестраивание ребра между смежными треугольниками |
В ряде случаев возникает необходимость в изменении триангуляции для двух смежных треугольников - осуществлении 'переноса' общего ребра на две другие точки смежных треугольников (у двух смежных треугольников имеется всего 4 точки).
Рассматриваемый режим используется для выполнения такой операции.
Процесс перестраивания ребра между смежными треугольниками состоит из следующих этапов:
1. Выбор ребра, общего для смежных треугольников.
Используется
или .
1а. Если ребро выбирается при помощи
, то программой будет отрисовано новое ребро и она перейдет в режим ожидания подтверждения.Подтверждение операции - или отмена - или .
Новое ребро изображается толстой штриховой линией малинового цвета.
Обратите внимание на то, что новое ребро может оказаться закрытым исходными треугольниками, поэтому, для лучшего контроля за процессом желательно задавать прозрачность треугольников.
1б. Если стартовая точка выбирается при помощи
, то изменение ребра будет произведено сразу, без дополнительного подтверждения.
Пример перестраивания ребра между смежными треугольниками
При выполнении операции перестраивания ребра смежных треугольников необходимо обращать внимание на корректность такого преобразования.
Применительно к 'каркасам', построенным между полилиниями-контурами, можно отметить, что корректное преобразование будет в том случае, когда один из треугольников 'лежит' на одной исходной полилинии, а другой треугольник - на другой полилинии. Если оба треугольника опираются на одну и ту же полилинию, то в большинстве случаев перестраивание ребра является ошибочным (хотя не исключены ситуации, когда такое преобразование выполняется сознательно).
В приведенном выше примере специально показан результат некорректного преобразования треугольников. В этом примере ошибочное построение легко увидеть и исправить, но часто могут быть ситуации, когда один из треугольников получается очень узким и ошибка не сразу бросается в глаза, а проявляется только при последующей работе.
Для предотвращения подобных проблем программа выявляет потенциальные ошибки и выдает предупреждающие сообщения об этом.
В приведенном примере выдается следующее сообщение:
Кроме этого сообщения, возможны следующие сообщения:
Также возможно появление сообщений об ошибках, при которых перестраивание ребра однозначно не производится:
Поиск пар треугольников, для которых рекомендуется произвести флип; выполнение флипа для найденных треугольников
В некоторых случаях желательно проанализировать имеющуюся модель поверхности на предмет возможного улучшения за счет выполнения флипов.
Для решения этой задачи используется 3D модификация условия Делоне.
Сначала вспомним о 'классической' триангуляции Делоне (2D). Все треугольники триангуляции Делоне удовлетворяют условию Делоне: внутрь окружности, описанной вокруг треугольника, не попадает ни одна из точек, участвующих в триангуляции.
На приводимом рисунке показаны описанные окружности для нескольких треугольников триангуляции Делоне:
Далеко не во всех случаях может быть использована 2D триангуляция Делоне. Например, замкнутые модели поверхностей не могут быть спроецированы на одну плоскость без пересечений.
3D модификация условия Делоне : внутрь СФЕРЫ, описанной вокруг треугольника, не попадает ни одна из точек, участвующих в триангуляции.
Для определения целесообразности флипа для каждой пары треугольников, имеющих общее ребро, производятся проверки этого условия для существующих треугольников и для треугольников, которые могут получиться после флипа.
Выбирается лучший вариант и делается вывод о том, желательно ли делать флип.
При этом проверяется, что после флипа не возникнут ошибочные ситуации типа пересечений треугольников треугольников-дубликатов и т.п.
Могут быть случаи, когда и существующие и новые треугольники не отвечают упомянутому выше условию - тогда флип не рекомендуется.
Если установить курсор на интересующую нас модель поверхности и нажать правую клавишу мыши, то появится всплывающее меню:
Найти пары треугольников, для которых желательно сделать флип, в модели ПОВЕРХНОСТИ - после выбора этого пункта меню появляется диалог:
Разрешить перестраивать общие ребра, по которым проходят полилинии (полилинии при этом разорвутся) - если этот элемент не отмечен, то пары треугольников, соединяющиеся между собой ребром, по которому проходит полилиния, не рассматриваются в качестве претендентов на флип.
Не делать флип, если двугранный угол между треугольниками (от 0 до 180) меньше заданного значения - в некоторых случаях можно не рассматривать флип, если двугранный угол между треугольниками относительно небольшой.
Добавить в проект файл-чертеж, в который записать ребра, рекомендуемые для флипа - если отмечено, то после поиска треугольников, для которых желателен флип, производится запись ребер, которые рекомендуется перестроить в файл-чертеж (в виде полилиний из двух точек). Название файла чертежа в своем начале будет совпадать с названием файла с моделью поверхности, а далее добавляется текст "(РЕБРА ДЛЯ ФЛИПА)". Если ни одного ребра не найдено, то файл не создается.
Создаваемые полилинии-ребра будут иметь темно-малиновый цвет:
В любом случае, после поиска треугольников для флипа, информация о результатах поиска выводится в окно с информацией о работе с программой. Например :
--------------------------------
Поиск пар треугольников, для которых желательно сделать флип, в модели ПОВЕРХНОСТИ
'Файл 'E:\Примеры\DGS\Флип ребра\Средняя поверхность.dgs'
Модель поверхности № 1 (ID=1). Назв. объекта ''
Всего точек = 3069, всего треугольников = 6037. (НЕЗАМКНУТАЯ)'
Количество пар треугольников, которые желательно перестроить = 6
Пары треугольников, которые желательно перестроить (флип) :
№ треугольника (№ ребра) -<>- № треугольника (№ребра)
68 (2) -<>- 114 (2)
305 (3) -<>- 356 (3)
440 (2) -<>- 496 (1)
1019 (2) -<>- 1105 (1)
1379 (2) -<>- 1485 (1)
1978 (3) -<>- 2099 (1)
Каждый треугольник может оказаться в списке только один раз, даже если по другому его ребру также может быть рекомендован флип.
Это сделано потому, что после перестраивания треугольника по одному ребру, изменяются взаимоотношения этого треугольника с другими треугольниками.
Из этого следует, что за один проход не всегда можно получить все возможные перестроения.
Более того, новые треугольники, полученные после перестраивания могут привести к возникновению новых пар треугольников, для которых будет желателен флип.
Перестроить (флип), при необходимости, треугольнико модели поверхности - после выбора этого пункта меню появляется диалог:
Разрешить перестраивать общие ребра, по которым проходят полилинии (полилинии при этом разорвутся) - если этот элемент не отмечен, то пары треугольников, соединяющиеся между собой ребром, по которому проходит полилиния, не рассматриваются в качестве претендентов на флип. В большинстве случаем этот элемент не отмечается, т.к. его включение может привести к фрагментации полилиний в модели поверхности.
Ограничить перестраивание треугольников одним проходом - если отметить этот элемент, то перестроены будут только те треугольники, которые попали бы в список при выборе предыдущего пункта всплывающего меню.
Если этот элемен не отмечен, то после обработки всех треугольников и наличии флипов производится повторное рассмотрение треугольников с учетом новых треугольников, полученных после флипов.
Не делать флип, если двугранный угол между треугольниками (от 0 до 180) меньше заданного значения - в некоторых случаях можно не рассматривать флип, если двугранный угол между треугольниками относительно небольшой.
После флипов, информация о результатах выводится в окно с информацией о работе с программой. Например :
--------------------------------
Перестраивание (флип) треугольников модели ПОВЕРХНОСТИ
Файл 'E:\Примеры\DGS\Флип ребра\Средняя поверхность.dgs'
Модель поверхности № 1 (ID=1). Назв. объекта ''
Всего точек = 3069, всего треугольников = 6037. (НЕЗАМКНУТАЯ)
*Флип* 68 ( 2 ) <==> 114 ( 2 )
*Флип* 305 ( 3 ) <==> 356 ( 3 )
*Флип* 440 ( 2 ) <==> 496 ( 1 )
*Флип* 1019 ( 2 ) <==> 1105 ( 1 )
*Флип* 1379 ( 2 ) <==> 1485 ( 1 )
*Флип* 1978 ( 3 ) <==> 2099 ( 1 )
Количество пар треугольников, для которых произведено перестраивание с использованием флипа = 6