MC_mesh_fast_draw.cpp

Go to the documentation of this file.
00001 
00002 #include <MC_connectivity_index.hpp>
00003 #include <MC_v3d_vector.hpp>
00004 #include <MC_mesh_index_vector.hpp>
00005 #include <MC_mesh_index_vector_draw.hpp>
00006 
00007 #include <MC_mesh_fast_draw.hpp>
00008 
00009 
00010 namespace mesh_conv
00011 {
00012 
00013     MC_mesh_fast_draw::MC_mesh_fast_draw(){}
00014     MC_mesh_fast_draw::~MC_mesh_fast_draw(){}
00015 
00016     MC_mesh_fast_draw::MC_mesh_fast_draw(const MC_connectivity_index& input_connectivity,const MC_v3d_vector& input_point_set)
00017     {
00018         int N_large=10000;
00019 
00020         int N_polygon=input_connectivity.size();
00021         if(N_polygon>N_large)
00022         {std::cout<<"MC_mesh_fast_draw build for large mesh ..."<<std::endl;}
00023 
00024         set_connectivity(input_connectivity);
00025         set_point_set(input_point_set);
00026 
00027         // normal per vertex
00028         MC_v3d_vector normal = MC_mesh_index_vector::normal_vertex(input_point_set,input_connectivity);
00029         set_normal(normal);
00030 
00031     }
00032     MC_mesh_fast_draw::MC_mesh_fast_draw(const MC_mesh_index_vector& mesh)
00033     {*this=MC_mesh_fast_draw(mesh.connectivity(),mesh.point_set());}
00034     MC_mesh_fast_draw::MC_mesh_fast_draw(const MC_mesh_index_vector_draw& mesh)
00035     {
00036         int N_large=10000;
00037         
00038         int N_polygon=mesh.connectivity().size();
00039         if(N_polygon>N_large)
00040         {std::cout<<"MC_mesh_fast_draw build for large mesh ..."<<std::endl;}
00041 
00042 
00043 
00044         set_point_set(mesh.point_set());
00045         set_connectivity(mesh.connectivity());
00046         if(mesh.normal().size()==mesh.vertex_number())
00047             set_normal(mesh.normal());
00048         else
00049         {
00050             std::cout<<"Error: mesh.normal().size()="<<mesh.normal().size()<<std::endl;
00051             std::cout<<"Error: mesh.vertex_number()="<<mesh.vertex_number()<<std::endl;
00052             std::cout<<"Error in MC_mesh_fast_draw::MC_mesh_fast_draw(const MC_mesh_index_vector_draw& mesh), should implement normal not per vertex"<<std::endl;
00053         }
00054 
00055         if(mesh.color().size()==mesh.vertex_number())
00056             set_color(mesh.color());
00057         else{}
00058         //{std::cout<<"Error in MC_mesh_fast_draw::MC_mesh_fast_draw(const MC_mesh_index_vector_draw& mesh), should implement color not per vertex"<<std::endl;}
00059 
00060         if(mesh.texture().size()!=0)
00061             set_texture(mesh.texture());
00062         //else
00063         //{std::cout<<"Error in MC_mesh_fast_draw::MC_mesh_fast_draw(const MC_mesh_index_vector_draw& mesh), should implement texture not per vertex"<<std::endl;exit(-1);}
00064 
00065 
00066         if(N_polygon>N_large)
00067         {std::cout<<"MC_mesh_fast_draw build for large mesh [ok normal]"<<std::endl;}
00068 
00069     }
00070 
00071     const std::map <int,MC_int_vector>& MC_mesh_fast_draw::connectivity() const
00072     {return connectivity_mesh;}
00073     const MC_double_vector& MC_mesh_fast_draw::point_set() const {return point_set_mesh;}
00074     MC_double_vector& MC_mesh_fast_draw::point_set() {return point_set_mesh;}
00075     const MC_double_vector& MC_mesh_fast_draw::color() const {return color_mesh;}
00076     const MC_double_vector& MC_mesh_fast_draw::texture() const {return texture_mesh;}
00077     const MC_double_vector& MC_mesh_fast_draw::normal() const {return normal_mesh;}
00078     MC_double_vector& MC_mesh_fast_draw::normal() {return normal_mesh;}
00079 
00080 
00081     MC_mesh_fast_draw& MC_mesh_fast_draw::set_point_set(const MC_v3d_vector& point_set)
00082     {
00083         int N_large=10000;
00084         int N_vertex=point_set.size();
00085 
00086         if(N_vertex>N_large)
00087         {std::cout<<"MC_mesh_fast_draw build point_set for large mesh"<<std::endl;}
00088 
00089 
00090         // continuous point set
00091         point_set_mesh.resize(3*N_vertex);
00092         for(int k_vertex=0;k_vertex<N_vertex;++k_vertex)
00093             for(int k_dim=0;k_dim<3;++k_dim)
00094                 point_set_mesh[3*k_vertex+k_dim]=point_set[k_vertex][k_dim];
00095 
00096         if(N_vertex>N_large)
00097         {std::cout<<"MC_mesh_fast_draw build for large mesh [ok point_set]"<<std::endl;}
00098 
00099         return *this;
00100     }
00101     MC_mesh_fast_draw& MC_mesh_fast_draw::set_connectivity(const MC_connectivity_index& input_connectivity)
00102     {
00103         int N_large=10000;
00104         int N_polygon=input_connectivity.size();
00105 
00106         if(N_polygon>N_large)
00107         {std::cout<<"MC_mesh_fast_draw build connectivity for large mesh"<<std::endl;}
00108 
00109         std::map <int,MC_int_vector> :: iterator it;
00110         // sort the connectivity depending on the size
00111         for(int k_polygon=0;k_polygon<N_polygon;++k_polygon)
00112         {
00113             int current_size=input_connectivity[k_polygon].size();
00114             it=connectivity_mesh.find(current_size);
00115 
00116             // must initialize this size
00117             if(it==connectivity_mesh.end())
00118             {
00119                 connectivity_mesh.insert(std::pair <int,MC_int_vector>(current_size,MC_int_vector()));
00120                 it=connectivity_mesh.find(current_size);
00121                 if(it==connectivity_mesh.end())
00122                 {std::cout<<"Error in MC_mesh_fast_draw::MC_mesh_fast_draw(connectivity,point_set), cannot create map"<<std::endl;exit(-1);}
00123             }
00124             // now add the polygon at the correct place
00125             it->second.add(input_connectivity[k_polygon]);
00126         }
00127 
00128         if(N_polygon>N_large)
00129         {std::cout<<"MC_mesh_fast_draw build for large mesh [ok connectivity]"<<std::endl;}
00130 
00131         return *this;
00132     }
00133     MC_mesh_fast_draw& MC_mesh_fast_draw::set_color(const MC_v3d_vector& color)
00134     {
00135 
00136         int N_vertex=color.size();
00137         int N_large=10000;
00138         if(N_vertex>N_large)
00139         {std::cout<<"MC_mesh_fast_draw build color for large mesh"<<std::endl;}
00140 
00141 
00142         color_mesh.resize(3*N_vertex);
00143         for(int k_vertex=0;k_vertex<N_vertex;++k_vertex)
00144             for(int k_dim=0;k_dim<3;++k_dim)
00145                 color_mesh[3*k_vertex+k_dim]=color[k_vertex][k_dim];
00146 
00147         if(N_vertex>N_large)
00148         {std::cout<<"MC_mesh_fast_draw build for large mesh [ok color]"<<std::endl;}
00149 
00150         if(color_mesh.size()!=point_set_mesh.size())
00151         {std::cout<<"Error in MC_mesh_fast_draw::set_color(const MC_v3d_vector& color), color has size("<<color.size()<<"), and point_set has size("<<point_set_mesh.size()/3<<")"<<std::endl;exit(-1);}
00152         return *this;
00153     }
00154     MC_mesh_fast_draw& MC_mesh_fast_draw::set_normal(const MC_v3d_vector& normal)
00155     {
00156         int N_vertex=normal.size();
00157         int N_large=10000;
00158         if(N_vertex>N_large)
00159         {std::cout<<"MC_mesh_fast_draw build normal for large mesh"<<std::endl;}
00160 
00161 
00162         normal_mesh.resize(3*N_vertex);
00163         for(int k_vertex=0;k_vertex<N_vertex;++k_vertex)
00164             for(int k_dim=0;k_dim<3;++k_dim)
00165                 normal_mesh[3*k_vertex+k_dim]=normal[k_vertex][k_dim];
00166 
00167         if(N_vertex>N_large)
00168         {std::cout<<"MC_mesh_fast_draw build for large mesh [ok normal]"<<std::endl;}
00169 
00170         if(normal_mesh.size()!=point_set_mesh.size())
00171         {std::cout<<"Error in MC_mesh_fast_draw::set_normal(const MC_v3d_vector& normal), normal has size("<<normal.size()<<"), and point_set has size("<<point_set_mesh.size()/3<<")"<<std::endl;exit(-1);}
00172         return *this;
00173     }
00174 
00175     MC_mesh_fast_draw& MC_mesh_fast_draw::set_texture(const MC_v3d_vector& texture)
00176     {
00177 
00178         int N_vertex=texture.size();
00179         int N_large=10000;
00180         if(N_vertex>N_large)
00181         {std::cout<<"MC_mesh_fast_draw build texture for large mesh"<<std::endl;}
00182 
00183 
00184         texture_mesh.resize(2*N_vertex);
00185         for(int k_vertex=0;k_vertex<N_vertex;++k_vertex)
00186             for(int k_dim=0;k_dim<2;++k_dim)
00187                 texture_mesh[2*k_vertex+k_dim]=texture[k_vertex][k_dim];
00188 
00189         if(N_vertex>N_large)
00190         {std::cout<<"MC_mesh_fast_draw build for large mesh [ok texture]"<<std::endl;}
00191 
00192 //        if(texture_mesh.size()*3!=point_set_mesh.size()*2)
00193 //        {std::cout<<"Error in MC_mesh_fast_draw::set_texture(const MC_v3d_vector& color), texture has size("<<texture.size()<<"), and point_set has size("<<point_set_mesh.size()/3<<")"<<std::endl;exit(-1);}
00194         return *this;
00195     }
00196 
00197 }

Generated on Sun Apr 18 20:24:47 2010 by  doxygen 1.6.1