23 #include<vcg/complex/complex.h>
26 #include <wrap/io_trimesh/import_ply.h>
27 #include <wrap/io_trimesh/export_ply.h>
29 #include<vcg/complex/algorithms/outline_support.h>
31 #include <vcg/space/outline2_packer.h>
32 #include <wrap/qt/outline2_rasterizer.h>
34 #include <vcg/space/rasterized_outline2_packer.h>
35 #include <wrap/qt/Outline2ToQImage.h>
50 struct MyUsedTypes :
public UsedTypes< Use<MyVertex>::AsVertexType, Use<MyFace>::AsFaceType>{};
52 class MyVertex :
public Vertex< MyUsedTypes, vertex::Coord3f, vertex::BitFlags >{};
53 class MyFace :
public Face < MyUsedTypes, face::VertexRef, face::FFAdj, face::WedgeTexCoord2f, face::Mark, face::BitFlags > {};
54 class MyMesh :
public tri::TriMesh< std::vector<MyVertex>, std::vector<MyFace > >{};
57 int main(
int ,
char ** )
60 tri::io::ImporterPLY<MyMesh>::Open(m,
"../../meshes/bunny10k_textured.ply");
64 for(
auto &&f : m.face)
67 Point3f(f.WT(0).U(),f.WT(0).V(),0),
68 Point3f(f.WT(1).U(),f.WT(1).V(),0),
69 Point3f(f.WT(2).U(),f.WT(2).V(),0));
75 std::vector<std::pair<int,MyMesh::FacePointer> > fpVec;
77 printf(
"Mesh has %lu texture components\n",fpVec.size());
78 tri::io::ExporterPLY<MyMesh>::Save(tm,
"out.ply");
79 std::vector< std::vector<Point2f> > outline2Vec;
82 for(
size_t i=0; i<fpVec.size();++i)
85 fpVec[i].second->SetS();
93 std::vector< std::vector<Point3f> > outline3Vec;
94 tri::OutlineUtil<float>::ConvertMeshBoundaryToOutline3Vec(comp, outline3Vec);
95 std::vector< std::vector<Point2f> > compOutline2Vec;
96 tri::OutlineUtil<float>::ConvertOutline3VecToOutline2Vec(outline3Vec,compOutline2Vec);
97 int largestInd=tri::OutlineUtil<float>::LargestOutline2(compOutline2Vec);
98 if(tri::OutlineUtil<float>::Outline2Area(compOutline2Vec[largestInd])<0)
99 tri::OutlineUtil<float>::ReverseOutline2(compOutline2Vec[largestInd]);
101 outline2Vec.push_back(compOutline2Vec[largestInd]);
104 printf(
"Mesh has %lu texture components\n",outline2Vec.size());
106 Outline2Dumper::Param pp;
109 std::vector<Similarity2f> trVec(outline2Vec.size(),sim);
110 printf(
"Mesh has %lu texture components\n",outline2Vec.size());
113 Outline2Dumper::dumpOutline2VecPNG(
"PrePack.png",outline2Vec,trVec,pp);
116 const Point2i containerSize(1024,1024);
117 Point2f finalSize(1024,1024);
118 PolyPacker<float>::PackAsAxisAlignedRect(outline2Vec,containerSize,trVec,finalSize);
120 Outline2Dumper::dumpOutline2VecPNG(
"PostPack.png",outline2Vec,trVec,pp);
123 RasterizedOutline2Packer<float, QtOutline2Rasterizer>::Parameters packingParam;
124 packingParam.costFunction = RasterizedOutline2Packer<float, QtOutline2Rasterizer>::Parameters::LowestHorizon;
125 packingParam.doubleHorizon =
true;
126 packingParam.innerHorizon =
true;
127 packingParam.permutations =
false;
128 packingParam.rotationNum = 16;
129 packingParam.gutterWidth = 2;
131 RasterizedOutline2Packer<float, QtOutline2Rasterizer>::Pack(outline2Vec,containerSize,trVec,packingParam);
132 Outline2Dumper::dumpOutline2VecPNG(
"PostPackRR.png",outline2Vec,trVec,pp);