| 9 | using namespace PyMesh; |
| 10 | |
| 11 | HarmonicSolver::Ptr HarmonicSolver::create(const Mesh::Ptr mesh) { |
| 12 | const bool is_volume_mesh = (mesh->get_dim() == 3) && (mesh->get_num_voxels() > 0); |
| 13 | HarmonicSolver::Ptr solver; |
| 14 | const MatrixFr vertices = MatrixUtils::reshape<MatrixFr>( |
| 15 | mesh->get_vertices(), |
| 16 | mesh->get_num_vertices(), |
| 17 | mesh->get_dim()); |
| 18 | |
| 19 | if (is_volume_mesh) { |
| 20 | const MatrixIr voxels = MatrixUtils::reshape<MatrixIr>( |
| 21 | mesh->get_voxels(), |
| 22 | mesh->get_num_voxels(), |
| 23 | mesh->get_vertex_per_voxel()); |
| 24 | solver = std::make_shared<HarmonicSolver>(vertices, voxels); |
| 25 | } else { |
| 26 | const MatrixIr faces = MatrixUtils::reshape<MatrixIr>( |
| 27 | mesh->get_faces(), |
| 28 | mesh->get_num_faces(), |
| 29 | mesh->get_vertex_per_face()); |
| 30 | solver = std::make_shared<HarmonicSolver>(vertices, faces); |
| 31 | } |
| 32 | solver->pre_process(); // Check dimensions |
| 33 | return solver; |
| 34 | } |
| 35 | |
| 36 | HarmonicSolver::Ptr HarmonicSolver::create_raw( |
| 37 | const MatrixFr& nodes, const MatrixIr& elements) { |
nothing calls this directly
no test coverage detected