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

Method compute_face_angles

src/Attributes/VertexGaussianCurvatureAttribute.cpp:35–56  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

33}
34
35VectorF VertexGaussianCurvatureAttribute::compute_face_angles(
36 const Mesh& mesh, size_t face_idx) {
37 const size_t dim = mesh.get_dim();
38 const size_t vertex_per_face = mesh.get_vertex_per_face();
39 VectorF angles = VectorF::Zero(vertex_per_face);
40 VectorI face = mesh.get_face(face_idx);
41 MatrixFr vertices = MatrixFr::Zero(vertex_per_face, 3);
42 for (size_t i=0; i<vertex_per_face; i++) {
43 vertices.row(i).segment(0, dim) = mesh.get_vertex(face[i]);
44 }
45
46 for (size_t i=0; i<vertex_per_face; i++) {
47 size_t curr_idx = i;
48 size_t next_idx = (i+1) % vertex_per_face;
49 size_t prev_idx = (i+vertex_per_face-1) % vertex_per_face;
50 Vector3F e1 = vertices.row(next_idx) - vertices.row(curr_idx);
51 Vector3F e2 = vertices.row(prev_idx) - vertices.row(curr_idx);
52 angles[i] = atan2(e1.cross(e2).norm(), e1.dot(e2));
53 }
54
55 return angles;
56}

Callers

nothing calls this directly

Calls 5

get_faceMethod · 0.80
normMethod · 0.80
get_dimMethod · 0.45
get_vertex_per_faceMethod · 0.45
get_vertexMethod · 0.45

Tested by

no test coverage detected