From 0e9c582aeb9653ae2f9b05a7ea3a635d35b2e97e Mon Sep 17 00:00:00 2001 From: cignoni Date: Mon, 3 Nov 2014 15:07:07 +0000 Subject: [PATCH] first sample for harmonic interpolation --- .../trimesh_harmonic/trimesh_harmonic.cpp | 84 +++++++++++++++++++ .../trimesh_harmonic/trimesh_harmonic.pro | 8 ++ 2 files changed, 92 insertions(+) create mode 100644 apps/sample/trimesh_harmonic/trimesh_harmonic.cpp create mode 100644 apps/sample/trimesh_harmonic/trimesh_harmonic.pro diff --git a/apps/sample/trimesh_harmonic/trimesh_harmonic.cpp b/apps/sample/trimesh_harmonic/trimesh_harmonic.cpp new file mode 100644 index 00000000..9bf11501 --- /dev/null +++ b/apps/sample/trimesh_harmonic/trimesh_harmonic.cpp @@ -0,0 +1,84 @@ +/**************************************************************************** +* 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 MyFace; +class MyVertex; +struct MyUsedTypes : public UsedTypes< Use ::AsVertexType, + Use ::AsFaceType>{}; + +class MyVertex : public Vertex{}; +class MyFace : public Face< MyUsedTypes, face::VertexRef, face::Normal3f, face::Mark, face::BitFlags, face::VFAdj, face::FFAdj > {}; +class MyMesh : public tri::TriMesh< vector, vector > {}; + + + + +int main( int argc, char **argv ) +{ + MyMesh m; + if(argc < 2 ) + { + printf("Usage: trimesh_harmonic mesh.ply\n"); + return -1; + } + + int ret= tri::io::ImporterPLY::Open(m,argv[1]); + if(ret!=0) + { + printf("Unable to open %s for '%s'\n",argv[1],tri::io::ImporterPLY::ErrorMsg(ret)); + return -1; + } + + tri::UpdateTopology::FaceFace(m); + + + srand(time(0)); + int ind0=rand()%m.vn; + int ind1=rand()%m.vn; + printf("Computing harmonic field from vertex %i to vertex %i\n",ind0,ind1); + + // Get the two vertices with value set + tri::Harmonic::ConstraintVec constraints; + constraints.push_back(tri::Harmonic::Constraint(&(m.vert[ind0]), 1.0f)); + constraints.push_back(tri::Harmonic::Constraint(&(m.vert[ind1]), 2.0f)); + + MyMesh::PerVertexAttributeHandle handle = tri::Allocator::GetPerVertexAttribute(m, "harmonic"); + bool ok = tri::Harmonic::ComputeScalarField(m, constraints, handle); + assert(ok); + + tri::UpdateQuality::VertexFromAttributeHandle(m,handle); + tri::UpdateColor::PerVertexQualityRamp(m,1,2); + tri::io::ExporterPLY::Save(m,"harmonic.ply",tri::io::Mask::IOM_VERTCOLOR | tri::io::Mask::IOM_VERTQUALITY); + + return 0; +} diff --git a/apps/sample/trimesh_harmonic/trimesh_harmonic.pro b/apps/sample/trimesh_harmonic/trimesh_harmonic.pro new file mode 100644 index 00000000..56d4beae --- /dev/null +++ b/apps/sample/trimesh_harmonic/trimesh_harmonic.pro @@ -0,0 +1,8 @@ +include(../common.pri) +TARGET = trimesh_harmonic +SOURCES += trimesh_harmonic.cpp ../../../wrap/ply/plylib.cpp + +CONFIG(release, debug | release){ +DEFINES += NDEBUG +} +