#ifndef _SURFACE_DOMAIN_HEADER_
#define _SURFACE_DOMAIN_HEADER_
#define AFNI_SURFACE_DOMAIN_TYPE 53001
/*---------------------------------------------------------------*/
/* Struct to hold a surface domain: node, triangles, etc. */
typedef struct {
int type ; /*!< Integer code indicating type of struct.
Should always be AFNI_SURFACE_DOMAIN_TYPE. */
char idcode[32]; /*!< String containing the idcode of the surface. */
char idcode_volpar[32]; /*!< String containing the idcode of the dataset
to which this surface is attachable. */
char label[32]; /*!< String containing a label for the surface.
Used for window titles and saved image names.
May be NULL. */
int N_Node; /*!< Number of nodes in the surface object */
int *NodeId; /*!< N_Node x 1 vector containing the nodes'
indices or IDs.
* If not NULL, then the [ X Y Z ] coordinates for
a node with ID n are:
[ NodeList[3*k] NodeList[3*k+1] NodeList[3*k+2] ],
where k is such that NodeId[k] = n.
* If NULL, then we assume that NodeId[k] = k.
This means that the [ X Y Z ] coordinates for
node n are:
[ NodeList[3*n] NodeList[3*n+1] NodeList[3*n+2] ]. */
int NodeId_sorted ; /*! Flag indicating if the NodeID array has been
sorted into increasing order. If it is sorted,
then NodeList will have been sorted similarly. */
float *NodeList; /*!< (3*N_Node) x 1 vector containing the
XYZ node coordinates. */
int N_FaceSet; /*!< Number of triangles defining the surface */
int *FaceSetList; /*!< (3*N_FaceSetList) x 1 vector specifying the
triangles constituting the surface mesh.
The triplet
[ FaceSetList[3*k] FaceSetList[3*k+1] FaceSetList[3*k+2] ]
indicates the node indices forming the kth
triangle in the mesh. */
float *NodeNormList ; /*!< (3*N_Node) x 1 vector containing
unit normal vectors for each node in
NodeList. May be NULL. */
float *FaceNormList ; /*!< (3*N_FaceSet) x 1 vector containing
unit normal vectors for each triangle
in FaceSetList. May be NULL. */
} AFNI_Surface_Domain ; /* aka SUDOM */
/*-----------------------------------------------------------------*/
/*! Macro to test if a pointer to an AFNI_Surface_Domain is valid. */
#define ISVALID_SUDOM(p) \
( (p) != NULL && (p)->type == AFNI_SURFACE_DOMAIN_TYPE )
/*----------------------------------------------*/
/*! Macro to return 'k' such that NodeId[k] = n */
#define SUDOM_NODE_ID(sd,n) \
( ((sd)->NodeId == NULL) ? (n) : SUDOM_find_node_id((sd),(n)) )
/*------------------------------------------------------------------*/
/* Prototypes for utility functions on AFNI_Surface_Domain structs. */
extern int SUDOM_find_node_id( AFNI_Surface_Domain *sd , int n ) ;
extern void SUDOM_sort_node_id( AFNI_Surface_Domain *sd ) ;
#endif /* _SURFACE_DOMAIN_HEADER_ */
syntax highlighted by Code2HTML, v. 0.9.1