Estructura half-edge (II): cómo add_face repara el lazo de frontera

Fuentes: Half-Edge Data Structure. Part 2

Este artículo constituye la segunda entrega de una serie sobre la estructura de datos half-edge y analiza, paso a paso, el funcionamiento interno de la función add_face de OpenMesh. Tras recordar en la primera parte los fundamentos del modelo y su recorrido, el texto se centra en lo que ocurre cuando se añade una cara nueva a una malla ya existente.

El autor parte de un ejemplo concreto: un cuadrado formado por dos triángulos (F0 y F1) y un tercer triángulo (F2) que comparte la arista E1 con el cuadrado. Antes de añadir F2, el lazo de frontera está cerrado y contiene cuatro half-edges. La inserción de la nueva cara no se reduce a crear las aristas que faltan: si no se actualizan los enlaces, el recorrido cae dentro de F2 y orbita indefinidamente, rompiendo la frontera.

La reparación se basa en una invariante: next(h) debe ser el siguiente half-edge del mismo ciclo que comienza donde termina h. Para cada half-edge de frontera afectado, el algoritmo fix_next se sitúa en el vértice final y rota entre los half-edges salientes hasta encontrar el primero que aún no pertenece a ninguna cara. Tres escrituras de puntero (h7→h13→h11→h1) cierran de nuevo el lazo. El artículo muestra el cálculo explícito para los tres vértices involucrados (v2, v4 y v1) y demuestra cómo el resultado es el mismo que el que produce OpenMesh mediante operaciones directas de splice.

OpenMesh evita el recorrido general porque los vecinos anteriores y siguientes de h3 ya codifican los reemplazos. Para no perderlos durante la actualización, add_face guarda las asignaciones previstas en next_cache_ y las aplica en lote al final. El texto cierra describiendo el caso más complejo de re-enlace (parches de frontera entre dos lados consecutivos) y la función adjust_outgoing_halfedge, que ajusta el half-edge representante del vértice sin modificar la topología. En resumen, add_face valida y crea aristas, construye el contorno interno de la cara y repara los enlaces de frontera circundantes.