Skip to content

AFNI/NIfTI Server

Sections
Personal tools
You are here: Home » AFNI » Documentation

Doxygen Source Code Documentation


Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search  

SUMA_gts_insert.c File Reference

Go to the source code of this file.


Functions

void vertex_load (GtsPoint *p, gpointer *data)
void face_load (GtsTriangle *t, gpointer *data)
void gts_surface_suma (GtsSurface *s, float **NodeListp, int *N_Nodep, int *NodeDimp, int **FaceSetListp, int *N_FaceSetp, int *FaceSetDimp)

Function Documentation

void face_load GtsTriangle *    t,
gpointer *    data
[static]
 

Definition at line 27 of file SUMA_gts_insert.c.

References v1.

Referenced by gts_surface_suma().

00028 {
00029   int *FaceSetList = (int *)data[0];
00030   int *n = (int *)data[1];
00031   GtsVertex * v1, * v2, * v3;
00032   gts_triangle_vertices (t, &v1, &v2, &v3);
00033   FaceSetList[*n*3] = (int)GPOINTER_TO_UINT (GTS_OBJECT (v1)->reserved);
00034   FaceSetList[*n*3+1] =(int) GPOINTER_TO_UINT (GTS_OBJECT (v2)->reserved);
00035   FaceSetList[*n*3+2] = (int)GPOINTER_TO_UINT (GTS_OBJECT (v3)->reserved);
00036   fprintf (stderr, "Triangle %d: %d %d %d\n", *n, FaceSetList[*n*3], FaceSetList[*n*3+1], FaceSetList[*n*3+2]);
00037   GTS_OBJECT (t)->reserved = GUINT_TO_POINTER ((*((guint *) data[1]))++);
00038   *n++; /* does not work, but trick above does */
00039 }

void gts_surface_suma GtsSurface *    s,
float **    NodeListp,
int *    N_Nodep,
int *    NodeDimp,
int **    FaceSetListp,
int *    N_FaceSetp,
int *    FaceSetDimp
 

Definition at line 42 of file SUMA_gts_insert.c.

References calloc, face_load(), and vertex_load().

Referenced by SUMA_Mesh_Resample().

00045 {
00046   guint n = 0;
00047   gpointer data[2];
00048   GtsSurfaceStats stats;
00049   float *NodeList = NULL;
00050   int *FaceSetList = NULL;
00051   
00052   g_return_if_fail (s != NULL);
00053 
00054   
00055 
00056   gts_surface_stats (s, &stats);
00057   
00058   /* get the stats  */
00059   fprintf (stderr,
00060            "gts_surface_suma: Number of vertices %u\n",
00061            stats.edges_per_vertex.n);
00062   fprintf (stderr,
00063            "gts_surface_suma: Number of triangles %u\n",
00064            stats.n_faces);
00065   NodeList = (float *)calloc( stats.edges_per_vertex.n * 3, sizeof(float));
00066   FaceSetList = (int *)calloc(stats.n_faces * 3, sizeof(int)); 
00067   
00068   if (!NodeList || !FaceSetList) { 
00069    fprintf(stderr,"Critical Error gts_surface_suma: Could not allocate.\n");
00070    g_return_if_fail (0);
00071   }
00072   
00073   /* get the nodes */
00074   n = 0;
00075   data[0] = (gpointer)NodeList;
00076   data[1] = (gpointer)&n;
00077   gts_surface_foreach_vertex (s, (GtsFunc) vertex_load, data);
00078   
00079   /* get the facesets */
00080   n = 0;
00081   data[0] = (gpointer)FaceSetList;
00082   data[1] = (gpointer)&n; 
00083   gts_surface_foreach_face (s, (GtsFunc) face_load , data);
00084   
00085   /* don't know what these two are for, 
00086   assuming it has to do with the ->reserved business in vertex_load and face_load above */
00087   gts_surface_foreach_vertex (s, (GtsFunc) gts_object_reset_reserved, NULL);  
00088   gts_surface_foreach_face (s, (GtsFunc) gts_object_reset_reserved, NULL);  
00089   
00090   /* set results */
00091   *N_FaceSetp = (int)stats.n_faces;
00092   *N_Nodep = (int)stats.edges_per_vertex.n;
00093   *NodeListp = NodeList;
00094   *FaceSetListp = FaceSetList;
00095   *NodeDimp = 3;
00096   *FaceSetDimp = 3;
00097   return;
00098 }

void vertex_load GtsPoint *    p,
gpointer *    data
[static]
 

Definition at line 16 of file SUMA_gts_insert.c.

References p.

Referenced by gts_surface_suma().

00017 {
00018   float *NodeList = (float *)data[0];
00019   int *n = (int *)data[1];
00020   NodeList[*n*3] = (float) p->x;
00021   NodeList[*n*3+1] = (float) p->y;
00022   NodeList[*n*3+2] = (float) p->z;
00023   fprintf (stderr, "Node %d: %g %g %g\n", *n, (double)NodeList[*n*3], (double)NodeList[*n*3+1] , (double)NodeList[*n*3+2]);
00024   GTS_OBJECT (p)->reserved = GUINT_TO_POINTER ((*((guint *) data[1]))++);
00025   *n++; /* does not work, but trick above does */
00026 }
 

Powered by Plone

This site conforms to the following standards: