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

Method generate_joints

tools/Wires/Inflator/SimpleInflator.cpp:153–190  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

151}
152
153void SimpleInflator::generate_joints() {
154 const size_t dim = m_wire_network->get_dim();
155 const size_t num_vertices = m_wire_network->get_num_vertices();
156 const size_t num_edges = m_wire_network->get_num_edges();
157 const MatrixFr& vertices = m_wire_network->get_vertices();
158 const MatrixIr& edges = m_wire_network->get_edges();
159 const size_t loop_size = m_profile->size();
160
161 std::vector<std::vector<const MatrixFr*> > loops(num_vertices);
162 std::vector<std::vector<size_t> > source_edge_indices(num_vertices);
163 for (size_t i=0; i<num_edges; i++) {
164 const auto& end_loops = m_end_loops[i];
165 const auto& edge = edges.row(i);
166 loops[edge[0]].push_back(&end_loops.first);
167 loops[edge[1]].push_back(&end_loops.second);
168 source_edge_indices[edge[0]].push_back(i);
169 source_edge_indices[edge[1]].push_back(i);
170 }
171
172 for (size_t i=0; i<num_vertices; i++) {
173 const auto& incident_loops = loops[i];
174 const auto& edge_ids = source_edge_indices[i];
175 assert(incident_loops.size() == edge_ids.size());
176 size_t valance = incident_loops.size();
177 MatrixFr pts(valance * loop_size + 1, dim);
178 VectorI source_ids(pts.rows());
179 pts.row(0) = vertices.row(i);
180 source_ids[0] = -1;
181 size_t count = 0;
182 for (auto loop : incident_loops) {
183 pts.block(count*loop_size+1, 0, loop_size, dim) = *loop;
184 source_ids.segment(count*loop_size+1, loop_size) =
185 VectorI::Ones(loop_size) * edge_ids[count];
186 count++;
187 }
188 generate_joint(pts, source_ids, i);
189 }
190}
191
192void SimpleInflator::connect_end_loops() {
193 const size_t dim = m_wire_network->get_dim();

Callers

nothing calls this directly

Calls 6

get_dimMethod · 0.45
get_num_verticesMethod · 0.45
get_num_edgesMethod · 0.45
get_verticesMethod · 0.45
get_edgesMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected