Euler Operators

Euler operators are a closed and complete set of operators for mesh manipulation which – at any time – leave a topologically correct B-rep mesh.

queddy implements a set of 5 Euler operator pairs which are inverse to each other and are explained in detail in the subsequent sections:

The letters m and k stand for make and kill. v, e, and f stand for the B-rep mesh items vertex, edge, and face, respectively. r represents a ring, and h a hole.

mvefs ⇔ kvefs

Use case "shell creation":

mvefs is the initial Euler operator for a new three-dimensional object.

Inversely, kvefs is the last Euler operator when removing a three-dimensional object.

mev ⇔ kev

Use case "vertex split":

mev expects two references to existing edges in the B-rep mesh: e0 and e1. Both edges must belong to the same vertex. e0 and all edges of the vertex in clockwise direction until (excluding) e1 will be assigned to the new vertex. All other edges (including) e1 remain assigned to the existing vertex.

Inversely, kev kills the edge e and its vertex and reassigns all edges of the killed vertex to the remaining vertex.

Use case "edge split":

The only difference to the use case "vertex split" is that there is no other edge between e0 and e1 in clockwise direction. This means that e0 is the only edge to be assigned to the new vertex which effectively splits e0 by the new vertex into two edges: e0 and the newly created e.

Use case "dangling vertex" (1):

A "dangling vertex" is created if the two edge references given to mev actually point to one and the same edge e0. Then, a new edge to a new vertex is created without reassigning any other edges to the new vertex.

Use case "dangling vertex" (2):

A "dangling vertex" can also be created based on a previous dangling vertex/edge. This is a common use case, in particular after a mvefs operation, to create a chain of edges for a face boundary.

mef ⇔ kef

Use case: "face split"

mef expects two references to existing edges in the B-rep mesh: e0 and e1. Both edges must belong to the same face which is split in two by inserting a diagonal. e0 and the new edge e belong to the boundary of the new face.

Inversely, kef kills the edge e and its face and reassigns all edges of the killed face to the remaining face.

mekr ⇔ kemr

Use case: "ring creation"

kemr expects one reference to an existing edge in the B-rep mesh: e. Both half-edges of e must belong to the boundary of the same face.kemr removes e which results in two separate boundaries: the one who contains the vertex of half-edge e turns into a ring of the baseface surrounded by the other.

Inversely, mekr expects two references to existing edges in the B-rep mesh: e0 and e1. e0 must belong to the boundary of a ring and e1must belong to the boundary of the ring's baseface. A new edge e is created between e0 and e1 which connects the ring boundary with the baseface boundary. By this, the ring topologically disappears.

mfkrh ⇔ kfmrh

Use case: "hole creation"

kfmrh expects two references to existing edges in the B-rep mesh: e0 and e1. The faces of e0 and e1 lie in the same plane and back-to-back to each other (i.e. their face normals point into opposite directions).kfmrh kills the face of e0 and turns its boundary into a ring hole of the face of e1.

Inversely, mfkrh expects one reference to an existing edge in the B-rep mesh: e0. e0 must belong to the boundary of a ring hole. This ring hole is removed from its baseface and becomes the boundary of a new face.