Skip to content

Commit 596fcfd

Browse files
authored
Merge branch 'master' into dependabot/pip/jinja2-3.1.6
2 parents 7393fd5 + 4b642a0 commit 596fcfd

File tree

12 files changed

+329
-73
lines changed

12 files changed

+329
-73
lines changed

Examples/Python/ellipsoid_multiple_domain_mesh.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,7 @@ def Run_Pipeline(args):
3838
else:
3939
dataset_name = "ellipsoid_multiple_domain_mesh"
4040
sw.download_dataset(dataset_name, output_directory)
41-
dataset_name = "ellipsoid_joint_rotation"
42-
mesh_files = sorted(glob.glob(output_directory +
43-
dataset_name + "/meshes/*.vtk"))
41+
mesh_files = sorted(glob.glob(output_directory + "/meshes/*.vtk"))
4442

4543
if args.use_subsample:
4644
inputMeshes =[sw.Mesh(filename) for filename in mesh_files]

Libs/Analyze/Shape.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ void Shape::recompute_original_surface() {
118118
}
119119
auto meshes = original_meshes_.meshes();
120120
Image copy = *seg;
121-
copy.binarize(0, 1);
121+
copy.binarize(0, 2);
122122
Mesh mesh = copy.toMesh(0.001);
123123
MeshHandle mesh_handle = std::make_shared<StudioMesh>();
124124
mesh_handle->set_poly_data(mesh.getVTKMesh());

Libs/Groom/Groom.cpp

Lines changed: 57 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Libs/Particles/ParticleShapeStatistics.cpp

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -212,12 +212,13 @@ void ParticleShapeStatistics::compute_multi_level_analysis_statistics(std::vecto
212212
m += (this->num_particles_array_[idx]);
213213
}
214214
super_matrix_.resize(m, n);
215+
215216
for (unsigned int i = 0; i < points.size(); i++) {
216217
unsigned int p = super_matrix_.rows();
217218
for (unsigned int j = 0; j < p; j++) {
218-
super_matrix_(j, i * values_per_particle_) = points[i][j * values_per_particle_];
219-
super_matrix_(j, i * values_per_particle_ + 1) = points[i][j * values_per_particle_ + 1];
220-
super_matrix_(j, i * values_per_particle_ + 2) = points[i][j * values_per_particle_ + 2];
219+
for (int k = 0; k < values_per_particle_; k++) {
220+
super_matrix_(j, i * values_per_particle_ + k) = points[i][j * values_per_particle_ + k];
221+
}
221222
}
222223
}
223224

