00001 #include <stdio.h> 00002 #include <time.h> 00003 00004 #include "mesh_definition.h" 00005 #include<vcg/complex/trimesh/allocate.h> 00006 #include<vcg/complex/trimesh/create/platonic.h> 00007 #include<vcg/complex/trimesh/update/topology.h> 00008 #include<vcg/complex/trimesh/update/flag.h> 00009 #include<vcg/complex/trimesh/update/normal.h> 00010 #include <vcg/complex/trimesh/refine.h> 00011 00012 using namespace vcg; 00013 using namespace std; 00014 00015 int main(int , char **) 00016 { 00017 00018 vcg::tri::Allocator<CMesh>::NameTypeScope bounds; 00019 vcg::tri::Allocator<CMesh>::AddNameTypeBound<float>(bounds,"myfloat"); 00020 00021 00022 CMesh cm; 00023 CMeshOcf cmof; 00024 CMeshOcc cmoc; 00025 00026 CMesh::VertexPointer v = cm.face[0].V(0); 00027 00028 00029 cmoc.face.EnableAttribute<CFaceOcc::NormalType>(); 00030 CMeshOcc::FaceIterator fi = vcg::tri::Allocator<CMeshOcc>::AddFaces(cmoc,1); 00031 (*fi).N() = vcg::Point3f(9,9,9); 00032 00033 00034 tri::Tetrahedron(cm); 00035 tri::Tetrahedron(cmof); 00036 tri::Tetrahedron(cmoc); 00037 00038 printf("Generated mesh has %i vertices and %i triangular faces\n",cm.vn,cm.fn); 00039 00043 00044 cmoc.face.EnableAttribute<CFaceOcc::FFAdjType>(); 00045 cmof.face.EnableFFAdjacency(); 00046 00047 00048 printf("Size of CFace %3i\n",sizeof(CFace)); 00049 printf("Size of CFaceOcf %3i\n",sizeof(CFaceOcf)); 00050 printf("Size of CFaceOcc %3i\n",sizeof(CFaceOcc)); 00051 00052 vcg::tri::UpdateTopology<CMesh >::FaceFace(cm); 00053 vcg::tri::UpdateTopology<CMeshOcf>::FaceFace(cmof); 00054 vcg::tri::UpdateTopology<CMeshOcc>::FaceFace(cmoc); 00055 00056 vcg::tri::UpdateFlags<CMesh >::FaceBorderFromFF(cm); 00057 vcg::tri::UpdateFlags<CMeshOcf>::FaceBorderFromFF(cmof); 00058 vcg::tri::UpdateFlags<CMeshOcc>::FaceBorderFromFF(cmoc); 00059 00060 vcg::tri::UpdateNormals<CMesh >::PerVertexNormalized(cm); 00061 vcg::tri::UpdateNormals<CMeshOcf>::PerVertexNormalized(cmof); 00062 vcg::tri::UpdateNormals<CMeshOcc>::PerVertexNormalized(cmoc); 00063 00064 00065 printf("Normal of face 0 is %f %f %f\n\n",cm.face[0].N()[0],cm.face[0].N()[1],cm.face[0].N()[2]); 00066 int t0=0,t1=0,t2=0,t3=0; 00067 while(t3-t0<3000) 00068 { 00069 t0=clock(); 00070 Refine(cm,MidPointButterfly<CMesh>(),0); 00071 t1=clock(); 00072 Refine(cmof,MidPointButterfly<CMeshOcf>(),0); 00073 t2=clock(); 00074 Refine(cmoc,MidPointButterfly<CMeshOcc>(),0); 00075 t3=clock(); 00076 printf("Mesh is %i %i in Std:%i Ocf:%i Occ:%i\n",cm.vn,cm.fn,t1-t0,t2-t1,t3-t2); 00077 } 00078 return 0; 00079 }