Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "rtc/rtcTriMesh.h"
00022
00023
00024 namespace rtc {
00025
00026 Vec3f point_to_vec(const Point& p)
00027 {
00028 return(Vec3f(p[0],p[1],p[2]));
00029 }
00030
00031 Vec3f normal_to_vec(const Normal& p)
00032 {
00033 return(Vec3f(p[0],p[1],p[2]));
00034 }
00035
00036 Vec3uc color_to_vec(const Color& p)
00037 {
00038 return(Vec3uc(p[0],p[1],p[2]));
00039 }
00040
00041 Point vec_to_point(const Vec3f& v)
00042 {
00043 return(Point(v[0],v[1],v[2]));
00044 }
00045
00046 Normal vec_to_normal(const Vec3f& v)
00047 {
00048 return(Normal(v[0],v[1],v[2]));
00049 }
00050
00051 Color vec_to_color(const Vec3uc& v)
00052 {
00053 return(Color(v[0],v[1],v[2]));
00054 }
00055
00056 void convertMeshToTriMesh(const Mesh3D& input, TriMesh& output)
00057 {
00058 output.request_vertex_normals();
00059 output.request_face_normals();
00060 output.request_vertex_colors();
00061
00062
00063 int nverts = (int)input.vertices.size();
00064 for (int i=0;i<nverts;++i)
00065 {
00066 Vec3f& p = input.vertices[i]->p;
00067 Vec3f& n = input.vertices[i]->n;
00068 Vec3uc& c = input.vertices[i]->c;
00069 VertexHandle vh = output.add_vertex(vec_to_point(p));
00070 output.set_normal(vh,vec_to_normal(n));
00071 output.set_color(vh,vec_to_color(c));
00072 }
00073
00074
00075 int nfaces = (int)input.faces.size();
00076 std::vector<VertexHandle> newFace(3);
00077 for (int i=0;i<nfaces;++i)
00078 {
00079 Face3D* f = input.faces[i];
00080 newFace[0] = output.vertex_handle(f->v(0));
00081 newFace[1] = output.vertex_handle(f->v(1));
00082 newFace[2] = output.vertex_handle(f->v(2));
00083 FaceHandle fh = output.add_face(newFace);
00084 output.set_normal(fh,vec_to_normal(f->n));
00085 }
00086 }
00087
00088 void convertTriMeshToMesh(const TriMesh& input, Mesh3D& output)
00089 {
00090
00091 ConstVertexIter vIt, vEnd;
00092 ConstFaceIter fIt, fEnd;
00093 ConstFaceVertexIter cfvIt;
00094
00095
00096 output.clear();
00097
00098 int i = 0;
00099 for(vIt=input.vertices_begin(), vEnd = input.vertices_end(); vIt != vEnd; ++vIt,++i) {
00100 Vec3f p = point_to_vec(input.point(vIt));
00101 Vertex3D* v = output.addVertex(p);
00102 v->n = normal_to_vec(input.normal(vIt));
00103 v->c = color_to_vec(input.color(vIt));
00104 v->setBoundary(input.is_boundary(vIt));
00105 }
00106
00107 int face[3];
00108 for(fIt=input.faces_begin(), fEnd = input.faces_end(); fIt != fEnd; ++fIt) {
00109
00110 cfvIt = input.cfv_iter(fIt);
00111 for(int j=0; j<3; j++) {
00112 face[j] = cfvIt.handle().idx();
00113 ++cfvIt;
00114 }
00115 Face3D* f = output.addFace(face);
00116 f->n = normal_to_vec(input.normal(cfvIt));
00117 }
00118 }
00119
00120
00121
00122 }
00123