MCPcopy Create free account
hub / github.com/PyMesh/PyMesh / flood

Method flood

tools/MeshUtils/MeshSeparator.cpp:111–144  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

109}
110
111MatrixIr MeshSeparator::flood(size_t seed, VectorI& sources) {
112 std::queue<size_t> Q;
113 Q.push(seed);
114 m_visited[seed] = true;
115
116 std::list<size_t> element_list;
117 while (!Q.empty()) {
118 size_t ei = Q.front();
119 Q.pop();
120 element_list.push_back(ei);
121
122 std::vector<size_t> neighbors = get_adjacent_element(ei);
123 for (size_t i=0; i<neighbors.size(); i++) {
124 size_t f_next = neighbors[i];
125 if (m_visited[f_next]) continue;
126 Q.push(f_next);
127 m_visited[f_next] = true;
128 }
129 }
130
131 const size_t vertex_per_element = m_elements.cols();
132 MatrixIr comp(element_list.size(), vertex_per_element);
133 sources.resize(element_list.size());
134 size_t count = 0;
135 for (std::list<size_t>::const_iterator itr = element_list.begin();
136 itr != element_list.end(); itr++) {
137 assert(count < m_elements.rows());
138 assert(*itr < m_elements.rows());
139 comp.row(count) = m_elements.row(*itr);
140 sources[count] = *itr;
141 count++;
142 }
143 return comp;
144}
145
146std::vector<size_t> MeshSeparator::get_adjacent_element(size_t index) {
147 std::vector<size_t> neighbors;

Callers

nothing calls this directly

Calls 6

pushMethod · 0.80
popMethod · 0.80
emptyMethod · 0.45
sizeMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected