Skip to content

Commit 8288400

Browse files
committed
Fix #2404, crash on landmark-based alignment when no landmarks are present.
1 parent ff66277 commit 8288400

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

Libs/Groom/Groom.cpp

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -665,6 +665,23 @@ bool Groom::run_alignment() {
665665
landmarks.push_back(get_landmarks(i, domain));
666666
}
667667

668+
// confirm that each subject has landmarks and has the same number of landmarks
669+
for (size_t i = 0; i < subjects.size(); i++) {
670+
if (landmarks[i]->GetNumberOfPoints() == 0) {
671+
SW_ERROR(
672+
"Unable to perform landmark-based alignment. Subject '{}' does not have landmarks defined for domain {}",
673+
subjects[i]->get_display_name(), domain);
674+
return false;
675+
}
676+
if (i > 0 && landmarks[i]->GetNumberOfPoints() != landmarks[0]->GetNumberOfPoints()) {
677+
SW_ERROR(
678+
"Unable to perform landmark-based alignment. Subject '{}' has a different number of landmarks than "
679+
"subject '{}'",
680+
subjects[i]->get_display_name(), subjects[0]->get_display_name());
681+
return false;
682+
}
683+
}
684+
668685
int reference_index = Groom::find_reference_landmarks(landmarks);
669686
params.set_alignment_reference_chosen(reference_index);
670687
params.save_to_project();
@@ -960,7 +977,11 @@ Mesh Groom::get_mesh(int subject, int domain, bool transformed) {
960977
vtkSmartPointer<vtkPoints> Groom::get_landmarks(int subject, int domain) {
961978
vtkSmartPointer<vtkPoints> vtk_points = vtkSmartPointer<vtkPoints>::New();
962979
auto subjects = project_->get_subjects();
963-
auto path = subjects[subject]->get_landmarks_filenames()[domain];
980+
auto landmarks_filenames = subjects[subject]->get_landmarks_filenames();
981+
if (domain >= landmarks_filenames.size()) {
982+
return vtk_points;
983+
}
984+
auto path = landmarks_filenames[domain];
964985

965986
std::ifstream in(path.c_str());
966987
if (!in.good()) {

0 commit comments

Comments
 (0)