Face <T> :: Face ( const Container <Node3DCartesian <T> *, destructable> &nl, Container <HalfEdge <T> *> &hl ) { //Create Face from the list of nodes this->vertices_count = nl.size(); this->edge = NULL; //Nodes list contains some points if ( this->vertices_count > 2 ) { //Create first half edge HalfEdge <T> *h = new HalfEdge <T> ( nl [0], NULL, NULL, NULL ); //Create first edge HalfEdge <T> *h_start = h; hl.push_back ( h ); //Create other half edges HalfEdge <T> *h_old = h; //Process all vertices for ( unsigned int i = 1; i < this->vertices_count; i++, h_old = h ) { //Create new edge and set previous edge h = new HalfEdge <T> ( nl [i], h_old, NULL, NULL ); //Set next edge h_old->setNextEdge ( h ); //Set face for each edge h->setFace ( this ); //Add half edge to the list hl.push_back ( h ); } //Set previous edge of the first edge h_start->setPreviousEdge ( h ); //Set next edge for the last edge h->setNextEdge ( h_start ); //Set face for h start h_start->setFace ( this ); //Set start edge of the Face this->edge = h_start; } }