@@ -263,9 +264,9 @@ void ParticleShapeStatistics::compute_multi_level_analysis_statistics(std::vecto
263264
for (unsigned int i = 0; i < num_samples_; i++) {
264265
unsigned int p = m;
265266
for (unsigned int j = 0; j < p; j++) {
266-
z_shape_dev_objective(j * values_per_particle_, i) = z_shape_dev_centered(j, i * values_per_particle_);
267-
z_shape_dev_objective(j * values_per_particle_ + 1, i) = z_shape_dev_centered(j, i * values_per_particle_ + 1);
268-
z_shape_dev_objective(j * values_per_particle_ + 2, i) = z_shape_dev_centered(j, i * values_per_particle_ + 2);
267+
for (int k = 0; k < values_per_particle_; k++) {
268+
z_shape_dev_objective(j * values_per_particle_ + k, i) = z_shape_dev_centered(j, i * values_per_particle_ + k);
269+
}
269270
}
270271
}
271272
points_minus_mean_shape_dev_.resize(M, num_samples_);
@@ -277,9 +278,9 @@ void ParticleShapeStatistics::compute_multi_level_analysis_statistics(std::vecto
277278
z_rel_pose_objective.resize(domains_per_shape_ * values_per_particle_, num_samples_);
278279
for (unsigned int k = 0; k < domains_per_shape_; k++) {
279280
for (unsigned int i = 0; i < num_samples_; i++) {
280-
z_rel_pose_objective(k * values_per_particle_, i) = z_rel_pose_centered(k, i * values_per_particle_);
281-
z_rel_pose_objective(k * values_per_particle_ + 1, i) = z_rel_pose_centered(k, i * values_per_particle_ + 1);
282-
z_rel_pose_objective(k * values_per_particle_ + 2, i) = z_rel_pose_centered(k, i * values_per_particle_ + 2);
281+
for (int j = 0; j < values_per_particle_; j++) {
282+
z_rel_pose_objective(k * values_per_particle_ + j, i) = z_rel_pose_centered(k, i * values_per_particle_ + j);
283+
}
283284
}
284285
}
285286
points_minus_mean_rel_pose_.resize(domains_per_shape_ * values_per_particle_, num_samples_);

Studio/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,7 @@ SET(STUDIO_VISUALIZATION_SRCS
228228
Visualization/ParticleColors.cpp
229229
Visualization/StudioInteractorStyle.cpp
230230
Visualization/StudioSliceInteractorStyle.cpp
231+
Visualization/StudioImageActorPointPlacer.cpp
231232
Visualization/SliceView.cpp
232233
Visualization/MeshSlice.cpp
233234
Visualization/Viewer.cpp

Studio/Data/SegmentationToolPanel.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ SegmentationToolPanel::SegmentationToolPanel(QWidget* parent) : QWidget(parent),
4040
connect(ui_->recompute_surface_, &QPushButton::clicked, this, &SegmentationToolPanel::recompute_surface);
4141
ui_->header_label->setAttribute(Qt::WA_TransparentForMouseEvents);
4242
ui_->open_button->setChecked(false);
43+
44+
// for 6.6 release we don't have include/exclude
45+
ui_->included_mode_->hide();
46+
ui_->excluded_mode_->hide();
4347
}
4448

4549
//---------------------------------------------------------------------------

Studio/Visualization/PaintWidget.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include "PaintWidget.h"
33

44
#include <Logging.h>
5+
#include <Visualization/StudioImageActorPointPlacer.h>
56

67
#include <QCursor>
78

@@ -10,7 +11,6 @@
1011
#include "vtkCommand.h"
1112
#include "vtkEvent.h"
1213
#include "vtkImageActor.h"
13-
#include "vtkImageActorPointPlacer.h"
1414
#include "vtkObjectFactory.h"
1515
#include "vtkOrientedGlyphContourRepresentation.h"
1616
#include "vtkPointPlacer.h"
@@ -255,10 +255,13 @@ bool PaintWidget::use_point_placer(double displayPos[2], int newState) {
255255

256256
if (WidgetState == PaintWidget::Paint || WidgetState == PaintWidget::Erase) {
257257
if (WidgetState == PaintWidget::Paint) {
258+
if (circle_mode_) {
259+
// we have to transform the point back to the image space in case there is alignment
260+
auto transform = viewer_->get_inverse_image_transform();
261+
transform->TransformPoint(worldPos, worldPos);
262+
}
263+
258264
viewer_->handle_paint(displayPos, worldPos);
259-
////paint_position( this, worldPos );
260-
} else if (WidgetState == PaintWidget::Erase) {
261-
////erase_position( this, worldPos );
262265
}
263266

264267
EventCallbackCommand->SetAbortFlag(1);

Studio/Visualization/SliceView.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#include <vtkCellData.h>
44
#include <vtkCutter.h>
55
#include <vtkImageActor.h>
6-
#include <vtkImageActorPointPlacer.h>
6+
#include <Visualization/StudioImageActorPointPlacer.h>
77
#include <vtkImageProperty.h>
88
#include <vtkImageSliceMapper.h>
99
#include <vtkLookupTable.h>
@@ -62,7 +62,7 @@ SliceView::SliceView(Viewer *viewer) : viewer_(viewer) {
6262
mask_slice_ = vtkSmartPointer<vtkImageActor>::New();
6363
slice_mapper_ = vtkSmartPointer<vtkImageSliceMapper>::New();
6464
mask_mapper_ = vtkSmartPointer<vtkImageSliceMapper>::New();
65-
placer_ = vtkSmartPointer<vtkImageActorPointPlacer>::New();
65+
placer_ = vtkSmartPointer<StudioImageActorPointPlacer>::New();
6666
placer_->SetImageActor(image_slice_);
6767
}
6868

0 commit comments

Comments
 (0)