89 |
} |
} |
90 |
} |
} |
91 |
|
|
92 |
|
typedef std::map<const Vertex*, std::set<Triangle*> > VertexTriangles; |
93 |
|
VertexTriangles vertexTriangles; |
94 |
|
|
95 |
|
for (typename IntermediateCells::const_iterator i = intermediateCells.begin(); |
96 |
|
i != intermediateCells.end(); ++i) { |
97 |
|
ElementType* const & pT = (*i); |
98 |
|
const ElementType& t = *pT; |
99 |
|
|
100 |
|
for (size_t n = 0; n < ElementType::NumberOfVertices; ++n) { |
101 |
|
(vertexTriangles[&(t(n))]).insert(pT); |
102 |
|
} |
103 |
|
} |
104 |
|
|
105 |
for(typename EdgeElements::iterator i = edgeElements.begin(); |
for(typename EdgeElements::iterator i = edgeElements.begin(); |
106 |
i != edgeElements.end(); ++i) { |
i != edgeElements.end(); ++i) { |
107 |
vertexEdges[(*vertices).number(*((*i).first).first) ].insert((*i).first); |
vertexEdges[(*vertices).number(*((*i).first).first) ].insert((*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.25*maxSize; ++i) { |
(*i).first < 0.5*maxSize; ++i) { |
|
TinyVector<ElementType::NumberOfVertices, const Vertex*> newVertices; |
|
128 |
|
|
129 |
const Vertex* v0 = ((*i).second).first; |
TinyVector<ElementType::NumberOfVertices, const Vertex*> newVertices; |
|
const Vertex* v1 = ((*i).second).second; |
|
130 |
|
|
131 |
for (size_t n=0; n<ElementType::NumberOfVertices; ++n) { |
Vertex* v0 = ((*i).second).first; |
132 |
// WRITE COLLAPSING ELEMENTS HERE. |
Vertex* v1 = ((*i).second).second; |
|
} |
|
133 |
|
|
134 |
size_t v0Number = (*vertices).number(*v0); |
size_t v0Number = (*vertices).number(*v0); |
135 |
|
|
136 |
|
std::set<ElementType*>& trianglesToModify = vertexTriangles[v1]; |
137 |
|
|
138 |
for(typename std::list<ElementType*>::iterator |
for(typename std::list<ElementType*>::iterator |
139 |
j = edgeElements[(*i).second].begin(); |
j = edgeElements[(*i).second].begin(); |
140 |
j != edgeElements[(*i).second].end(); ++j) { |
j != edgeElements[(*i).second].end(); ++j) { |
141 |
intermediateCells.erase(*j); |
intermediateCells.erase(*j); |
142 |
|
trianglesToModify.erase(*j); |
143 |
|
} |
144 |
|
|
145 |
|
for (typename std::set<ElementType*>::iterator tt = trianglesToModify.begin(); |
146 |
|
tt != trianglesToModify.end(); ++tt) { |
147 |
|
(*tt)->replace(v1, v0); |
148 |
} |
} |
149 |
} |
} |
150 |
|
|