Doxygen Source Code Documentation
        
Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search   
afni_suma.h
Go to the documentation of this file.00001 #ifndef _AFNI_SUMA_HEADER_FILE_
00002 #define _AFNI_SUMA_HEADER_FILE_
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 #include "vecmat.h"   
00012 
00013 
00014 
00015 #ifndef SUMA_TCP_PORT
00016 #define SUMA_TCP_PORT 53211   
00017 #endif
00018 
00019 
00020 
00021 
00022 
00023 typedef struct {
00024   int  id ;         
00025   float x ;         
00026   float y ;         
00027   float z ;         
00028 } SUMA_ixyz ;
00029 
00030 
00031 
00032 #define SUMA_ixyz_defn "int,3*float"
00033 
00034 
00035 
00036 typedef struct {
00037   float id,jd,kd ;
00038 } SUMA_ijk ;
00039 
00040 
00041 
00042 #define SUMA_ijk_defn "3*int"
00043 
00044 
00045 
00046 typedef struct {
00047   int id ;
00048   unsigned char r,g,b,a ;
00049 } SUMA_irgba ;
00050 
00051 
00052 
00053 #define SUMA_irgba_defn "int,4*byte"
00054 
00055 
00056 
00057 typedef struct {
00058    int nvox ;       
00059    int *voxijk ;    
00060    int *numnod ;    
00061    int **nlist ;    
00062 
00063 
00064    struct THD_3dim_dataset * dset ;  
00065 } SUMA_vnlist ;
00066 
00067 
00068 
00069 #define SUMA_SURFACE_TYPE 53001
00070 
00071 
00072 
00073 #ifndef WAY_BIG
00074 #define WAY_BIG 1.e+10
00075 #endif
00076 
00077 
00078 
00079 typedef struct {
00080    int nvox ;       
00081    int   *voxijk ;  
00082    float *voxval ;  
00083 } SUMA_vvlist ;
00084 
00085 
00086 
00087 #define DESTROY_VVLIST(vv)                          \
00088  do{ if( vv != NULL ){                              \
00089        if( vv->voxijk != NULL ) free(vv->voxijk) ;  \
00090        if( vv->voxval != NULL ) free(vv->voxval) ;  \
00091        free(vv) ;                                   \
00092  }} while(0)
00093 
00094 
00095 
00096 
00097 
00098 
00099 typedef struct {
00100   int type     ;               
00101   int num_ixyz ;               
00102   int nall_ixyz;               
00103   int num_ijk  ;               
00104   int nall_ijk ;               
00105   int seq      ;               
00106   int seqbase  ;               
00107   int sorted   ;               
00108 
00109   SUMA_ixyz *ixyz ;            
00110   THD_fvec3 *norm ;            
00111   SUMA_ijk  *ijk  ;            
00112 
00113   float xbot ;                 
00114   float ybot ;                 
00115   float zbot ;                 
00116   float xtop ;                 
00117   float ytop ;                 
00118   float ztop ;                 
00119   float xcen ;                 
00120   float ycen ;                 
00121   float zcen ;                 
00122 
00123   char idcode[32] ;            
00124   
00125   char idcode_ldp[32] ;        
00126   char idcode_dset[32] ;       
00127 
00128   char label[64] ;             
00129   char label_ldp[64] ;         
00130 
00131   SUMA_vvlist *vv ;            
00132   SUMA_vnlist *vn ;            
00133 } SUMA_surface ;
00134 
00135 
00136 
00137 #define SUMA_NODE_COUNT(su)      ((su)->num_ixyz)
00138 
00139 
00140 
00141 #define SUMA_TRIANGLE_COUNT(su)  ((su)->num_ijk)
00142 
00143 
00144 
00145 
00146 #define SUMA_MAX_NODES         (1<<26)
00147 
00148 
00149 
00150 
00151 
00152 #define SUMA_VMAP_LEVMASK(ll)  (ll << 26)       
00153 #define SUMA_VMAP_UNMASK(v)    ((v) & ((1<<26)-1))
00154 #define SUMA_VMAP_LEVEL(v)     (((v) & (7<<26)) >> 26)
00155 #define SUMA_VMAP_LEVZERO(v)   (((v) & (7<<26)) == 0)
00156 
00157 #define SUMA_VMAP_TO_ID(ag,v)  ((ag)->ixyz[SUMA_VMAP_UNMASK(v)])
00158 
00159 
00160 
00161 #define SUMA_SURFACEGROUP_TYPE 53003
00162 
00163 
00164 
00165 typedef struct {
00166   int type ;                   
00167   int num_surf ;               
00168   SUMA_surface **surf ;        
00169   char idcode[32] ;            
00170 } SUMA_surfacegroup ;
00171 
00172 
00173 
00174 extern SUMA_surface * SUMA_create_empty_surface(void) ;
00175 extern void SUMA_destroy_surface( SUMA_surface * ) ;
00176 
00177 extern void SUMA_add_nodes_ixyz( SUMA_surface *, int,
00178                                  int *, float *, float *, float *) ;
00179 extern void SUMA_add_node_ixyz( SUMA_surface *, int, float, float, float );
00180 extern int  SUMA_add_norms_xyz( SUMA_surface *, int, float *, float *, float *);
00181 
00182 extern void SUMA_add_triangles( SUMA_surface *, int, int *, int *, int * ) ;
00183 extern void SUMA_add_triangle( SUMA_surface *, int, int, int ) ;
00184 
00185 extern void SUMA_truncate_memory ( SUMA_surface * ) ;
00186 extern void SUMA_ixyzsort_surface( SUMA_surface * ) ;
00187 extern int  SUMA_find_node_id    ( SUMA_surface *, int ) ;
00188 
00189 extern SUMA_surface * SUMA_read_surface( char * , struct THD_3dim_dataset * ) ;
00190 
00191 extern void SUMA_get_surfname( struct THD_3dim_dataset * ) ;
00192 
00193 extern int * SUMA_map_vol_to_surf( SUMA_surface * ,
00194                                    int nx    , int ny    , int nz    ,
00195                                    float xoff, float yoff, float zoff,
00196                                    float dx  , float dy  , float dz   ) ;
00197 
00198 extern int * SUMA_map_dset_to_surf( SUMA_surface *, struct THD_3dim_dataset *);
00199 
00200 extern SUMA_vnlist * SUMA_make_vnlist(SUMA_surface *,struct THD_3dim_dataset *);
00201 
00202 extern int AFNI_find_closest_node( int , SUMA_ixyz *,    
00203                                    float,float,float ,
00204                                    float,float , float,float , float,float ) ;
00205 extern void AFNI_get_xhair_node( void *, int *, int * ) ;
00206 
00207 extern void SUMA_load  ( struct THD_3dim_dataset * ) ;
00208 extern void SUMA_unload( struct THD_3dim_dataset * ) ;
00209 
00210 extern THD_fvec3 THD_dicomm_to_surefit( struct THD_3dim_dataset *, THD_fvec3 ) ;
00211 extern THD_fvec3 THD_surefit_to_dicomm( struct THD_3dim_dataset *, THD_fvec3 ) ;
00212 extern void SUMA_import_surefit( SUMA_surface *, char *, struct THD_3dim_dataset * );
00213 
00214 extern void SUMA_destroy_vnlist( SUMA_vnlist *vnlist ) ;
00215 
00216 #endif