From 252cca2f0ceb760e2a491e25b2ae6e5a2cbeb640 Mon Sep 17 00:00:00 2001 From: "Richard A. Kirian" Date: Fri, 27 Jan 2012 16:26:57 -0800 Subject: hdfsee: added an option to overlay rings with user-defined radii --- src/dw-hdfsee.c | 33 ++++++++++++++++++++++----------- src/dw-hdfsee.h | 4 +++- src/hdfsee.c | 29 +++++++++++++++++++++++++++-- 3 files changed, 52 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/dw-hdfsee.c b/src/dw-hdfsee.c index 88f47da4..7d76e1b8 100644 --- a/src/dw-hdfsee.c +++ b/src/dw-hdfsee.c @@ -240,16 +240,24 @@ static int draw_stuff(cairo_surface_t *surf, DisplayWindow *dw) //show_simple_ring(cr, dw, 380.0, &basic_m); /* Draw resolution circles */ - show_ring(cr, dw, 10.0e-10, "10A", &basic_m, 1.0, 0.0, 0.0); - show_ring(cr, dw, 9.0e-10, "9A", &basic_m, 1.0, 0.0, 0.0); - show_ring(cr, dw, 8.0e-10, "8A", &basic_m, 1.0, 0.0, 0.0); - show_ring(cr, dw, 7.0e-10, "7A", &basic_m, 1.0, 0.5, 0.0); - show_ring(cr, dw, 6.0e-10, "6A", &basic_m, 1.0, 1.0, 0.0); - show_ring(cr, dw, 5.0e-10, "5A", &basic_m, 0.0, 1.0, 0.0); - show_ring(cr, dw, 4.0e-10, "4A", &basic_m, 0.0, 1.0, 0.0); -// show_ring(cr, dw, 3.0e-10, "3A", &basic_m); -// show_ring(cr, dw, 2.0e-10, "2A", &basic_m); -// show_ring(cr, dw, 1.0e-10, "1A", &basic_m); + if ( dw->n_rings == -1 ) { + /* n_rings == -1 means default behavior */ + show_ring(cr, dw, 10.0e-10, "10A", &basic_m, 1.0, 0.0, 0.0); + show_ring(cr, dw, 9.0e-10, "9A", &basic_m, 1.0, 0.0, 0.0); + show_ring(cr, dw, 8.0e-10, "8A", &basic_m, 1.0, 0.0, 0.0); + show_ring(cr, dw, 7.0e-10, "7A", &basic_m, 1.0, 0.5, 0.0); + show_ring(cr, dw, 6.0e-10, "6A", &basic_m, 1.0, 1.0, 0.0); + show_ring(cr, dw, 5.0e-10, "5A", &basic_m, 0.0, 1.0, 0.0); + show_ring(cr, dw, 4.0e-10, "4A", &basic_m, 0.0, 1.0, 0.0); + //show_ring(cr, dw, 3.0e-10, "3A", &basic_m); + //show_ring(cr, dw, 2.0e-10, "2A", &basic_m); + //show_ring(cr, dw, 1.0e-10, "1A", &basic_m); + } else { + int i; + for ( i=0; in_rings; i++ ) { + show_simple_ring(cr, dw, dw->ring_radii[i], &basic_m); + } + } } @@ -1720,7 +1728,8 @@ DisplayWindow *displaywindow_open(const char *filename, const char *peaks, int boost, int binning, int cmfilter, int noisefilter, int colscale, const char *element, const char *geometry, - int show_rings, double ring_size) + int show_rings, double *ring_radii, int n_rings, + double ring_size) { DisplayWindow *dw; char *title; @@ -1749,6 +1758,8 @@ DisplayWindow *displaywindow_open(const char *filename, const char *peaks, dw->not_ready_yet = 1; dw->surf = NULL; dw->ring_radius = ring_size; + dw->ring_radii = ring_radii; + dw->n_rings = n_rings; /* Open the file, if any */ if ( filename != NULL ) { diff --git a/src/dw-hdfsee.h b/src/dw-hdfsee.h index 87030dc0..8ed0de2a 100644 --- a/src/dw-hdfsee.h +++ b/src/dw-hdfsee.h @@ -87,6 +87,8 @@ typedef struct { int show_rings; int show_peaks; double ring_radius; + double *ring_radii; + int n_rings; int show_col_scale; int scale; @@ -101,7 +103,7 @@ extern DisplayWindow *displaywindow_open(const char *filename, int noisefilter, int colscale, const char *element, const char *geometry, int show_rings, - double ring_size); + double *ring_radii, int n_rings, double ring_size); #endif /* DISPLAYWINDOW_H */ diff --git a/src/hdfsee.c b/src/hdfsee.c index ba8d8eea..73373928 100644 --- a/src/hdfsee.c +++ b/src/hdfsee.c @@ -99,7 +99,10 @@ int main(int argc, char *argv[]) char *element = NULL; char *geometry = NULL; double ring_size = 5.0; - + char *reslist = NULL; + double ring_radii[128]; + int n_rings = -1; + /* Long options */ const struct option longopts[] = { {"help", 0, NULL, 'h'}, @@ -113,6 +116,7 @@ int main(int argc, char *argv[]) {"geometry", 1, NULL, 'g'}, {"show-rings", 0, &config_showrings, 1}, {"ring-size", 1, NULL, 2}, + {"simple-rings", 1, NULL, 'r'}, {0, 0, NULL, 0} }; @@ -168,7 +172,26 @@ int main(int argc, char *argv[]) ERROR("Ring size must be numerical.\n"); return 1; } - + case 'r' : + config_showrings = 1; + reslist = strdup(optarg); + int nchar = strlen(reslist); + char thisvalue[128]; + int i; + int j=0; + n_rings = 0; + for ( i=0; i<=nchar; i++ ) { + if ( ( reslist[i] != ',' ) && ( reslist[i] != '\0' ) ) { + thisvalue[j] = reslist[i]; + j++; + } else { + j=0; + thisvalue[i] = '\0'; + ring_radii[n_rings] = atof(thisvalue); + n_rings++; + } + } + break; case 0 : break; @@ -208,6 +231,8 @@ int main(int argc, char *argv[]) colscale, element, geometry, config_showrings, + ring_radii, + n_rings, ring_size); if ( main_window_list[i] == NULL ) { ERROR("Couldn't open display window\n"); -- cgit v1.2.3