1 /* -*- Mode1: C; indent-tabs-mode: nil; c-basic-offset: 4 c-style: "K&R" -*- */
3 /*----------------------------------------------------------------------
5 gpiv - Graphic program for Particle Image Velocimetry, based on gtk/gnome
8 Copyright (C) 2002, 2003, 2004 Gerber van der Graaf
10 This file is part of gpiv.
12 Gpiv is free software; you can redistribute it and/or modify
13 it under the terms of the GNU General Public License as published by
14 the Free Software Foundation; either version 2, or (at your option)
17 This program is distributed in the hope that it will be useful,
18 but WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 GNU General Public License for more details.
22 You should have received a copy of the GNU General Public License
23 along with this program; if not, write to the Free Software Foundation,
24 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26 ----------------------------------------------------------------------*/
29 * main routines of gpiv
31 * Revision 1.29 2008-04-28 12:00:57 gerber
32 * hdf-formatted files are now with .hdf extension (previously: .gpi)
34 * Revision 1.28 2007-12-19 08:42:35 gerber
37 * Revision 1.27 2007-11-23 16:24:07 gerber
38 * release 0.5.0: Kafka
40 * Revision 1.26 2007-06-06 17:00:48 gerber
41 * Retreives images/data from URI using Gnome Virtual File System.
43 * Revision 1.25 2007-03-22 16:00:32 gerber
44 * Added image processing tabulator
46 * Revision 1.24 2007/02/05 15:17:09 gerber
47 * auto stretching, broadcast display settings to buffers from preferences
49 * Revision 1.23 2007-01-29 11:27:43 gerber
50 * added image formats png, gif, tif png, bmp, improved buffer display
52 * Revision 1.22 2006-09-18 07:27:06 gerber
53 * *** empty log message ***
55 * Revision 1.21 2006/01/31 15:15:33 gerber
56 * version 0.3.0b; minor change
58 * Revision 1.20 2006/01/31 14:28:12 gerber
61 * Revision 1.18 2005/03/04 12:52:01 gerber
62 * print message if gpiv_scan_resourcefiles returns with err_msg != NULL ==>
63 * this is not an error, but defaults are read
65 * Revision 1.17 2005/03/01 15:23:22 gerber
66 * removed warning message
68 * Revision 1.16 2005/03/01 14:43:46 gerber
69 * updated documentation
71 * Revision 1.15 2005/02/26 09:43:30 gerber
72 * parameter flags (parameter_logic) defined as gboolean
74 * Revision 1.14 2005/02/26 09:17:13 gerber
75 * structured of interrogate function by using gpiv_piv_isiadapt
77 * Revision 1.13 2005/01/19 15:53:42 gerber
78 * Initiation of Data Acquisition (DAC); trigerring of lasers and camera
79 * by using RTAI and Realtime Linux, recording images from IEEE1394
80 * (Firewire) IIDC compliant camera's
82 * Revision 1.12 2004/10/15 19:24:05 gerber
83 * GPIV_ and Gpiv prefix to defines and structure names of libgpiv
85 * Revision 1.11 2004/06/14 21:19:23 gerber
86 * Image depth up to 16 bits.
87 * Improvement "single int" and "drag int" in Eval tab.
88 * Viewer's pop-up menu.
89 * Adaption for gpiv_matrix_* and gpiv_vector_*.
91 * See Changelog for further info.
93 * Revision 1.10 2003/09/04 13:31:55 gerber
94 * init of printing (unfinished)
96 * Revision 1.9 2003/09/01 11:17:15 gerber
97 * improved monitoring of interrogation process
99 * Revision 1.8 2003/08/22 15:24:52 gerber
100 * interactive spatial scaling
102 * Revision 1.7 2003/07/25 15:40:23 gerber
103 * removed/disabled setting of correlation in Eval tab, Correlation type in Image info tab
105 * Revision 1.6 2003/07/13 14:38:18 gerber
106 * changed error handling of libgpiv
108 * Revision 1.5 2003/07/12 21:21:16 gerber
109 * changed error handling libgpiv
111 * Revision 1.3 2003/07/10 11:56:07 gerber
114 * Revision 1.2 2003/06/27 13:47:26 gerber
115 * display ruler, line/point evaluation
117 * Revision 1.1.1.1 2003/06/17 17:10:52 gerber
124 * some header inclusions for gtk/gnome (by glade)
133 * all variables are read by a header
135 #include "gpiv_gui.h"
137 /* #include "console_interface.h" */
140 #include "utils_par.h"
144 /* #define USAGE "\ */
145 /* Usage: gpiv-gui [-f filename][-s N][-t] \n\ */
148 /* -f filename: loads project \n\ */
149 /* -s N: vector scale N \n\ */
150 /* -t: show tooltips \n" */
153 /* -p: print parameters and other info to stdout \n\ */
157 /* #define HELP "\n\ */
158 /* gpiv processes and analyzes images for (Digital) Particle Image \n\ */
159 /* Velocimetry, post-processes the PIV data and visualizes its \n\ */
160 /* results in a graphical way. \n" */
165 /*-----------------------------------------------------------------------------
166 * Obtains parameter settings of the Graphic User Interface
170 gboolean used_default
= FALSE
;
171 Par
*ldp
= g_new (Par
, 1); /* Local default parameter */
172 /* Par *lgp = g_new (Par, 1); */
175 /* default_par = ldp; */
177 gnome_config_push_prefix ("/gpiv/General/");
180 gnome_config_get_bool_with_default ("print_par=FALSE", &used_default
);
182 g_message ("print_par = %d from default", ldp
->print_par
);
183 gnome_config_set_bool ("print_par", ldp
->print_par
);
187 gnome_config_get_bool_with_default ("verbose=FALSE", &used_default
);
189 g_message ("verbose = %d from default", ldp
->verbose
);
190 gnome_config_set_bool ("verbose", ldp
->verbose
);
194 ldp
->console__show_tooltips
=
195 gnome_config_get_bool_with_default ("console__show_tooltips=TRUE",
197 ldp
->console__show_tooltips__set
= TRUE
;
199 g_message ("console__show_tooltips = %d from default",
200 ldp
->console__show_tooltips
);
201 gnome_config_set_bool ("console__show_tooltips", ldp
->console__show_tooltips
);
205 ldp
->console__view_gpivbuttons
=
206 gnome_config_get_bool_with_default ("console__view_gpivbuttons=TRUE",
208 ldp
->console__view_gpivbuttons__set
= TRUE
;
210 g_message ("console__view_gpivbuttons = %d from default",
211 ldp
->console__view_gpivbuttons
);
212 gnome_config_set_bool ("view__gpivbuttons",
213 ldp
->console__view_gpivbuttons
);
217 ldp
->console__view_tabulator
=
218 gnome_config_get_bool_with_default ("console__view_tabulator=TRUE",
220 ldp
->console__view_tabulator__set
= TRUE
;
222 g_message ("console__view_tabulator = %d from default",
223 ldp
->console__view_tabulator
);
224 gnome_config_set_bool ("view__tabulator",
225 ldp
->console__view_tabulator
);
229 ldp
->console__nbins
=
230 gnome_config_get_int_with_default ("console__nbins=10", &used_default
);
231 ldp
->console__nbins__set
= TRUE
;
233 g_message ("console__nbins = %d from default", ldp
->console__nbins
);
234 gnome_config_set_int ("console__nbins", ldp
->console__nbins
);
239 gnome_config_get_int_with_default ("img_fmt=0", &used_default
);
240 ldp
->img_fmt__set
= TRUE
;
242 g_message ("img_fmt = %d from default ??", ldp
->img_fmt
);
243 gnome_config_set_bool ("img_fmt", ldp
->img_fmt
);
248 gnome_config_get_bool_with_default ("hdf=FALSE", &used_default
);
249 ldp
->hdf__set
= TRUE
;
251 g_message ("hdf = %d from default ??", ldp
->hdf
);
252 gnome_config_set_bool ("hdf", ldp
->hdf
);
258 gnome_config_push_prefix ("/gpiv/Image/");
261 gnome_config_get_bool_with_default ("x_corr=TRUE", &used_default
);
262 ldp
->x_corr__set
= TRUE
;
264 g_message ("x_corr = %d from default", ldp
->x_corr
);
265 gnome_config_set_bool ("x_corr", ldp
->x_corr
);
268 gnome_config_push_prefix ("/gpiv/Processes/");
272 gnome_config_get_bool_with_default ("process__cam=FALSE", &used_default
);
273 ldp
->process__cam__set
= TRUE
;
275 g_message ("process__cam = %d from default", ldp
->process__cam
);
276 gnome_config_set_bool ("process__cam", ldp
->process__cam
);
278 #endif /* ENABLE_CAM */
282 gnome_config_get_bool_with_default ("process__trig=FALSE", &used_default
);
283 ldp
->process__trig__set
= TRUE
;
285 g_message ("process__trig = %d from default", ldp
->process__trig
);
286 gnome_config_set_bool ("process__trig", ldp
->process__trig
);
288 #endif /* ENABLE_TRIG */
290 #ifdef ENABLE_IMGPROC
291 ldp
->process__imgproc
=
292 gnome_config_get_bool_with_default ("process__imgproc=FALSE", &used_default
);
293 ldp
->process__imgproc__set
= TRUE
;
295 g_message ("process__imgproc = %d from default", ldp
->process__imgproc
);
296 gnome_config_set_bool ("process__imgproc", ldp
->process__imgproc
);
298 #endif /* ENABLE_IMGPROC */
301 gnome_config_get_bool_with_default ("process__piv=TRUE", &used_default
);
302 ldp
->process__piv__set
= TRUE
;
304 g_message ("process__piv = %d from default", ldp
->process__piv
);
305 gnome_config_set_bool ("process__piv", ldp
->process__piv
);
309 ldp
->process__gradient
=
310 gnome_config_get_bool_with_default ("process__gradient=FALSE",
312 ldp
->process__gradient__set
= TRUE
;
314 g_message ("process__gradient = %d from default",
315 ldp
->process__gradient
);
316 gnome_config_set_bool ("process__gradient",
317 ldp
->process__gradient
);
321 ldp
->process__resstats
=
322 gnome_config_get_bool_with_default ("process__resstats=FALSE",
324 ldp
->process__resstats__set
= TRUE
;
326 g_message ("process__resstats = %d from default",
327 ldp
->process__resstats
);
328 gnome_config_set_bool ("process__resstats",
329 ldp
->process__resstats
);
333 ldp
->process__errvec
=
334 gnome_config_get_bool_with_default ("process__errvec=FALSE",
336 ldp
->process__errvec__set
= TRUE
;
338 g_message ("process__errvec = %d from default",
339 ldp
->process__errvec
);
340 gnome_config_set_bool ("process__errvec",
341 ldp
->process__errvec
);
345 ldp
->process__peaklock
=
346 gnome_config_get_bool_with_default ("process__peaklock=FALSE",
348 ldp
->process__peaklock__set
= TRUE
;
350 g_message ("process__peaklock = %d from default",
351 ldp
->process__peaklock
);
352 gnome_config_set_bool ("process__peaklock",
353 ldp
->process__peaklock
);
357 ldp
->process__average
=
358 gnome_config_get_bool_with_default ("process__average=FALSE",
360 ldp
->process__average__set
= TRUE
;
362 g_message ("process__average = %d from default",
363 ldp
->process__average
);
364 gnome_config_set_bool ("process__average",
365 ldp
->process__average
);
369 ldp
->process__scale
=
370 gnome_config_get_bool_with_default ("process__scale=FALSE",
372 ldp
->process__scale__set
= TRUE
;
374 g_message ("process__scale = %d from default",
375 ldp
->process__scale
);
376 gnome_config_set_bool ("process__scale",
377 ldp
->process__scale
);
381 ldp
->process__subtract
=
382 gnome_config_get_bool_with_default ("process__subtract=FALSE",
384 ldp
->process__subtract__set
= TRUE
;
386 g_message ("process__subtract = %d from default",
387 ldp
->process__subtract
);
388 gnome_config_set_bool ("process__subtract",
389 ldp
->process__subtract
);
393 ldp
->process__vorstra
=
394 gnome_config_get_bool_with_default ("process__vorstra=FALSE",
396 ldp
->process__vorstra__set
= TRUE
;
398 g_message ("process__vorstra = %d from default",
399 ldp
->process__vorstra
);
400 gnome_config_set_bool ("process__vorstra", ldp
->process__vorstra
);
405 gnome_config_push_prefix ("/gpiv/Display/");
407 ldp
->display__view_menubar
=
408 gnome_config_get_bool_with_default ("display__view_menubar=TRUE",
410 ldp
->display__view_menubar__set
= TRUE
;
412 g_message ("display__view_menubar = %d from default",
413 ldp
->display__view_menubar
);
414 gnome_config_set_bool ("display__view_menubar",
415 ldp
->display__view_menubar
);
419 ldp
->display__view_rulers
=
420 gnome_config_get_bool_with_default ("display__view_rulers=TRUE",
422 ldp
->display__view_rulers__set
= TRUE
;
424 g_message ("display__view_rulers = %d from default",
425 ldp
->display__view_rulers
);
426 gnome_config_set_bool ("display__view_rulers",
427 ldp
->display__view_rulers
);
431 ldp
->display__stretch_auto
=
432 gnome_config_get_bool_with_default ("display__stretch_auto=TRUE",
434 ldp
->display__stretch_auto__set
= TRUE
;
436 g_message ("display__stretch_auto = %d from default",
437 ldp
->display__stretch_auto
);
438 gnome_config_set_bool ("display__stretch_auto",
439 ldp
->display__stretch_auto
);
443 ldp
->display__backgrnd
=
444 gnome_config_get_int_with_default ("display__background=0", &used_default
);
445 ldp
->display__backgrnd__set
= TRUE
;
447 g_message ("display__background = %d from default", ldp
->display__backgrnd
);
448 gnome_config_set_int ("display__background", ldp
->display__backgrnd
);
452 ldp
->display__zoom_index
=
453 gnome_config_get_int_with_default ("display__zoom_index=1", &used_default
);
454 ldp
->display__zoom_index__set
= TRUE
;
456 g_message ("display__zoom_index = %d from default", ldp
->display__zoom_index
);
457 gnome_config_set_int ("display__zoom_index", ldp
->display__zoom_index
);
461 ldp
->display__vector_scale
=
462 gnome_config_get_int_with_default ("display__vector_scale=8", &used_default
);
463 ldp
->display__vector_scale__set
= TRUE
;
465 g_message ("display__vector_scale = %d from default", ldp
->display__vector_scale
);
466 gnome_config_set_int ("display__vector_scale", ldp
->display__vector_scale
);
470 ldp
->display__vector_color
=
471 gnome_config_get_int_with_default ("display__vector_color=SHOW_PEAKNR",
473 ldp
->display__vector_color__set
= TRUE
;
475 g_message ("display__vector_color = %d from default", ldp
->display__vector_color
);
476 gnome_config_set_int ("display__vector_color", ldp
->display__vector_color
);
479 /* ldp->stretch_window = */
480 /* gnome_config_get_int_with_default ("stretch_window=0", &used_default); */
481 /* if (used_default) { */
482 /* g_message ("stretch_window = %d from default", */
483 /* ldp->stretch_window); */
484 /* gnome_config_set_int ("stretch_window", ldp->stretch_window); */
488 ldp
->display__backgrnd
=
489 gnome_config_get_int_with_default ("display__backgrnd=SHOW_BG_IMG1",
491 ldp
->display__backgrnd__set
= TRUE
;
493 g_message ("display__backgrnd = %d from default", ldp
->display__backgrnd
);
494 gnome_config_set_int ("display__backgrnd", ldp
->display__backgrnd
);
498 ldp
->display__scalar
=
499 gnome_config_get_int_with_default ("display__scalar=SHOW_SC_NONE",
501 ldp
->display__scalar__set
= TRUE
;
503 g_message ("display__scalar = %d from default", ldp
->display__scalar
);
504 gnome_config_set_int ("display__scalar", ldp
->display__scalar
);
508 ldp
->display__intregs
=
509 gnome_config_get_bool_with_default ("display__intregs=TRUE",
511 ldp
->display__intregs__set
= TRUE
;
513 g_message ("display__intregs = %d from default",
514 ldp
->display__intregs
);
515 gnome_config_set_bool ("display__intregs", ldp
->display__intregs
);
520 gnome_config_get_bool_with_default ("display__piv=TRUE", &used_default
);
521 ldp
->display__piv__set
= TRUE
;
523 g_message ("display__piv = %d from default", ldp
->display__piv
);
524 gnome_config_set_bool ("display__piv", ldp
->display__piv
);
528 gnome_config_pop_prefix ();
537 /*-----------------------------------------------------------------------------
538 * Obtains additional variables, stored from previous sessions.
539 * Not all structure elements of gpiv_var are stored.
542 gboolean used_default
= FALSE
;
543 gchar fname_nr
[GPIV_MAX_CHARS
], fname_nr_default
[GPIV_MAX_CHARS
];
545 Var
*lgv
= g_new0 (Var
, 1);
548 gnome_config_push_prefix ("/gpiv/RuntimeVariables/");
551 gnome_config_get_int_with_default ("tab_pos=1", &used_default
);
553 g_message ("tab_pos = %d from default",
555 gnome_config_set_int ("tab_pos", lgv
->tab_pos
);
560 lgv
->number_fnames_last
=
561 gnome_config_get_int_with_default ("number_fnames_last=0",
564 g_message ("number_fnames_last = %d from default",
565 lgv
->number_fnames_last
);
566 gnome_config_set_int ("number_fnames_last",
567 lgv
->number_fnames_last
);
571 for (i
= 0; i
< lgv
->number_fnames_last
; i
++) {
572 g_snprintf(fname_nr
, GPIV_MAX_CHARS
,"fname_last_%d", i
);
573 g_snprintf(fname_nr_default
, GPIV_MAX_CHARS
,"fname_last_%d=./", i
);
576 gnome_config_get_string_with_default (fname_nr_default
,
579 g_message ("fnames_nr_default = %s from default",
581 gnome_config_set_string(fname_nr
, lgv
->fn_last
[i
]);
587 gnome_config_get_bool_with_default ("fname_date=FALSE",
590 g_message ("fname_date = %d from default",
592 gnome_config_set_bool ("fname_date", lgv
->fname_date
);
597 gnome_config_get_bool_with_default ("fname_time=FALSE",
600 g_message ("fname_time = %d from default",
602 gnome_config_set_bool ("fname_time", lgv
->fname_time
);
607 gnome_config_get_string_with_default ("fname_last=./", &used_default
);
609 g_message ("fname_last = %s from default", lgv
->fname_last
);
610 gnome_config_set_string("fname_last", lgv
->fname_last
);
615 gnome_config_get_float_with_default ("span=1.0", &used_default
);
617 g_message ("img_span_px = %f from default", lgv
->img_span_px
);
618 gnome_config_set_float("span", lgv
->img_span_px
);
622 gnome_config_get_float_with_default ("length=1.0", &used_default
);
624 g_message ("img_length_mm = %f from default", lgv
->img_length_mm
);
625 gnome_config_set_float("length", lgv
->img_length_mm
);
628 lgv
->piv_disproc_zoom
=
629 gnome_config_get_float_with_default ("zoom_factor=1.0", &used_default
);
631 g_message ("piv_disproc_zoom = %f from default",
632 lgv
->piv_disproc_zoom
);
633 gnome_config_set_float("piv_disproc_zoom", lgv
->piv_disproc_zoom
);
636 lgv
->piv_disproc_vlength
=
637 gnome_config_get_int_with_default ("piv_disproc_length=1", &used_default
);
639 g_message ("piv_disproc_length = %d from default",
640 lgv
->piv_disproc_vlength
);
641 gnome_config_set_int ("piv_disproc_length", lgv
->piv_disproc_vlength
);
645 gnome_config_pop_prefix ();
654 /*-----------------------------------------------------------------------------
655 * Reading parameters and variables from gnome parameter file (~/.gnome2/gpiv)
656 * See: http://developer.gnome.org/doc/GGAD/z79.html
658 * This workaround is because popt table is read when 'gnome_program_init' is.
659 * executed. The parameter structure loaded by popt (gp) needs to be compared
660 * with the values before reading the table, to find which parameters
661 * have been used as command arg. Therefore gp has been copied
662 * to gpiv_par before reading the table and is compared here.
663 * If not defined by command arg, defaults will be used. Defaults only can be
664 * read after 'gnome_program_init' as it uses gnome_config_get_*.
666 * Finally, the program variables are loaded here as well.
669 gchar
*err_msg
= NULL
;
672 set_parameters_ifdiff (&gp
, gpiv_par
);
674 default_par
= scan_parameters ();
675 /* cp_undef_parameters (default_par, gpiv_par); */
676 if ((err_msg
= cp_undef_parameters (default_par
, gpiv_par
)) != NULL
) {
677 gpiv_error ("par_init_args: failing cp_undef_parameters");
680 gpiv_var
= scan_variables ();
687 /*-----------------------------------------------------------------------------
688 * Setting and reading image parameters.
691 char *err_msg
= NULL
;
692 GpivImagePar
*lo_image_par
= g_new0 (GpivImagePar
, 1);
695 gl_image_par
= lo_image_par
;
696 gpiv_img_parameters_set (gl_image_par
, FALSE
);
698 gpiv_scan_resourcefiles (GPIV_IMGPAR_KEY
, gl_image_par
, gpiv_par
->print_par
))
699 != NULL
) g_message ("%s: %s", RCSID
, err_msg
);
701 g_snprintf (gl_image_par
->software
, GPIV_MAX_CHARS
, "%s %s", PACKAGE
, VERSION
);
702 gl_image_par
->software__set
= TRUE
;
704 g_snprintf (gl_image_par
->author
, GPIV_MAX_CHARS
, "%s", g_get_real_name ());
705 gl_image_par
->author__set
= TRUE
;
707 gpiv_img_default_parameters (gl_image_par
, FALSE
);
709 if (gpiv_par
->x_corr
) {
710 g_snprintf(IMAGE_CORRELATION_LABEL
, GPIV_MAX_CHARS
, "cross-correlation");
712 g_snprintf(IMAGE_CORRELATION_LABEL
, GPIV_MAX_CHARS
, "auto-correlation");
715 g_snprintf(IMAGE_WIDTH_LABEL
, GPIV_MAX_CHARS
, "%d", gl_image_par
->ncolumns
);
716 g_snprintf(IMAGE_HEIGHT_LABEL
, GPIV_MAX_CHARS
, "%d", gl_image_par
->nrows
);
717 g_snprintf(IMAGE_DEPTH_LABEL
, GPIV_MAX_CHARS
, "%d", gl_image_par
->depth
);
724 cam_par_init (gboolean cam_trig
)
725 /*-----------------------------------------------------------------------------
726 * parameter and variables initializing of data acquisition
727 * (trigger timings and cameraam)
731 GpivCamPar
*lo_cam_par
= g_new0 (GpivCamPar
, 1);
734 gl_cam_par
= lo_cam_par
;
735 gpiv_cam_parameters_set (gl_cam_par
, FALSE
);
737 gpiv_scan_resourcefiles (GPIV_CAMPAR_KEY
, gl_cam_par
, gpiv_par
->print_par
))
738 != NULL
) message_gpiv ("%s: %s", RCSID
, err_msg
);
739 gpiv_cam_check_parameters_read (gl_cam_par
, NULL
);
741 if ((cam_var
= gpiv_cam_get_camvar (gpiv_par
->verbose
)) == NULL
) {
742 if (gpiv_par
->verbose
)
743 warning_gpiv("cam_par_init: failing gpiv_cam_get_camvar");
747 if (cam_var
->numCameras
> 0) {
748 if (dc1394_setup_capture (cam_var
->camera
[0].handle
,
749 cam_var
->camera
[0].id
,
750 cam_var
->misc_info
[0].iso_channel
,
751 cam_var
->misc_info
[0].format
,
752 cam_var
->misc_info
[0].mode
,
754 /* cam_var->misc_info[0].framerate */ FRAMERATE_7_5
,
757 dc1394_release_camera (cam_var
->handle
, cam_var
->capture
[0]);
758 raw1394_destroy_handle (cam_var
->handle
);
759 g_warning("unable to setup camera-\n\
760 check line %d of %s to make sure\n\
761 that the video mode,framerate and format are\n\
762 supported by your camera\n",
766 gl_image_par
->ncolumns
= cam_var
->capture
[0].frame_width
;
767 gl_image_par
->nrows
= cam_var
->capture
[0].frame_height
;
768 gl_image_par
->ncolumns__set
= TRUE
;
769 gl_image_par
->nrows__set
= TRUE
;
770 raw1394_destroy_handle(cam_var
->handle
);
771 if (gpiv_par
->verbose
) {
772 g_message ("cam_par_init:: from camera: nrows = %d ncolumns = %d",
773 gl_image_par
->nrows
, gl_image_par
->ncolumns
);
777 #endif /* ENABLE_CAM */
784 /*-----------------------------------------------------------------------------
785 * parameter and variables initializing of data acquisition
789 GpivTrigPar
*lo_trig_par
= g_new0 (GpivTrigPar
, 1);
792 gl_trig_par
= lo_trig_par
;
793 gpiv_itrig_parameters_set (gl_trig_par
, FALSE
);
794 gpiv_trig_parameters_set(gl_trig_par
, FALSE
);
796 gpiv_scan_resourcefiles (GPIV_TRIGPAR_KEY
, gl_trig_par
, gpiv_par
->print_par
))
797 != NULL
) message_gpiv ("%s: %s", RCSID
, err_msg
);
798 gpiv_trig_check_parameters_read (gl_trig_par
, NULL
);
800 #endif /* ENABLE_TRIG */
804 #ifdef ENABLE_IMGPROC
806 imgproc_par_init (void)
807 /*-----------------------------------------------------------------------------
808 * Setting and reading image processing parameters.
811 char *err_msg
= NULL
;
812 GpivImageProcPar
*lo_imgproc_par
= g_new0 (GpivImageProcPar
, 1);
815 gl_imgproc_par
= lo_imgproc_par
;
816 gpiv_imgproc_parameters_set (gl_imgproc_par
, FALSE
);
818 gpiv_scan_resourcefiles (GPIV_IMGPROCPAR_KEY
, gl_imgproc_par
,
819 gpiv_par
->print_par
))
820 != NULL
) g_message ("%s: %s", RCSID
, err_msg
);
821 gpiv_imgproc_check_parameters_read (gl_imgproc_par
, NULL
);
823 #endif /* ENABLE_IMGPROC */
829 /*-----------------------------------------------------------------------------
830 * Reading piv interrogation parameters.
833 char *err_msg
= NULL
;
834 GpivPivPar
*lo_piv_par
= g_new0 (GpivPivPar
, 1);
837 gl_piv_par
= lo_piv_par
;
838 gpiv_piv_parameters_set (gl_piv_par
, FALSE
);
840 gpiv_scan_resourcefiles (GPIV_PIVPAR_KEY
, gl_piv_par
, gpiv_par
->print_par
))
841 != NULL
) g_message ("%s: %s", RCSID
, err_msg
);
842 gpiv_piv_check_parameters_read(gl_piv_par
, NULL
);
844 if (gl_piv_par
->col_start
> gl_image_par
->ncolumns
- gl_piv_par
->pre_shift_col
- 1) {
845 gl_piv_par
->col_start
= 0;
846 if (gpiv_par
->verbose
)
847 g_warning ("col_start larger than ncolumns; \nset to 0");
850 if (gl_piv_par
->col_end
> gl_image_par
->ncolumns
- gl_piv_par
->pre_shift_col
- 1) {
851 gl_piv_par
->col_end
= gl_image_par
->ncolumns
- gl_piv_par
->pre_shift_col
- 1;
852 if (gpiv_par
->verbose
)
853 g_warning("col_end larger than ncolumns; \nset to ncolumns %d",
854 gl_image_par
->ncolumns
- 1);
857 if (gl_piv_par
->row_start
> gl_image_par
->nrows
- gl_piv_par
->pre_shift_row
- 1) {
858 gl_piv_par
->row_start
= 0;
859 if (gpiv_par
->verbose
)
860 g_warning(_("row_start larger than nrows; \nset to zero"));
863 if (gl_piv_par
->row_end
> gl_image_par
->nrows
- gl_piv_par
->pre_shift_row
- 1) {
864 gl_piv_par
->row_end
= gl_image_par
->nrows
- gl_piv_par
->pre_shift_row
- 1;
865 if (gpiv_par
->verbose
)
866 g_warning("row_end larger than nrows; \nset to nrows %d",
867 gl_image_par
->nrows
- 1);
875 valid_par_init (void)
876 /*-----------------------------------------------------------------------------
877 * Reading piv validation parameters.
880 char *err_msg
= NULL
;
881 GpivValidPar
*lo_valid_par
= g_new0 (GpivValidPar
, 1);
884 gl_valid_par
= lo_valid_par
;
885 gpiv_valid_parameters_set (gl_valid_par
, FALSE
);
887 gpiv_scan_resourcefiles (GPIV_VALIDPAR_KEY
, gl_valid_par
, gpiv_par
->print_par
))
888 != NULL
) g_message ("%s: %s", RCSID
, err_msg
);
889 gpiv_valid_check_parameters_read (gl_valid_par
, NULL
);
896 /*-----------------------------------------------------------------------------
897 * Reading piv post-processing parameters.
900 char *err_msg
= NULL
;
901 GpivPostPar
*lo_post_par
= g_new0 (GpivPostPar
, 1);
904 gl_post_par
= lo_post_par
;
905 gpiv_post_parameters_set (gl_post_par
, FALSE
);
907 gpiv_scan_resourcefiles (GPIV_POSTPAR_KEY
, gl_post_par
, gpiv_par
->print_par
))
908 != NULL
) g_message ("%s: %s", RCSID
, err_msg
);
909 gpiv_post_check_parameters_read (gl_post_par
, NULL
);
915 load_images_from_commandline (GnomeProgram
*program
,
917 /*-----------------------------------------------------------------------------
918 * Loading the images from the command line while launching gpiv.
922 GValue value
= { 0, };
926 g_value_init (&value
, G_TYPE_POINTER
);
927 g_object_get_property (G_OBJECT (program
), GNOME_PARAM_POPT_CONTEXT
,
929 ctx
= g_value_get_pointer (&value
);
930 g_value_unset (&value
);
932 args
= (char**) poptGetArgs(ctx
);
934 for (i
= 0; args
[i
]; i
++) {
935 select_action_from_name (gpiv
, args
[i
]);
946 /*-----------------------------------------------------------------------------
947 * Main routine of gpiv
950 GnomeProgram
*program
;
951 /* GpivConsole *gpiv = g_new0 (GpivConsole, 1); */
954 char *err_msg
= NULL
;
955 gchar
*msg
= "Welcome to gpiv.";
956 GtkWidget
*menu_gpiv_popup
= NULL
;
957 GpivConsole
*gpiv
= NULL
;
958 gboolean trig_trig
= TRUE
, cam_trig
= TRUE
;
959 gint trig_init
, trig_start
, trig_stop
, trig_error
;
962 gboolean restored
= FALSE
;
965 setlocale (LC_ALL
, "");
966 bindtextdomain(PACKAGE
, PACKAGE_LOCALE_DIR
);
971 * parameter initializing of gpiv-gui, image
976 exec_process
= FALSE
;
977 cancel_process
= FALSE
;
983 if ((gpiv_par
= cp_parameters (&gp
)) == NULL
) {
984 gpiv_error ("main: failing cp_parameters");
987 /* Initialize gnome program
988 * command line keys: using POPT
991 program
= gnome_program_init (PACKAGE
, VERSION
,
992 LIBGNOMEUI_MODULE
, argc
, argv
,
993 GNOME_PARAM_POPT_TABLE
, options
,
994 GNOME_PARAM_HUMAN_READABLE_NAME
,
995 _("Image analyser for Particle Image Velocimetry"),
996 GNOME_PROGRAM_STANDARD_PROPERTIES
,
1000 * Used for authentification when loading/storing images from remote system
1003 gnome_authentication_manager_init ();
1006 * Reading program parameters, variables and process parameters
1013 cam_par_init (cam_trig
);
1020 #ifdef ENABLE_IMGPROC
1021 imgproc_par_init ();
1029 if (gl_image_par
->ncolumns
<= IMAGE_WIDTH_MAX
1030 && gl_image_par
->nrows
<= IMAGE_HEIGHT_MAX
1031 && gl_image_par
->depth
<= IMAGE_DEPTH_MAX
1034 * creating the Graphic interface
1036 gpiv
= create_gpiv ();
1037 gtk_widget_show (GTK_WIDGET (gpiv
->console
));
1038 menu_gpiv_popup
= create_menu_gpiv_popup (gpiv
);
1039 gtk_signal_connect_object (GTK_OBJECT(gpiv
->console
),
1040 "button_press_event",
1041 GTK_SIGNAL_FUNC (on_my_popup_handler
),
1042 GTK_OBJECT (menu_gpiv_popup
));
1044 gnome_appbar_set_default (GNOME_APPBAR(gpiv
->appbar
), msg_default
);
1045 gnome_appbar_push (GNOME_APPBAR(gpiv
->appbar
), msg
);
1047 if (gpiv_par
->console__show_tooltips
) {
1048 gtk_tooltips_enable(gpiv
->tooltips
);
1050 gtk_tooltips_disable(gpiv
->tooltips
);
1055 * Widgets will be enabled / disabled if trigger kernel modules
1056 * are loaded and accessible.
1057 * An info message will be displayed if features are absent
1059 if (!gpiv_trig_openrtfs (&trig_init
, &trig_start
, &trig_stop
,
1061 message_gpiv (_("Trigger system not available"));
1064 exec_trigger_stop ();
1065 sensitive (gpiv
, DAC_TRIG
, trig_trig
);
1066 sensitive (gpiv
, DAC_TIMING
, trig_trig
);
1067 #endif /* ENABLE_TRIG */
1071 * Widgets will be enabled / disabled if camera is connected.
1072 * An info message will be displayed if features are absent
1074 if (cam_var
->numCameras
> 0) {
1075 sensitive (gpiv
, DAC_CAM
, TRUE
);
1077 sensitive (gpiv
, DAC_TIMING
, TRUE
);
1080 sensitive (gpiv
, DAC_CAM
, FALSE
);
1082 sensitive (gpiv
, DAC_TIMING
, FALSE
);
1084 message_gpiv (_("No camera connected"));
1086 #endif /* ENABLE_CAM */
1088 sensitive (gpiv
, IMG
, TRUE
);
1089 sensitive (gpiv
, EVAL
, TRUE
);
1090 sensitive (gpiv
, INTREGS
, FALSE
);
1091 sensitive (gpiv
, VALID
, TRUE
);
1092 sensitive (gpiv
, POST
, TRUE
);
1094 load_images_from_commandline (program
, gpiv
);
1097 error_gpiv(_("Image dimensions or depth are larger than %dx%dx%d."),
1098 (int)IMAGE_WIDTH_MAX
, (int)IMAGE_HEIGHT_MAX
,
1099 (int)IMAGE_DEPTH_MAX
);