From 4464b2fc8d2840d489a839e4973fab1e71144efc Mon Sep 17 00:00:00 2001 From: Thomas White Date: Tue, 23 Aug 2022 15:56:57 +0200 Subject: GUI: Add resolution rings It will refuse to draw the rings if the detector is too far from being flat (as judged by detgeom_mean_camera_length). Otherwise, the drawing is exactly the same as was done by hdfsee. --- src/crystfel_gui.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'src/crystfel_gui.c') diff --git a/src/crystfel_gui.c b/src/crystfel_gui.c index 066422a3..1c439b18 100644 --- a/src/crystfel_gui.c +++ b/src/crystfel_gui.c @@ -275,6 +275,8 @@ void update_imageview(struct crystfelproject *proj) proj->show_peaks); crystfel_image_view_set_show_centre(CRYSTFEL_IMAGE_VIEW(proj->imageview), proj->show_centre); + crystfel_image_view_set_resolution_rings(CRYSTFEL_IMAGE_VIEW(proj->imageview), + proj->resolution_rings); crystfel_image_view_set_image(CRYSTFEL_IMAGE_VIEW(proj->imageview), proj->cur_image); @@ -670,6 +672,30 @@ static gint show_centre_sig(GtkWidget *w, struct crystfelproject *proj) } +static gint resolution_rings_sig(GtkWidget *w, struct crystfelproject *proj) +{ + int tr = gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(w)); + + if ( tr && proj->cur_image == NULL ) { + error_box(proj, "Load some images first!\n"); + return FALSE; + } + + if ( tr && isnan(detgeom_mean_camera_length(proj->cur_image->detgeom)) ) { + error_box(proj, "Cannot display resolution rings accurately " + "because detector is not flat enough"); + tr = FALSE; + gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(w), FALSE); + } + + proj->resolution_rings = tr; + crystfel_image_view_set_resolution_rings(CRYSTFEL_IMAGE_VIEW(proj->imageview), + tr); + + return FALSE; +} + + static gint show_peaks_sig(GtkWidget *w, struct crystfelproject *proj) { proj->show_peaks = gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(w)); @@ -711,6 +737,7 @@ static void add_menu_bar(struct crystfelproject *proj, GtkWidget *vbox) " " " " " " + " " " " " " "" @@ -757,6 +784,8 @@ static void add_menu_bar(struct crystfelproject *proj, GtkWidget *vbox) G_CALLBACK(label_refls_sig), FALSE }, { "CentreAction", NULL, "Beam centre", NULL, NULL, G_CALLBACK(show_centre_sig), FALSE }, + { "ResolutionRingsAction", NULL, "Resolution rings", NULL, NULL, + G_CALLBACK(resolution_rings_sig), FALSE }, { "RescanOnChangeAction", NULL, "Rescan streams when changing frame", NULL, NULL, G_CALLBACK(rescan_on_change_sig), FALSE }, }; @@ -1165,6 +1194,10 @@ int main(int argc, char *argv[]) gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act), proj.label_refls); + act = gtk_ui_manager_get_action(proj.ui, "/mainwindow/view/resrings"); + gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act), + proj.resolution_rings); + act = gtk_ui_manager_get_action(proj.ui, "/mainwindow/tools/rescanonchange"); gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act), proj.rescan_on_change); -- cgit v1.2.3