diff --git a/apps/sample/trimesh_voronoisampling/trimesh_voronoisampling.cpp b/apps/sample/trimesh_voronoisampling/trimesh_voronoisampling.cpp new file mode 100644 index 00000000..3063dafc --- /dev/null +++ b/apps/sample/trimesh_voronoisampling/trimesh_voronoisampling.cpp @@ -0,0 +1,110 @@ +/**************************************************************************** +* VCGLib o o * +* Visual and Computer Graphics Library o o * +* _ O _ * +* Copyright(C) 2004-2009 \/)\/ * +* Visual Computing Lab /\/| * +* ISTI - Italian National Research Council | * +* \ * +* All rights reserved. * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License (http://www.gnu.org/licenses/gpl.txt) * +* for more details. * +* * +****************************************************************************/ + +#include +#include +#include +#include +#include +#include + + +using namespace vcg; +using namespace std; + +class MyEdge; +class MyFace; +class MyVertex; +struct MyUsedTypes : public UsedTypes< Use ::AsVertexType, + Use ::AsEdgeType, + Use ::AsFaceType>{}; + +class MyVertex : public Vertex{}; +class MyFace : public Face< MyUsedTypes, face::VertexRef, face::BitFlags, face::VFAdj > {}; +//class MyEdge : public Edge< MyUsedTypes> {}; +class MyEdge : public Edge< MyUsedTypes, edge::VertexRef, edge::BitFlags>{}; +class MyMesh : public tri::TriMesh< vector, vector, vector > {}; + +class EmEdge; +class EmFace; +class EmVertex; +struct EmUsedTypes : public UsedTypes< Use ::AsVertexType, + Use ::AsEdgeType, + Use ::AsFaceType>{}; + +class EmVertex : public Vertex{}; +class EmFace : public Face< EmUsedTypes, face::VertexRef, face::BitFlags, face::VFAdj > {}; +class EmEdge : public Edge< EmUsedTypes, edge::VertexRef> {}; +//class EmEdge : public Edge< EmUsedTypes, edge::VertexRef, edge::BitFlags>{}; +class EmMesh : public tri::TriMesh< vector, vector, vector > {}; + + +int main( int argc, char **argv ) +{ + MyMesh baseMesh, outMesh, polyMesh; + if(argc < 4 ) + { + printf("Usage trimesh_voronoisampling mesh sampleNum variance iterNum\n"); + return -1; + } + int sampleNum = atoi(argv[2]); + int iterNum = atoi(argv[3]); + float radiusVariance = atof(argv[4]); + + printf("Reading %s and sampling %i points with %i iteration and using %f variance\n",argv[1],sampleNum,iterNum,radiusVariance); + int ret= tri::io::ImporterPLY::Open(baseMesh,argv[1]); + if(ret!=0) + { + printf("Unable to open %s for '%s'\n",argv[1],tri::io::ImporterPLY::ErrorMsg(ret)); + return -1; + } + + tri::UpdateTopology::VertexFace(baseMesh); + std::vector seedVec; + vector pointVec; + float radius=0; + tri::VoronoiProcessingParameter vpp; + vpp.deleteUnreachedRegionFlag=true; + + + tri::PoissonSampling(baseMesh,pointVec,sampleNum,radius); + tri::VoronoiProcessing::SeedToVertexConversion(baseMesh,pointVec,seedVec); + + tri::EuclideanDistance dd; + tri::VoronoiProcessing >::VoronoiRelaxing(baseMesh, seedVec, iterNum, dd, vpp); + tri::VoronoiProcessing >::ConvertVoronoiDiagramToMesh(baseMesh,outMesh,polyMesh,seedVec, dd, vpp); + tri::io::ExporterPLY::Save(outMesh,"out.ply",tri::io::Mask::IOM_VERTCOLOR ); + tri::io::ExporterPLY::Save(polyMesh,"poly.ply",tri::io::Mask::IOM_VERTCOLOR| tri::io::Mask::IOM_EDGEINDEX ,false); + + tri::io::ImporterPLY::Open(baseMesh,argv[1]); + tri::UpdateTopology::VertexFace(baseMesh); + tri::PoissonSampling(baseMesh,pointVec,sampleNum,radius,radiusVariance); + tri::VoronoiProcessing::SeedToVertexConversion(baseMesh,pointVec,seedVec); + tri::IsotropicDistance id(baseMesh,radiusVariance); + tri::VoronoiProcessing >::VoronoiRelaxing(baseMesh, seedVec, iterNum,id,vpp); + tri::VoronoiProcessing >::ConvertVoronoiDiagramToMesh(baseMesh,outMesh,polyMesh,seedVec, id, vpp); + + tri::io::ExporterPLY::Save(outMesh,"outW.ply",tri::io::Mask::IOM_VERTCOLOR ); + tri::io::ExporterPLY::Save(polyMesh,"polyW.ply",tri::io::Mask::IOM_VERTCOLOR | tri::io::Mask::IOM_EDGEINDEX,false); + return 0; +} diff --git a/apps/sample/trimesh_voronoisampling/trimesh_voronoisampling.pro b/apps/sample/trimesh_voronoisampling/trimesh_voronoisampling.pro new file mode 100644 index 00000000..a11d3478 --- /dev/null +++ b/apps/sample/trimesh_voronoisampling/trimesh_voronoisampling.pro @@ -0,0 +1,3 @@ +include(../common.pri) +TARGET = trimesh_voronoisampling +SOURCES += trimesh_voronoisampling.cpp ../../../wrap/ply/plylib.cpp