void Triangulation::color(const Triangulation_coloring &coloring)
{
    switch(coloring)
    {
    case T_PLAIN:
        color_plain();
        break;
    case T_STRIPES_1:
        color_stripes_1();
        break;
    case T_STRIPES_2:
        color_stripes_2();
        break;
    case T_STRIPES_3:
        color_stripes_3();
        break;
    case T_TRIANGLES:
        color_triangles();
        break;
    case T_SQUARES:
        color_squares();
        break;
    case T_SQUARES_2:
        color_squares_2();
        break;
    case T_SHADING:
        color_shading();
        break;
    case T_IMAGE:
        color_null();
        break;
    default:
        std::cout << "ERROR in Graph_Triangulater::color: flag problem" << std::endl;
        throw(QString("ERROR in Graph_Triangulater::color: flag problem"));
    }

    return;
}
    bool chessboard_coloring::run(viennamesh::algorithm_handle &)
    {
        viennamesh::info(1) << name() << std::endl;

        //get input mesh and create output mesh
        mesh_handle input_mesh = get_required_input<mesh_handle>("mesh");
        mesh_handle output_mesh = make_data<mesh_handle>();

        //Typedefs
        typedef viennagrid::mesh                                                                  MeshType;
        // typedef viennagrid::result_of::element<MeshType>::type                                    VertexType;
        typedef viennagrid::result_of::element<MeshType>::type                                    EdgeType;
        typedef viennagrid::result_of::element<MeshType>::type                                    TriangleType;

        //typedef viennagrid::result_of::element_range<MeshType, 0>::type                           VertexRange;

        typedef viennagrid::result_of::element_range<MeshType, 2>::type                           TriangleRange; 
        typedef viennagrid::result_of::iterator<TriangleRange>::type                              TriangleIterator; 

        typedef viennagrid::result_of::neighbor_range<MeshType, 1, 2>::type                       TriangleNeighborRangeType;
        typedef viennagrid::result_of::iterator<TriangleNeighborRangeType>::type                  TriangleNeighborIterator;
                        
        //get number of vertices and triangles
        int num_vertices = viennagrid::vertex_count(input_mesh());
        int num_triangles = viennagrid::element_count(input_mesh(), 2);
/*
        viennamesh::info(2) << "Number of vertices in mesh : " << num_vertices << std::endl;
        viennamesh::info(2) << "Number of triangles in mesh: " << num_triangles << std::endl;
*/
        //set up accessor
        std::vector<bool> color_triangles(num_triangles, false);
        std::vector<bool> touched (num_triangles, false);

        viennagrid::result_of::accessor<std::vector<bool>, TriangleType>::type color_accessor(color_triangles);

        //set first element to color "black" (BOOL = TRUE)
        color_accessor.set(viennagrid::cells(input_mesh())[0], true);

        //iterate triangles in mesh
        TriangleRange triangles(input_mesh());

        //Iterate over all triangles in the mesh
        viennagrid_element_id * triangle_ids_begin;
        viennagrid_element_id * triangle_ids_end;
        viennagrid_dimension topological_dimension = viennagrid::cell_dimension( input_mesh() );	

        viennagrid_element_id * neighbor_begin;
        viennagrid_element_id * neighbor_end;

        viennagrid_dimension connector = 1;

        viennagrid_mesh_elements_get(input_mesh().internal(), topological_dimension, &triangle_ids_begin, &triangle_ids_end);	

        viennagrid::quantity_field color_field(2,1);
       // viennagrid_quantity_field_create(&color_field);
        color_field.set_name("color");

        //viennagrid_quantity_field_init(color_field, 2, VIENNAGRID_QUANTITY_FIELD_TYPE_NUMERIC, 1 , VIENNAGRID_QUANTITY_FIELD_STORAGE_DENSE);

        //get triangles from mesh

        for (viennagrid_element_id *tri = triangle_ids_begin; tri != triangle_ids_end; ++tri)
        {
            int tri_index = viennagrid_index_from_element_id( *tri );

            //std::cout << tri_index << std::endl;

            if ( !touched[tri_index])
            { 
                //color_accessor.set(viennagrid::cells(input_mesh())[tri_index], true);
                color_triangles[tri_index] = true;
                touched[tri_index] = true;

                double clr = 1;

                color_field.set(*tri, clr);

                viennagrid_element_neighbor_elements(input_mesh().internal(), *tri, 0, 2, &neighbor_begin, &neighbor_end);

                for (viennagrid_element_id *n_tri = neighbor_begin; n_tri != neighbor_end; ++n_tri)
                {
                    int n_tri_index = viennagrid_index_from_element_id( *n_tri );

                    //std::cout << "  " << n_tri_index << std::endl;

                    viennagrid_element_id * n_neighbor_begin;
                    viennagrid_element_id * n_neighbor_end;

                    viennagrid_element_neighbor_elements(input_mesh().internal(), *n_tri, 0, 2, &n_neighbor_begin, &n_neighbor_end);

                    for (viennagrid_element_id *n_n_tri = n_neighbor_begin; n_n_tri != n_neighbor_end; ++n_n_tri)
                    {
                        int n_n_tri_index = viennagrid_index_from_element_id( *n_n_tri );

                        if ( !touched[n_n_tri_index])
                        { 
                            //color_accessor.set(viennagrid::cells(input_mesh())[n_tri_index], false);
                            touched[n_n_tri_index] = true;

                            clr = 0;
                            color_field.set(*n_n_tri, clr);
                        }
                    }
                }
            }
        }

        output_mesh = input_mesh;
        quantity_field_handle quantities = make_data<viennagrid::quantity_field>();

        quantities.set(color_field);
   
        set_output("color_field", quantities);
        set_output("mesh", output_mesh());

        return true;
    } //end of bool chessboard_coloring::run(viennamesh::algorithm_handle &)