Doxygen Source Code Documentation
plug_vol2surf.c File Reference
#include "afni.h"#include "vol2surf.h"Go to the source code of this file.
Data Structures | |
| struct | pv2s_globals |
Defines | |
| #define | P_MAP_NAMES_NVALS 12 |
| #define | P_NY_NVALS 2 |
| #define | P_KEEP_NVALS 3 |
| #define | P_STEP_NVALS 2 |
| #define | PV2S_BAIL_VALUE(buf, str, val) |
Functions | |
| char * | PV2S_main (PLUGIN_interface *) |
| int | PV2S_check_surfaces (PLUGIN_interface *plint, int sa, int sb, char *mesg, int debug) |
| int | PV2S_disp_afni_surfaces (PLUGIN_interface *plint) |
| int | PV2S_init_plugin_opts (pv2s_globals *g) |
| int | PV2S_process_args (PLUGIN_interface *plint, pv2s_globals *g, char *mesg) |
| DEFINE_PLUGIN_PROTOTYPE PLUGIN_interface * | PLUGIN_init (int ncall) |
Variables | |
| char | g_help [] |
| char * | gp_ny_list [] = { "no", "yes" } |
| char * | gp_keep_list [] = { "check", "keep", "reverse" } |
| char * | gp_step_list [] = { "voxel", "node" } |
| pv2s_globals | globs |
Define Documentation
|
|
Definition at line 182 of file plug_vol2surf.c. Referenced by PLUGIN_init(), and PV2S_process_args(). |
|
|
Definition at line 180 of file plug_vol2surf.c. Referenced by PLUGIN_init(), and PV2S_process_args(). |
|
|
Definition at line 181 of file plug_vol2surf.c. Referenced by PLUGIN_init(), and PV2S_process_args(). |
|
|
Definition at line 183 of file plug_vol2surf.c. Referenced by PLUGIN_init(), and PV2S_process_args(). |
|
|
Value: do { sprintf((buf), "-------------------------------------\n" \ "%s\n" \ "bad value = %d\n" \ "-------------------------------------", \ (str), (val) ); } while (0) Definition at line 207 of file plug_vol2surf.c. Referenced by PV2S_check_surfaces(), and PV2S_process_args(). |
Function Documentation
|
|
Definition at line 216 of file plug_vol2surf.c. References ENTRY, g_help, gp_keep_list, gp_ny_list, gp_step_list, pv2s_globals::hist, pv2s_globals::maps, P_KEEP_NVALS, P_MAP_NAMES_NVALS, P_NY_NVALS, P_STEP_NVALS, PLUTO_add_hint(), PLUTO_set_runlabels(), PLUTO_set_sequence(), PLUTO_set_v2s_addrs(), PV2S_init_plugin_opts(), PV2S_main(), RETURN, and pv2s_globals::vpo.
00217 {
00218 PLUGIN_interface * plint;
00219 void * void_vpo;
00220
00221 ENTRY("vol2surf: PLUGIN_init");
00222
00223 if ( ncall > 0 ) RETURN(NULL); /* only one interface */
00224
00225 /* might be temporary */
00226 if ( PLUTO_set_v2s_addrs(&void_vpo, &globs.maps, &globs.hist) )
00227 {
00228 fprintf(stderr,"** plug_v2s: failed to init globals\n");
00229 RETURN(NULL);
00230 }
00231
00232 /* using a void pointer so we don't have to put vol2surf.h in afni.h */
00233 globs.vpo = (v2s_plugin_opts *)void_vpo;
00234
00235 PV2S_init_plugin_opts(&globs);
00236
00237 plint = PLUTO_new_interface("Vol2Surf",
00238 "configure afni's volume to surface options",
00239 g_help, PLUGIN_CALL_VIA_MENU, PV2S_main);
00240
00241 PLUTO_add_hint (plint, "configure vol2surf options");
00242 PLUTO_set_sequence (plint, "A:afnicontrol:surf");
00243 PLUTO_set_runlabels(plint, "Set+Keep", "Set+Close");
00244
00245 /* first input : do we use vol2surf? */
00246 PLUTO_add_option( plint, "function", "op_st", TRUE );
00247 PLUTO_add_hint ( plint, "decide whether to use vol2surf" );
00248 PLUTO_add_string( plint, "use vol2surf? ", P_NY_NVALS, gp_ny_list, 0 );
00249 PLUTO_add_hint ( plint, "use vol2surf (or basic intersection)" );
00250 PLUTO_add_string( plint, "map func",P_MAP_NAMES_NVALS,globs.maps,0);
00251 PLUTO_add_hint ( plint, "choose a filter to apply to segment values" );
00252 PLUTO_add_string( plint, "seg index",P_STEP_NVALS,gp_step_list,0);
00253 PLUTO_add_hint ( plint, "along segments, count only distinct voxels?");
00254 PLUTO_add_number( plint, "num steps", 0, 100, 0, 2, 1 );
00255 PLUTO_add_hint ( plint, "number of steps to divide each segment into" );
00256
00257 /* choose surface indices for surf pair 0 */
00258 /* - note that we do not yet have surfaces to choose from */
00259 PLUTO_add_option( plint, "surf pair 0", "surf pair 0", TRUE );
00260 PLUTO_add_hint ( plint, "choose first surface index(es)" );
00261 PLUTO_add_string( plint, "apply? ", P_NY_NVALS, gp_ny_list, 1 );
00262 PLUTO_add_hint ( plint, "decide whether to apply surface(s)" );
00263 PLUTO_add_number( plint, "surf_A", 0, 50, 0, 0, 1 );
00264 PLUTO_add_hint ( plint, "choose surface A index" );
00265 PLUTO_add_string( plint, "use B? ", P_NY_NVALS, gp_ny_list, 0 );
00266 PLUTO_add_hint ( plint, "decide whether to use surface B" );
00267 PLUTO_add_number( plint, "surf_B", 0, 50, 0, 1, 1 );
00268 PLUTO_add_hint ( plint, "choose surface B index" );
00269
00270 /* choose surface indices for surf pair 1 */
00271 /* - note that we do not yet have surfaces to choose from */
00272 PLUTO_add_option( plint, "surf pair 1", "surf pair 1", TRUE );
00273 PLUTO_add_hint ( plint, "choose second surface index(es)" );
00274 PLUTO_add_string( plint, "apply? ", P_NY_NVALS, gp_ny_list, 0 );
00275 PLUTO_add_hint ( plint, "decide whether to apply surface(s)" );
00276 PLUTO_add_number( plint, "surf_A", 0, 50, 0, 2, 1 );
00277 PLUTO_add_hint ( plint, "choose surface A index" );
00278 PLUTO_add_string( plint, "use B? ", P_NY_NVALS, gp_ny_list, 0 );
00279 PLUTO_add_hint ( plint, "decide whether to use surface B" );
00280 PLUTO_add_number( plint, "surf_B", 0, 50, 0, 3, 1 );
00281 PLUTO_add_hint ( plint, "choose surface B index" );
00282
00283 /* menu for using normals */
00284 PLUTO_add_option( plint, "normals", "normals", FALSE );
00285 PLUTO_add_hint ( plint, "control use of normals (instead of surf_B)" );
00286 PLUTO_add_string( plint, "use normals? ", P_NY_NVALS, gp_ny_list, 0 );
00287 PLUTO_add_hint ( plint, "should normals be used to simulate surf_B?" );
00288 PLUTO_add_number( plint, "norm len", -100, 100, 1, 10, 1 );
00289 PLUTO_add_hint ( plint, "what (signed) length should the normals be?" );
00290 PLUTO_add_string( plint, "norm dir", P_KEEP_NVALS, gp_keep_list, 0 );
00291 PLUTO_add_hint ( plint, "check normal direction, or keep or reverse it" );
00292
00293 /* segment offsets */
00294 PLUTO_add_option( plint, "offsets", "offsets", FALSE );
00295 PLUTO_add_hint ( plint,"offset segment endpoints, directed from p1 to pn");
00296 PLUTO_add_number( plint, "f_p1_mm", -100, 100, 1, 0, 1 );
00297 PLUTO_add_hint ( plint, "move p1 towards pn, in millimeters" );
00298 PLUTO_add_number( plint, "f_pn_mm", -100, 100, 1, 0, 1 );
00299 PLUTO_add_hint ( plint, "move pn farther from p1, in millimeters" );
00300 PLUTO_add_number( plint, "f_p1_fr", -100, 100, 1, 0, 1 );
00301 PLUTO_add_hint ( plint, "move p1 towards pn, by this segment fraction" );
00302 PLUTO_add_number( plint, "f_pn_fr", -100, 100, 1, 0, 1 );
00303 PLUTO_add_hint ( plint, "move pn farther from p1, by this fraction" );
00304
00305 /* out of bounds or mask */
00306 PLUTO_add_option( plint, "out of range", "oor", FALSE );
00307 PLUTO_add_hint ( plint, "what to do when out of bounds or mask" );
00308 PLUTO_add_string( plint, "oob nodes?", P_NY_NVALS, gp_ny_list, 0 );
00309 PLUTO_add_hint ( plint, "keep out-of-bounds nodes? (outside the dataset)");
00310 PLUTO_add_number( plint, "oob value", 0, 0, 0, -2, 1 );
00311 PLUTO_add_hint ( plint, "value to apply when out of dataset bounds" );
00312 PLUTO_add_string( plint, "oom nodes?", P_NY_NVALS, gp_ny_list, 0 );
00313 PLUTO_add_hint ( plint, "keep out-of-mask nodes? (below threshold)");
00314 PLUTO_add_number( plint, "oom value", 0, 0, 0, -1, 1 );
00315 PLUTO_add_hint ( plint, "value for masked out nodes" );
00316
00317 /* choose node processing range */
00318 PLUTO_add_option( plint, "output", "output", FALSE );
00319 PLUTO_add_hint ( plint, "select node range and output files" );
00320 PLUTO_add_number( plint, "first node", 0, 0, 0, 0, 1 );
00321 PLUTO_add_hint ( plint, "starting node to process (zero based)" );
00322 PLUTO_add_number( plint, "last node", 0, 0, 0, 0, 1 );
00323 PLUTO_add_hint ( plint, "end node to process (zero based)" );
00324 PLUTO_add_string( plint, "outfile.1D", 0, NULL, 14 );
00325 PLUTO_add_hint ( plint, "name for 1D output file - will overwrite!" );
00326 PLUTO_add_string( plint, "outfile.niml", 0, NULL, 14 );
00327 PLUTO_add_hint ( plint, "name for niml output file - will overwrite!" );
00328
00329 /* debugging level */
00330 PLUTO_add_option( plint, "debug level", "debug level", FALSE );
00331 PLUTO_add_hint ( plint, "choose debug level (and debug node)" );
00332 PLUTO_add_number( plint, "level", 0, 5, 0, 0, 1 );
00333 PLUTO_add_hint ( plint, "debug level - how much to print to terminal" );
00334 PLUTO_add_number( plint, "node", 0, 0, 0, -1, 1 );
00335 PLUTO_add_hint ( plint, "particular node to print debug infomation for" );
00336
00337 RETURN(plint);
00338 }
|
|
||||||||||||||||||||||||
|
Definition at line 685 of file plug_vol2surf.c. References ENTRY, SUMA_surface::idcode_ldp, SUMA_surface::label, SUMA_surface::label_ldp, SUMA_surface::num_ixyz, PV2S_BAIL_VALUE, RETURN, sb, THD_session::su_num, and THD_session::su_surf. Referenced by PV2S_process_args().
00687 {
00688 THD_session * ss;
00689
00690 ENTRY("PV2S_check_surfaces");
00691
00692 ss = plint->im3d->ss_now;
00693
00694 if ( ss->su_num < 1 )
00695 {
00696 PV2S_BAIL_VALUE(mesg, "Not enough surfaces in session.\n", ss->su_num);
00697 RETURN(1);
00698 }
00699
00700 /* verify that the surface indices are valid */
00701 if ( sa < 0 )
00702 {
00703 PV2S_BAIL_VALUE(mesg, "surf_A has invalid index", sa);
00704 RETURN(1);
00705 }
00706
00707 if ( sa >= ss->su_num )
00708 {
00709 PV2S_BAIL_VALUE(mesg, "surf_A beyond valid index", ss->su_num - 1);
00710 RETURN(1);
00711 }
00712
00713 if ( sb >= ss->su_num )
00714 {
00715 PV2S_BAIL_VALUE(mesg, "surf_B beyond valid index", ss->su_num - 1);
00716 RETURN(1);
00717 }
00718
00719 if ( sb >= 0 )
00720 {
00721 /* then check that surf_A and surf_B share LDP */
00722 if (strncmp(ss->su_surf[sa]->idcode_ldp,ss->su_surf[sb]->idcode_ldp,32))
00723 {
00724 char * la = ss->su_surf[sa]->label_ldp;
00725 char * lb = ss->su_surf[sb]->label_ldp;
00726 if ( ! *la ) la = "undefined";
00727 if ( ! *lb ) lb = "undefined";
00728 sprintf(mesg, "---------------------------------------\n"
00729 "Error: Surf_A and Surf_B have different\n"
00730 " local domain parents\n"
00731 "LDP #%d = '%s', LDP #%d = '%s'\n"
00732 "---------------------------------------",
00733 sa, la, sb, lb);
00734 RETURN(1);
00735 }
00736
00737 /* and that they have the same number of nodes */
00738 if ( ss->su_surf[sa]->num_ixyz != ss->su_surf[sb]->num_ixyz )
00739 {
00740 sprintf(mesg, "------------------------------------------------\n"
00741 "Big problem: Surf_A and Surf_B have different\n"
00742 " numbers of nodes! They cannot share an LDP.\n"
00743 " SurfA: '%s', %d nodes\n"
00744 " SurfB: '%s', %d nodes\n"
00745 "------------------------------------------------",
00746 ss->su_surf[sa]->label, ss->su_surf[sa]->num_ixyz,
00747 ss->su_surf[sb]->label, ss->su_surf[sb]->num_ixyz);
00748 RETURN(1);
00749 }
00750 }
00751
00752 if ( debug > 0 && ss->su_surf )
00753 {
00754 if ( ss->su_surf[sa] ) /* we have checked sa >= 0, above */
00755 fprintf(stderr,"+d surf_A label: '%s'\n",
00756 *ss->su_surf[sa]->label ? ss->su_surf[sa]->label : "not set");
00757 else
00758 fprintf(stderr,"** surf_A (#%d) pointer not set??\n", sa);
00759
00760 if ( sb < 0 )
00761 fprintf(stderr,"-d surf_B not in use\n");
00762 else if ( ss->su_surf[sb] )
00763 fprintf(stderr,"+d surf_B label: '%s'\n",
00764 *ss->su_surf[sb]->label ? ss->su_surf[sb]->label : "not set");
00765 else
00766 fprintf(stderr,"** surf_B (#%d) pointer not set??\n", sb);
00767 }
00768
00769 RETURN(0);
00770 }
|
|
|
Definition at line 772 of file plug_vol2surf.c. References c, ENTRY, RETURN, THD_session::su_num, and THD_session::su_surf. Referenced by PV2S_process_args().
00773 {
00774 THD_session * ss;
00775 char * ldp, * label;
00776 int c;
00777
00778 ENTRY("disp_afni_surfaces");
00779
00780 ss = plint->im3d->ss_now;
00781
00782 if ( ss->su_surf <= 0 )
00783 RETURN(0);
00784
00785 fprintf(stderr,"-d --------------------------------------\n");
00786 fprintf(stderr," afni surface indices, labels and LDPs:\n");
00787 for ( c = 0; c < ss->su_num; c++ )
00788 {
00789 label = ss->su_surf[c]->label;
00790 ldp = ss->su_surf[c]->label_ldp;
00791 if ( ! *label ) label = "undefined";
00792 if ( ! *ldp ) ldp = "undefined";
00793
00794 fprintf(stderr," index %2d, label '%s', LDP '%s'\n",
00795 c, label, ldp );
00796 }
00797
00798 RETURN(0);
00799 }
|
|
|
Definition at line 359 of file plug_vol2surf.c. References v2s_opts_t::dnode, ENTRY, v2s_opts_t::gp_index, v2s_opts_t::outfile_1D, v2s_opts_t::outfile_niml, v2s_plugin_opts::ready, RETURN, v2s_plugin_opts::s0A, v2s_plugin_opts::s0B, v2s_plugin_opts::s1A, v2s_plugin_opts::s1B, v2s_plugin_opts::sopt, v2s_plugin_opts::use0, v2s_plugin_opts::use1, and pv2s_globals::vpo. Referenced by PLUGIN_init().
00360 {
00361 ENTRY("PV2S_init_plugin_opts");
00362 memset(g->vpo, 0, sizeof(*g->vpo));
00363
00364 g->vpo->ready = 0; /* flag as "not ready to go" */
00365 g->vpo->use0 = 0;
00366 g->vpo->use1 = 0;
00367 g->vpo->s0A = -1;
00368 g->vpo->s0B = -1;
00369 g->vpo->s1A = -1;
00370 g->vpo->s1B = -1;
00371
00372 g->vpo->sopt.gp_index = -1;
00373 g->vpo->sopt.dnode = -1;
00374 g->vpo->sopt.outfile_1D = NULL;
00375 g->vpo->sopt.outfile_niml = NULL;
00376
00377 RETURN(0);
00378 }
|
|
|
Definition at line 340 of file plug_vol2surf.c. References ENTRY, PV2S_process_args(), v2s_plugin_opts::ready, RETURN, and pv2s_globals::vpo. Referenced by PLUGIN_init().
00341 {
00342 pv2s_globals * g;
00343 static char message[2048]; /* use this to output failures */
00344
00345 ENTRY("PV2S_main");
00346
00347 g = &globs; /* to have only one global access */
00348 message[0] = '\0'; /* init to empty string */
00349
00350 g->vpo->ready = 0;
00351
00352 if ( (PV2S_process_args(plint, g, message) != 0) && message[0] )
00353 RETURN(message);
00354
00355 RETURN(NULL);
00356 }
|
|
||||||||||||||||
|
Definition at line 382 of file plug_vol2surf.c. References calloc, v2s_opts_t::debug, disp_v2s_opts_t(), disp_v2s_plugin_opts(), v2s_opts_t::dnode, ENTRY, v2s_opts_t::f_index, v2s_opts_t::f_p1_fr, v2s_opts_t::f_p1_mm, v2s_opts_t::f_pn_fr, v2s_opts_t::f_pn_mm, v2s_opts_t::f_steps, v2s_opts_t::first_node, free, gp_keep_list, gp_ny_list, gp_step_list, IM3D_OPEN, v2s_opts_t::last_node, v2s_opts_t::map, pv2s_globals::maps, v2s_opts_t::norm_dir, v2s_opts_t::norm_len, v2s_opts_t::oob, v2s_opts_t::oom, v2s_opts_t::outfile_1D, v2s_opts_t::outfile_niml, P_KEEP_NVALS, P_MAP_NAMES_NVALS, P_NY_NVALS, P_STEP_NVALS, PLUTO_string_index(), PV2S_BAIL_VALUE, PV2S_check_surfaces(), PV2S_disp_afni_surfaces(), v2s_plugin_opts::ready, RETURN, v2s_plugin_opts::s0A, v2s_plugin_opts::s0B, v2s_plugin_opts::s1A, v2s_plugin_opts::s1B, v2s_oob_t::show, v2s_opts_t::skip_cols, v2s_plugin_opts::sopt, THD_session::su_num, v2s_plugin_opts::use0, v2s_plugin_opts::use1, v2s_opts_t::use_norms, v2s_is_good_map(), V2S_NORM_DEFAULT, V2S_NORM_KEEP, V2S_NORM_REVERSE, V2S_SKIP_ALL, V2S_SKIP_NODES, V2S_STEPS_TOOOOO_BIG, v2s_oob_t::value, and pv2s_globals::vpo. Referenced by PV2S_main().
00384 {
00385 THD_session * ss;
00386 v2s_plugin_opts lvpo;
00387 v2s_opts_t * sopt;
00388 float fval;
00389 char * tag, * str;
00390 int val, ready = 0;
00391
00392 ENTRY("PV2S_process_args");
00393
00394 /* do we have a valid 3D view and session? */
00395 if ( !IM3D_OPEN(plint->im3d) || !plint->im3d->ss_now )
00396 {
00397 sprintf(mesg, "----------------------------------------------\n"
00398 "strange failure: invalid 3D view or session???\n"
00399 "----------------------------------------------");
00400 RETURN(-1);
00401 }
00402
00403 /* to a quick check to be sure we are talking with suma */
00404 ss = plint->im3d->ss_now;
00405 if (ss && ss->su_num < 1)
00406 {
00407 sprintf(mesg, "-----------------------------------------\n"
00408 "no surfaces: is afni 'talking' with suma?\n"
00409 "-----------------------------------------");
00410 RETURN(1);
00411 }
00412
00413 /* copy current values, and make local changes while checking */
00414 lvpo = *g->vpo;
00415 sopt = &lvpo.sopt; /* just for typing */
00416
00417 while ( (tag = PLUTO_get_optiontag(plint)) != NULL )
00418 {
00419 if ( sopt->debug > 2 )
00420 fprintf(stderr,"+d received option tag: %s\n", tag);
00421
00422 if ( ! strcmp(tag, "op_st") )
00423 {
00424 str = PLUTO_get_string(plint);
00425 val = PLUTO_string_index(str, P_NY_NVALS, gp_ny_list);
00426
00427 if ( (val < 0) || (val >= P_NY_NVALS) )
00428 {
00429 PV2S_BAIL_VALUE(mesg,"bad NY vals", val);
00430 RETURN(1);
00431 }
00432 ready = val; /* this is the interface to "ready" */
00433
00434 /* now get map */
00435 str = PLUTO_get_string(plint);
00436 val = PLUTO_string_index(str, P_MAP_NAMES_NVALS, g->maps);
00437 if ( ready && val == E_SMAP_INVALID )
00438 {
00439 sprintf( mesg, "--------------------------------\n"
00440 "please choose a mapping function\n"
00441 "--------------------------------" );
00442 RETURN(1);
00443 }
00444 else if (ready && ((val < E_SMAP_INVALID) || (val >= E_SMAP_FINAL)))
00445 {
00446 PV2S_BAIL_VALUE(mesg, "illegal 'map func'", val);
00447 RETURN(1);
00448 }
00449 sopt->map = val;
00450
00451 /* now get step index */
00452 str = PLUTO_get_string(plint);
00453 val = PLUTO_string_index(str, P_STEP_NVALS, gp_step_list);
00454 sopt->f_index = val > 0 ? 1 : 0; /* be sure */
00455
00456 val = (int)PLUTO_get_number(plint); /* num steps */
00457 if (ready && ((val <= 0) || (val >= V2S_STEPS_TOOOOO_BIG)))
00458 {
00459 PV2S_BAIL_VALUE(mesg, "steps too big", val);
00460 RETURN(1);
00461 }
00462 sopt->f_steps = val;
00463 }
00464 else if ( ! strcmp(tag, "surf pair 0") )
00465 {
00466 lvpo.use0 = 0;
00467 str = PLUTO_get_string(plint);
00468 if ( PLUTO_string_index(str, P_NY_NVALS, gp_ny_list) != 0 )
00469 {
00470 lvpo.use0 = 1;
00471 lvpo.s0A = (int)PLUTO_get_number(plint);
00472 lvpo.s0B = -1; /* first assume to not use surf_B */
00473 str = PLUTO_get_string(plint);
00474 if ( PLUTO_string_index(str, P_NY_NVALS, gp_ny_list) != 0 )
00475 lvpo.s0B = (int)PLUTO_get_number(plint);
00476 }
00477 }
00478 else if ( ! strcmp(tag, "surf pair 1") )
00479 {
00480 lvpo.use1 = 0;
00481 str = PLUTO_get_string(plint);
00482 if ( PLUTO_string_index(str, P_NY_NVALS, gp_ny_list) != 0 )
00483 {
00484 lvpo.use1 = 1;
00485 lvpo.s1A = (int)PLUTO_get_number(plint);
00486 lvpo.s1B = -1; /* first assume to not use surf_B */
00487 str = PLUTO_get_string(plint);
00488 if ( PLUTO_string_index(str, P_NY_NVALS, gp_ny_list) != 0 )
00489 lvpo.s1B = (int)PLUTO_get_number(plint);
00490 }
00491 }
00492 else if ( ! strcmp(tag, "normals") )
00493 {
00494 str = PLUTO_get_string(plint);
00495 if ( PLUTO_string_index(str, P_NY_NVALS, gp_ny_list) != 0 )
00496 {
00497 sopt->use_norms = 1;
00498 sopt->norm_len = PLUTO_get_number(plint);
00499
00500 str = PLUTO_get_string(plint);
00501 val = PLUTO_string_index(str, P_KEEP_NVALS, gp_keep_list);
00502 if ( val == 1 ) sopt->norm_dir = V2S_NORM_KEEP;
00503 else if ( val == 2 ) sopt->norm_dir = V2S_NORM_REVERSE;
00504 else sopt->norm_dir = V2S_NORM_DEFAULT;
00505 }
00506 else
00507 sopt->use_norms = 0;
00508 }
00509 else if ( ! strcmp(tag, "offsets") )
00510 {
00511 int test = 0;
00512
00513 sopt->f_p1_mm = PLUTO_get_number(plint);
00514 sopt->f_pn_mm = PLUTO_get_number(plint);
00515 sopt->f_p1_fr = PLUTO_get_number(plint);
00516 sopt->f_pn_fr = PLUTO_get_number(plint);
00517
00518 /* check for consistency */
00519 if ( sopt->f_p1_fr != 0 || sopt->f_pn_fr != 0 ) test |= 1;
00520 if ( sopt->f_p1_mm != 0 || sopt->f_pn_mm != 0 ) test |= 2;
00521 if ( ready && test > 2 ) /* i.e. == 3 */
00522 {
00523 sprintf( mesg, "---------------------------------\n"
00524 "use only one pair of f*_mm, f*_fr\n"
00525 "to change normal lengths \n"
00526 "---------------------------------" );
00527 RETURN(1);
00528 }
00529 }
00530 else if ( ! strcmp(tag, "oor") )
00531 {
00532 /* out of bounds ... */
00533 str = PLUTO_get_string(plint);
00534 val = PLUTO_string_index(str, P_NY_NVALS, gp_ny_list);
00535 fval = PLUTO_get_number(plint);
00536 if ( val != 0 )
00537 {
00538 sopt->oob.show = 1;
00539 sopt->oob.value = fval;
00540 }
00541 else
00542 sopt->oob.show = 0;
00543
00544 /* out of mask ... */
00545 str = PLUTO_get_string(plint);
00546 val = PLUTO_string_index(str, P_NY_NVALS, gp_ny_list);
00547 fval = PLUTO_get_number(plint);
00548 if ( val != 0 )
00549 {
00550 sopt->oom.show = 1;
00551 sopt->oom.value = fval;
00552 }
00553 else
00554 sopt->oom.show = 0;
00555 }
00556 else if ( ! strcmp(tag, "output") )
00557 {
00558 sopt->first_node = (int)PLUTO_get_number(plint);
00559 sopt->last_node = (int)PLUTO_get_number(plint);
00560 if ( ready && sopt->first_node > sopt->last_node )
00561 {
00562 sprintf( mesg, "-----------------------------\n"
00563 "illegal node range values: \n"
00564 "first (%d) > last (%d) \n"
00565 "-----------------------------",
00566 sopt->first_node, sopt->last_node );
00567 RETURN(1);
00568 }
00569
00570 /* get output filenames */
00571 if ( sopt->outfile_1D ) free(sopt->outfile_1D);
00572 if ( sopt->outfile_niml ) free(sopt->outfile_niml);
00573 sopt->outfile_1D = sopt->outfile_niml = NULL;
00574
00575 str = PLUTO_get_string(plint);
00576 if ( strlen(str) > 0 )
00577 {
00578 sopt->outfile_1D = (char *)calloc(strlen(str)+1,sizeof(char));
00579 strcpy(sopt->outfile_1D, str);
00580 }
00581
00582 str = PLUTO_get_string(plint);
00583 if ( strlen(str) > 0 )
00584 {
00585 sopt->outfile_niml = (char *)calloc(strlen(str)+1,sizeof(char));
00586 strcpy(sopt->outfile_niml, str);
00587 }
00588 }
00589 else if ( ! strcmp(tag, "debug level") )
00590 {
00591 sopt->debug = (int)PLUTO_get_number(plint);
00592 sopt->dnode = (int)PLUTO_get_number(plint);
00593 }
00594 else
00595 {
00596 sprintf( mesg, "---------------------------\n"
00597 "Unknown option tag : %s\n"
00598 "---------------------------", tag );
00599 RETURN(1);
00600 }
00601 }
00602
00603 if ( sopt->debug > 1 )
00604 {
00605 disp_v2s_plugin_opts( "plug_vol2surf options done : ", &lvpo );
00606 disp_v2s_opts_t( " surface options : ", sopt );
00607 }
00608
00609 /* should we just run away? always adjust debugging first... */
00610 g->vpo->sopt.debug = lvpo.sopt.debug;
00611 g->vpo->sopt.dnode = lvpo.sopt.dnode;
00612
00613 if ( lvpo.use0 == 0 && lvpo.use1 == 0 ) ready = 0;
00614
00615 if ( ! ready )
00616 {
00617 if ( sopt->debug > 0 )
00618 PV2S_disp_afni_surfaces(plint);
00619 RETURN(1);
00620 }
00621
00622 if ( ! v2s_is_good_map(sopt->map, 1) )
00623 {
00624 sprintf( mesg, "-------------------------------------------\n"
00625 "mapping function is invalid in this context\n"
00626 "index %d, name '%s'\n"
00627 "-------------------------------------------",
00628 sopt->map,
00629 (sopt->map < E_SMAP_INVALID || sopt->map >= E_SMAP_FINAL) ?
00630 "out-of-range" : g->maps[sopt->map] );
00631 RETURN(1);
00632 }
00633
00634 /* verify surface consistency */
00635 if ( lvpo.use0 )
00636 {
00637 if ( PV2S_check_surfaces(plint, lvpo.s0A, lvpo.s0B, mesg, sopt->debug) )
00638 RETURN(1);
00639 if ( lvpo.s0A == lvpo.s0B )
00640 {
00641 sprintf( mesg, "--------------------------------\n"
00642 "error: for pair 0, surfA = surfB\n"
00643 "--------------------------------" );
00644 RETURN(1);
00645 }
00646 }
00647 if ( lvpo.use1 )
00648 {
00649 if ( PV2S_check_surfaces(plint, lvpo.s1A, lvpo.s1B, mesg, sopt->debug) )
00650 RETURN(1);
00651 if ( lvpo.s1A == lvpo.s1B )
00652 {
00653 sprintf( mesg, "--------------------------------\n"
00654 "error: for pair 1, surfA = surfB\n"
00655 "--------------------------------" );
00656 RETURN(1);
00657 }
00658 }
00659
00660 /* if the user wan't normals, they can only supply one surface per pair */
00661 if ( sopt->use_norms && ((lvpo.use0 && lvpo.s0B >= 0) ||
00662 (lvpo.use1 && lvpo.s1B >= 0)) )
00663 {
00664 sprintf( mesg, "----------------------------------------\n"
00665 "cannot use normals while using surface B\n"
00666 "----------------------------------------" );
00667 RETURN(1);
00668 }
00669
00670 if ( sopt->debug > 0 )
00671 PV2S_disp_afni_surfaces(plint);
00672
00673 /* for now, only output nodes and a single data column */
00674 sopt->skip_cols = V2S_SKIP_ALL ^ V2S_SKIP_NODES;
00675
00676 if ( ready ) /* then copy changes over old values */
00677 {
00678 *g->vpo = lvpo;
00679 g->vpo->ready = 1;
00680 }
00681
00682 RETURN(0);
00683 }
|
Variable Documentation
|
|
Definition at line 19 of file plug_vol2surf.c. Referenced by PLUGIN_init(). |
|
|
Definition at line 196 of file plug_vol2surf.c. |
|
|
Definition at line 186 of file plug_vol2surf.c. Referenced by PLUGIN_init(), and PV2S_process_args(). |
|
|
Definition at line 185 of file plug_vol2surf.c. Referenced by PLUGIN_init(), and PV2S_process_args(). |
|
|
Definition at line 187 of file plug_vol2surf.c. Referenced by PLUGIN_init(), and PV2S_process_args(). |