From 34a920a6f92a6ef938ef414358dbff4801f013a2 Mon Sep 17 00:00:00 2001 From: cignoni Date: Wed, 5 Nov 2014 16:22:51 +0000 Subject: [PATCH] First sample using implicit smoothing --- .../trimesh_implicit_smooth.cpp | 81 +++++++++++++++++++ .../trimesh_implicit_smooth.pro | 3 + 2 files changed, 84 insertions(+) create mode 100644 apps/sample/trimesh_implicit_smooth/trimesh_implicit_smooth.cpp create mode 100644 apps/sample/trimesh_implicit_smooth/trimesh_implicit_smooth.pro diff --git a/apps/sample/trimesh_implicit_smooth/trimesh_implicit_smooth.cpp b/apps/sample/trimesh_implicit_smooth/trimesh_implicit_smooth.cpp new file mode 100644 index 00000000..678185c4 --- /dev/null +++ b/apps/sample/trimesh_implicit_smooth/trimesh_implicit_smooth.cpp @@ -0,0 +1,81 @@ +/**************************************************************************** +* VCGLib o o * +* Visual and Computer Graphics Library o o * +* _ O _ * +* Copyright(C) 2004-2012 \/)\/ * +* 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. * +* * +****************************************************************************/ +/*! \file trimesh_inertia.cpp +\ingroup code_sample + +\brief An example of computing the inertia properties of meshes + +Two meshes are created a rectangular box and a torus and their mass properties are computed and shown. +The result should match the closed formula for these objects (with a reasonable approximation) + +*/ + +#include + +#include +#include + +#include + +using namespace vcg; +using namespace std; + +class MyEdge; +class MyFace; +class MyVertex; +struct MyUsedTypes : public vcg::UsedTypes< vcg::Use ::AsVertexType, + vcg::Use ::AsEdgeType, + vcg::Use ::AsFaceType>{}; + +class MyVertex : public vcg::Vertex{}; +class MyFace : public vcg::Face< MyUsedTypes, vcg::face::FFAdj, vcg::face::Normal3f, vcg::face::VertexRef, vcg::face::BitFlags > {}; +class MyEdge : public vcg::Edge{}; +class MyMesh : public vcg::tri::TriMesh< std::vector, std::vector , std::vector > {}; + + +int main( int argc, char **argv ) +{ + MyMesh m; + if(argc < 2 ) + { + printf("Usage: trimesh_implicit_smooth 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); + + ImplicitSmoother::SmoothParam SP; + ImplicitSmoother ISmooth(m); + ISmooth.Smooth(SP); + + tri::io::ExporterPLY::Save(m,"smooth.ply",tri::io::Mask::IOM_VERTCOLOR | tri::io::Mask::IOM_VERTQUALITY); + + return 0; +} diff --git a/apps/sample/trimesh_implicit_smooth/trimesh_implicit_smooth.pro b/apps/sample/trimesh_implicit_smooth/trimesh_implicit_smooth.pro new file mode 100644 index 00000000..ff6458e7 --- /dev/null +++ b/apps/sample/trimesh_implicit_smooth/trimesh_implicit_smooth.pro @@ -0,0 +1,3 @@ +include(../common.pri) +TARGET = trimesh_implicit_smooth +SOURCES += trimesh_implicit_smooth.cpp ../../../wrap/ply/plylib.cpp