more appropriate function names, licence updated, comment added

This commit is contained in:
ganovelli 2008-01-12 19:41:46 +00:00
parent c919dca603
commit 7051654171
1 changed files with 58 additions and 39 deletions

View File

@ -1,24 +1,31 @@
/*#*************************************************************************** /****************************************************************************
* Geodesic.h o o * * VCGLib o o *
* o o * * Visual and Computer Graphics Library o o *
* Visual Computing Group _ O _ * * _ O _ *
* IEI Institute, CNUCE Institute, CNR Pisa \/)\/ * * Copyright(C) 2004 \/)\/ *
* /\/| * * Visual Computing Lab /\/| *
* Copyright(C) 1999 by Paolo Cignoni, | * * ISTI - Italian National Research Council | *
* All rights reserved. \ * * \ *
* * * All rights reserved. *
* Permission to use, copy, modify, distribute and sell this software and * * *
* its documentation for any purpose is hereby granted without fee, provided * * This program is free software; you can redistribute it and/or modify *
* that the above copyright notice appear in all copies and that both that * * it under the terms of the GNU General Public License as published by *
* copyright notice and this permission notice appear in supporting * * the Free Software Foundation; either version 2 of the License, or *
* documentation. the author makes no representations about the suitability * * (at your option) any later version. *
* of this software for any purpose. It is provided "as is" without express * * *
* or implied warranty. * * 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. *
* *
****************************************************************************/
/*#************************************************************************** /*#**************************************************************************
History History
$Log: not supported by cvs2svn $ $Log: not supported by cvs2svn $
Revision 1.6 2008/01/12 19:07:05 ganovelli
Recompiled from previous out of date version. Still to revise but working
Revision 1.5 2005/12/13 17:17:19 ganovelli Revision 1.5 2005/12/13 17:17:19 ganovelli
first importing from old version. NOT optimized! It works with VertexFace Adjacency even over non manifolds first importing from old version. NOT optimized! It works with VertexFace Adjacency even over non manifolds
@ -36,6 +43,18 @@
#include <list> #include <list>
#include <functional> #include <functional>
/*
class for computing approximated geodesic distances on a mesh.
basic example: farthest vertex from a specified one
MyMesh m;
MyMesh::VertexPointer seed,far;
MyMesh::ScalarType dist;
vcg::Geo<MyMesh> g;
g.FarthestVertex(m,seed,far,d);
*/
namespace vcg{ namespace vcg{
template <class MeshType> template <class MeshType>
class Geo{ class Geo{
@ -92,7 +111,7 @@ class Geo{
std::vector<VertDist> frontier; std::vector<VertDist> frontier;
MeshType::VertexIterator ii; MeshType::VertexIterator ii;
std::list<typename MeshType::VertexPointer> children; std::list<typename MeshType::VertexPointer> children;
typename MeshType::VertexPointer curr,fartest,pw1; typename MeshType::VertexPointer curr,farthest,pw1;
std::list<typename MeshType::VertexPointer>::iterator is; std::list<typename MeshType::VertexPointer>::iterator is;
std::deque<typename MeshType::VertexPointer> leaves; std::deque<typename MeshType::VertexPointer> leaves;
std::vector <std::pair<typename MeshType::VertexPointer,typename MeshType::ScalarType> > expansion; std::vector <std::pair<typename MeshType::VertexPointer,typename MeshType::ScalarType> > expansion;
@ -225,7 +244,7 @@ class Geo{
if(isLeaf){ if(isLeaf){
if(d_curr > max_distance){ if(d_curr > max_distance){
max_distance = d_curr; max_distance = d_curr;
fartest = curr; farthest = curr;
} }
} }
@ -250,7 +269,7 @@ class Geo{
delete TD; delete TD;
return fartest; return farthest;
} }
@ -258,12 +277,12 @@ class Geo{
public: public:
/* /*
Given a mesh and a vector of pointers to vertices (sources), assigns the approximated geodesic Given a mesh and a vector of pointers to vertices (sources), assigns the approximated geodesic
distance from the cloasest source to all the mesh vertices and returns the pointer to the fartest. distance from the cloasest source to all the mesh vertices and returns the pointer to the farthest.
Note: update the field Q() of the vertices Note: update the field Q() of the vertices
*/ */
void FartestPoint( MeshType & m, void FartestVertex( MeshType & m,
std::vector<typename MeshType::VertexPointer> & fro, std::vector<typename MeshType::VertexPointer> & fro,
typename MeshType::VertexPointer & fartest, typename MeshType::VertexPointer & farthest,
ScalarType & distance){ ScalarType & distance){
std::vector<typename MeshType::VertexPointer>::iterator fi; std::vector<typename MeshType::VertexPointer>::iterator fi;
@ -271,31 +290,31 @@ public:
for( fi = fro.begin(); fi != fro.end() ; ++fi) for( fi = fro.begin(); fi != fro.end() ; ++fi)
fr.push_back(VertDist(*fi,-1)); fr.push_back(VertDist(*fi,-1));
fartest = Visit(m,fr,distance,false); farthest = Visit(m,fr,distance,false);
} }
/* /*
Given a mesh and a pointers to a vertex-source (source), assigns the approximated geodesic Given a mesh and a pointers to a vertex-source (source), assigns the approximated geodesic
distance from the vertex-source to all the mesh vertices and returns the pointer to the fartest distance from the vertex-source to all the mesh vertices and returns the pointer to the farthest
Note: update the field Q() of the vertices Note: update the field Q() of the vertices
*/ */
void FartestPoint( MeshType & m, void FartestVertex( MeshType & m,
typename MeshType::VertexPointer seed, typename MeshType::VertexPointer seed,
typename MeshType::VertexPointer & fartest, typename MeshType::VertexPointer & farthest,
ScalarType & distance){ ScalarType & distance){
std::vector<typename MeshType::VertexPointer> fro; std::vector<typename MeshType::VertexPointer> fro;
fro.push_back( seed ); fro.push_back( seed );
typename MeshType::VertexPointer v0; typename MeshType::VertexPointer v0;
FartestPoint(m,fro,v0,distance); FartestVertex(m,fro,v0,distance);
fartest = v0; farthest = v0;
} }
/* /*
Same as FartestPoint but the returned pointer is to a border vertex Same as FartestPoint but the returned pointer is to a border vertex
Note: update the field Q() of the vertices Note: update the field Q() of the vertices
*/ */
void FartestBPoint(MeshType & m, void FartestBVertex(MeshType & m,
std::vector<typename MeshType::VertexPointer> & fro, std::vector<typename MeshType::VertexPointer> & fro,
typename MeshType::VertexPointer & fartest, typename MeshType::VertexPointer & farthest,
ScalarType & distance){ ScalarType & distance){
std::vector<typename MeshType::VertexPointer>::iterator fi; std::vector<typename MeshType::VertexPointer>::iterator fi;
@ -303,21 +322,21 @@ public:
for( fi = fro.begin(); fi != fro.end() ; ++fi) for( fi = fro.begin(); fi != fro.end() ; ++fi)
fr.push_back(VertDist(*fi,-1)); fr.push_back(VertDist(*fi,-1));
fartest = Visit(m,fr,distance,true); farthest = Visit(m,fr,distance,true);
} }
/* /*
Same as FartestPoint but the returned pointer is to a border vertex Same as FartestPoint but the returned pointer is to a border vertex
Note: update the field Q() of the vertices Note: update the field Q() of the vertices
*/ */
void FartestBPoint( MeshType & m, void FartestBVertex( MeshType & m,
typename MeshType::VertexPointer seed, typename MeshType::VertexPointer seed,
typename MeshType::VertexPointer & fartest, typename MeshType::VertexPointer & farthest,
ScalarType & distance){ ScalarType & distance){
std::vector<typename MeshType::VertexPointer> fro; std::vector<typename MeshType::VertexPointer> fro;
fro.push_back( seed ); fro.push_back( seed );
typename MeshType::VertexPointer v0; typename MeshType::VertexPointer v0;
FartestBPoint(m,fro,v0,distance); FartestBVertex(m,fro,v0,distance);
fartest = v0; farthest = v0;
} }
/* /*
@ -330,11 +349,11 @@ public:
){ ){
std::vector<typename MeshType::VertexPointer> fro; std::vector<typename MeshType::VertexPointer> fro;
MeshType::VertexIterator vi; MeshType::VertexIterator vi;
MeshType::VertexPointer fartest; MeshType::VertexPointer farthest;
for(vi = m.vert.begin(); vi != m.vert.end(); ++vi) for(vi = m.vert.begin(); vi != m.vert.end(); ++vi)
if( (*vi).IsB()) if( (*vi).IsB())
fro.push_back(&(*vi)); fro.push_back(&(*vi));
FartestPoint(m,fro,fartest,distance); FartestVertex(m,fro,farthest,distance);
} }
}; };