/**************************************************************************** * VCGLib o o * * Visual and Computer Graphics Library o o * * _ O _ * * Copyright(C) 2004 \/)\/ * * 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. * * * ****************************************************************************/ /**************************************************************************** History Revision 1.1 2004/19/04 13:05 pietroni Initial commit ****************************************************************************/ #ifndef __VCG_TETRA_ALLOCATE #define __VCG_TETRA_ALLOCATE #include using namespace std; namespace vcg { namespace tetra { /** \addtogroup tetramesh */ /*@{*/ /** Class Allocate. This is class for Allocate new vertices or tetrahedron on the mesh. @param TM_TYPE (Template Parameter) Specifies the type of the tetrahedral mesh. */ template < class TM_TYPE > class Allocator { public: /// The tetramesh type typedef TM_TYPE TetraMeshType; /// The vertex type typedef typename TM_TYPE::VertexType VertexType; /// The tetrahedron type typedef typename TM_TYPE::TetraType TetraType; /// The type of vertex iterator typedef typename TM_TYPE::VertexIterator VertexIterator; /// The type of tetra iterator typedef typename TM_TYPE::TetraIterator TetraIterator; /// The type of constant vertex iterator typedef typename TM_TYPE::const_VertexIterator const_VertexIterator; /// The type of constant face iterator typedef typename TM_TYPE::const_TetraIterator const_TetraIterator; public: /** Function to add n vertices to the mesh. The second parameter hold a vector of pointers to pointer to elements of the mesh that should be updated after a possible vector realloc. @param n Il numero di vertici che si vuole aggiungere alla mesh. @param local_var Vettore di variabili locali che rappresentano puntatori a vertici. restituisce l'iteratore al primo elemento aggiunto. */ VertexIterator AddVertices(TetraMeshType &m,int n, vector &local_var) { VertexIterator oldbegin, newbegin; oldbegin = m.vert.begin(); VertexIterator last=m.vert.end(); if(m.vert.empty()) last=0; // if the vector is empty we cannot find the last valid element else --last; unsigned int siz=0; #ifdef __STL_CONFIG_H if(last!=0) distance(m.vert.begin(),last,siz); #else if(last!=0) siz=distance(m.vert.begin(),last); #endif for(unsigned int i=0; i