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
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
00059
00060 if(mesh.texture().size()!=0)
00061 set_texture(mesh.texture());
00062
00063
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
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
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
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
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
00193
00194 return *this;
00195 }
00196
00197 }