addVertices corrected (two copies instead of specializing te call)
and put static (also addTetra) * g++ compliant *
This commit is contained in:
parent
3f2d58a60e
commit
c1ec82f5ab
|
@ -24,8 +24,14 @@
|
||||||
History
|
History
|
||||||
|
|
||||||
$Log: not supported by cvs2svn $
|
$Log: not supported by cvs2svn $
|
||||||
|
Revision 1.3 2004/05/31 16:01:56 pietroni
|
||||||
|
added function addtetra
|
||||||
|
|
||||||
Revision 1.2 2004/05/14 15:14:34 turini
|
Revision 1.2 2004/05/14 15:14:34 turini
|
||||||
Added $Log: not supported by cvs2svn $ for CVS History Log
|
Added $Log: not supported by cvs2svn $
|
||||||
|
Added Revision 1.3 2004/05/31 16:01:56 pietroni
|
||||||
|
Added added function addtetra
|
||||||
|
Added for CVS History Log
|
||||||
|
|
||||||
Revision 1.1 2004/19/04 13:05 pietroni
|
Revision 1.1 2004/19/04 13:05 pietroni
|
||||||
Initial commit
|
Initial commit
|
||||||
|
@ -85,18 +91,18 @@ possible vector realloc.
|
||||||
restituisce l'iteratore al primo elemento aggiunto.
|
restituisce l'iteratore al primo elemento aggiunto.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
VertexIterator AddVertices(TetraMeshType &m,int n, vector<VertexType **> &local_var)
|
static VertexIterator AddVertices(TetraMeshType &m,int n, vector<VertexType **> &local_var)
|
||||||
{
|
{
|
||||||
VertexIterator oldbegin, newbegin;
|
VertexIterator oldbegin, newbegin;
|
||||||
oldbegin = m.vert.begin();
|
oldbegin = m.vert.begin();
|
||||||
VertexIterator last=m.vert.end();
|
VertexIterator last=m.vert.end();
|
||||||
if(m.vert.empty()) last=0; // if the vector is empty we cannot find the last valid element
|
if(m.vert.empty()) last=(VertexIterator)0; // if the vector is empty we cannot find the last valid element
|
||||||
else --last;
|
else --last;
|
||||||
unsigned int siz=0;
|
unsigned int siz=0;
|
||||||
#ifdef __STL_CONFIG_H
|
#ifdef __STL_CONFIG_H
|
||||||
if(last!=0) distance(m.vert.begin(),last,siz);
|
if(last!=(VertexIterator)0) distance(m.vert.begin(),last,siz);
|
||||||
#else
|
#else
|
||||||
if(last!=0) siz=distance(m.vert.begin(),last);
|
if(last!=(VertexIterator)0) siz=distance(m.vert.begin(),last);
|
||||||
#endif
|
#endif
|
||||||
for(unsigned int i=0; i<n; ++i)
|
for(unsigned int i=0; i<n; ++i)
|
||||||
{
|
{
|
||||||
|
@ -117,7 +123,7 @@ if(last!=0) siz=distance(m.vert.begin(),last);
|
||||||
|
|
||||||
// deve restituire l'iteratore alla prima faccia aggiunta;
|
// deve restituire l'iteratore alla prima faccia aggiunta;
|
||||||
// e poiche' lo spazio e' cambiato si ricalcola last da zero
|
// e poiche' lo spazio e' cambiato si ricalcola last da zero
|
||||||
if(last!=0)
|
if(last!=(VertexIterator)0)
|
||||||
{
|
{
|
||||||
last = m.vert.begin();
|
last = m.vert.begin();
|
||||||
advance(last,siz+1);
|
advance(last,siz+1);
|
||||||
|
@ -127,7 +133,7 @@ if(last!=0) siz=distance(m.vert.begin(),last);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// se non e'cambiato lo spazio (vector abbastanza grande o lista)
|
// se non e'cambiato lo spazio (vector abbastanza grande o lista)
|
||||||
if(last==0) last = m.vert.begin(); // se il vettore era vuoto si restituisce begin
|
if(last==(VertexIterator)0) last = m.vert.begin(); // se il vettore era vuoto si restituisce begin
|
||||||
else advance(last,1); // altrimenti il primo dopo quello che era in precedenza l'ultimo valido.
|
else advance(last,1); // altrimenti il primo dopo quello che era in precedenza l'ultimo valido.
|
||||||
}
|
}
|
||||||
return last;
|
return last;
|
||||||
|
@ -136,51 +142,11 @@ if(last!=0) siz=distance(m.vert.begin(),last);
|
||||||
/** Function to add n vertices to the mesh.
|
/** Function to add n vertices to the mesh.
|
||||||
@param n Il numero di vertici che si vuole aggiungere alla mesh.
|
@param n Il numero di vertici che si vuole aggiungere alla mesh.
|
||||||
*/
|
*/
|
||||||
VertexIterator AddVertices(TetraMeshType &m,int n)
|
static VertexIterator AddVertices(TetraMeshType &m,int n)
|
||||||
{
|
{
|
||||||
VertexIterator oldbegin, newbegin;
|
vector<VertexType **> empty_var;
|
||||||
oldbegin = m.vert.begin();
|
return AddVertices(m,n,empty_var);
|
||||||
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<n; ++i)
|
|
||||||
{
|
|
||||||
m.vert.push_back(VertexType());
|
|
||||||
m.vert.back().ClearFlags();
|
|
||||||
}
|
|
||||||
m.vn+=n;
|
|
||||||
newbegin = m.vert.begin();
|
|
||||||
if(newbegin != oldbegin)
|
|
||||||
{
|
|
||||||
TetraIterator f;
|
|
||||||
for (f=m.tetra.begin(); f!=m.tetra.end(); ++f)
|
|
||||||
if(!(*f).IsD())
|
|
||||||
for(unsigned int k=0; k<4; ++k)
|
|
||||||
(*f).V(k)= (*f).V(k)-&*oldbegin+&*newbegin;
|
|
||||||
|
|
||||||
// deve restituire l'iteratore alla prima faccia aggiunta;
|
|
||||||
// e poiche' lo spazio e' cambiato si ricalcola last da zero
|
|
||||||
if(last!=0)
|
|
||||||
{
|
|
||||||
last = m.vert.begin();
|
|
||||||
advance(last,siz+1);
|
|
||||||
}
|
|
||||||
else last=m.vert.begin();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// se non e'cambiato lo spazio (vector abbastanza grande o lista)
|
|
||||||
if(last==0) last = m.vert.begin(); // se il vettore era vuoto si restituisce begin
|
|
||||||
else advance(last,1); // altrimenti il primo dopo quello che era in precedenza l'ultimo valido.
|
|
||||||
}
|
|
||||||
return last;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct InsertedVT{
|
struct InsertedVT{
|
||||||
InsertedVT(VertexType *_v,
|
InsertedVT(VertexType *_v,
|
||||||
|
@ -206,7 +172,7 @@ struct InsertedVT{
|
||||||
/** Function to add n tetrafedron to the mesh.
|
/** Function to add n tetrafedron to the mesh.
|
||||||
@param n number of vertices we want to add.
|
@param n number of vertices we want to add.
|
||||||
*/
|
*/
|
||||||
TetraIterator AddTetra(TetraMeshType &m,int n)
|
static TetraIterator AddTetra(TetraMeshType &m,int n)
|
||||||
{
|
{
|
||||||
TetraIterator last=m.tetra.end();
|
TetraIterator last=m.tetra.end();
|
||||||
for (int i=0;i<n;i++)
|
for (int i=0;i<n;i++)
|
||||||
|
@ -220,10 +186,10 @@ TetraIterator AddTetra(TetraMeshType &m,int n)
|
||||||
@param m destination mesh.
|
@param m destination mesh.
|
||||||
*/
|
*/
|
||||||
template <class STL_CONT >
|
template <class STL_CONT >
|
||||||
void SubSetT(STL_CONT & subSet, TetraMeshType & m)
|
static void SubSetT(STL_CONT & subSet, TetraMeshType & m)
|
||||||
{
|
{
|
||||||
vector< InsertedVT > newVertices;
|
vector< InsertedVT > newVertices;
|
||||||
STL_CONT :: iterator pfi;
|
typename STL_CONT :: iterator pfi;
|
||||||
newVertices.clear();
|
newVertices.clear();
|
||||||
|
|
||||||
for(pfi = subSet.begin(); pfi != subSet.end(); ++pfi)
|
for(pfi = subSet.begin(); pfi != subSet.end(); ++pfi)
|
||||||
|
@ -240,7 +206,7 @@ void SubSetT(STL_CONT & subSet, TetraMeshType & m)
|
||||||
|
|
||||||
sort(newVertices.begin(),newVertices.end());
|
sort(newVertices.begin(),newVertices.end());
|
||||||
|
|
||||||
vector< InsertedVT >::iterator curr,next;
|
typename std::vector< InsertedVT >::iterator curr,next;
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
curr = next = newVertices.begin();
|
curr = next = newVertices.begin();
|
||||||
while( next != newVertices.end())
|
while( next != newVertices.end())
|
||||||
|
@ -252,7 +218,7 @@ void SubSetT(STL_CONT & subSet, TetraMeshType & m)
|
||||||
next++;
|
next++;
|
||||||
}
|
}
|
||||||
|
|
||||||
vector<InsertedVT >::iterator newE = unique(newVertices.begin(),newVertices.end());
|
typename std::vector<InsertedVT >::iterator newE = unique(newVertices.begin(),newVertices.end());
|
||||||
|
|
||||||
for(curr = newVertices.begin();curr!= newE;++curr)
|
for(curr = newVertices.begin();curr!= newE;++curr)
|
||||||
m.vert.push_back(*((*curr).v));
|
m.vert.push_back(*((*curr).v));
|
||||||
|
|
Loading…
Reference in New Issue