@@ -529,58 +529,9 @@ bool Groom::run_alignment() {
529529
530530 // per-domain alignment
531531 for (size_t domain = 0 ; domain < num_domains; domain++) {
532- if (abort_) {
533- return false ;
534- }
535-
536532 auto params = GroomParameters (project_, project_->get_domain_names ()[domain]);
537- if (params.get_alignment_enabled ()) {
538- any_alignment = true ;
539- }
540-
541533 if (params.get_use_icp ()) {
542534 global_icp = true ;
543- std::vector<Mesh> reference_meshes;
544- std::vector<Mesh> meshes;
545- for (size_t i = 0 ; i < subjects.size (); i++) {
546- if (!subjects[i]->is_excluded ()) {
547- Mesh mesh = get_mesh (i, domain, true );
548- // if fixed subjects are present, only add the fixed subjects
549- if (subjects[i]->is_fixed () || !project_->get_fixed_subjects_present ()) {
550- reference_meshes.push_back (mesh);
551- }
552- meshes.push_back (mesh);
553- }
554- }
555-
556- reference_index = params.get_alignment_reference ();
557- subset_size = params.get_alignment_subset_size ();
558-
559- Mesh reference_mesh = vtkSmartPointer<vtkPolyData>::New ();
560- if (reference_index < 0 || reference_index >= subjects.size ()) {
561- reference_index = MeshUtils::findReferenceMesh (reference_meshes, subset_size);
562- reference_index = reference_meshes[reference_index].get_id ();
563- }
564- reference_mesh = get_mesh (reference_index, domain, true );
565-
566- params.set_alignment_reference_chosen (reference_index);
567- params.save_to_project ();
568-
569- auto transforms = Groom::get_icp_transforms (meshes, reference_mesh);
570- assign_transforms (transforms, domain);
571- } else if (params.get_use_landmarks ()) {
572- global_landmarks = true ;
573- std::vector<vtkSmartPointer<vtkPoints>> landmarks;
574- for (size_t i = 0 ; i < subjects.size (); i++) {
575- landmarks.push_back (get_landmarks (i, domain));
576- }
577-
578- int reference_index = Groom::find_reference_landmarks (landmarks);
579- params.set_alignment_reference_chosen (reference_index);
580- params.save_to_project ();
581-
582- auto transforms = Groom::get_landmark_transforms (landmarks, reference_index);
583- assign_transforms (transforms, domain);
584535 }
585536 }
586537
@@ -652,6 +603,63 @@ bool Groom::run_alignment() {
652603 }
653604 }
654605
606+ // per-domain alignment
607+ for (size_t domain = 0 ; domain < num_domains; domain++) {
608+ if (abort_) {
609+ return false ;
610+ }
611+
612+ auto params = GroomParameters (project_, project_->get_domain_names ()[domain]);
613+ if (params.get_alignment_enabled ()) {
614+ any_alignment = true ;
615+ }
616+
617+ if (params.get_use_icp ()) {
618+ global_icp = true ;
619+ std::vector<Mesh> reference_meshes;
620+ std::vector<Mesh> meshes;
621+ for (size_t i = 0 ; i < subjects.size (); i++) {
622+ if (!subjects[i]->is_excluded ()) {
623+ Mesh mesh = get_mesh (i, domain, true );
624+ // if fixed subjects are present, only add the fixed subjects
625+ if (subjects[i]->is_fixed () || !project_->get_fixed_subjects_present ()) {
626+ reference_meshes.push_back (mesh);
627+ }
628+ meshes.push_back (mesh);
629+ }
630+ }
631+
632+ reference_index = params.get_alignment_reference ();
633+ subset_size = params.get_alignment_subset_size ();
634+
635+ Mesh reference_mesh = vtkSmartPointer<vtkPolyData>::New ();
636+ if (reference_index < 0 || reference_index >= subjects.size ()) {
637+ reference_index = MeshUtils::findReferenceMesh (reference_meshes, subset_size);
638+ reference_index = reference_meshes[reference_index].get_id ();
639+ }
640+ reference_mesh = get_mesh (reference_index, domain, true );
641+
642+ params.set_alignment_reference_chosen (reference_index);
643+ params.save_to_project ();
644+
645+ auto transforms = Groom::get_icp_transforms (meshes, reference_mesh);
646+ assign_transforms (transforms, domain);
647+ } else if (params.get_use_landmarks ()) {
648+ global_landmarks = true ;
649+ std::vector<vtkSmartPointer<vtkPoints>> landmarks;
650+ for (size_t i = 0 ; i < subjects.size (); i++) {
651+ landmarks.push_back (get_landmarks (i, domain));
652+ }
653+
654+ int reference_index = Groom::find_reference_landmarks (landmarks);
655+ params.set_alignment_reference_chosen (reference_index);
656+ params.save_to_project ();
657+
658+ auto transforms = Groom::get_landmark_transforms (landmarks, reference_index);
659+ assign_transforms (transforms, domain);
660+ }
661+ }
662+
655663 return true ;
656664}
657665
0 commit comments