/[ff3d]/ff3d/solver/MeshSimplifier.cpp
ViewVC logotype

Diff of /ff3d/solver/MeshSimplifier.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.4 by delpinux, Sun Jun 15 18:37:33 2003 UTC revision 1.5 by delpinux, Fri Aug 8 08:39:56 2003 UTC
# Line 117  void MeshSimplifier::__proceed(const Mes Line 117  void MeshSimplifier::__proceed(const Mes
117    for(typename EdgeElements::iterator i = edgeElements.begin();    for(typename EdgeElements::iterator i = edgeElements.begin();
118        i != edgeElements.end(); ++i) {        i != edgeElements.end(); ++i) {
119      const Edge::Pair& e = (*i).first;      const Edge::Pair& e = (*i).first;
120      const real_t norm = Norm(e.first->Vector3()-e.second->Vector3());      const real_t norm = Norm(*(e.first)-*(e.second));
121      edgeSizes[norm] = (*i).first;      edgeSizes[norm] = (*i).first;
122      maxSize = std::max(norm, maxSize);      maxSize = std::max(norm, maxSize);
123    }    }
124    
125    // Edge collapsing    // Edge collapsing
126    for (typename EdgeSizes::iterator i = edgeSizes.begin();    for (typename EdgeSizes::iterator i = edgeSizes.begin();
127         (*i).first < 0.5*maxSize; ++i) {         (*i).first < 0.1*maxSize; ++i) {
128        if (edgeElements.find((*i).second) != edgeElements.end()) {
129    
130      TinyVector<ElementType::NumberOfVertices, const Vertex*> newVertices;        TinyVector<ElementType::NumberOfVertices, const Vertex*> newVertices;
131    
132      Vertex* v0 = ((*i).second).first;        Vertex* v0 = ((*i).second).first;
133      Vertex* v1 = ((*i).second).second;        Vertex* v1 = ((*i).second).second;
134    
135      size_t v0Number = (*vertices).number(*v0);        size_t v1Number = (*vertices).number(*v1);
136    
137      std::set<ElementType*>& trianglesToModify = vertexTriangles[v1];        std::set<ElementType*>& trianglesToModify = vertexTriangles[v1];
138        
139      for(typename std::list<ElementType*>::iterator        fferr(0) << "Points: " << v0 << ':' << v1 << '\n';
140            j = edgeElements[(*i).second].begin();  
141          j != edgeElements[(*i).second].end(); ++j) {        for(typename std::list<ElementType*>::iterator
142        intermediateCells.erase(*j);              j = edgeElements[(*i).second].begin();
143        trianglesToModify.erase(*j);            j != edgeElements[(*i).second].end(); ++j) {
144      }          for (size_t n=0; n<3; ++n) {
145              const Edge& E = (*(*j)).edge(n);
146      for (typename std::set<ElementType*>::iterator tt = trianglesToModify.begin();            if (edgeElements.find(E) != edgeElements.end())
147           tt != trianglesToModify.end(); ++tt) {              edgeElements.erase(E);
148        (*tt)->replace(v1, v0);          }
149            intermediateCells.erase(*j);
150            trianglesToModify.erase(*j);
151          }
152    
153          for (typename std::set<ElementType*>::iterator tt = trianglesToModify.begin();
154               tt != trianglesToModify.end(); ++tt) {
155            fferr(0) << "before: " << &(*(*tt))(0) << ':' << &(*(*tt))(1) << ':' << &(*(*tt))(2) << '\n';
156            (*tt)->replace(v1, v0);
157            fferr(0) << "after : " << &(*(*tt))(0) << ':' << &(*(*tt))(1) << ':' << &(*(*tt))(2) << '\n';
158            for (size_t l=0; l<3; ++l) {
159              if (&(*(*tt))(l) != v0) {
160                fferr(3) << "=";
161                Edge newEdge((*(*tt))(l), *v0);
162                edgeElements[newEdge].push_back(*tt);
163              }
164            }
165            fferr(0) << '\n';
166          }
167    
168        // clean the vertex to edge correspondance
169    //       std::set<Edge::Pair>& v1Edges = vertexEdges[v1Number];
170    //       for (std::set<Edge::Pair>::iterator e = v1Edges.begin();
171    //         e != v1Edges.end(); ++e) {
172    //      edgeElements.erase((*e));
173    //       }
174          vertexEdges.erase(v1Number);
175      }      }
176        // clean-up the list!
177        edgeSizes.erase(i);
178        fferr(0) << "----\n";
179    }    }
180    
181    ReferenceCounting<Vector<ElementType> > cells    ReferenceCounting<Vector<ElementType> > cells

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.5

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26