VCG Library
trimesh_disk_parametrization.cpp
1 /****************************************************************************
2 * VCGLib o o *
3 * Visual and Computer Graphics Library o o *
4 * _ O _ *
5 * Copyright(C) 2004-2009 \/)\/ *
6 * Visual Computing Lab /\/| *
7 * ISTI - Italian National Research Council | *
8 * \ *
9 * All rights reserved. *
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 * This program is distributed in the hope that it will be useful, *
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
19 * GNU General Public License (http://www.gnu.org/licenses/gpl.txt) *
20 * for more details. *
21 * *
22 ****************************************************************************/
23 
24 #include<vcg/complex/complex.h>
25 #include<vcg/complex/algorithms/create/platonic.h>
26 #include<vcg/complex/algorithms/parametrization/poisson_solver.h>
27 #include<vcg/complex/algorithms/update/texture.h>
28 #include<wrap/io_trimesh/import_ply.h>
29 #include<wrap/io_trimesh/export_ply.h>
30 
31 using namespace vcg;
32 using namespace std;
33 
34 class MyEdge;
35 class MyFace;
36 class MyVertex;
37 struct MyUsedTypes : public UsedTypes< Use<MyVertex> ::AsVertexType,
38  Use<MyEdge> ::AsEdgeType,
39  Use<MyFace> ::AsFaceType>{};
40 
41 class MyVertex : public Vertex<MyUsedTypes, vertex::Coord3f, vertex::Normal3f, vertex::TexCoord2f, vertex::BitFlags >{};
42 class MyFace : public Face< MyUsedTypes, face::VertexRef, face::BitFlags, face::FFAdj , face::WedgeTexCoord2f> {};
43 class MyEdge : public Edge<MyUsedTypes>{};
44 class MyMesh : public tri::TriMesh< vector<MyVertex>, vector<MyFace> , vector<MyEdge> > {};
45 
46 
47 int main( int argc, char **argv )
48 {
49  MyMesh m;
50  if(argc < 2 ) return -1;
51 
52  printf("Reading %s\n",argv[1]);
53  int ret= tri::io::ImporterPLY<MyMesh>::Open(m,argv[1]);
54  if(ret!=0)
55  {
56  printf("Unable to open %s for '%s'\n",argv[1],tri::io::ImporterPLY<MyMesh>::ErrorMsg(ret));
57  return -1;
58  }
59 
60  printf("Mesh has %i vn %i fn\n",m.VN(),m.FN());
61  tri::PoissonSolver<MyMesh> PS(m);
62 
63  if(!PS.IsFeasible())
64  {
65  printf("mesh is not homeomorphic to a disk\n");
66  return -1;
67  } else
68  printf("OK - mesh is homeomorphic to a disk\n");
69 
70  PS.Init();
71  PS.SetBorderAsFixed();
72  PS.FixDefaultVertices();
73  PS.SolvePoisson(true);
74 
76  tri::io::ExporterPLY<MyMesh>::Save(m,"pippo.ply",tri::io::Mask::IOM_WEDGTEXCOORD);
77 
78  return 0;
79 }