added gpiv_logo.xpm
[gpiv.git] / src / main.c
blob9395a769c205a5c2b531079cefe02ed140b8949c
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
6 libraries.
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)
15 any later version.
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
30 * $Log: main.c,v $
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
35 * debugged
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
59 * version 0.3.0
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_*.
90 * Resizing console.
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
112 * added man page
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
118 * Imported gpiv
124 * some header inclusions for gtk/gnome (by glade)
126 #ifdef HAVE_CONFIG_H
127 # include <config.h>
128 #endif
130 #include "support.h"
133 * all variables are read by a header
135 #include "gpiv_gui.h"
136 #include "console.h"
137 /* #include "console_interface.h" */
138 #include "io.h"
139 #include "utils.h"
140 #include "utils_par.h"
141 #include "main.h"
144 /* #define USAGE "\ */
145 /* Usage: gpiv-gui [-f filename][-s N][-t] \n\ */
146 /* \n\ */
147 /* keys: \n\ */
148 /* -f filename: loads project \n\ */
149 /* -s N: vector scale N \n\ */
150 /* -t: show tooltips \n" */
152 /* [-p] */
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" */
163 static Par *
164 scan_parameters()
165 /*-----------------------------------------------------------------------------
166 * Obtains parameter settings of the Graphic User Interface
169 gchar *err_msg;
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/");
179 ldp->print_par =
180 gnome_config_get_bool_with_default ("print_par=FALSE", &used_default);
181 if (used_default) {
182 g_message ("print_par = %d from default", ldp->print_par);
183 gnome_config_set_bool ("print_par", ldp->print_par);
186 ldp->verbose =
187 gnome_config_get_bool_with_default ("verbose=FALSE", &used_default);
188 if (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",
196 &used_default);
197 ldp->console__show_tooltips__set = TRUE;
198 if (used_default) {
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",
207 &used_default);
208 ldp->console__view_gpivbuttons__set = TRUE;
209 if (used_default) {
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",
219 &used_default);
220 ldp->console__view_tabulator__set = TRUE;
221 if (used_default) {
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;
232 if (used_default) {
233 g_message ("console__nbins = %d from default", ldp->console__nbins);
234 gnome_config_set_int ("console__nbins", ldp->console__nbins);
238 ldp->img_fmt =
239 gnome_config_get_int_with_default ("img_fmt=0", &used_default);
240 ldp->img_fmt__set = TRUE;
241 if (used_default) {
242 g_message ("img_fmt = %d from default ??", ldp->img_fmt);
243 gnome_config_set_bool ("img_fmt", ldp->img_fmt);
247 ldp->hdf =
248 gnome_config_get_bool_with_default ("hdf=FALSE", &used_default);
249 ldp->hdf__set = TRUE;
250 if (used_default) {
251 g_message ("hdf = %d from default ??", ldp->hdf);
252 gnome_config_set_bool ("hdf", ldp->hdf);
258 gnome_config_push_prefix ("/gpiv/Image/");
260 ldp->x_corr =
261 gnome_config_get_bool_with_default ("x_corr=TRUE", &used_default);
262 ldp->x_corr__set = TRUE;
263 if (used_default) {
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/");
270 #ifdef ENABLE_CAM
271 ldp->process__cam =
272 gnome_config_get_bool_with_default ("process__cam=FALSE", &used_default);
273 ldp->process__cam__set = TRUE;
274 if (used_default) {
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 */
280 #ifdef ENABLE_TRIG
281 ldp->process__trig =
282 gnome_config_get_bool_with_default ("process__trig=FALSE", &used_default);
283 ldp->process__trig__set = TRUE;
284 if (used_default) {
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;
294 if (used_default) {
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 */
300 ldp->process__piv =
301 gnome_config_get_bool_with_default ("process__piv=TRUE", &used_default);
302 ldp->process__piv__set = TRUE;
303 if (used_default) {
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",
311 &used_default);
312 ldp->process__gradient__set = TRUE;
313 if (used_default) {
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",
323 &used_default);
324 ldp->process__resstats__set = TRUE;
325 if (used_default) {
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",
335 &used_default);
336 ldp->process__errvec__set = TRUE;
337 if (used_default) {
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",
347 &used_default);
348 ldp->process__peaklock__set = TRUE;
349 if (used_default) {
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",
359 &used_default);
360 ldp->process__average__set = TRUE;
361 if (used_default) {
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",
371 &used_default);
372 ldp->process__scale__set = TRUE;
373 if (used_default) {
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",
383 &used_default);
384 ldp->process__subtract__set = TRUE;
385 if (used_default) {
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",
395 &used_default);
396 ldp->process__vorstra__set = TRUE;
397 if (used_default) {
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",
409 &used_default);
410 ldp->display__view_menubar__set = TRUE;
411 if (used_default) {
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",
421 &used_default);
422 ldp->display__view_rulers__set = TRUE;
423 if (used_default) {
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",
433 &used_default);
434 ldp->display__stretch_auto__set = TRUE;
435 if (used_default) {
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;
446 if (used_default) {
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;
455 if (used_default) {
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;
464 if (used_default) {
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",
472 &used_default);
473 ldp->display__vector_color__set = TRUE;
474 if (used_default) {
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); */
485 /* } */
488 ldp->display__backgrnd =
489 gnome_config_get_int_with_default ("display__backgrnd=SHOW_BG_IMG1",
490 &used_default);
491 ldp->display__backgrnd__set = TRUE;
492 if (used_default) {
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",
500 &used_default);
501 ldp->display__scalar__set = TRUE;
502 if (used_default) {
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",
510 &used_default);
511 ldp->display__intregs__set = TRUE;
512 if (used_default) {
513 g_message ("display__intregs = %d from default",
514 ldp->display__intregs);
515 gnome_config_set_bool ("display__intregs", ldp->display__intregs);
519 ldp->display__piv =
520 gnome_config_get_bool_with_default ("display__piv=TRUE", &used_default);
521 ldp->display__piv__set = TRUE;
522 if (used_default) {
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 ();
529 gnome_config_sync();
530 return ldp;
535 static Var *
536 scan_variables()
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];
544 gint i = 0;
545 Var *lgv = g_new0 (Var, 1);
548 gnome_config_push_prefix ("/gpiv/RuntimeVariables/");
550 lgv->tab_pos =
551 gnome_config_get_int_with_default ("tab_pos=1", &used_default);
552 if (used_default) {
553 g_message ("tab_pos = %d from default",
554 lgv->tab_pos);
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",
562 &used_default);
563 if (used_default) {
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);
575 lgv->fn_last[i] =
576 gnome_config_get_string_with_default (fname_nr_default,
577 &used_default);
578 if (used_default) {
579 g_message ("fnames_nr_default = %s from default",
580 lgv->fn_last[i]);
581 gnome_config_set_string(fname_nr, lgv->fn_last[i]);
586 lgv->fname_date =
587 gnome_config_get_bool_with_default ("fname_date=FALSE",
588 &used_default);
589 if (used_default) {
590 g_message ("fname_date = %d from default",
591 lgv->fname_date);
592 gnome_config_set_bool ("fname_date", lgv->fname_date);
596 lgv->fname_time =
597 gnome_config_get_bool_with_default ("fname_time=FALSE",
598 &used_default);
599 if (used_default) {
600 g_message ("fname_time = %d from default",
601 lgv->fname_time);
602 gnome_config_set_bool ("fname_time", lgv->fname_time);
606 lgv->fname_last =
607 gnome_config_get_string_with_default ("fname_last=./", &used_default);
608 if (used_default) {
609 g_message ("fname_last = %s from default", lgv->fname_last);
610 gnome_config_set_string("fname_last", lgv->fname_last);
614 lgv->img_span_px =
615 gnome_config_get_float_with_default ("span=1.0", &used_default);
616 if (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);
621 lgv->img_length_mm =
622 gnome_config_get_float_with_default ("length=1.0", &used_default);
623 if (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);
630 if (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);
638 if (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 ();
646 gnome_config_sync();
647 return lgv;
652 static void
653 par_init (void)
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 ();
685 static void
686 img_par_init (void)
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);
697 if ((err_msg =
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");
711 } else {
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);
722 #ifdef ENABLE_CAM
723 static void
724 cam_par_init (gboolean cam_trig)
725 /*-----------------------------------------------------------------------------
726 * parameter and variables initializing of data acquisition
727 * (trigger timings and cameraam)
730 gchar *err_msg;
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);
736 if ((err_msg =
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");
744 cam_trig = FALSE;
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,
753 cam_var->maxspeed,
754 /* cam_var->misc_info[0].framerate */ FRAMERATE_7_5,
755 cam_var->capture[0])
756 != DC1394_SUCCESS) {
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",
763 __LINE__,__FILE__);
764 return;
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 */
781 #ifdef ENABLE_TRIG
782 static void
783 trig_par_init (void)
784 /*-----------------------------------------------------------------------------
785 * parameter and variables initializing of data acquisition
786 * (trigger timings)
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);
795 if ((err_msg =
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
805 static void
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);
817 if ((err_msg =
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 */
827 static void
828 piv_par_init (void)
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);
839 if ((err_msg =
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);
874 static void
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);
886 if ((err_msg =
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);
894 static void
895 post_par_init (void)
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);
906 if ((err_msg =
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);
914 static void
915 load_images_from_commandline (GnomeProgram *program,
916 GpivConsole *gpiv)
917 /*-----------------------------------------------------------------------------
918 * Loading the images from the command line while launching gpiv.
921 gint i, result;
922 GValue value = { 0, };
923 char **args;
924 poptContext ctx;
926 g_value_init (&value, G_TYPE_POINTER);
927 g_object_get_property (G_OBJECT (program), GNOME_PARAM_POPT_CONTEXT,
928 &value);
929 ctx = g_value_get_pointer (&value);
930 g_value_unset (&value);
932 args = (char**) poptGetArgs(ctx);
933 if (args) {
934 for (i = 0; args[i]; i++) {
935 select_action_from_name (gpiv, args[i]);
943 int main (int argc,
944 char *argv[]
946 /*-----------------------------------------------------------------------------
947 * Main routine of gpiv
950 GnomeProgram *program;
951 /* GpivConsole *gpiv = g_new0 (GpivConsole, 1); */
952 GtkWidget *window1;
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;
960 gint i;
962 gboolean restored = FALSE;
964 #ifdef ENABLE_NLS
965 setlocale (LC_ALL, "");
966 bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR);
967 textdomain(PACKAGE);
968 #endif
971 * parameter initializing of gpiv-gui, image
973 msg_default = "";
974 m_select = 0;
975 nbufs = 0;
976 exec_process = FALSE;
977 cancel_process = FALSE;
978 display_act = NULL;
979 gci_aoi = NULL;
980 gci_line = NULL;
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
990 Gpiv_app = NULL;
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,
997 NULL);
1000 * Used for authentification when loading/storing images from remote system
1001 * with gnome_vfs
1003 gnome_authentication_manager_init ();
1006 * Reading program parameters, variables and process parameters
1008 gdk_rgb_init ();
1009 par_init ();
1010 img_par_init ();
1012 #ifdef ENABLE_CAM
1013 cam_par_init (cam_trig);
1014 #endif
1016 #ifdef ENABLE_TRIG
1017 trig_par_init ();
1018 #endif
1020 #ifdef ENABLE_IMGPROC
1021 imgproc_par_init ();
1022 #endif
1024 piv_par_init ();
1025 valid_par_init ();
1026 post_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);
1049 } else {
1050 gtk_tooltips_disable(gpiv->tooltips);
1053 #ifdef ENABLE_TRIG
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,
1060 &trig_error)) {
1061 message_gpiv (_("Trigger system not available"));
1062 trig_trig = FALSE;
1064 exec_trigger_stop ();
1065 sensitive (gpiv, DAC_TRIG, trig_trig);
1066 sensitive (gpiv, DAC_TIMING, trig_trig);
1067 #endif /* ENABLE_TRIG */
1069 #ifdef ENABLE_CAM
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);
1076 if (cam_trig) {
1077 sensitive (gpiv, DAC_TIMING, TRUE);
1079 } else {
1080 sensitive (gpiv, DAC_CAM, FALSE);
1081 if (cam_trig) {
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);
1096 } else {
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);
1102 gtk_main ();
1103 exit(0);