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

Method compute_from_mesh

src/Attributes/VoxelVolumeAttribute.cpp:31–61  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

29using namespace VoxelVolumeAttributeHelper;
30
31void VoxelVolumeAttribute::compute_from_mesh(Mesh& mesh) {
32 const size_t num_voxels = mesh.get_num_voxels();
33 const size_t num_vertex_per_voxel = mesh.get_vertex_per_voxel();
34
35 VectorF& volumes = m_values;
36 volumes = VectorF::Zero(num_voxels);
37
38 if (num_voxels > 0) {
39 if (num_vertex_per_voxel == 4) {
40 tbb::parallel_for(tbb::blocked_range<size_t>(0, num_voxels),
41 [this, &mesh, &volumes](const tbb::blocked_range<size_t>& r) {
42 for (size_t i=r.begin(); i<r.end(); i++) {
43 volumes[i] = compute_signed_tet_volume(mesh, i);
44 }
45 }
46 );
47 } else if (num_vertex_per_voxel == 8) {
48 tbb::parallel_for(tbb::blocked_range<size_t>(0, num_voxels),
49 [this, &mesh, &volumes](const tbb::blocked_range<size_t>& r) {
50 for (size_t i=r.begin(); i<r.end(); i++) {
51 volumes[i] = compute_signed_hex_volume(mesh, i);
52 }
53 }
54 );
55 } else {
56 std::cerr << "Unknown voxel type with " << num_vertex_per_voxel
57 << " per voxel." << std::endl;
58 return;
59 }
60 }
61}
62
63Float VoxelVolumeAttribute::compute_signed_tet_volume(Mesh& mesh, size_t voxel_idx) {
64 VectorI voxel = mesh.get_voxel(voxel_idx);

Callers

nothing calls this directly

Calls 5

get_num_voxelsMethod · 0.45
get_vertex_per_voxelMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected