From 5adb83c8c9c374f37991864cd55ff0c51e3cdc77 Mon Sep 17 00:00:00 2001 From: cignoni Date: Wed, 24 Oct 2012 09:40:15 +0000 Subject: [PATCH] Added kdtree sample and updated a bit the comments of the other samples --- apps/sample/sample.pro | 1 + .../trimesh_attribute/trimesh_attribute.cpp | 1 - apps/sample/trimesh_base/trimesh_base.cpp | 5 +- apps/sample/trimesh_kdtree/trimesh_kdtree.cpp | 85 +++++++++++++++++++ apps/sample/trimesh_kdtree/trimesh_kdtree.pro | 3 + apps/sample/trimesh_normal/trimesh_normal.cpp | 6 ++ 6 files changed, 98 insertions(+), 3 deletions(-) create mode 100644 apps/sample/trimesh_kdtree/trimesh_kdtree.cpp create mode 100644 apps/sample/trimesh_kdtree/trimesh_kdtree.pro diff --git a/apps/sample/sample.pro b/apps/sample/sample.pro index 9eb0a9d4..0163c52b 100644 --- a/apps/sample/sample.pro +++ b/apps/sample/sample.pro @@ -16,6 +16,7 @@ SUBDIRS = trimesh_base \ trimesh_intersection \ trimesh_isosurface \ trimesh_join \ + trimesh_kdtree \ trimesh_normal \ trimesh_optional \ trimesh_ray \ diff --git a/apps/sample/trimesh_attribute/trimesh_attribute.cpp b/apps/sample/trimesh_attribute/trimesh_attribute.cpp index 2a57a186..05ee6bbb 100644 --- a/apps/sample/trimesh_attribute/trimesh_attribute.cpp +++ b/apps/sample/trimesh_attribute/trimesh_attribute.cpp @@ -27,7 +27,6 @@ Attributes are a simple mechanism to associate user-defined 'attributes' to the simplicies and to the mesh. \ref attributes for more Details - */ #include diff --git a/apps/sample/trimesh_base/trimesh_base.cpp b/apps/sample/trimesh_base/trimesh_base.cpp index 64445467..2c673275 100644 --- a/apps/sample/trimesh_base/trimesh_base.cpp +++ b/apps/sample/trimesh_base/trimesh_base.cpp @@ -25,7 +25,7 @@ \brief the minimal example of using the lib -This file contain a minimal example of the library +This file contain a minimal example of the library, showing how to load a mesh and how to compute per vertex normals on it. */ @@ -60,7 +60,8 @@ int main( int argc, char **argv ) printf("Usage trimesh_base \n"); return -1; } - + /*! we simply + */ MyMesh m; if(vcg::tri::io::ImporterOFF::Open(m,argv[1])!=vcg::tri::io::ImporterOFF::NoError) diff --git a/apps/sample/trimesh_kdtree/trimesh_kdtree.cpp b/apps/sample/trimesh_kdtree/trimesh_kdtree.cpp new file mode 100644 index 00000000..a32a72cb --- /dev/null +++ b/apps/sample/trimesh_kdtree/trimesh_kdtree.cpp @@ -0,0 +1,85 @@ +/**************************************************************************** +* 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_kdtree.cpp +\ingroup code_sample + +\brief An example about using the kdtree and meshes + +KdTree are one of the Spatial indexing data structure available. +They are tailored for storing point-based structures and performing k-neighbours queries. +In this simple example we simply compute the average distance of a vertex from its neighbours. +\ref spatial_indexing 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 > {}; +class MyEdge : public Edge{}; +class MyMesh : public tri::TriMesh< vector, vector , vector > {}; + +int main( int argc, char **argv ) +{ + if(argc<2) argv[1]="../../meshes/torus_irregular.ply"; + + MyMesh m; + if(tri::io::Importer::Open(m,argv[1])!=0) + { + printf("Error reading file %s\n",argv[1]); + exit(0); + } + + VertexConstDataWrapper ww(m); + + KdTree tree(ww); + tree.setMaxNofNeighbors(3); + for (int j = 0; j < m.VN(); j++) { + tree.doQueryK(m.vert[j].cP()); + int neighbours = tree.getNofFoundNeighbors(); + float avgDist=0; + for (int i = 0; i < neighbours; i++) { + int neightId = tree.getNeighborId(i); + avgDist+=Distance(m.vert[j].cP(),m.vert[neightId].cP()); + } + m.vert[j].Q() = avgDist/=neighbours; + } + tri::UpdateColor::PerVertexQualityRamp(m); + tri::io::ExporterPLY::Save(m,"out.ply",tri::io::Mask::IOM_VERTCOLOR+tri::io::Mask::IOM_VERTQUALITY); + return 0; +} diff --git a/apps/sample/trimesh_kdtree/trimesh_kdtree.pro b/apps/sample/trimesh_kdtree/trimesh_kdtree.pro new file mode 100644 index 00000000..6076c0e0 --- /dev/null +++ b/apps/sample/trimesh_kdtree/trimesh_kdtree.pro @@ -0,0 +1,3 @@ +include(../common.pri) +TARGET = trimesh_kdtree +SOURCES += trimesh_kdtree.cpp ../../../wrap/ply/plylib.cpp diff --git a/apps/sample/trimesh_normal/trimesh_normal.cpp b/apps/sample/trimesh_normal/trimesh_normal.cpp index db51b8a5..d183ade1 100644 --- a/apps/sample/trimesh_normal/trimesh_normal.cpp +++ b/apps/sample/trimesh_normal/trimesh_normal.cpp @@ -20,6 +20,12 @@ * for more details. * * * ****************************************************************************/ +/*! \file trimesh_normal.cpp +\ingroup code_sample + +\brief An example of all the methods for computing normals over a mesh. + +*/ #include #include