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

Method compute

tools/Wires/Parameters/VertexThicknessParameterDerivative.cpp:24–64  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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

Callers

nothing calls this directly

Calls 6

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

Tested by

no test coverage detected