27 |
template <typename MeshType> |
template <typename MeshType> |
28 |
void MeshSimplifier::__proceed(const MeshType& m) |
void MeshSimplifier::__proceed(const MeshType& m) |
29 |
{ |
{ |
30 |
Connectivity<typename MeshType::ElementsGeometry> |
typedef typename MeshType::ElementsGeometry ElementType; |
31 |
connectivity(m.numberOfCells()); |
|
32 |
|
Connectivity<ElementType> connectivity(m.numberOfCells()); |
33 |
|
|
34 |
|
Vector<size_t> references(m.numberOfCells()); |
35 |
|
references = 0; |
36 |
|
|
37 |
|
std::set<size_t> toRemove; /**< This element is to remove */ |
38 |
|
|
39 |
ConnectivityBuilder<MeshType> connectivityBuilder(m, connectivity); |
ConnectivityBuilder<MeshType> connectivityBuilder(m, connectivity); |
40 |
|
for (size_t i=0; i<m.numberOfCells(); ++i) { |
41 |
|
for (size_t j=0; j<ElementType::NumberOfNeighbours; ++j) { |
42 |
|
if (m.cell(i).volume() < 0.2* (*connectivity(i)[j]).volume()) { |
43 |
|
references[i] = 1; |
44 |
|
toRemove.insert(i); |
45 |
|
} |
46 |
|
} |
47 |
|
} |
48 |
|
|
49 |
|
ReferenceCounting<VerticesSet> vertices |
50 |
|
= new VerticesSet(m.numberOfVertices()); |
51 |
|
for (size_t i=0; i<m.numberOfVertices(); ++i) { |
52 |
|
(*vertices)[i] = m.vertex(i); |
53 |
|
} |
54 |
|
|
55 |
|
ReferenceCounting<Vector<ElementType> > cells |
56 |
|
= new Vector<ElementType>(m.numberOfCells()); |
57 |
|
|
58 |
|
for (size_t i=0; i<m.numberOfCells(); ++i) { |
59 |
|
const ElementType& C = m.cell(i); |
60 |
|
(*cells)(i) = Triangle((*vertices)[m.vertexNumber(C(0))], |
61 |
|
(*vertices)[m.vertexNumber(C(1))], |
62 |
|
(*vertices)[m.vertexNumber(C(2))], |
63 |
|
references[i]); |
64 |
|
} |
65 |
|
|
66 |
fferr(0) << __FILE__ << ':' << __LINE__ << ": Not implemented\n"; |
__mesh = new MeshType(vertices, cells); |
|
std::exit(1); |
|
67 |
} |
} |
68 |
|
|
69 |
MeshSimplifier::MeshSimplifier(ReferenceCounting<Mesh> originalMesh) |
MeshSimplifier::MeshSimplifier(ReferenceCounting<Mesh> originalMesh) |