23 std::size_t face_amount = faces.size() / 3;
25 this->vertex_info.clear();
26 this->vertex_info.resize(verts.size());
29 for (std::size_t i = 0, i3 = 0; i < face_amount; ++i)
30 for (std::size_t j = 0; j < 3; ++j, ++i3)
31 this->vertex_info[faces[i3]].faces.push_back(i);
34 for (std::size_t i = 0; i < this->vertex_info.size(); ++i)
35 this->update_vertex(*mesh, i);
62 AdjacentFaceList adj_temp;
63 for (std::size_t i = 0; i < vinfo.
faces.size(); ++i)
65 std::size_t face_off = vinfo.
faces[i] * 3;
66 for (std::size_t j = 0; j < 3; ++j)
69 adj_temp.push_back(AdjacentFace());
70 adj_temp.back().face_id = vinfo.
faces[i];
71 adj_temp.back().first = faces[face_off + (j + 1) % 3];
72 adj_temp.back().second = faces[face_off + (j + 2) % 3];
81 vinfo.
vclass = VERTEX_CLASS_UNREF;
86 AdjacentFaceList adj_sorted;
87 adj_sorted.push_back(adj_temp.front());
89 while (!adj_temp.empty())
91 std::size_t
const front_id = adj_sorted.front().first;
92 std::size_t
const back_id = adj_sorted.back().second;
95 bool found_face =
false;
96 for (AdjacentFaceList::iterator iter = adj_temp.begin();
97 iter != adj_temp.end(); ++iter)
99 if (front_id == iter->second)
101 adj_sorted.push_front(*iter);
102 adj_temp.erase(iter);
106 if (back_id == iter->first)
108 adj_sorted.push_back(*iter);
109 adj_temp.erase(iter);
121 if (!adj_temp.empty())
124 adj_sorted.insert(adj_sorted.end(), adj_temp.begin(), adj_temp.end());
128 std::set<std::size_t> vset;
129 for (AdjacentFaceList::iterator iter = adj_sorted.begin();
130 iter != adj_sorted.end(); ++iter)
132 vset.insert(iter->first);
133 vset.insert(iter->second);
135 vinfo.
verts.insert(vinfo.
verts.end(), vset.begin(), vset.end());
136 vinfo.
vclass = VERTEX_CLASS_COMPLEX;
141 if (adj_sorted.front().first == adj_sorted.back().second)
142 vinfo.
vclass = VERTEX_CLASS_SIMPLE;
144 vinfo.
vclass = VERTEX_CLASS_BORDER;
148 for (AdjacentFaceList::iterator iter = adj_sorted.begin();
149 iter != adj_sorted.end(); ++iter)
150 vinfo.
faces.push_back(iter->face_id);
153 for (AdjacentFaceList::const_iterator iter = adj_sorted.begin();
154 iter != adj_sorted.end(); ++iter)
155 vinfo.
verts.push_back(iter->first);
156 if (vinfo.
vclass == VERTEX_CLASS_BORDER)
157 vinfo.
verts.push_back(adj_sorted.back().second);
172MeshInfo::get_faces_for_edge (std::size_t v1, std::size_t v2,
173 std::vector<std::size_t>* adjacent_faces)
const
177 std::set<std::size_t> faces2_set(faces2.begin(), faces2.end());
178 for (std::size_t i = 0; i < faces1.size(); ++i)
179 if (faces2_set.find(faces1[i]) != faces2_set.end())
180 adjacent_faces->push_back(faces1[i]);