| | |
| | | #include <snapshot.h> |
| | | #include <zlib.h> |
| | | #include "vesicle.h" |
| | | #include "vertex.h" |
| | | #include "triangle.h" |
| | | |
| | | ts_bool parseDump(char *dumpfname) { |
| | | xmlDocPtr doc; |
| | | xmlNodePtr cur; |
| | |
| | | |
| | | ts_vesicle *parseTrisurfTag(xmlDocPtr doc, xmlNodePtr cur){ |
| | | fprintf(stderr,"Parsing trisurf tag\n"); |
| | | xmlNodePtr child; |
| | | |
| | | #ifdef COMPRESS |
| | | /* base64decode */ |
| | | size_t cLen; |
| | | /*size_t tLen; |
| | |
| | | fprintf(stderr,"%s\n",subtree); |
| | | |
| | | free(subtree); |
| | | #endif |
| | | /*parse xml subtree */ |
| | | xmlChar *nvtx, *npoly, *nfono; |
| | | nvtx = xmlGetProp(cur, (xmlChar *)"nvtx"); |
| | |
| | | xmlFree(nvtx); |
| | | xmlFree(npoly); |
| | | xmlFree(nfono); |
| | | |
| | | child = cur->xmlChildrenNode; |
| | | while (child != NULL) { |
| | | if ((!xmlStrcmp(child->name, (const xmlChar *)"vtxn"))){ |
| | | parseTrisurfVtxn(vesicle->vlist, doc, child); |
| | | } |
| | | if ((!xmlStrcmp(child->name, (const xmlChar *)"tria"))){ |
| | | parseTrisurfTria(vesicle, doc, child); |
| | | } |
| | | if ((!xmlStrcmp(child->name, (const xmlChar *)"tristar"))){ |
| | | parseTrisurfTristar(vesicle, doc, child); |
| | | } |
| | | |
| | | child = child->next; |
| | | } |
| | | |
| | | |
| | | |
| | | return vesicle; |
| | | } |
| | | |
| | | |
| | | |
| | | /* Low level tags parsers */ |
| | | |
| | | ts_bool parseTrisurfVtxn(ts_vertex_list *vlist, xmlDocPtr doc, xmlNodePtr cur){ |
| | | |
| | | xmlChar *chari; |
| | | xmlChar *neighs; |
| | | char *n; |
| | | char *token; |
| | | ts_uint neighi; |
| | | ts_uint i; |
| | | chari = xmlGetProp(cur, (xmlChar *)"idx"); |
| | | i=atoi((char *)chari); |
| | | xmlFree(chari); |
| | | ts_vertex *vtx=vlist->vtx[i]; |
| | | neighs = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); |
| | | //fprintf(stderr,"Found neigh for vtx %u that seems to have index %u with neighs=%s\n",i,vtx->idx,neighs); |
| | | |
| | | n=(char *)neighs; |
| | | token=strtok(n," "); |
| | | while(token!=NULL){ |
| | | neighi=atoi(token); |
| | | //fprintf(stderr,"%u", neighi); |
| | | vtx_add_neighbour(vtx,vlist->vtx[neighi]); |
| | | token=strtok(NULL," "); |
| | | } |
| | | xmlFree(neighs); |
| | | return TS_SUCCESS; |
| | | } |
| | | |
| | | ts_bool parseTrisurfTria(ts_vesicle *vesicle, xmlDocPtr doc, xmlNodePtr cur){ |
| | | xmlChar *triangles; |
| | | char *tria; |
| | | char *vtx[3]; |
| | | |
| | | ts_uint i; |
| | | triangles = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); |
| | | tria=(char *)triangles; |
| | | for(i=0;i<3;i++) vtx[i]=strtok(tria," "); |
| | | while(vtx[2]!=NULL){ |
| | | triangle_add(vesicle->tlist, vesicle->vlist->vtx[atoi(vtx[0])],vesicle->vlist->vtx[atoi(vtx[1])],vesicle->vlist->vtx[atoi(vtx[2])]); |
| | | for(i=0;i<3;i++) vtx[i]=strtok(NULL," "); |
| | | } |
| | | |
| | | xmlFree(triangles); |
| | | return TS_SUCCESS; |
| | | } |
| | | |
| | | |
| | | ts_bool parseTrisurfTristar(ts_vesicle *vesicle, xmlDocPtr doc, xmlNodePtr cur){ |
| | | |
| | | xmlChar *chari; |
| | | xmlChar *tristar; |
| | | char *t; |
| | | char *token; |
| | | ts_uint neighi; |
| | | ts_uint i; |
| | | chari = xmlGetProp(cur, (xmlChar *)"idx"); |
| | | i=atoi((char *)chari); |
| | | xmlFree(chari); |
| | | ts_vertex *vtx=vesicle->vlist->vtx[i]; |
| | | tristar = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); |
| | | // fprintf(stderr,"Found tristar for vtx %u that seems to have index %u with tristar=%s\n",i,vtx->idx,tristar); |
| | | |
| | | t=(char *)tristar; |
| | | token=strtok(t," "); |
| | | while(token!=NULL){ |
| | | neighi=atoi(token); |
| | | //fprintf(stderr,"%u", neighi); |
| | | vertex_add_tristar(vtx,vesicle->tlist->tria[neighi]); |
| | | token=strtok(NULL," "); |
| | | } |
| | | xmlFree(tristar); |
| | | return TS_SUCCESS; |
| | | } |
| | | |