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

Method compute

tools/Wires/Parameters/VertexOffsetParameterDerivative.cpp:17–60  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

15using namespace VertexOffsetParameterDerivativeHelper;
16
17MatrixFr VertexOffsetParameterDerivative::compute() {
18 WireNetwork::Ptr wire_network = m_parameter->get_wire_network();
19
20 const size_t dim = m_mesh->get_dim();
21 const size_t num_mesh_vertices = m_mesh->get_num_vertices();
22 const size_t num_mesh_faces = m_mesh->get_num_faces();
23 const size_t num_wire_vertices = wire_network->get_num_vertices();
24
25 assert(dim == wire_network->get_dim());
26
27 VectorI roi = m_parameter->get_roi();
28 BoolVector in_roi(num_wire_vertices, false);
29 const size_t roi_size = roi.size();
30 for (size_t i=0; i<roi_size; i++) {
31 in_roi[roi[i]] = true;
32 }
33
34 VectorF weights = VectorF::Zero(num_mesh_vertices);
35 MatrixFr derivative_v = MatrixFr::Zero(num_mesh_vertices, dim);
36 MatrixFr wire_derivative = m_parameter->compute_derivative();
37
38 for (size_t i=0; i< num_mesh_faces; i++) {
39 int source = m_face_source[i];
40 if (source < 0) {
41 // Source is edge
42 size_t edge_idx = -source - 1;
43 compute_derivative_on_edge(
44 edge_idx, i, in_roi, wire_derivative,
45 derivative_v, weights);
46 } else if (source > 0) {
47 // Source is vertex
48 size_t vertex_idx = source - 1;
49 compute_derivative_on_vertex(
50 vertex_idx, i, in_roi, wire_derivative,
51 derivative_v, weights);
52 }
53 }
54
55 for (size_t i=0; i<num_mesh_vertices; i++) {
56 if (weights[i] > 0)
57 derivative_v.row(i) /= weights[i];
58 }
59 return derivative_v;
60}
61
62void VertexOffsetParameterDerivative::compute_derivative_on_edge(
63 size_t wire_edge_index,

Callers 1

Calls 7

get_roiMethod · 0.80
get_wire_networkMethod · 0.45
get_dimMethod · 0.45
get_num_verticesMethod · 0.45
get_num_facesMethod · 0.45
sizeMethod · 0.45
compute_derivativeMethod · 0.45

Tested by

no test coverage detected