Esempio n. 1
0
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;
        }
}