Doxygen Source Code Documentation
SUMA_coarsen.c File Reference
#include "SUMA_suma.h"
#include "SUMA_GeomComp.h"
#include "SUMA_gts.h"
Go to the source code of this file.
Defines | |
#define | SURFPATCH_MAX_SURF 1 |
Functions | |
void | usage_SUMA_coarsen (SUMA_GENERIC_ARGV_PARSE *ps) |
SUMA_GENERIC_PROG_OPTIONS_STRUCT * | SUMA_coarsen_ParseInput (char *argv[], int argc, SUMA_GENERIC_ARGV_PARSE *ps) |
parse the arguments for SurfSmooth program | |
double | distance (SUMA_SurfaceObject *SO, int n, int m) |
int | main (int argc, char *argv[]) |
Variables | |
SUMA_SurfaceViewer * | SUMAg_cSV = NULL |
SUMA_SurfaceViewer * | SUMAg_SVv = NULL |
int | SUMAg_N_SVv = 0 |
SUMA_DO * | SUMAg_DOv = NULL |
int | SUMAg_N_DOv = 0 |
SUMA_CommonFields * | SUMAg_CF = NULL |
Define Documentation
|
Maximum number of input surfaces Definition at line 22 of file SUMA_coarsen.c. |
Function Documentation
|
Definition at line 164 of file SUMA_coarsen.c. References i, and SUMA_SurfaceObject::NodeList. Referenced by allocate_closest(), main(), SUMA_XYZ_XYZmap(), and SUMA_XYZmap_XYZ().
|
|
\** File : SUMA.c
Input paramters :
Definition at line 174 of file SUMA_coarsen.c. References argc, i, LocalHead, SUMA_GENERIC_PROG_OPTIONS_STRUCT::out_prefix, SUMA_Alloc_DisplayObject_Struct(), SUMA_Boolean, SUMA_coarsen_ParseInput(), SUMA_free, SUMA_Free_CommonFields(), SUMA_Free_Displayable_Object_Vect(), SUMA_Free_Generic_Prog_Options_Struct(), SUMA_Free_Surface_Object(), SUMA_FreeGenericArgParse(), SUMA_IO_args_2_spec(), SUMA_LH, SUMA_Load_Spec_Surf(), SUMA_mainENTRY, SUMA_MAX_DISPLAYABLE_OBJECTS, SUMA_Mesh_Resample(), SUMA_Parse_IO_Args(), SUMA_Prefix2SurfaceName(), SUMA_RETURN, SUMA_S_Err, SUMA_Save_Surface_Object(), SUMA_SL_Err, SUMA_STANDALONE_INIT, SUMAg_N_DOv, SUMA_GENERIC_PROG_OPTIONS_STRUCT::SurfFileFormat, SUMA_GENERIC_PROG_OPTIONS_STRUCT::SurfFileType, SUMA_GENERIC_ARGV_PARSE::sv, usage_SUMA_coarsen(), and SUMA_GENERIC_PROG_OPTIONS_STRUCT::v0.
00175 {/* Main */ 00176 static char FuncName[]={"SurfMesh"}; 00177 SUMA_GENERIC_PROG_OPTIONS_STRUCT *Opt=NULL; 00178 int SO_read = -1; 00179 int i = 0; 00180 SUMA_SurfaceObject *SO = NULL, *S2 = NULL; 00181 void *SO_name = NULL; 00182 SUMA_Boolean exists = NOPE; 00183 FILE* out = NULL; 00184 SUMA_GENERIC_ARGV_PARSE *ps=NULL; 00185 SUMA_SurfSpecFile *Spec = NULL; 00186 int N_Spec=0; 00187 SUMA_Boolean LocalHead = NOPE; 00188 00189 SUMA_mainENTRY; 00190 00191 SUMA_STANDALONE_INIT; 00192 00193 00194 ps = SUMA_Parse_IO_Args(argc, argv, "-i;-t;-spec;-s;-sv;-o;"); 00195 00196 /* Allocate space for DO structure */ 00197 SUMAg_DOv = SUMA_Alloc_DisplayObject_Struct (SUMA_MAX_DISPLAYABLE_OBJECTS); 00198 00199 if (argc < 4) 00200 { 00201 usage_SUMA_coarsen(ps); 00202 exit (1); 00203 } 00204 00205 Opt = SUMA_coarsen_ParseInput (argv, argc, ps); 00206 00207 Spec = SUMA_IO_args_2_spec(ps, &N_Spec); 00208 if (N_Spec != 1) { 00209 SUMA_S_Err("Multiple spec at input."); 00210 exit(1); 00211 } 00212 00213 SO = SUMA_Load_Spec_Surf(Spec, 0, ps->sv[0], 0); 00214 if (!SO) { 00215 fprintf (SUMA_STDERR,"Error %s:\n" 00216 "Failed to find surface\n" 00217 "in spec file. \n", 00218 FuncName ); 00219 exit(1); 00220 00221 } 00222 00223 S2 = SUMA_Mesh_Resample (SO, Opt->v0); 00224 00225 SO_name = SUMA_Prefix2SurfaceName(Opt->out_prefix, NULL, NULL, Opt->SurfFileType, &exists); 00226 if (exists) { 00227 fprintf(SUMA_STDERR,"Error %s:\nOutput file(s) %s* on disk.\nWill not overwrite.\n", FuncName, Opt->out_prefix); 00228 exit(1); 00229 } 00230 00231 /* write the surfaces to disk */ 00232 fprintf (SUMA_STDERR,"%s: Writing surface ...\n", FuncName); 00233 if (!SUMA_Save_Surface_Object (SO_name, S2, Opt->SurfFileType, Opt->SurfFileFormat, NULL)) { 00234 fprintf (SUMA_STDERR,"Error %s: Failed to write surface object.\n", FuncName); 00235 exit (1); 00236 } 00237 00238 00239 SUMA_LH("clean up"); 00240 00241 /* free SO_name for now */ 00242 if (SO_name) SUMA_free(SO_name); SO_name = NULL; 00243 if (SO) SUMA_Free_Surface_Object(SO); SO = NULL; 00244 if (S2) SUMA_Free_Surface_Object(S2); S2 = NULL; 00245 if (ps) SUMA_FreeGenericArgParse(ps); ps = NULL; 00246 if (Spec) SUMA_free(Spec); Spec = NULL; 00247 if (Opt) Opt = SUMA_Free_Generic_Prog_Options_Struct(Opt); 00248 if (!SUMA_Free_Displayable_Object_Vect (SUMAg_DOv, SUMAg_N_DOv)) { 00249 SUMA_SL_Err("DO Cleanup Failed!"); 00250 } 00251 00252 if (!SUMA_Free_CommonFields(SUMAg_CF)) {SUMA_SL_Err("SUMAg_CF Cleanup Failed!");} 00253 00254 SUMA_RETURN(0); 00255 } |
|
parse the arguments for SurfSmooth program
Definition at line 78 of file SUMA_coarsen.c. References SUMA_GENERIC_ARGV_PARSE::arg_checked, argc, i, SUMA_GENERIC_ARGV_PARSE::i_N_surfnames, ind, LocalHead, SUMA_GENERIC_ARGV_PARSE::o_FF, SUMA_GENERIC_ARGV_PARSE::o_FT, SUMA_GENERIC_ARGV_PARSE::o_N_surfnames, SUMA_GENERIC_ARGV_PARSE::o_surfnames, SUMA_GENERIC_PROG_OPTIONS_STRUCT::out_prefix, SUMA_GENERIC_ARGV_PARSE::s_N_surfnames, SUMA_Alloc_Generic_Prog_Options_Struct(), SUMA_ASCII, SUMA_Boolean, SUMA_copy_string(), SUMA_ENTRY, SUMA_free, SUMA_PLY, SUMA_Prefix2SurfaceName(), SUMA_RETURN, SUMA_S_Err, SUMA_SKIP_COMMON_OPTIONS, SUMA_GENERIC_PROG_OPTIONS_STRUCT::SurfFileFormat, SUMA_GENERIC_PROG_OPTIONS_STRUCT::SurfFileType, SUMA_GENERIC_ARGV_PARSE::t_N_surfnames, usage_SUMA_coarsen(), and SUMA_GENERIC_PROG_OPTIONS_STRUCT::v0. Referenced by main().
00079 { 00080 static char FuncName[]={"SUMA_coarsen_ParseInput"}; 00081 SUMA_GENERIC_PROG_OPTIONS_STRUCT *Opt=NULL; 00082 int kar, i, ind; 00083 char *outprefix; 00084 SUMA_Boolean brk = NOPE; 00085 void *SO_name=NULL; 00086 SUMA_Boolean exists = NOPE; 00087 SUMA_Boolean LocalHead = NOPE; 00088 00089 SUMA_ENTRY; 00090 00091 Opt = SUMA_Alloc_Generic_Prog_Options_Struct(); 00092 00093 kar = 1; 00094 Opt->out_prefix = NULL; 00095 Opt->v0 = .5; 00096 brk = NOPE; 00097 00098 while (kar < argc) 00099 { /* loop accross command ine options */ 00100 /*fprintf(stdout, "%s verbose: Parsing command line...\n", FuncName);*/ 00101 if (strcmp(argv[kar], "-h") == 0 || strcmp(argv[kar], "-help") == 0) 00102 { 00103 usage_SUMA_coarsen(ps); 00104 exit (0); 00105 } 00106 00107 SUMA_SKIP_COMMON_OPTIONS(brk, kar); 00108 00109 00110 if (!brk && (strcmp(argv[kar], "-edges") == 0)) 00111 { 00112 if (kar+1 >= argc) 00113 { 00114 fprintf (SUMA_STDERR, "need a number after -edges \n"); 00115 exit (1); 00116 } 00117 Opt->v0 = atof(argv[++kar]); 00118 00119 brk = YUP; 00120 } 00121 00122 00123 if (!brk && !ps->arg_checked[kar]) 00124 { 00125 fprintf (SUMA_STDERR,"Error %s:\nOption %s not understood. Try -help for usage\n", FuncName, argv[kar]); 00126 exit (1); 00127 } else 00128 { 00129 brk = NOPE; 00130 kar ++; 00131 } 00132 00133 } 00134 00135 /* check for only one surface at input */ 00136 if (ps->s_N_surfnames + ps->i_N_surfnames + ps->t_N_surfnames != 1) { 00137 SUMA_S_Err("Multiple surface specifications used. Only one surface allowed."); 00138 exit(1); 00139 } 00140 00141 /* write out the surface */ 00142 if (ps->o_N_surfnames) { 00143 Opt->out_prefix = SUMA_copy_string(ps->o_surfnames[0]); 00144 Opt->SurfFileType = ps->o_FT[0]; 00145 Opt->SurfFileFormat = ps->o_FF[0]; 00146 } else { 00147 Opt->out_prefix = SUMA_copy_string("SurfMesh_out"); 00148 Opt->SurfFileType = SUMA_PLY; 00149 Opt->SurfFileFormat = SUMA_ASCII; 00150 } 00151 SO_name = SUMA_Prefix2SurfaceName(Opt->out_prefix, NULL, NULL, Opt->SurfFileType, &exists); 00152 if (exists) { 00153 fprintf(SUMA_STDERR,"Error %s:\nOutput file(s) %s* on disk.\nWill not overwrite.\n", FuncName, Opt->out_prefix); 00154 exit(1); 00155 } 00156 /* free SO_name for now */ 00157 if (SO_name) SUMA_free(SO_name); SO_name = NULL; 00158 00159 00160 SUMA_RETURN (Opt); 00161 00162 } |
|
Definition at line 33 of file SUMA_coarsen.c. References SUMA_free, SUMA_help_basics(), SUMA_help_IO_Args(), and SUMA_New_Additions(). Referenced by main(), and SUMA_coarsen_ParseInput().
00034 { 00035 static char FuncName[]={"usage_SUMA_coarsen"}; 00036 char * s = NULL, *sio=NULL; 00037 s = SUMA_help_basics(); 00038 sio = SUMA_help_IO_Args (ps); 00039 printf ( "\nUsage:\n" 00040 " SurfMesh <-i_TYPE SURFACE> <-o_TYPE OUTPUT> <-edges FRAC> \n" 00041 " [-sv SURF_VOL]\n" 00042 " \n" 00043 " Example:\n" 00044 " SurfMesh -i_ply surf1.ply -o_ply surf1_half -edges 0.5\n" 00045 "\n" 00046 " Mandatory parameters:\n" 00047 " -i_TYPE SURFACE: Input surface. See below for details. \n" 00048 " You can also use the -t* method or\n" 00049 " the -spec SPECFILE -surf SURFACE method.\n" 00050 " -o_TYPE OUTPUT: Output surface, see below.\n" 00051 " -edges FRAC: surface will be simplified to number of\n" 00052 " edges times FRAC (fraction). Default is .5\n" 00053 " refines surface if edges > 1\n" 00054 "\n" 00055 "%s" 00056 "\n" 00057 "%s" 00058 "\n",sio,s); SUMA_free(sio); sio = NULL;SUMA_free(s); s = NULL; 00059 s = SUMA_New_Additions(0, 1); printf("%s\n", s);SUMA_free(s); s = NULL; 00060 printf( " Originally written by Jakub Otwinowski.\n" 00061 " Now maintained by Ziad S. Saad SSCC/NIMH/NIH ziad@nih.gov \n"); 00062 printf( " This program uses the GTS library gts.sf.net\n" 00063 " for fun read \"Fast and memory efficient polygonal simplification\" (1998) \n" 00064 " and \"Evaluation of memoryless simplification\" (1999) by Lindstrom and Turk.\n"); 00065 exit (0); 00066 } |
Variable Documentation
|
Global pointer to structure containing info common to all viewers Definition at line 31 of file SUMA_coarsen.c. |
|
Global pointer to current Surface Viewer structure Definition at line 25 of file SUMA_coarsen.c. |
|
Global pointer to Displayable Object structure vector Definition at line 29 of file SUMA_coarsen.c. |
|
Number of DOs stored in DOv Definition at line 30 of file SUMA_coarsen.c. Referenced by main(). |
|
Number of SVs realized by X Definition at line 28 of file SUMA_coarsen.c. |
|
Global pointer to the vector containing the various Surface Viewer Structures SUMAg_SVv contains SUMA_MAX_SURF_VIEWERS structures Definition at line 26 of file SUMA_coarsen.c. |