./0000755000175000017500000000000012031623633011072 5ustar moellermoeller./CommonPara.h0000644000175000017500000001246311533540157013312 0ustar moellermoeller/*//////////////////////////////////////////////////////////////// Permission to use, copy, modify, and distribute this program for any purpose, with or without fee, is hereby granted, provided that the notices on the head, the reference information, and this copyright notice appear in all copies or substantial portions of the Software. It is provided "as is" without express or implied warranty. *//////////////////////////////////////////////////////////////// #include #include #include #include #include #define maxnumchains 120 static char aad1[]= {'A','C','D','E','F', 'G','H','I','K','L', 'M','N','P','Q','R', 'S','T','V','W','Y', 'J','B','Z','X','X','U'}; static char aad3[][4] = {"ALA","CYS","ASP","GLU","PHE", "GLY","HIS","ILE","LYS","LEU", "MET","ASN","PRO","GLN","ARG", "SER","THR","VAL","TRP","TYR", "XLE","ASX","GLX","UNK","XAA","SEC"}; //static double rasrad[ ]={1.872,1.872,1.507,1.4,1.848,1.1,1.88,1.872,1.507,1.948,1.5, 1.4, 1.1};//lsms static double rasrad[ ]={1.90,1.88,1.63,1.48,1.78,1.2,1.87,1.96,1.63,0.74,1.8, 1.48, 1.2};//liang // ca c n o s h p cb ne fe other ox hx static unsigned char color[][4]={ 226, 14,226, 88, 255,255,255, 88, 0, 0,128, 88, 255, 0, 0, 88, 128,128, 0, 88, 128,128,128, 88, 255,255, 0, 88, 255,255,255, 88, 0, 0,128, 88, 128, 0,128, 88, 0,255,255, 88, 255, 0, 0, 88, 128,128,128, 88, 88,235,108,188, 0,128,128,88}; static unsigned char mycolor[19][4]={128,128,128,220, 255,0,0,220, 255,128,0,220, 255,255,0,220, 0,255,0,220, 0,0,255,220, 0,255,255,220, 255,0,255,220, 0,255,128,220, 128,0,255,220, 255,128,128,220, 0,128,255,220, 0,128,128,220, 128,255,128,220, 128,128,255,220, 255,0,128,220, 128,128, 0,220, 128,255,0,220, 128,0,128,220, }; static char nb[26][3]={1,0,0, -1,0,0, 0,1,0, 0,-1,0, 0,0,1, 0,0,-1, 1,1,0, 1,-1,0, -1,1,0, -1,-1,0, 1,0,1, 1,0,-1, -1,0,1, -1,0,-1, 0,1,1, 0,1,-1, 0,-1,1, 0,-1,-1, 1,1,1, 1,1,-1, 1,-1,1, -1,1,1, 1,-1,-1, -1,-1,1, -1,1,-1, -1,-1,-1}; static double asarea2[]= { 240.270, 267.707, 283.510, 315.039, 363.235, 215.365, 333.600, 312.879, 347.779, 320.895, 323.209, 288.210, 269.461, 317.071, 379.887, 249.458, 275.129, 286.960, 404.584, 376.261, 300,300,300,300,300,300}; typedef struct point3d { double x,y,z; }point3d; typedef struct atom // Structure For An Object { char simpletype; // atom hetatm int seqno; char detailtype[5]; // cg char detail; // 1 to 12 char residue[3]; // leu char residueid; // 1-21 char chainid; // a b or null int resno; // 408 float x,y,z; float occu,tempe; char alt,ins; unsigned char inout;//1 out 2 middle 3 inner } atom; typedef struct paratrans { bool isorigx,isscale,ismtrix; double origxn[3][4]; double scalen[3][4]; double mtrixn[3][4]; } paratrans; typedef struct helixlink { char initid,endid; char initchainid,endchainid; int initindex,endindex; char helixtype; int helixlength; } helixlink; typedef struct sheetlink { char initid,endid,currid,previd; char initchainid,endchainid,currchainid,prevchainid; int initindex,endindex,currindex,previndex; char curratom[4],prevatom[4]; char sheettype; } sheetlink; typedef struct turnlink { char initid,endid; char initchainid,endchainid; int initindex,endindex; } turnlink; typedef struct linklink { char initid[3],endid[3]; char initchainid,endchainid; int initindex,endindex; char initatom[4],endatom[4]; } linklink; typedef struct ssbondlink { char initchainid,endchainid; int initindex,endindex; } ssbondlink; typedef struct hydbndlink { char initid,endid; char initchainid,endchainid; int initindex,endindex; char initatom[4],endatom[4]; } hydbndlink; typedef struct sltbrglink { char initid,endid; char initchainid,endchainid; int initindex,endindex; char initatom[4],endatom[4]; }sltbrglink; typedef struct cispeplink { char initid,endid;//amino2add3index char initchainid,endchainid;//chainid int initindex,endindex;//seqnum }cispeplink; typedef struct sitelink { char sitename[3]; char sitenum; char aminoid[4]; char chainid[4]; int amiindex[4]; }sitelink; typedef struct segment { int init; int term; }segment; typedef struct prochain { segment chainseg; char chainid; }prochain; typedef struct promodel { prochain procha[maxnumchains]; char nchain; }promodel; typedef struct boneinfo { int indn,indca,indc,indo; int resind; char resid; int istart,iend; }boneinfo; //////////////////////////////// typedef struct volumepixel { int atomid; float distance; bool inout; bool isbound; bool isdone; }volumepixel; typedef struct voxel { int ix,iy,iz; }voxel; typedef struct point3s { float x,y,z; }point3s; typedef struct voxel2 { short int ix,iy,iz; }voxel2; typedef struct faceinfo { int a,b,c; point3d pn; double area; bool inout;//interior true }faceinfo; typedef struct vertinfo { double x,y,z; point3d pn; double area; int atomid; bool inout,iscont;//is concave surface }vertinfo; int jacobi(int n,double a[],double d[],double v[]); int aminoid(char aminoname); ./ParsePDB.h0000644000175000017500000000366011533540157012655 0ustar moellermoeller/*//////////////////////////////////////////////////////////////// Permission to use, copy, modify, and distribute this program for any purpose, with or without fee, is hereby granted, provided that the notices on the head, the reference information, and this copyright notice appear in all copies or substantial portions of the Software. It is provided "as is" without express or implied warranty. *//////////////////////////////////////////////////////////////// // ParsePDB.h: interface for the ParsePDB class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_PARSEPDB_H__0A306B68_CEEB_4EEF_8D55_4CCE700E11A3__INCLUDED_) #define AFX_PARSEPDB_H__0A306B68_CEEB_4EEF_8D55_4CCE700E11A3__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 class ParsePDB { public: ParsePDB(); char pdbname[5]; int headnumchain;//number of chains char headidchain[maxnumchains];// id of chains int indexchain,numinchain[maxnumchains];// num of aminos in each chain char *aminoinchain[maxnumchains];// aminos in each chain paratrans pt; int numhelix,numsheet,numturn,numlink; int allochelix,allocsheet,allocturn,alloclink; helixlink *helixl; sheetlink *sheetl; turnlink *turnl; linklink *linkl; int numssbond,numsltbrg,numcispep,numhydbnd,numsite; int allocssbond,allocsltbrg,alloccispep,allochydbnd,allocsite; ssbondlink *ssbondl; sltbrglink *sltbrgl; cispeplink *cispepl; hydbndlink *hydbndl; sitelink *sitel; int numpromod; int allocpromod; promodel *promod; bool flagfirstmodel; bool flagbeginmodel; int numproseq; int allocproseq; atom *proseq; int aminoid(char *aminoname); int aminoid(char aminoname); int dealline(char *string); bool loadpdb(char *pdbfile); void splitpdb(); int numbb,effbb; boneinfo *bb; void extractbb(int model, int chain,int type); void PCA(); virtual ~ParsePDB(); }; #endif // !defined(AFX_PARSEPDB_H__0A306B68_CEEB_4EEF_8D55_4CCE700E11A3__INCLUDED_) ./Makefile0000644000175000017500000000047011533540157012540 0ustar moellermoellerEDTSurf : ParsePDB.o ProteinSurface.o EDTSurf.o g++ ParsePDB.o ProteinSurface.o EDTSurf.o -o EDTSurf rm *.o ProteinSurface.o : ProteinSurface.cpp g++ -c ProteinSurface.cpp -o ProteinSurface.o ParsePDB.o : ParsePDB.cpp g++ -c ParsePDB.cpp -o ParsePDB.o EDTSurf.o : EDTSurf.cpp g++ -c EDTSurf.cpp -o EDTSurf.o./ParsePDB.cpp0000644000175000017500000011077611533540157013217 0ustar moellermoeller/*//////////////////////////////////////////////////////////////// Permission to use, copy, modify, and distribute this program for any purpose, with or without fee, is hereby granted, provided that the notices on the head, the reference information, and this copyright notice appear in all copies or substantial portions of the Software. It is provided "as is" without express or implied warranty. *//////////////////////////////////////////////////////////////// // ParsePDB.cpp: implementation of the ParsePDB class. // ////////////////////////////////////////////////////////////////////// #include "CommonPara.h" #include "ParsePDB.h" int jacobi(int n,double a[],double d[],double v[]) { int p,q,i,j; double sm,c,s,t,h,g,tau,theta,tresh,*b,*z; b=(double *)calloc(n,sizeof(double)); // if(b==NULL) ... z=(double *)calloc(n,sizeof(double)); // if(z==NULL) ... for(p=1;p<=n;p++) { for(q=1;q<=n;q++) { if(p==q) v[(p-1)*n+q-1]=1.0; else v[(p-1)*n+q-1]=0.0; } } for(p=1;p<=n;p++) { b[p-1]=d[p-1]=a[(p-1)*n+p-1]; z[p-1]=0.0; } for(i=1;i<=50;i++) { sm=0.0; for(p=1;p<=n-1;p++) { for(q=p+1;q<=n;q++) { sm=sm+fabs(a[(p-1)*n+q-1]); } } if(sm==0.0) { free(b); free(z); return(1); } if(i<4) tresh=0.2*sm/(n*n); else tresh=0.0; for(p=1;p4 && (fabs(d[p-1])+g)==fabs(d[p-1]) && (fabs(d[q-1]+g)==fabs(d[q-1])) ) a[(p-1)*n+q-1]=0.0; else { if(fabs(a[(p-1)*n+q-1])>tresh) { h=d[q-1]-d[p-1]; if((fabs(h)+g)==fabs(h)) t=a[(p-1)*n+q-1]/h; else { theta=0.5*h/a[(p-1)*n+q-1]; t=1/(fabs(theta)+sqrt(1+theta*theta)); if(theta<0) t=-t; } c=1/sqrt(1+t*t); s=t*c; tau=s/(1+c); h=t*a[(p-1)*n+q-1]; z[p-1]-=h;d[p-1]-=h; z[q-1]+=h;d[q-1]+=h; a[(p-1)*n+q-1]=0.0; for(j=i;j=maxnumchains-1) { printf("Too many chains\n"); return false; } else if(isanew)//start of a new chain { if(headnumchain!=-1) { if(indexchain!=numinchain[headnumchain]) { sprintf(tmpstr,"ideal%d,actual%d,ideal%d,chain%d",tempnum,indexchain, numinchain[headnumchain],headnumchain); printf("Not equal as aclaimed %s\n",tmpstr); } } indexchain=0; char temami[3]; int aminum; aminoinchain[++headnumchain]=new char[tempnum]; headidchain[headnumchain]=temid; numinchain[headnumchain]=tempnum; for(i=0;i<13;i++) { for(j=0;j<3;j++) { temami[j]=string[19+i*4+j]; } aminum=aminoid(temami); if(aminum>=0 && aminum<24 && indexchain=0 && aminum<24 && !(temami[0]==' ' && temami[1]==' ' && temami[2]==' ') && indexchain==tempnum) { // printf("Too many amino1\n"); } } } else// push { char temami[3]; int aminum; for(i=0;i<13;i++) { for(j=0;j<3;j++) { temami[j]=string[19+i*4+j]; } aminum=aminoid(temami); if(aminum>=0 && aminum<24 && indexchain=0 && aminum<24 && !(temami[0]==' ' && temami[1]==' ' && temami[2]==' ') && indexchain==tempnum) { // printf("Too many amino2\n"); } } } return 1; } else if (string[0]=='O' && string[1]=='R' && string[2]=='I' && string[3]=='G' && string[4]=='X' ) { pt.isorigx=true; char cid[2]; cid[1]='\0'; cid[0]=string[5]; int id=atoi(cid)-1; double txyz[3],ttran; char temxyz[10],temtran[10]; for(i=0;i<3;i++) { for(j=0;j<10;j++) { temxyz[j]=string[10+10*i+j]; } txyz[i]=atof(temxyz); pt.origxn[id][i]=txyz[i]; } for(j=0;j<10;j++) { temtran[j]=string[45+j]; } ttran=atof(temtran); pt.origxn[id][3]=ttran; return 2; } else if (string[0]=='S' && string[1]=='C' && string[2]=='A' && string[3]=='L' && string[4]=='E' ) { pt.isscale=true; char cid[2]; cid[1]='\0'; cid[0]=string[5]; int id=atoi(cid)-1; double txyz[3],ttran; char temxyz[10],temtran[10]; for(i=0;i<3;i++) { for(j=0;j<10;j++) { temxyz[j]=string[10+10*i+j]; } txyz[i]=atof(temxyz); pt.scalen[id][i]=txyz[i]; } for(j=0;j<10;j++) { temtran[j]=string[45+j]; } ttran=atof(temtran); pt.scalen[id][3]=ttran; return 3; } else if (string[0]=='M' && string[1]=='T' && string[2]=='R' && string[3]=='I' && string[4]=='X' ) { pt.ismtrix=true; char cid[2]; cid[1]='\0'; cid[0]=string[5]; int id=atoi(cid)-1; double txyz[3],ttran; char temxyz[10],temtran[10]; for(i=0;i<3;i++) { for(j=0;j<10;j++) { temxyz[j]=string[10+10*i+j]; } txyz[i]=atof(temxyz); pt.mtrixn[id][i]=txyz[i]; } for(j=0;j<10;j++) { temtran[j]=string[45+j]; } ttran=atof(temtran); pt.mtrixn[id][3]=ttran; return 4; } // HELIX 1 1 ILE A 146 ALA A 148 5 3 // HELIX 1 A1 GLY 15 GLN 25 1 1CRP 86 else if (string[0]=='H' && string[1]=='E' && string[2]=='L' && string[3]=='I' && string[4]=='X' ) { if(numhelix==0) { helixl=new helixlink[allochelix]; } else if(numhelix==allochelix-1) { allochelix*=2; helixl = (helixlink*)realloc(helixl, allochelix*sizeof(helixlink)); } char temami[3],temchainid,temamiindex[5],temclass[3]; temamiindex[4]='\0'; temclass[2]='\0'; int aminum,amiindex,helclass; //start for(i=0;i<3;i++) { temami[i]=string[15+i]; } temchainid=string[19]; aminum=aminoid(temami); for(i=0;i<4;i++) { temamiindex[i]=string[21+i]; } amiindex=atoi(temamiindex); helixl[numhelix].initchainid=temchainid; helixl[numhelix].initid=aminum; helixl[numhelix].initindex=amiindex; //end for(i=0;i<3;i++) { temami[i]=string[27+i]; } temchainid=string[31]; aminum=aminoid(temami); for(i=0;i<4;i++) { temamiindex[i]=string[33+i]; } amiindex=atoi(temamiindex); helixl[numhelix].endchainid=temchainid; helixl[numhelix].endid=aminum; helixl[numhelix].endindex=amiindex; for(i=0;i<2;i++) { temclass[i]=string[38+i]; } helclass=atoi(temclass); int temleng; char temlength[6]; temlength[5]='\0'; for(i=0;i<5;i++) { temlength[i]=string[71+i]; } temleng=atoi(temlength); helixl[numhelix].helixlength=temleng; helixl[numhelix].helixtype=helclass; numhelix++; return 5; } // SHEET 1 S1 5 ASP 38 ILE 46 0 1CRP 91 // SHEET 2 S1 5 GLU 49 ASP 57 -1 O LEU 53 N LYS 42 1CRP 92 // SHEET 1 B 2 PHE A 215 THR A 218 0 // SHEET 2 B 2 THR A 221 PHE A 223 -1 N PHE A 223 O PHE A 215 else if (string[0]=='S' && string[1]=='H' && string[2]=='E' && string[3]=='E' && string[4]=='T' ) { if(numsheet==0) { sheetl=new sheetlink[allocsheet]; } else if(numsheet==allocsheet-1) { allocsheet*=2; sheetl = (sheetlink*)realloc(sheetl, allocsheet*sizeof(sheetlink)); } char temami[3],temchainid,temamiindex[5],temclass[3]; temamiindex[4]='\0'; temclass[2]='\0'; int aminum,amiindex,sheclass; //start for(i=0;i<3;i++) { temami[i]=string[17+i]; } temchainid=string[21]; aminum=aminoid(temami); for(i=0;i<4;i++) { temamiindex[i]=string[22+i]; } amiindex=atoi(temamiindex); sheetl[numsheet].initchainid=temchainid; sheetl[numsheet].initid=aminum; sheetl[numsheet].initindex=amiindex; //end for(i=0;i<3;i++) { temami[i]=string[28+i]; } temchainid=string[32]; aminum=aminoid(temami); for(i=0;i<4;i++) { temamiindex[i]=string[33+i]; } amiindex=atoi(temamiindex); sheetl[numsheet].endchainid=temchainid; sheetl[numsheet].endid=aminum; sheetl[numsheet].endindex=amiindex; for(i=0;i<2;i++) { temclass[i]=string[38+i]; } sheclass=atoi(temclass); sheetl[numsheet].sheettype=sheclass; //curr for(i=0;i<4;i++) { sheetl[numsheet].curratom[i]=string[41+i]; } for(i=0;i<3;i++) { temami[i]=string[45+i]; } temchainid=string[49]; aminum=aminoid(temami); for(i=0;i<4;i++) { temamiindex[i]=string[50+i]; } amiindex=atoi(temamiindex); sheetl[numsheet].currchainid=temchainid; sheetl[numsheet].currid=aminum; sheetl[numsheet].currindex=amiindex; //prev for(i=0;i<4;i++) { sheetl[numsheet].prevatom[i]=string[56+i]; } for(i=0;i<3;i++) { temami[i]=string[60+i]; } temchainid=string[64]; aminum=aminoid(temami); for(i=0;i<4;i++) { temamiindex[i]=string[65+i]; } amiindex=atoi(temamiindex); sheetl[numsheet].prevchainid=temchainid; sheetl[numsheet].previd=aminum; sheetl[numsheet].previndex=amiindex; numsheet++; return 6; } // TURN 1 T1A SER A 11 ASP A 14 TYPE III 8ATC 377 // TURN 2 T2A ASP A 129 ASN A 132 TYPE I 8ATC 378 else if (string[0]=='T' && string[1]=='U' && string[2]=='R' && string[3]=='N' && string[4]==' ' ) { if(numturn==0) { turnl=new turnlink[allocturn]; } else if(numturn==allocturn-1) { allocturn*=2; turnl = (turnlink*)realloc(turnl, allocturn*sizeof(turnlink)); } char temami[3],temchainid,temamiindex[5]; temamiindex[4]='\0'; int aminum,amiindex; //start for(i=0;i<3;i++) { temami[i]=string[15+i]; } temchainid=string[19]; aminum=aminoid(temami); for(i=0;i<4;i++) { temamiindex[i]=string[20+i]; } amiindex=atoi(temamiindex); turnl[numturn].initchainid=temchainid; turnl[numturn].initid=aminum; turnl[numturn].initindex=amiindex; //end for(i=0;i<3;i++) { temami[i]=string[26+i]; } temchainid=string[30]; aminum=aminoid(temami); for(i=0;i<4;i++) { temamiindex[i]=string[31+i]; } amiindex=atoi(temamiindex); turnl[numturn].endchainid=temchainid; turnl[numturn].endid=aminum; turnl[numturn].endindex=amiindex; numturn++; return 7; } // LINK C ACE C 100 N PTR C 101 else if (string[0]=='L' && string[1]=='I' && string[2]=='N' && string[3]=='K' && string[4]==' ' ) { if(numlink==0) { linkl=new linklink[alloclink]; } else if(numlink==alloclink-1) { alloclink*=2; linkl = (linklink*)realloc(linkl, alloclink*sizeof(linklink)); } char temchainid,temamiindex[5]; temamiindex[4]='\0'; int amiindex; //start for(i=0;i<4;i++) { linkl[numlink].initatom[i]=string[12+i]; } for(i=0;i<3;i++) { linkl[numlink].initid[i]=string[17+i]; } temchainid=string[21]; for(i=0;i<4;i++) { temamiindex[i]=string[22+i]; } amiindex=atoi(temamiindex); linkl[numlink].initchainid=temchainid; linkl[numlink].initindex=amiindex; //end for(i=0;i<4;i++) { linkl[numlink].endatom[i]=string[42+i]; } for(i=0;i<3;i++) { linkl[numlink].endid[i]=string[47+i]; } temchainid=string[51]; for(i=0;i<4;i++) { temamiindex[i]=string[53+i]; } amiindex=atoi(temamiindex); linkl[numlink].endchainid=temchainid; linkl[numlink].endindex=amiindex; numlink++; return 8; } // SSBOND 1 CYS E 48 CYS E 51 2555 // SSBOND 1 CYS G 119 CYS G 205 else if (string[0]=='S' && string[1]=='S' && string[2]=='B' && string[3]=='O' && string[4]=='N' && string[5]=='D') { if(numssbond==0) { ssbondl=new ssbondlink[allocssbond]; } else if(numssbond==allocssbond-1) { allocssbond*=2; ssbondl = (ssbondlink*)realloc(ssbondl, allocssbond*sizeof(ssbondlink)); } //start ssbondl[numssbond].initchainid=string[15]; char temnumc[5]; temnumc[4]='\0'; int temnumi; for(i=0;i<4;i++) { temnumc[i]=string[17+i]; } temnumi=atoi(temnumc); ssbondl[numssbond].initindex=temnumi; //end ssbondl[numssbond].endchainid=string[29]; for(i=0;i<4;i++) { temnumc[i]=string[31+i]; } temnumi=atoi(temnumc); ssbondl[numssbond].endindex=temnumi; numssbond++; return 9; } // HYDBND NH2 ARG 111 OD1 ASP 149 1555 else if (string[0]=='H' && string[1]=='Y' && string[2]=='D' && string[3]=='B' && string[4]=='N' && string[5]=='D') { if(numhydbnd==0) { hydbndl=new hydbndlink[allochydbnd]; } else if(numhydbnd==allochydbnd-1) { allochydbnd*=2; hydbndl = (hydbndlink*)realloc(hydbndl, allochydbnd*sizeof(hydbndlink)); } //start for(i=0;i<4;i++) { hydbndl[numhydbnd].initatom[i]=string[12+i]; } hydbndl[numhydbnd].initchainid=string[21]; char temami[3],temseq[5]; temseq[4]='\0'; int temnum,temseqi; for(i=0;i<3;i++) { temami[i]=string[17+i]; } temnum=aminoid(temami); hydbndl[numhydbnd].initid=temnum; for(i=0;i<4;i++) { temseq[i]=string[22+i]; } temseqi=atoi(temseq); hydbndl[numhydbnd].initindex=temseqi; //end for(i=0;i<4;i++) { hydbndl[numhydbnd].endatom[i]=string[43+i]; } hydbndl[numhydbnd].endchainid=string[52]; for(i=0;i<3;i++) { temami[i]=string[48+i]; } temnum=aminoid(temami); hydbndl[numhydbnd].endid=temnum; for(i=0;i<4;i++) { temseq[i]=string[53+i]; } temseqi=atoi(temseq); hydbndl[numhydbnd].endindex=temseqi; numhydbnd++; return 10; } // SLTBRG O GLU 10 NZ LYS 115 3654 else if (string[0]=='S' && string[1]=='L' && string[2]=='T' && string[3]=='B' && string[4]=='R' && string[5]=='G') { if(numsltbrg==0) { sltbrgl=new sltbrglink[allocsltbrg]; } else if(numsltbrg==allocsltbrg-1) { allocsltbrg*=2; sltbrgl = (sltbrglink*)realloc(sltbrgl, allocsltbrg*sizeof(sltbrglink)); } //start for(i=0;i<4;i++) { sltbrgl[numsltbrg].initatom[i]=string[12+i]; } sltbrgl[numsltbrg].initchainid=string[21]; char temami[3],temseq[5]; temseq[4]='\0'; int temnum,temseqi; for(i=0;i<3;i++) { temami[i]=string[17+i]; } temnum=aminoid(temami); sltbrgl[numsltbrg].initid=temnum; for(i=0;i<4;i++) { temseq[i]=string[22+i]; } temseqi=atoi(temseq); sltbrgl[numsltbrg].initindex=temseqi; //end for(i=0;i<4;i++) { sltbrgl[numsltbrg].endatom[i]=string[42+i]; } sltbrgl[numsltbrg].endchainid=string[51]; for(i=0;i<3;i++) { temami[i]=string[47+i]; } temnum=aminoid(temami); sltbrgl[numsltbrg].endid=temnum; for(i=0;i<4;i++) { temseq[i]=string[52+i]; } temseqi=atoi(temseq); sltbrgl[numsltbrg].endindex=temseqi; numsltbrg++; return 11; } // CISPEP 2 THR D 92 PRO D 93 0 359.80 else if (string[0]=='C' && string[1]=='I' && string[2]=='S' && string[3]=='P' && string[4]=='E' && string[5]=='P') { if(numcispep==0) { cispepl=new cispeplink[alloccispep]; } else if(numcispep==alloccispep-1) { alloccispep*=2; cispepl = (cispeplink*)realloc(cispepl, alloccispep*sizeof(cispeplink)); } //start cispepl[numcispep].initchainid=string[15]; char temnumc[5],temami[3]; temnumc[4]='\0'; int temnumi,temamii; for(i=0;i<3;i++) { temami[i]=string[11+i]; } temamii=aminoid(temami); cispepl[numcispep].initid=temamii; for(i=0;i<4;i++) { temnumc[i]=string[17+i]; } temnumi=atoi(temnumc); cispepl[numcispep].initindex=temnumi; //end cispepl[numcispep].endchainid=string[29]; for(i=0;i<3;i++) { temami[i]=string[25+i]; } temamii=aminoid(temami); cispepl[numcispep].endid=temamii; for(i=0;i<4;i++) { temnumc[i]=string[31+i]; } temnumi=atoi(temnumc); cispepl[numcispep].endindex=temnumi; numcispep++; return 12; } // SITE 3 PAA 9 GLN A 231 8ATC 385 // SITE 1 ZNB 4 CYS B 109 CYS B 114 CYS B 138 CYS B 141 8ATC 386 else if (string[0]=='S' && string[1]=='I' && string[2]=='T' && string[3]=='E' && string[4]==' ' ) { if(numsite==0) { sitel=new sitelink[allocsite]; } else if(numsite==allocsite-1) { allocsite*=2; sitel = (sitelink*)realloc(sitel, allocsite*sizeof(sitelink)); } //start for(i=0;i<3;i++) { sitel[numsite].sitename[i]=string[11+i]; } char temnumc[3]; temnumc[2]='\0'; int temnum; for(i=0;i<2;i++) { temnumc[i]=string[15+i]; } temnum=atoi(temnumc); sitel[numsite].sitenum=temnum; char temami[3],temseq[5]; temseq[4]='\0'; int temamii,temseqi; for(i=0;i<4;i++) { for(j=0;j<3;j++) { temami[j]=string[18+11*i+j]; } temamii=aminoid(temami); sitel[numsite].aminoid[i]=temamii; sitel[numsite].chainid[i]=string[22+11*i]; for(j=0;j<4;j++) { temseq[j]=string[23+11*i+j]; } temseqi=atoi(temseq); sitel[numsite].amiindex[i]=temseqi; } numsite++; return 13; } // MODEL 1 else if (string[0]=='M' && string[1]=='O' && string[2]=='D' && string[3]=='E' && string[4]=='L' ) { // alloc space char tempnum[5]; tempnum[4]='\0'; int tempnumi; for(i=0;i<4;i++) { tempnum[i]=string[10+i]; } tempnumi=atoi(tempnum); if(numpromod==0 && flagfirstmodel) { flagfirstmodel=false; return 42; } if(numpromod==allocpromod-1) { allocpromod*=2; promod = (promodel*)realloc(promod, allocpromod*sizeof(promodel)); for(i=numpromod+1;i0) { if( proseq[numproseq-1].detailtype[0]==string[12] && proseq[numproseq-1].detailtype[1]==string[13] && proseq[numproseq-1].detailtype[2]==string[14] && proseq[numproseq-1].detailtype[3]==string[15] ) { return 41; } } if(numproseq==0) { proseq=new atom[allocproseq]; } else if(numproseq==allocproseq-1) { allocproseq*=2; proseq = (atom*)realloc(proseq, allocproseq*sizeof(atom)); } //begin if(string[0]=='A' && string[1]=='T' && string[2]=='O' && string[3]=='M') { proseq[numproseq].simpletype=1; } else if(string[0]=='H' && string[1]=='E' && string[2]=='T' && string[3]=='A' && string[4]=='T' && string[5]=='M') { proseq[numproseq].simpletype=2; } char tempseq[6]; tempseq[5]='\0'; //indexnumber i=6,j=0; for(i=6;i<11;i++) { tempseq[j++]=string[i]; } proseq[numproseq].seqno=atoi(tempseq); //type for(j=0;j<4;j++) { proseq[numproseq].detailtype[j]=' '; } //start none empty for(i=12;i<16;i++) { if(string[i]!=' ') { break; } } proseq[numproseq].detailtype[4]=i-12; i=12;j=0; while(i<16) { if(string[i]!=' ') { proseq[numproseq].detailtype[j++]=string[i]; } i++; } proseq[numproseq].detail=-1; if(proseq[numproseq].detailtype[0]=='C') { if(proseq[numproseq].detailtype[1]=='A') { proseq[numproseq].detail=0;//ca } else if(proseq[numproseq].detailtype[1]==' ') { proseq[numproseq].detail=1;//c } else proseq[numproseq].detail=7;//other cb } else if(proseq[numproseq].detailtype[0]=='O') { if(proseq[numproseq].detailtype[1]==' ') { proseq[numproseq].detail=3; } else { proseq[numproseq].detail=11; } } else if(proseq[numproseq].detailtype[0]=='N') { if(proseq[numproseq].detailtype[1]==' ') { proseq[numproseq].detail=2; } else { proseq[numproseq].detail=8;//other ne } } else if(proseq[numproseq].detailtype[0]=='S') { proseq[numproseq].detail=4; } else if(proseq[numproseq].detailtype[0]=='P') { proseq[numproseq].detail=6; } else if(proseq[numproseq].detailtype[0]=='H' || proseq[numproseq].detailtype[1]=='H' || string[13]=='H') { if(proseq[numproseq].detailtype[0]=='H' && proseq[numproseq].detailtype[1]==' ') proseq[numproseq].detail=5; else proseq[numproseq].detail=12; } else if(string[13]=='F' && string[14]=='E') { proseq[numproseq].detail=9; } else { proseq[numproseq].detail=10; } proseq[numproseq].alt=string[16]; //amino i=17,j=0; for(i=17;i<20;i++) { proseq[numproseq].residue[j++] =string[i]; } proseq[numproseq].residueid=aminoid(proseq[numproseq].residue); //chainid i=21; proseq[numproseq].chainid=string[i]; //seq num char tempresnum[5]; tempresnum[4]='\0';//important added i=22,j=0; for(i=22;i<26;i++) { tempresnum[j++]=string[i]; } proseq[numproseq].ins=string[26]; proseq[numproseq].resno =atoi(tempresnum); //sscanf(string+22,"%d",&proseq[numproseq].resno);//both are ok /* char tempx[8],tempy[8],tempz[8]; //x i=30;j=0; for(i=30;i<38;i++) { tempx[j++]=string[i]; } proseq[numproseq].x=float(atof(tempx)); //y i=38;j=0; for(i=38;i<46;i++) { tempy[j++]=string[i]; } proseq[numproseq].y=float(atof(tempy)); //z i=46;j=0; for(i=46;i<54;i++) { tempz[j++]=string[i]; } proseq[numproseq].z=float(atof(tempz)); */ sscanf(string+30,"%f %f %f",&proseq[numproseq].x,&proseq[numproseq].y,&proseq[numproseq].z); sscanf(string+54,"%f",&proseq[numproseq].occu); sscanf(string+60,"%f",&proseq[numproseq].tempe); // deal with promod[numpromod] if(promod[numpromod].nchain==0 && flagbeginmodel) { promod[numpromod].procha[promod[numpromod].nchain].chainid=string[21]; promod[numpromod].procha[promod[numpromod].nchain].chainseg.init=numproseq; flagbeginmodel=false; } else if(//(flagter)|| (string[21]!=proseq[numproseq-1].chainid) ) { promod[numpromod].procha[promod[numpromod].nchain].chainseg.term=numproseq-1; promod[numpromod].nchain=promod[numpromod].nchain+1; promod[numpromod].procha[promod[numpromod].nchain].chainid=string[21]; promod[numpromod].procha[promod[numpromod].nchain].chainseg.init=numproseq; } // if(flagter) // { // flagter=false; // } numproseq++; return 17; } return 0; } void ParsePDB::PCA() { int i; double a[9],d[3],v[9]; point3d tpos; for(i=0;i<9;i++) { a[i]=0; } int totbb=0; double pcatran[3],pcamat[9]; pcatran[0]=0;pcatran[1]=0;pcatran[2]=0; for(i=0;i promod[model].nchain || chain<-1) { printf("no this chain"); return; } if(model<0 || model>numpromod) { printf("no this model"); return; } if(type!=1 && type!=3) { printf("type should be 1 or 3"); return; } int i; if(bb) { delete[]bb; bb=NULL; } int allocbb=1+numproseq/4; numbb=0; bb=new boneinfo[allocbb]; int seqinit,seqterm; if(chain==-1) { seqinit=promod[model].procha[0].chainseg.init; seqterm=promod[model].procha[promod[model].nchain].chainseg.term; } else { seqinit=promod[model].procha[chain].chainseg.init; seqterm=promod[model].procha[chain].chainseg.term; } int j,k; if(type==1)// ca { for(i=seqinit;i<=seqterm;i++) { j=i; while(j<=seqterm && proseq[i].resno==proseq[j].resno) { j++; } bb[numbb].indca=-1; for(k=i;kallocdup) { allocdup*=2; dupvert=(vertinfo *)realloc(dupvert,allocdup*sizeof(vertinfo)); } for(j=1;jx=100000;minp->y=100000;minp->z=100000; maxp->x=-100000;maxp->y=-100000;maxp->z=-100000; for(i=seqinit;i<=seqterm;i++) { if(proseq[i].simpletype==1 && proseq[i].ins==' ') { if(atomtype && (proseq[i].detail==5 ||proseq[i].detail==12)) continue; if(proseq[i].xx) minp->x=proseq[i].x; if(proseq[i].yy) minp->y=proseq[i].y; if(proseq[i].zz) minp->z=proseq[i].z; if(proseq[i].x>maxp->x) maxp->x=proseq[i].x; if(proseq[i].y>maxp->y) maxp->y=proseq[i].y; if(proseq[i].z>maxp->z) maxp->z=proseq[i].z; } } } //label of atom void ProteinSurface::atomsinout(int seqinit,int seqterm,atom* proseq) { int i; for(i=seqinit;i<=seqterm;i++) { proseq[i].inout=2;//between } for(i=0;i0) { // printf("do iteration %d %d\n",niter,narrin); narrout=0; for(i=0;i18) indcolor2=1; } tcolor[0]=mycolor[chaincolor[proseq[verts[i].atomid].chainid]][0]; tcolor[1]=mycolor[chaincolor[proseq[verts[i].atomid].chainid]][1]; tcolor[2]=mycolor[chaincolor[proseq[verts[i].atomid].chainid]][2]; } fprintf(file,"%.3f %.3f %.3f %3d %3d %3d\n", verts[i].x/scalefactor-ptran.x,verts[i].y/scalefactor-ptran.y, verts[i].z/scalefactor-ptran.z,tcolor[0],tcolor[1],tcolor[2]); } for(i=0;i18) indcolor2=1; } if(chaincolor[proseq[verts[faces[i].b].atomid].chainid]==0) { chaincolor[proseq[verts[faces[i].b].atomid].chainid]=indcolor2; indcolor2++; if(indcolor2>18) indcolor2=1; } if(chaincolor[proseq[verts[faces[i].c].atomid].chainid]==0) { chaincolor[proseq[verts[faces[i].c].atomid].chainid]=indcolor2; indcolor2++; if(indcolor2>18) indcolor2=1; } if(proseq[verts[faces[i].b].atomid].chainid==proseq[verts[faces[i].c].atomid].chainid) tchain=chaincolor[proseq[verts[faces[i].b].atomid].chainid]; else tchain=chaincolor[proseq[verts[faces[i].a].atomid].chainid]; tcolor[0]=mycolor[tchain][0]; tcolor[1]=mycolor[tchain][1]; tcolor[2]=mycolor[tchain][2]; } if(!faces[i].inout)//outer fprintf(file,"3 %d %d %d %3d %3d %3d\n", vertind[faces[i].a],vertind[faces[i].b],vertind[faces[i].c],tcolor[0],tcolor[1],tcolor[2]); else fprintf(file,"3 %d %d %d %3d %3d %3d\n", vertind[faces[i].a],vertind[faces[i].c],vertind[faces[i].b],tcolor[0],tcolor[1],tcolor[2]); } fclose(file); delete[]vertind; delete[]flagface; } void ProteinSurface::outputoff(char *filename) { // TODO: Add your command handler code here FILE *stream; int i; if( (stream =fopen(filename,"w+t"))== NULL) { printf("wrong to output off file %s\n",filename); return; } fprintf(stream,"off\n" ); fprintf(stream,"%d %d 0\n",vertnumber,facenumber); for(i=0;i-1 && !vp[i][k-1][j].inout) || ( k+1-1 && !vp[i][k][j-1].inout) || ( j+1-1 && !vp[i-1][k][j].inout) || ( i+1-1 && i+nb[ii][0]-1 && k+nb[ii][1]-1 && j+nb[ii][2]-1 && tnv.ix-1 && tnv.iy-1 && tnv.iz=bb[j].istart && verts[faces[i].a].atomid<=bb[j].iend) { indres=j; break; } } areasum[indres]+=faces[i].area/3.0/scalefactor/scalefactor; for(j=0;j=bb[j].istart && verts[faces[i].b].atomid<=bb[j].iend) { indres=j; break; } } areasum[indres]+=faces[i].area/3.0/scalefactor/scalefactor; for(j=0;j=bb[j].istart && verts[faces[i].c].atomid<=bb[j].iend) { indres=j; break; } } areasum[indres]+=faces[i].area/3.0/scalefactor/scalefactor; } } double tval; FILE *stream; stream =fopen(filename,"w+t"); fprintf(stream,"indx res area solve #chn #res\n"); for(i=0;i1.0) tval=1.0; fprintf(stream,"%4d %c %8.3f %5.3f %c %4d\n", i+1,bb[i].resid,areasum[i],tval,proseq[bb[i].indca].chainid,proseq[bb[i].indca].resno); } else fprintf(stderr,"lack ca atom %d/%d\n",i,numbb); } fclose(stream); delete[]areasum; } void ProteinSurface::outputcavityatoms(int seqinit,int seqterm,atom* proseq,char *filename) { FILE *stream; if( (stream =fopen(filename,"w+t"))== NULL) { printf("Wrong to write to file %s\n", filename); return; } int i,j; int ii,jj,kk; int iii,jjj,kkk; int si,sj,sk; bool *flagseq; flagseq=new bool[seqterm+1]; for(j=0;j-1 && si-1 && sj-1 && sksradius) { depty[i][indx]=-1; } else { tdept=sqrt(sradius-txz); depty[i][indx]=int(tdept+0.0); } indx++; } } } } void ProteinSurface::initpara(int seqinit,int seqterm,atom* proseq,bool atomtype,bool btype) { int i,j; double fmargin=2.5; if(vp!=NULL) { for(i=0;iscalefactor) scalefactor=pmax.y-pmin.y; if((pmax.z-pmin.z)>scalefactor) scalefactor=pmax.z-pmin.z; scalefactor=(boxlength-1.0)/double(scalefactor); ///////////////////////////add this automatically first fix sf then fix boxlength // /* boxlength=int(boxlength*fixsf/scalefactor); scalefactor=fixsf; double threshbox=300; if(boxlength>threshbox) { double sfthresh=threshbox/double(boxlength); boxlength=int(threshbox); scalefactor=scalefactor*sfthresh; } // */ plength=int(ceil(scalefactor*(pmax.x-pmin.x))+1); pwidth=int(ceil(scalefactor*(pmax.y-pmin.y))+1); pheight=int(ceil(scalefactor*(pmax.z-pmin.z))+1); if(plength>boxlength) plength=boxlength; if(pwidth>boxlength) pwidth=boxlength; if(pheight>boxlength) pheight=boxlength; boundingatom(btype); cutradis=proberadius*scalefactor; } void ProteinSurface::fillatom(int indx,atom* proseq,bool bcolor) { int cx,cy,cz; int ox,oy,oz; point3d cp; cp.x=proseq[indx].x+ptran.x; cp.y=proseq[indx].y+ptran.y; cp.z=proseq[indx].z+ptran.z; cp.x*=scalefactor; cp.y*=scalefactor; cp.z*=scalefactor; cx=int(cp.x+0.5); cy=int(cp.y+0.5); cz=int(cp.z+0.5); int at=proseq[indx].detail; int i,j,k; int ii,jj,kk; int mi,mj,mk; int si,sj,sk; int tind; int nind=0; for(i=0;i=plength || sj>=pwidth || sk>=pheight) { continue; } if(!bcolor) { vp[si][sj][sk].inout=true; continue; } else{ if(vp[si][sj][sk].inout==false) { vp[si][sj][sk].inout=true; vp[si][sj][sk].atomid=indx; } //no atomic info to each voxel change above line //* else if(vp[si][sj][sk].inout) { tind=vp[si][sj][sk].atomid; cp.x=proseq[tind].x+ptran.x; cp.y=proseq[tind].y+ptran.y; cp.z=proseq[tind].z+ptran.z; cp.x*=scalefactor; cp.y*=scalefactor; cp.z*=scalefactor; ox=int(cp.x+0.5)-si; oy=int(cp.y+0.5)-sj; oz=int(cp.z+0.5)-sk; if(mi*mi+mj*mj+mk*mktotalinnervox) allocin=totalinnervox; if(allocintotalinnervox) allocout=totalinnervox; inarray=new voxel2[allocin]; outarray=new voxel2[allocout]; positin=0;positout=0; for(i=0;i=allocin) { allocin*=2; if(allocin>totalinnervox) allocin=totalinnervox; inarray=(voxel2 *)realloc(inarray,allocin*sizeof(voxel2)); } } } while(positin!=0); } else if(type==1)//do all { voxel2 *tpoint; do { fastoneshell( &positin, &allocout, boundpoint, &positout,&eliminate);//inarray, outarray, certificate-=eliminate; // /* // for(i=0;i=cutradis-0.50/(0.1+cutsf))//0.33 0.75/scalefactor ) { vp[i][j][k].isbound=true; //new add if(vp[i][j][k].isdone) vp[i][j][k].atomid=vp[boundpoint[i][j][k].ix][boundpoint[i][j][k].iy][boundpoint[i][j][k].iz].atomid; } } } } } for(i=0;i=(*allocout)-6) { (*allocout)=int(1.2*(*allocout)); if(*allocout>totalinnervox) *allocout=totalinnervox; outarray=(voxel2 *)realloc(outarray,(*allocout)*sizeof(voxel2)); } tx=inarray[i].ix; ty=inarray[i].iy; tz=inarray[i].iz; for(j=0;j<6;j++) { tnv.ix=tx+nb[j][0]; tnv.iy=ty+nb[j][1]; tnv.iz=tz+nb[j][2]; if( tnv.ix-1 && tnv.iy-1 && tnv.iz-1 && vp[tnv.ix][tnv.iy][tnv.iz].inout && !vp[tnv.ix][tnv.iy][tnv.iz].isdone) { boundpoint[tnv.ix][tnv.iy][tz+nb[j][2]].ix=boundpoint[tx][ty][tz].ix; boundpoint[tnv.ix][tnv.iy][tz+nb[j][2]].iy=boundpoint[tx][ty][tz].iy; boundpoint[tnv.ix][tnv.iy][tz+nb[j][2]].iz=boundpoint[tx][ty][tz].iz; dx=tnv.ix-boundpoint[tx][ty][tz].ix; dy=tnv.iy-boundpoint[tx][ty][tz].iy; dz=tnv.iz-boundpoint[tx][ty][tz].iz; squre=float(dx*dx+dy*dy+dz*dz); vp[tnv.ix][tnv.iy][tnv.iz].distance=float(sqrt(squre)); vp[tnv.ix][tnv.iy][tnv.iz].isdone=true; vp[tnv.ix][tnv.iy][tnv.iz].isbound=true; outarray[positout].ix=tnv.ix; outarray[positout].iy=tnv.iy; outarray[positout].iz=tnv.iz; positout++;eliminate++; } else if( tnv.ix-1 && tnv.iy-1 && tnv.iz-1 && vp[tnv.ix][tnv.iy][tnv.iz].inout && vp[tnv.ix][tnv.iy][tnv.iz].isdone) { dx=tnv.ix-boundpoint[tx][ty][tz].ix; dy=tnv.iy-boundpoint[tx][ty][tz].iy; dz=tnv.iz-boundpoint[tx][ty][tz].iz; squre=float(dx*dx+dy*dy+dz*dz); squre=float(sqrt(squre)); if(squre=(*allocout)-12) { (*allocout)=int(1.2*(*allocout)); if(*allocout>totalinnervox) *allocout=totalinnervox; outarray=(voxel2 *)realloc(outarray,(*allocout)*sizeof(voxel2)); } tx=inarray[i].ix; ty=inarray[i].iy; tz=inarray[i].iz; for(j=6;j<18;j++) { tnv.ix=tx+nb[j][0]; tnv.iy=ty+nb[j][1]; tnv.iz=tz+nb[j][2]; if( tnv.ix-1 && tnv.iy-1 && tnv.iz-1 && vp[tnv.ix][tnv.iy][tnv.iz].inout && !vp[tnv.ix][tnv.iy][tnv.iz].isdone) { boundpoint[tnv.ix][tnv.iy][tz+nb[j][2]].ix=boundpoint[tx][ty][tz].ix; boundpoint[tnv.ix][tnv.iy][tz+nb[j][2]].iy=boundpoint[tx][ty][tz].iy; boundpoint[tnv.ix][tnv.iy][tz+nb[j][2]].iz=boundpoint[tx][ty][tz].iz; dx=tnv.ix-boundpoint[tx][ty][tz].ix; dy=tnv.iy-boundpoint[tx][ty][tz].iy; dz=tnv.iz-boundpoint[tx][ty][tz].iz; squre=float(dx*dx+dy*dy+dz*dz); vp[tnv.ix][tnv.iy][tnv.iz].distance=float(sqrt(squre)); vp[tnv.ix][tnv.iy][tnv.iz].isdone=true; vp[tnv.ix][tnv.iy][tnv.iz].isbound=true; outarray[positout].ix=tnv.ix; outarray[positout].iy=tnv.iy; outarray[positout].iz=tnv.iz; positout++;eliminate++; } else if( tnv.ix-1 && tnv.iy-1 && tnv.iz-1 && vp[tnv.ix][tnv.iy][tnv.iz].inout && vp[tnv.ix][tnv.iy][tnv.iz].isdone) { dx=tnv.ix-boundpoint[tx][ty][tz].ix; dy=tnv.iy-boundpoint[tx][ty][tz].iy; dz=tnv.iz-boundpoint[tx][ty][tz].iz; squre=float(dx*dx+dy*dy+dz*dz); squre=float(sqrt(squre)); if(squre=(*allocout)-9) { (*allocout)=int(1.2*(*allocout)); if(*allocout>totalinnervox) *allocout=totalinnervox; outarray=(voxel2 *)realloc(outarray,(*allocout)*sizeof(voxel2)); } tx=inarray[i].ix; ty=inarray[i].iy; tz=inarray[i].iz; for(j=18;j<26;j++) { tnv.ix=tx+nb[j][0]; tnv.iy=ty+nb[j][1]; tnv.iz=tz+nb[j][2]; if( tnv.ix-1 && tnv.iy-1 && tnv.iz-1 && vp[tnv.ix][tnv.iy][tnv.iz].inout && !vp[tnv.ix][tnv.iy][tnv.iz].isdone) { boundpoint[tnv.ix][tnv.iy][tz+nb[j][2]].ix=boundpoint[tx][ty][tz].ix; boundpoint[tnv.ix][tnv.iy][tz+nb[j][2]].iy=boundpoint[tx][ty][tz].iy; boundpoint[tnv.ix][tnv.iy][tz+nb[j][2]].iz=boundpoint[tx][ty][tz].iz; dx=tnv.ix-boundpoint[tx][ty][tz].ix; dy=tnv.iy-boundpoint[tx][ty][tz].iy; dz=tnv.iz-boundpoint[tx][ty][tz].iz; squre=float(dx*dx+dy*dy+dz*dz); vp[tnv.ix][tnv.iy][tnv.iz].distance=float(sqrt(squre)); vp[tnv.ix][tnv.iy][tnv.iz].isdone=true; vp[tnv.ix][tnv.iy][tnv.iz].isbound=true; outarray[positout].ix=tnv.ix; outarray[positout].iy=tnv.iy; outarray[positout].iz=tnv.iz; positout++;eliminate++; } else if( tnv.ix-1 && tnv.iy-1 && tnv.iz-1 && vp[tnv.ix][tnv.iy][tnv.iz].inout && vp[tnv.ix][tnv.iy][tnv.iz].isdone) { dx=tnv.ix-boundpoint[tx][ty][tz].ix; dy=tnv.iy-boundpoint[tx][ty][tz].iy; dz=tnv.iz-boundpoint[tx][ty][tz].iz; squre=float(dx*dx+dy*dy+dz*dz); squre=float(sqrt(squre)); if(squre-1 && tnv.ix-1 && tnv.iy-1 && tnv.iz-1 && tx[0]+ii-1 && ty[0]+jj-1 && tz[0]+kk-1 && tx[1]+ii-1 && ty[1]+jj-1 && tz[1]+kk-1 && tx[2]+ii-1 && ty[2]+jj-1 && tz[2]+kk=cutradis) if(vp[i][j][k].isbound && vp[i][j][k].isdone) { vp[i][j][k].isbound=false; } else if(vp[i][j][k].isbound && !vp[i][j][k].isdone) { vp[i][j][k].isdone=true; } } } } } //sas else if(stype==3) { for(i=0;iallocvert) { allocvert*=2; verts=(vertinfo *)realloc(verts,allocvert*sizeof(vertinfo)); } if(facenumber+5>allocface) { allocface*=2; faces=(faceinfo *)realloc(faces,allocface*sizeof(faceinfo)); } totind=0; for(ii=0;ii<8;ii++) { if(!vp[i+2*a2fVertexOffset[ii][0]][j+2*a2fVertexOffset[ii][1]][k+2*a2fVertexOffset[ii][2]].isdone) totind |= 1<allocvert) { allocvert*=2; verts=(vertinfo *)realloc(verts,allocvert*sizeof(vertinfo)); } if(facenumber+5>allocface) { allocface*=2; faces=(faceinfo *)realloc(faces,allocface*sizeof(faceinfo)); } totind=0; for(ii=0;ii<8;ii++) { if(!vp[i+a2fVertexOffset[ii][0]][j+a2fVertexOffset[ii][1]][k+a2fVertexOffset[ii][2]].isdone) totind |= 1<allocvert) { allocvert*=2; verts=(vertinfo *)realloc(verts,allocvert*sizeof(vertinfo)); } if(facenumber+3>allocface) { allocface*=2; faces=(faceinfo *)realloc(faces,allocface*sizeof(faceinfo)); } }//k }//j }//i verts=(vertinfo *)realloc(verts,vertnumber*sizeof(vertinfo)); faces=(faceinfo *)realloc(faces,facenumber*sizeof(faceinfo)); for(i=0;iallocvert) { allocvert*=2; verts=(vertinfo *)realloc(verts,allocvert*sizeof(vertinfo)); } if(facenumber+3>allocface) { allocface*=2; faces=(faceinfo *)realloc(faces,allocface*sizeof(faceinfo)); } if(sumtype==0) { //nothing }//total0 else if(sumtype==1) { //nothing }//total1 else if(sumtype==2) { //nothing }//total2 else if(sumtype==8) { //nothing }//total8 else if(sumtype==3) { if((vp[i][j][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j+1][k].isdone) ||(vp[i][j][k].isdone && vp[i][j+1][k].isdone && vp[i+1][j+1][k].isdone) ||(vp[i][j+1][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j+1][k].isdone) ||(vp[i][j][k].isdone && vp[i][j+1][k].isdone && vp[i+1][j][k].isdone) ||(vp[i][j][k+1].isdone && vp[i+1][j][k+1].isdone && vp[i+1][j+1][k+1].isdone) ||(vp[i][j][k+1].isdone && vp[i][j+1][k+1].isdone && vp[i+1][j+1][k+1].isdone) ||(vp[i][j+1][k+1].isdone && vp[i+1][j][k+1].isdone && vp[i+1][j+1][k+1].isdone) ||(vp[i][j][k+1].isdone && vp[i][j+1][k+1].isdone && vp[i+1][j][k+1].isdone) ||(vp[i][j][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j][k+1].isdone) ||(vp[i+1][j][k].isdone && vp[i+1][j][k+1].isdone && vp[i][j][k+1].isdone) ||(vp[i][j][k].isdone && vp[i+1][j][k+1].isdone && vp[i][j][k+1].isdone) ||(vp[i][j][k].isdone && vp[i+1][j][k].isdone && vp[i][j][k+1].isdone) ||(vp[i+1][j+1][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j+1][k+1].isdone) ||(vp[i+1][j+1][k].isdone && vp[i+1][j][k+1].isdone && vp[i+1][j+1][k+1].isdone) ||(vp[i+1][j][k].isdone && vp[i+1][j][k+1].isdone && vp[i+1][j+1][k+1].isdone) ||(vp[i+1][j+1][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j][k+1].isdone) ||(vp[i+1][j+1][k].isdone && vp[i][j+1][k].isdone && vp[i][j+1][k+1].isdone) ||(vp[i][j+1][k].isdone && vp[i][j+1][k+1].isdone && vp[i+1][j+1][k+1].isdone) ||(vp[i+1][j+1][k].isdone && vp[i][j+1][k+1].isdone && vp[i+1][j+1][k+1].isdone) ||(vp[i+1][j+1][k].isdone && vp[i][j+1][k].isdone && vp[i+1][j+1][k+1].isdone) ||(vp[i][j][k].isdone && vp[i][j+1][k].isdone && vp[i][j][k+1].isdone) ||(vp[i][j][k].isdone && vp[i][j][k+1].isdone && vp[i][j+1][k+1].isdone) ||(vp[i][j][k+1].isdone && vp[i][j+1][k].isdone && vp[i][j+1][k+1].isdone) ||(vp[i][j][k].isdone && vp[i][j+1][k].isdone && vp[i][j+1][k+1].isdone)) { if(vp[i][j][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j+1][k].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; }//11 else if(vp[i][j][k].isdone && vp[i][j+1][k].isdone && vp[i+1][j+1][k].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k; }//12 else if(vp[i][j+1][k].isdone && vp[i+1][j][k].isdone&& vp[i+1][j+1][k].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k; }//13 else if(vp[i][j][k].isdone && vp[i][j+1][k].isdone&& vp[i+1][j][k].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k; }//14 else if(vp[i][j][k+1].isdone && vp[i+1][j][k+1].isdone&& vp[i+1][j+1][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k+1; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k+1; }//21 else if(vp[i][j][k+1].isdone && vp[i][j+1][k+1].isdone&& vp[i+1][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k+1; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k+1; }//22 else if(vp[i][j+1][k+1].isdone && vp[i+1][j][k+1].isdone&& vp[i+1][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k+1; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k+1; }//23 else if(vp[i][j][k+1].isdone && vp[i][j+1][k+1].isdone&& vp[i+1][j][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k+1; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k+1; }//24 else if(vp[i][j][k].isdone && vp[i+1][j][k].isdone&& vp[i+1][j][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k; }//31 else if(vp[i+1][j][k].isdone && vp[i+1][j][k+1].isdone && vp[i][j][k+1].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k+1; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k; }//32 else if(vp[i][j][k].isdone && vp[i+1][j][k+1].isdone && vp[i][j][k+1].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k+1; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k+1; }//33 else if(vp[i][j][k].isdone && vp[i+1][j][k].isdone && vp[i][j][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k+1; }//34 else if(vp[i+1][j+1][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j+1][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k; }//41 else if(vp[i+1][j+1][k].isdone && vp[i+1][j][k+1].isdone && vp[i+1][j+1][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k+1; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; }//42 else if(vp[i+1][j][k].isdone && vp[i+1][j][k+1].isdone && vp[i+1][j+1][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k+1; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k+1; }//43 else if(vp[i+1][j+1][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k+1; }//44 else if(vp[i+1][j+1][k].isdone && vp[i][j+1][k].isdone && vp[i][j+1][k+1].isdone ) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; }//51 else if( vp[i][j+1][k].isdone && vp[i][j+1][k+1].isdone && vp[i+1][j+1][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k+1; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k; }//52 else if(vp[i+1][j+1][k].isdone && vp[i][j+1][k+1].isdone && vp[i+1][j+1][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k+1; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k+1; }//53 else if(vp[i+1][j+1][k].isdone && vp[i][j+1][k].isdone && vp[i+1][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k+1; }//54 else if(vp[i][j][k].isdone && vp[i][j+1][k].isdone && vp[i][j][k+1].isdone ) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k; }//61 else if(vp[i][j][k].isdone && vp[i][j][k+1].isdone && vp[i][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k+1; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k; }//62 else if(vp[i][j][k+1].isdone && vp[i][j+1][k].isdone && vp[i][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k+1; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k+1; }//63 else if(vp[i][j][k].isdone && vp[i][j+1][k].isdone && vp[i][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k+1; }//64 for(ii=0;ii<3;ii++) { if(vertseq[tp[ii][0]][tp[ii][1]][tp[ii][2]]==-1) { vertseq[tp[ii][0]][tp[ii][1]][tp[ii][2]]=vertnumber; verts[vertnumber].x=tp[ii][0]; verts[vertnumber].y=tp[ii][1]; verts[vertnumber].z=tp[ii][2]; vertnumber++; } } faces[facenumber].a=vertseq[tp[0][0]][tp[0][1]][tp[0][2]]; faces[facenumber].b=vertseq[tp[1][0]][tp[1][1]][tp[1][2]]; faces[facenumber++].c=vertseq[tp[2][0]][tp[2][1]][tp[2][2]]; }//no5 24 }//total3 else if(sumtype==4) { if((vp[i][j][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j+1][k].isdone && vp[i][j+1][k].isdone) || (vp[i][j][k+1].isdone && vp[i+1][j][k+1].isdone && vp[i+1][j+1][k+1].isdone && vp[i][j+1][k+1].isdone) || (vp[i][j][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j][k+1].isdone && vp[i][j][k+1].isdone) || (vp[i+1][j+1][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j][k+1].isdone && vp[i+1][j+1][k+1].isdone) || (vp[i+1][j+1][k].isdone && vp[i][j+1][k].isdone && vp[i][j+1][k+1].isdone && vp[i+1][j+1][k+1].isdone) || (vp[i][j][k].isdone && vp[i][j+1][k].isdone && vp[i][j][k+1].isdone && vp[i][j+1][k+1].isdone)) { if(vp[i][j][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j+1][k].isdone && vp[i][j+1][k].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k; } else if (vp[i][j][k+1].isdone && vp[i+1][j][k+1].isdone && vp[i+1][j+1][k+1].isdone && vp[i][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; tp[3][0]=i+1;tp[3][1]=j;tp[3][2]=k+1; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k+1; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k+1; } else if(vp[i][j][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j][k+1].isdone && vp[i][j][k+1].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k; tp[3][0]=i+1;tp[3][1]=j;tp[3][2]=k; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k+1; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k+1; } else if(vp[i+1][j+1][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j][k+1].isdone && vp[i+1][j+1][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k; tp[3][0]=i+1;tp[3][1]=j+1;tp[3][2]=k; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k+1; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k+1; } else if(vp[i+1][j+1][k].isdone && vp[i][j+1][k].isdone && vp[i][j+1][k+1].isdone && vp[i+1][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k+1; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k+1; } else if(vp[i][j][k].isdone && vp[i][j+1][k].isdone && vp[i][j][k+1].isdone && vp[i][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k+1; tp[3][0]=i;tp[3][1]=j;tp[3][2]=k+1; } for(ii=0;ii<4;ii++) { if(vertseq[tp[ii][0]][tp[ii][1]][tp[ii][2]]==-1) { vertseq[tp[ii][0]][tp[ii][1]][tp[ii][2]]=vertnumber; verts[vertnumber].x=tp[ii][0]; verts[vertnumber].y=tp[ii][1]; verts[vertnumber].z=tp[ii][2]; vertnumber++; } } faces[facenumber].a=vertseq[tp[0][0]][tp[0][1]][tp[0][2]]; faces[facenumber].b=vertseq[tp[1][0]][tp[1][1]][tp[1][2]]; faces[facenumber++].c=vertseq[tp[2][0]][tp[2][1]][tp[2][2]]; faces[facenumber].a=vertseq[tp[0][0]][tp[0][1]][tp[0][2]]; faces[facenumber].b=vertseq[tp[2][0]][tp[2][1]][tp[2][2]]; faces[facenumber++].c=vertseq[tp[3][0]][tp[3][1]][tp[3][2]]; }//no.8 6 else if((vp[i][j][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j+1][k].isdone && vp[i][j+1][k+1].isdone)//11 ||(vp[i][j][k].isdone && vp[i][j+1][k].isdone && vp[i+1][j+1][k].isdone && vp[i+1][j][k+1].isdone)//12 ||(vp[i][j+1][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j+1][k].isdone && vp[i][j][k+1].isdone)//13 ||(vp[i][j][k].isdone && vp[i][j+1][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j+1][k+1].isdone)//14 ||(vp[i][j][k+1].isdone && vp[i+1][j][k+1].isdone && vp[i+1][j+1][k+1].isdone && vp[i][j+1][k].isdone)//21 ||(vp[i][j][k+1].isdone && vp[i][j+1][k+1].isdone && vp[i+1][j+1][k+1].isdone && vp[i+1][j][k].isdone)//22 ||(vp[i][j+1][k+1].isdone && vp[i+1][j][k+1].isdone && vp[i+1][j+1][k+1].isdone && vp[i][j][k].isdone)//23 ||(vp[i][j][k+1].isdone && vp[i][j+1][k+1].isdone && vp[i+1][j][k+1].isdone && vp[i+1][j+1][k].isdone)//24 ||(vp[i][j][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j][k+1].isdone && vp[i][j+1][k+1].isdone)//31 ||(vp[i+1][j][k].isdone && vp[i+1][j][k+1].isdone && vp[i][j][k+1].isdone && vp[i][j+1][k].isdone)//32 ||(vp[i][j][k].isdone && vp[i+1][j][k+1].isdone && vp[i][j][k+1].isdone && vp[i+1][j+1][k].isdone)//33 ||(vp[i][j][k].isdone && vp[i+1][j][k].isdone && vp[i][j][k+1].isdone && vp[i+1][j+1][k+1].isdone)//34 ||(vp[i+1][j+1][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j+1][k+1].isdone && vp[i][j][k+1].isdone)//41 ||(vp[i+1][j+1][k].isdone && vp[i+1][j][k+1].isdone && vp[i+1][j+1][k+1].isdone && vp[i][j][k].isdone)//42 ||(vp[i+1][j][k].isdone && vp[i+1][j][k+1].isdone && vp[i+1][j+1][k+1].isdone && vp[i][j+1][k].isdone)//43 ||(vp[i+1][j+1][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j][k+1].isdone && vp[i][j+1][k+1].isdone)//44 ||(vp[i+1][j+1][k].isdone && vp[i][j+1][k].isdone && vp[i][j+1][k+1].isdone && vp[i+1][j][k+1].isdone)//51 ||( vp[i][j+1][k].isdone && vp[i][j+1][k+1].isdone && vp[i+1][j+1][k+1].isdone && vp[i+1][j][k].isdone)//52 ||(vp[i+1][j+1][k].isdone && vp[i][j+1][k+1].isdone && vp[i+1][j+1][k+1].isdone && vp[i][j][k].isdone)//53 ||(vp[i+1][j+1][k].isdone && vp[i][j+1][k].isdone && vp[i+1][j+1][k+1].isdone && vp[i][j][k+1].isdone)//54 ||(vp[i][j][k].isdone && vp[i][j+1][k].isdone && vp[i][j][k+1].isdone && vp[i+1][j+1][k+1].isdone)//61 ||(vp[i][j][k].isdone && vp[i][j][k+1].isdone && vp[i][j+1][k+1].isdone && vp[i+1][j+1][k].isdone)//62 ||(vp[i][j][k+1].isdone && vp[i][j+1][k].isdone && vp[i][j+1][k+1].isdone && vp[i+1][j][k].isdone)//63 ||(vp[i][j][k].isdone && vp[i][j+1][k].isdone&& vp[i][j+1][k+1].isdone && vp[i+1][j][k+1].isdone)) { if(vp[i][j][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j+1][k].isdone && vp[i][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; }//11 else if(vp[i][j][k].isdone && vp[i][j+1][k].isdone && vp[i+1][j+1][k].isdone && vp[i+1][j][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k; }//12 else if(vp[i][j+1][k].isdone && vp[i+1][j][k].isdone&& vp[i+1][j+1][k].isdone && vp[i][j][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k; }//13 else if(vp[i][j][k].isdone && vp[i][j+1][k].isdone&& vp[i+1][j][k].isdone && vp[i+1][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k; }//14 else if(vp[i][j][k+1].isdone && vp[i+1][j][k+1].isdone&& vp[i+1][j+1][k+1].isdone && vp[i][j+1][k].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k+1; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k+1; }//21 else if(vp[i][j][k+1].isdone && vp[i][j+1][k+1].isdone&& vp[i+1][j+1][k+1].isdone && vp[i+1][j][k].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k+1; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k+1; }//22 else if(vp[i][j+1][k+1].isdone && vp[i+1][j][k+1].isdone&& vp[i+1][j+1][k+1].isdone && vp[i][j][k].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k+1; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k+1; }//23 else if(vp[i][j][k+1].isdone && vp[i][j+1][k+1].isdone&& vp[i+1][j][k+1].isdone && vp[i+1][j+1][k].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k+1; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k+1; }//24 else if(vp[i][j][k].isdone && vp[i+1][j][k].isdone&& vp[i+1][j][k+1].isdone && vp[i][j+1][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k; }//31 else if(vp[i+1][j][k].isdone && vp[i+1][j][k+1].isdone && vp[i][j][k+1].isdone && vp[i][j+1][k].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k+1; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k; }//32 else if(vp[i][j][k].isdone && vp[i+1][j][k+1].isdone && vp[i][j][k+1].isdone && vp[i+1][j+1][k].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k+1; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k+1; }//33 else if(vp[i][j][k].isdone && vp[i+1][j][k].isdone && vp[i][j][k+1].isdone && vp[i+1][j+1][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k+1; }//34 else if(vp[i+1][j+1][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j+1][k+1].isdone && vp[i][j][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k; }//41 else if(vp[i+1][j+1][k].isdone && vp[i+1][j][k+1].isdone && vp[i+1][j+1][k+1].isdone && vp[i][j][k].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k+1; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; }//42 else if(vp[i+1][j][k].isdone && vp[i+1][j][k+1].isdone && vp[i+1][j+1][k+1].isdone && vp[i][j+1][k].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k+1; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k+1; }//43 else if(vp[i+1][j+1][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j][k+1].isdone && vp[i][j+1][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k+1; }//44 else if(vp[i+1][j+1][k].isdone && vp[i][j+1][k].isdone && vp[i][j+1][k+1].isdone && vp[i+1][j][k+1].isdone ) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; }//51 else if( vp[i][j+1][k].isdone && vp[i][j+1][k+1].isdone && vp[i+1][j+1][k+1].isdone && vp[i+1][j][k].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k+1; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k; }//52 else if(vp[i+1][j+1][k].isdone && vp[i][j+1][k+1].isdone && vp[i+1][j+1][k+1].isdone && vp[i][j][k].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k+1; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k+1; }//53 else if(vp[i+1][j+1][k].isdone && vp[i][j+1][k].isdone && vp[i+1][j+1][k+1].isdone && vp[i][j][k+1].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k+1; }//54 else if(vp[i][j][k].isdone && vp[i][j+1][k].isdone && vp[i][j][k+1].isdone && vp[i+1][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k; }//61 else if(vp[i][j][k].isdone && vp[i][j][k+1].isdone && vp[i][j+1][k+1].isdone && vp[i+1][j+1][k].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k+1; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k; }//62 else if(vp[i][j][k+1].isdone && vp[i][j+1][k].isdone && vp[i][j+1][k+1].isdone && vp[i+1][j][k].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k+1; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k+1; }//63 else if(vp[i][j][k].isdone && vp[i][j+1][k].isdone && vp[i][j+1][k+1].isdone && vp[i+1][j][k+1].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k+1; }//64 for(ii=0;ii<3;ii++) { if(vertseq[tp[ii][0]][tp[ii][1]][tp[ii][2]]==-1) { vertseq[tp[ii][0]][tp[ii][1]][tp[ii][2]]=vertnumber; verts[vertnumber].x=tp[ii][0]; verts[vertnumber].y=tp[ii][1]; verts[vertnumber].z=tp[ii][2]; vertnumber++; } } faces[facenumber].a=vertseq[tp[0][0]][tp[0][1]][tp[0][2]]; faces[facenumber].b=vertseq[tp[1][0]][tp[1][1]][tp[1][2]]; faces[facenumber++].c=vertseq[tp[2][0]][tp[2][1]][tp[2][2]]; }//no12 24 else if((vp[i][j][k].isdone && vp[i][j+1][k+1].isdone && vp[i+1][j+1][k].isdone && vp[i][j+1][k].isdone) || (vp[i][j][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j+1][k].isdone && vp[i+1][j][k+1].isdone) || (vp[i][j][k].isdone && vp[i][j][k+1].isdone && vp[i+1][j][k].isdone && vp[i][j+1][k].isdone) || (vp[i][j+1][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j+1][k].isdone && vp[i+1][j+1][k+1].isdone) || (vp[i][j][k+1].isdone && vp[i][j+1][k+1].isdone && vp[i+1][j+1][k+1].isdone && vp[i][j+1][k].isdone) || (vp[i][j][k+1].isdone && vp[i+1][j][k].isdone && vp[i+1][j+1][k+1].isdone && vp[i+1][j][k+1].isdone) || (vp[i][j][k].isdone && vp[i][j][k+1].isdone && vp[i+1][j][k+1].isdone && vp[i][j+1][k+1].isdone) || (vp[i][j+1][k+1].isdone && vp[i+1][j][k+1].isdone && vp[i+1][j+1][k].isdone && vp[i+1][j+1][k+1].isdone)) { if(vp[i][j+1][k].isdone && vp[i][j+1][k+1].isdone && vp[i][j][k].isdone && vp[i+1][j+1][k].isdone ) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; }//1 else if(vp[i+1][j][k].isdone && vp[i+1][j][k+1].isdone && vp[i+1][j+1][k].isdone && vp[i][j][k].isdone ) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k; }//2 else if(vp[i][j][k].isdone && vp[i][j][k+1].isdone && vp[i+1][j][k].isdone && vp[i][j+1][k].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k; }//3 else if(vp[i+1][j+1][k].isdone && vp[i+1][j+1][k+1].isdone && vp[i][j+1][k].isdone && vp[i+1][j][k].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k; }//4 else if(vp[i][j+1][k].isdone && vp[i][j+1][k+1].isdone && vp[i+1][j+1][k+1].isdone && vp[i][j][k+1].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k+1; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k+1; }//5 else if(vp[i+1][j][k].isdone && vp[i+1][j][k+1].isdone && vp[i+1][j+1][k+1].isdone && vp[i][j][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k+1; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k+1; }//6 else if(vp[i][j][k].isdone && vp[i][j][k+1].isdone && vp[i+1][j][k+1].isdone && vp[i][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k+1; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k+1; }//7 else if(vp[i][j+1][k+1].isdone && vp[i+1][j][k+1].isdone && vp[i+1][j+1][k].isdone && vp[i+1][j+1][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k+1; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k+1; }//8 for(ii=0;ii<3;ii++) { if(vertseq[tp[ii][0]][tp[ii][1]][tp[ii][2]]==-1) { vertseq[tp[ii][0]][tp[ii][1]][tp[ii][2]]=vertnumber; verts[vertnumber].x=tp[ii][0]; verts[vertnumber].y=tp[ii][1]; verts[vertnumber].z=tp[ii][2]; vertnumber++; } } faces[facenumber].a=vertseq[tp[0][0]][tp[0][1]][tp[0][2]]; faces[facenumber].b=vertseq[tp[1][0]][tp[1][1]][tp[1][2]]; faces[facenumber++].c=vertseq[tp[2][0]][tp[2][1]][tp[2][2]]; }// no.9 8 else if((vp[i][j][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j+1][k].isdone && vp[i][j][k+1].isdone) ||(vp[i][j+1][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j+1][k].isdone && vp[i+1][j][k+1].isdone) ||(vp[i][j+1][k].isdone && vp[i][j][k].isdone && vp[i+1][j+1][k].isdone && vp[i+1][j+1][k+1].isdone) ||(vp[i][j+1][k].isdone && vp[i][j][k].isdone && vp[i+1][j][k].isdone && vp[i][j+1][k+1].isdone) ||(vp[i][j+1][k+1].isdone && vp[i][j][k+1].isdone && vp[i+1][j][k+1].isdone && vp[i+1][j][k].isdone) ||(vp[i+1][j+1][k+1].isdone && vp[i][j][k+1].isdone && vp[i+1][j][k+1].isdone && vp[i+1][j+1][k].isdone) ||(vp[i+1][j+1][k+1].isdone && vp[i][j+1][k+1].isdone && vp[i+1][j][k+1].isdone && vp[i][j+1][k].isdone) ||(vp[i+1][j+1][k+1].isdone && vp[i][j+1][k+1].isdone && vp[i][j][k+1].isdone && vp[i][j][k].isdone) ||(vp[i+1][j+1][k].isdone && vp[i][j+1][k+1].isdone && vp[i][j][k+1].isdone && vp[i][j+1][k].isdone) ||(vp[i+1][j][k+1].isdone && vp[i][j][k].isdone && vp[i][j][k+1].isdone && vp[i][j+1][k].isdone) ||(vp[i+1][j][k+1].isdone && vp[i][j][k].isdone && vp[i+1][j+1][k+1].isdone && vp[i+1][j][k].isdone) ||(vp[i][j+1][k+1].isdone && vp[i+1][j+1][k].isdone && vp[i+1][j+1][k+1].isdone && vp[i+1][j][k].isdone)) { if(vp[i][j][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j+1][k].isdone && vp[i][j][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k; tp[3][0]=i;tp[3][1]=j;tp[3][2]=k+1; }//1 else if(vp[i][j+1][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j+1][k].isdone && vp[i+1][j][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k; tp[3][0]=i+1;tp[3][1]=j;tp[3][2]=k+1; }//2 else if(vp[i][j+1][k].isdone && vp[i][j][k].isdone && vp[i+1][j+1][k].isdone && vp[i+1][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; tp[3][0]=i+1;tp[3][1]=j+1;tp[3][2]=k+1; }//3 else if(vp[i][j+1][k].isdone && vp[i][j][k].isdone && vp[i+1][j][k].isdone && vp[i][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k+1; }//4 else if(vp[i][j+1][k+1].isdone && vp[i][j][k+1].isdone && vp[i+1][j][k+1].isdone && vp[i+1][j][k].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k+1; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k+1; }//5 else if(vp[i+1][j+1][k+1].isdone && vp[i][j][k+1].isdone && vp[i+1][j][k+1].isdone && vp[i+1][j+1][k].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k+1; tp[3][0]=i;tp[3][1]=j;tp[3][2]=k+1; }//6 else if(vp[i+1][j+1][k+1].isdone && vp[i][j+1][k+1].isdone && vp[i+1][j][k+1].isdone && vp[i][j+1][k].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k+1; tp[3][0]=i+1;tp[3][1]=j;tp[3][2]=k+1; }//7 else if(vp[i+1][j+1][k+1].isdone && vp[i][j+1][k+1].isdone && vp[i][j][k+1].isdone && vp[i][j][k].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k+1; tp[3][0]=i+1;tp[3][1]=j+1;tp[3][2]=k+1; }//8 else if(vp[i+1][j+1][k].isdone && vp[i][j+1][k+1].isdone && vp[i][j][k+1].isdone && vp[i][j+1][k].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k+1; tp[3][0]=i;tp[3][1]=j;tp[3][2]=k+1; }//9 else if(vp[i+1][j][k+1].isdone && vp[i][j][k].isdone && vp[i][j][k+1].isdone && vp[i][j+1][k].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k+1; tp[3][0]=i+1;tp[3][1]=j;tp[3][2]=k+1; }//10 else if(vp[i+1][j][k+1].isdone && vp[i][j][k].isdone && vp[i+1][j+1][k+1].isdone && vp[i+1][j][k].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k+1; tp[3][0]=i+1;tp[3][1]=j+1;tp[3][2]=k+1; }//11 else if(vp[i][j+1][k+1].isdone && vp[i+1][j+1][k].isdone && vp[i+1][j+1][k+1].isdone && vp[i+1][j][k].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k+1; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k+1; }//12 for(ii=0;ii<4;ii++) { if(vertseq[tp[ii][0]][tp[ii][1]][tp[ii][2]]==-1) { vertseq[tp[ii][0]][tp[ii][1]][tp[ii][2]]=vertnumber; verts[vertnumber].x=tp[ii][0]; verts[vertnumber].y=tp[ii][1]; verts[vertnumber].z=tp[ii][2]; vertnumber++; } } faces[facenumber].a=vertseq[tp[0][0]][tp[0][1]][tp[0][2]]; faces[facenumber].b=vertseq[tp[1][0]][tp[1][1]][tp[1][2]]; faces[facenumber++].c=vertseq[tp[2][0]][tp[2][1]][tp[2][2]]; faces[facenumber].a=vertseq[tp[0][0]][tp[0][1]][tp[0][2]]; faces[facenumber].b=vertseq[tp[2][0]][tp[2][1]][tp[2][2]]; faces[facenumber++].c=vertseq[tp[3][0]][tp[3][1]][tp[3][2]]; }//no.11 12 else if((vp[i][j][k].isdone && vp[i+1][j][k].isdone && vp[i][j+1][k].isdone && vp[i+1][j][k+1].isdone) ||(vp[i][j][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j+1][k].isdone && vp[i+1][j+1][k+1].isdone) ||(vp[i][j+1][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j+1][k].isdone && vp[i][j+1][k+1].isdone) ||(vp[i][j+1][k].isdone && vp[i][j][k].isdone && vp[i+1][j+1][k].isdone && vp[i][j][k+1].isdone) ||(vp[i+1][j+1][k+1].isdone && vp[i][j][k+1].isdone && vp[i+1][j][k+1].isdone && vp[i][j][k].isdone) ||(vp[i+1][j+1][k+1].isdone && vp[i][j+1][k+1].isdone && vp[i+1][j][k+1].isdone && vp[i+1][j][k].isdone) ||(vp[i+1][j+1][k+1].isdone && vp[i][j+1][k+1].isdone && vp[i][j][k+1].isdone && vp[i+1][j+1][k].isdone) ||(vp[i+1][j][k+1].isdone && vp[i][j+1][k+1].isdone && vp[i][j][k+1].isdone && vp[i][j+1][k].isdone) ||(vp[i+1][j+1][k+1].isdone && vp[i][j+1][k+1].isdone && vp[i][j][k].isdone && vp[i][j+1][k].isdone) ||(vp[i+1][j][k].isdone && vp[i][j][k].isdone && vp[i][j][k+1].isdone && vp[i][j+1][k+1].isdone) ||(vp[i+1][j][k+1].isdone && vp[i][j][k+1].isdone && vp[i+1][j+1][k].isdone && vp[i+1][j][k].isdone) ||(vp[i][j+1][k].isdone && vp[i+1][j+1][k].isdone && vp[i+1][j+1][k+1].isdone && vp[i+1][j][k+1].isdone)) { if(vp[i][j][k].isdone && vp[i+1][j][k].isdone && vp[i][j+1][k].isdone && vp[i+1][j][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k; tp[3][0]=i+1;tp[3][1]=j;tp[3][2]=k+1; }//1 else if(vp[i][j][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j+1][k].isdone && vp[i+1][j+1][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k; tp[3][0]=i+1;tp[3][1]=j+1;tp[3][2]=k+1; }//2 else if(vp[i][j+1][k].isdone && vp[i+1][j][k].isdone && vp[i+1][j+1][k].isdone && vp[i][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k+1; }//3 else if(vp[i][j+1][k].isdone && vp[i][j][k].isdone && vp[i+1][j+1][k].isdone && vp[i][j][k+1].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k; tp[3][0]=i;tp[3][1]=j;tp[3][2]=k+1; }//4 else if(vp[i+1][j+1][k+1].isdone && vp[i][j][k+1].isdone && vp[i+1][j][k+1].isdone && vp[i][j][k].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k+1; tp[3][0]=i+1;tp[3][1]=j+1;tp[3][2]=k+1; }//5 else if(vp[i+1][j+1][k+1].isdone && vp[i][j+1][k+1].isdone && vp[i+1][j][k+1].isdone && vp[i+1][j][k].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k+1; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k+1; }//6 else if(vp[i+1][j+1][k+1].isdone && vp[i][j+1][k+1].isdone && vp[i][j][k+1].isdone && vp[i+1][j+1][k].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k+1; tp[3][0]=i;tp[3][1]=j;tp[3][2]=k+1; }//7 else if(vp[i+1][j][k+1].isdone && vp[i][j+1][k+1].isdone && vp[i][j][k+1].isdone && vp[i][j+1][k].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k+1; tp[3][0]=i+1;tp[3][1]=j;tp[3][2]=k+1; }//8 else if(vp[i+1][j+1][k+1].isdone && vp[i][j+1][k+1].isdone && vp[i][j][k].isdone && vp[i][j+1][k].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k+1; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k+1; tp[3][0]=i;tp[3][1]=j;tp[3][2]=k; }//9 else if(vp[i+1][j][k].isdone && vp[i][j][k].isdone && vp[i][j][k+1].isdone && vp[i][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k+1; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k+1; tp[3][0]=i+1;tp[3][1]=j;tp[3][2]=k; }//10 else if(vp[i+1][j][k+1].isdone && vp[i][j][k+1].isdone && vp[i+1][j+1][k].isdone && vp[i+1][j][k].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k+1; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k+1; tp[3][0]=i+1;tp[3][1]=j+1;tp[3][2]=k; }//11 else if(vp[i][j+1][k].isdone && vp[i+1][j+1][k].isdone && vp[i+1][j+1][k+1].isdone && vp[i+1][j][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k+1; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k+1; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k; }//12 for(ii=0;ii<4;ii++) { if(vertseq[tp[ii][0]][tp[ii][1]][tp[ii][2]]==-1) { vertseq[tp[ii][0]][tp[ii][1]][tp[ii][2]]=vertnumber; verts[vertnumber].x=tp[ii][0]; verts[vertnumber].y=tp[ii][1]; verts[vertnumber].z=tp[ii][2]; vertnumber++; } } faces[facenumber].a=vertseq[tp[0][0]][tp[0][1]][tp[0][2]]; faces[facenumber].b=vertseq[tp[1][0]][tp[1][1]][tp[1][2]]; faces[facenumber++].c=vertseq[tp[2][0]][tp[2][1]][tp[2][2]]; faces[facenumber].a=vertseq[tp[0][0]][tp[0][1]][tp[0][2]]; faces[facenumber].b=vertseq[tp[2][0]][tp[2][1]][tp[2][2]]; faces[facenumber++].c=vertseq[tp[3][0]][tp[3][1]][tp[3][2]]; }//no.14 12 }//total4 else if(sumtype==5) { if((!vp[i+1][j][k].isdone && !vp[i][j][k+1].isdone && !vp[i+1][j+1][k+1].isdone) || (!vp[i][j+1][k].isdone && !vp[i][j][k+1].isdone && !vp[i+1][j+1][k+1].isdone) || (!vp[i+1][j+1][k].isdone && !vp[i+1][j][k+1].isdone && !vp[i][j+1][k+1].isdone) || (!vp[i][j][k].isdone && !vp[i+1][j][k+1].isdone && !vp[i][j+1][k+1].isdone) || (!vp[i+1][j][k+1].isdone && !vp[i][j][k].isdone && !vp[i+1][j+1][k].isdone) || (!vp[i][j+1][k+1].isdone && !vp[i][j][k].isdone && !vp[i+1][j+1][k].isdone) || (!vp[i+1][j+1][k+1].isdone && !vp[i+1][j][k].isdone && !vp[i][j+1][k].isdone) || (!vp[i][j][k+1].isdone && !vp[i+1][j][k].isdone && !vp[i][j+1][k].isdone)) { if(!vp[i+1][j][k].isdone && !vp[i][j][k+1].isdone && !vp[i+1][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; }//1 else if(!vp[i][j+1][k].isdone && !vp[i][j][k+1].isdone && !vp[i+1][j+1][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k; }//2 else if(!vp[i+1][j+1][k].isdone && !vp[i+1][j][k+1].isdone && !vp[i][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k; }//3 else if(!vp[i][j][k].isdone && !vp[i+1][j][k+1].isdone && !vp[i][j+1][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k; }//4 else if(!vp[i+1][j][k+1].isdone && !vp[i][j][k].isdone && !vp[i+1][j+1][k].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k+1; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k+1; }//5 else if(!vp[i][j+1][k+1].isdone && !vp[i][j][k].isdone && !vp[i+1][j+1][k].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k+1; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k+1; }//6 else if(!vp[i+1][j+1][k+1].isdone && !vp[i+1][j][k].isdone && !vp[i][j+1][k].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k+1; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k+1; }//7 else if(!vp[i][j][k+1].isdone && !vp[i+1][j][k].isdone && !vp[i][j+1][k].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k+1; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k+1; }//8 for(ii=0;ii<3;ii++) { if(vertseq[tp[ii][0]][tp[ii][1]][tp[ii][2]]==-1) { vertseq[tp[ii][0]][tp[ii][1]][tp[ii][2]]=vertnumber; verts[vertnumber].x=tp[ii][0]; verts[vertnumber].y=tp[ii][1]; verts[vertnumber].z=tp[ii][2]; vertnumber++; } } faces[facenumber].a=vertseq[tp[0][0]][tp[0][1]][tp[0][2]]; faces[facenumber].b=vertseq[tp[1][0]][tp[1][1]][tp[1][2]]; faces[facenumber++].c=vertseq[tp[2][0]][tp[2][1]][tp[2][2]]; }//no.7 8 else if((!vp[i][j][k].isdone && !vp[i+1][j][k].isdone && !vp[i+1][j+1][k].isdone) ||(!vp[i][j][k].isdone && !vp[i][j+1][k].isdone && !vp[i+1][j+1][k].isdone) ||(!vp[i][j+1][k].isdone && !vp[i+1][j][k].isdone && !vp[i+1][j+1][k].isdone) ||(!vp[i][j][k].isdone && !vp[i][j+1][k].isdone && !vp[i+1][j][k].isdone) ||(!vp[i][j][k+1].isdone && !vp[i+1][j][k+1].isdone && !vp[i+1][j+1][k+1].isdone) ||(!vp[i][j][k+1].isdone && !vp[i][j+1][k+1].isdone && !vp[i+1][j+1][k+1].isdone) ||(!vp[i][j+1][k+1].isdone && !vp[i+1][j][k+1].isdone && !vp[i+1][j+1][k+1].isdone) ||(!vp[i][j][k+1].isdone && !vp[i][j+1][k+1].isdone && !vp[i+1][j][k+1].isdone) ||(!vp[i][j][k].isdone && !vp[i+1][j][k].isdone && !vp[i+1][j][k+1].isdone) ||(!vp[i+1][j][k].isdone && !vp[i+1][j][k+1].isdone && !vp[i][j][k+1].isdone) ||(!vp[i][j][k].isdone && !vp[i+1][j][k+1].isdone && !vp[i][j][k+1].isdone) ||(!vp[i][j][k].isdone && !vp[i+1][j][k].isdone && !vp[i][j][k+1].isdone) ||(!vp[i+1][j+1][k].isdone && !vp[i+1][j][k].isdone && !vp[i+1][j+1][k+1].isdone) ||(!vp[i+1][j+1][k].isdone && !vp[i+1][j][k+1].isdone && !vp[i+1][j+1][k+1].isdone) ||(!vp[i+1][j][k].isdone && !vp[i+1][j][k+1].isdone && !vp[i+1][j+1][k+1].isdone) ||(!vp[i+1][j+1][k].isdone && !vp[i+1][j][k].isdone && !vp[i+1][j][k+1].isdone ) ||(!vp[i+1][j+1][k].isdone && !vp[i][j+1][k].isdone && !vp[i][j+1][k+1].isdone ) ||(!vp[i][j+1][k].isdone && !vp[i][j+1][k+1].isdone && !vp[i+1][j+1][k+1].isdone) ||(!vp[i+1][j+1][k].isdone && !vp[i][j+1][k+1].isdone && !vp[i+1][j+1][k+1].isdone) ||(!vp[i+1][j+1][k].isdone && !vp[i][j+1][k].isdone && !vp[i+1][j+1][k+1].isdone) ||(!vp[i][j][k].isdone && !vp[i][j+1][k].isdone && !vp[i][j][k+1].isdone ) ||(!vp[i][j][k].isdone && !vp[i][j][k+1].isdone && !vp[i][j+1][k+1].isdone) ||(!vp[i][j][k+1].isdone && !vp[i][j+1][k].isdone && !vp[i][j+1][k+1].isdone) ||(!vp[i][j][k].isdone && !vp[i][j+1][k].isdone && !vp[i][j+1][k+1].isdone)) { if(!vp[i][j][k].isdone && !vp[i+1][j][k].isdone && !vp[i+1][j+1][k].isdone) { tp[2][0]=i;tp[2][1]=j;tp[2][2]=k+1; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k+1; tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k+1; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k; }//11 else if(!vp[i][j][k].isdone && !vp[i][j+1][k].isdone && !vp[i+1][j+1][k].isdone) { tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k+1; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k+1; tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; tp[3][0]=i+1;tp[3][1]=j;tp[3][2]=k; }//12 else if(!vp[i][j+1][k].isdone && !vp[i+1][j][k].isdone&& !vp[i+1][j+1][k].isdone) { tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k+1; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k+1; tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k+1; tp[3][0]=i;tp[3][1]=j;tp[3][2]=k; }//13 else if(!vp[i][j][k].isdone && !vp[i][j+1][k].isdone&& !vp[i+1][j][k].isdone) { tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k+1; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k+1; tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k+1; tp[3][0]=i+1;tp[3][1]=j+1;tp[3][2]=k; }//14 else if(!vp[i][j][k+1].isdone && !vp[i+1][j][k+1].isdone&& !vp[i+1][j+1][k+1].isdone) { tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; tp[0][0]=i;tp[0][1]=j;tp[0][2]=k; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k+1; }//21 else if(!vp[i][j][k+1].isdone && !vp[i][j+1][k+1].isdone&& !vp[i+1][j+1][k+1].isdone) { tp[2][0]=i;tp[2][1]=j;tp[2][2]=k; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k; tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k; tp[3][0]=i+1;tp[3][1]=j;tp[3][2]=k+1; }//22 else if(!vp[i][j+1][k+1].isdone && !vp[i+1][j][k+1].isdone&& !vp[i+1][j+1][k+1].isdone) { tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k; tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k; tp[3][0]=i;tp[3][1]=j;tp[3][2]=k+1; }//23 else if(!vp[i][j][k+1].isdone && !vp[i][j+1][k+1].isdone&& !vp[i+1][j][k+1].isdone) { tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k; tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k; tp[3][0]=i+1;tp[3][1]=j+1;tp[3][2]=k+1; }//24 else if(!vp[i][j][k].isdone && !vp[i+1][j][k].isdone&& !vp[i+1][j][k+1].isdone) { tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k+1; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k; tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k; tp[3][0]=i;tp[3][1]=j;tp[3][2]=k+1; }//31 else if(!vp[i+1][j][k].isdone && !vp[i+1][j][k+1].isdone && !vp[i][j][k+1].isdone) { tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k+1; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k+1; tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k; tp[3][0]=i;tp[3][1]=j;tp[3][2]=k; }//32 else if(!vp[i][j][k].isdone && !vp[i+1][j][k+1].isdone && !vp[i][j][k+1].isdone) { tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k+1; tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k+1; tp[3][0]=i+1;tp[3][1]=j;tp[3][2]=k; }//33 else if(!vp[i][j][k].isdone && !vp[i+1][j][k].isdone && !vp[i][j][k+1].isdone) { tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k; tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k+1; tp[3][0]=i+1;tp[3][1]=j;tp[3][2]=k+1; }//34 else if(!vp[i+1][j+1][k].isdone && !vp[i+1][j][k].isdone && !vp[i+1][j+1][k+1].isdone) { tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k+1; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k; tp[0][0]=i;tp[0][1]=j;tp[0][2]=k; tp[3][0]=i+1;tp[3][1]=j;tp[3][2]=k+1; }//41 else if(!vp[i+1][j+1][k].isdone && !vp[i+1][j][k+1].isdone && !vp[i+1][j+1][k+1].isdone) { tp[2][0]=i;tp[2][1]=j;tp[2][2]=k+1; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k+1; tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k; tp[3][0]=i+1;tp[3][1]=j;tp[3][2]=k; }//42 else if(!vp[i+1][j][k].isdone && !vp[i+1][j][k+1].isdone && !vp[i+1][j+1][k+1].isdone) { tp[2][0]=i;tp[2][1]=j;tp[2][2]=k; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k+1; tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k+1; tp[3][0]=i+1;tp[3][1]=j+1;tp[3][2]=k; }//43 else if(!vp[i+1][j+1][k].isdone && !vp[i+1][j][k].isdone && !vp[i+1][j][k+1].isdone) { tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k; tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; tp[3][0]=i+1;tp[3][1]=j+1;tp[3][2]=k+1; }//44 else if(!vp[i+1][j+1][k].isdone && !vp[i][j+1][k].isdone && !vp[i][j+1][k+1].isdone ) { tp[2][0]=i;tp[2][1]=j;tp[2][2]=k+1; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k; tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k; tp[3][0]=i+1;tp[3][1]=j+1;tp[3][2]=k+1; }//51 else if( !vp[i][j+1][k].isdone && !vp[i][j+1][k+1].isdone && !vp[i+1][j+1][k+1].isdone) { tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k+1; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k+1; tp[0][0]=i;tp[0][1]=j;tp[0][2]=k; tp[3][0]=i+1;tp[3][1]=j+1;tp[3][2]=k; }//52 else if(!vp[i+1][j+1][k].isdone && !vp[i][j+1][k+1].isdone && !vp[i+1][j+1][k+1].isdone) { tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k+1; tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k; }//53 else if(!vp[i+1][j+1][k].isdone && !vp[i][j+1][k].isdone && !vp[i+1][j+1][k+1].isdone) { tp[2][0]=i;tp[2][1]=j;tp[2][2]=k; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k+1; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k+1; }//54 else if(!vp[i][j][k].isdone && !vp[i][j+1][k].isdone && !vp[i][j][k+1].isdone ) { tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k+1; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k+1; }//61 else if(!vp[i][j][k].isdone && !vp[i][j][k+1].isdone && !vp[i][j+1][k+1].isdone) { tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k+1; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k+1; tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k; }//62 else if(!vp[i][j][k+1].isdone && !vp[i][j+1][k].isdone && !vp[i][j+1][k+1].isdone) { tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k+1; tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k+1; tp[3][0]=i;tp[3][1]=j;tp[3][2]=k; }//63 else if(!vp[i][j][k].isdone && !vp[i][j+1][k].isdone && !vp[i][j+1][k+1].isdone) { tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k; tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k+1; tp[3][0]=i;tp[3][1]=j;tp[3][2]=k+1; }//64 for(ii=0;ii<4;ii++) { if(vertseq[tp[ii][0]][tp[ii][1]][tp[ii][2]]==-1) { vertseq[tp[ii][0]][tp[ii][1]][tp[ii][2]]=vertnumber; verts[vertnumber].x=tp[ii][0]; verts[vertnumber].y=tp[ii][1]; verts[vertnumber].z=tp[ii][2]; vertnumber++; } } faces[facenumber].a=vertseq[tp[0][0]][tp[0][1]][tp[0][2]]; faces[facenumber].b=vertseq[tp[1][0]][tp[1][1]][tp[1][2]]; faces[facenumber++].c=vertseq[tp[2][0]][tp[2][1]][tp[2][2]]; faces[facenumber].a=vertseq[tp[0][0]][tp[0][1]][tp[0][2]]; faces[facenumber].b=vertseq[tp[2][0]][tp[2][1]][tp[2][2]]; faces[facenumber++].c=vertseq[tp[3][0]][tp[3][1]][tp[3][2]]; }//no5 24 else if((!vp[i][j][k].isdone && !vp[i+1][j][k].isdone && !vp[i+1][j+1][k+1].isdone)//1 ||(!vp[i][j+1][k].isdone && !vp[i+1][j+1][k].isdone && !vp[i][j][k+1].isdone)//2 ||(!vp[i][j+1][k+1].isdone && !vp[i+1][j+1][k+1].isdone && !vp[i+1][j][k].isdone)//3 ||(!vp[i][j][k+1].isdone && !vp[i+1][j][k+1].isdone && !vp[i+1][j+1][k].isdone)//4 ||(!vp[i][j][k].isdone && !vp[i][j+1][k].isdone && !vp[i+1][j+1][k+1].isdone)//5 ||(!vp[i+1][j][k+1].isdone && !vp[i+1][j+1][k+1].isdone && !vp[i][j+1][k].isdone)//6 ||(!vp[i+1][j][k].isdone && !vp[i+1][j+1][k].isdone && !vp[i][j+1][k+1].isdone)//7 ||(!vp[i][j][k+1].isdone && !vp[i][j+1][k+1].isdone && !vp[i+1][j+1][k].isdone)//8 ||(!vp[i][j][k].isdone && !vp[i][j][k+1].isdone && !vp[i+1][j+1][k+1].isdone)//9 ||(!vp[i+1][j+1][k].isdone && !vp[i+1][j+1][k+1].isdone && !vp[i][j][k].isdone)//10 ||(!vp[i+1][j][k].isdone && !vp[i+1][j][k+1].isdone && !vp[i][j+1][k+1].isdone)//11 ||(!vp[i][j+1][k].isdone && !vp[i][j+1][k+1].isdone && !vp[i+1][j][k+1].isdone)) { if(!vp[i][j][k].isdone && !vp[i+1][j][k].isdone && !vp[i+1][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; tp[3][0]=i+1;tp[3][1]=j;tp[3][2]=k+1; tp[4][0]=i;tp[4][1]=j+1;tp[4][2]=k+1; }//1 else if(!vp[i][j+1][k].isdone && !vp[i+1][j+1][k].isdone && !vp[i][j][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k+1; tp[4][0]=i+1;tp[4][1]=j;tp[4][2]=k+1; }//2 else if(!vp[i][j+1][k+1].isdone && !vp[i+1][j+1][k+1].isdone && !vp[i+1][j][k].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k+1; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k+1; tp[3][0]=i+1;tp[3][1]=j+1;tp[3][2]=k; tp[4][0]=i;tp[4][1]=j;tp[4][2]=k; }//3 else if(!vp[i][j][k+1].isdone && !vp[i+1][j][k+1].isdone && !vp[i+1][j+1][k].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k; tp[3][0]=i+1;tp[3][1]=j+1;tp[3][2]=k+1; tp[4][0]=i;tp[4][1]=j+1;tp[4][2]=k; }//4 else if(!vp[i][j][k].isdone && !vp[i][j+1][k].isdone && !vp[i+1][j+1][k+1].isdone) { //tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; //tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; //tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; //tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k+1; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k+1; tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k; tp[3][0]=i+1;tp[3][1]=j+1;tp[3][2]=k; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k+1; tp[4][0]=i+1;tp[4][1]=j;tp[4][2]=k+1; }//5 else if(!vp[i+1][j][k+1].isdone && !vp[i+1][j+1][k+1].isdone && !vp[i][j+1][k].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k+1; tp[4][0]=i;tp[4][1]=j;tp[4][2]=k; }//6 else if(!vp[i+1][j][k].isdone && !vp[i+1][j+1][k].isdone && !vp[i][j+1][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k; tp[3][0]=i+1;tp[3][1]=j+1;tp[3][2]=k+1; tp[4][0]=i;tp[4][1]=j;tp[4][2]=k+1; }//7 else if(!vp[i][j][k+1].isdone && !vp[i][j+1][k+1].isdone && !vp[i+1][j+1][k].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k+1; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k+1; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k; tp[4][0]=i+1;tp[4][1]=j;tp[4][2]=k; }//8 else if(!vp[i][j][k].isdone && !vp[i][j][k+1].isdone && !vp[i+1][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k+1; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k+1; tp[4][0]=i+1;tp[4][1]=j+1;tp[4][2]=k; }//9 else if(!vp[i+1][j+1][k].isdone && !vp[i+1][j+1][k+1].isdone && !vp[i][j][k].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k+1; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k; tp[4][0]=i;tp[4][1]=j;tp[4][2]=k+1; }//10 else if(!vp[i+1][j][k].isdone && !vp[i+1][j][k+1].isdone && !vp[i][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k+1; tp[3][0]=i;tp[3][1]=j;tp[3][2]=k+1; tp[4][0]=i;tp[4][1]=j+1;tp[4][2]=k; }//11 else if(!vp[i][j+1][k].isdone && !vp[i][j+1][k+1].isdone && !vp[i+1][j][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k+1; tp[3][0]=i+1;tp[3][1]=j+1;tp[3][2]=k+1; tp[4][0]=i+1;tp[4][1]=j;tp[4][2]=k; }//12 for(ii=0;ii<5;ii++) { if(vertseq[tp[ii][0]][tp[ii][1]][tp[ii][2]]==-1) { vertseq[tp[ii][0]][tp[ii][1]][tp[ii][2]]=vertnumber; verts[vertnumber].x=tp[ii][0]; verts[vertnumber].y=tp[ii][1]; verts[vertnumber].z=tp[ii][2]; vertnumber++; } } faces[facenumber].a=vertseq[tp[0][0]][tp[0][1]][tp[0][2]]; faces[facenumber].b=vertseq[tp[1][0]][tp[1][1]][tp[1][2]]; faces[facenumber++].c=vertseq[tp[2][0]][tp[2][1]][tp[2][2]]; faces[facenumber].a=vertseq[tp[0][0]][tp[0][1]][tp[0][2]]; faces[facenumber].b=vertseq[tp[2][0]][tp[2][1]][tp[2][2]]; faces[facenumber++].c=vertseq[tp[3][0]][tp[3][1]][tp[3][2]]; faces[facenumber].a=vertseq[tp[2][0]][tp[2][1]][tp[2][2]]; faces[facenumber].b=vertseq[tp[4][0]][tp[4][1]][tp[4][2]]; faces[facenumber++].c=vertseq[tp[3][0]][tp[3][1]][tp[3][2]]; }//no.6 12-1 else if((!vp[i][j][k].isdone && !vp[i+1][j][k].isdone && !vp[i][j+1][k+1].isdone)//1 ||(!vp[i][j+1][k].isdone && !vp[i+1][j+1][k].isdone && !vp[i+1][j][k+1].isdone)//2 ||(!vp[i][j+1][k+1].isdone && !vp[i+1][j+1][k+1].isdone && !vp[i][j][k].isdone)//3 ||(!vp[i][j][k+1].isdone && !vp[i+1][j][k+1].isdone && !vp[i][j+1][k].isdone)//4 ||(!vp[i][j][k].isdone && !vp[i][j+1][k].isdone && !vp[i+1][j][k+1].isdone)//5 ||(!vp[i+1][j][k+1].isdone && !vp[i+1][j+1][k+1].isdone && !vp[i][j][k].isdone)//6 ||(!vp[i+1][j][k].isdone && !vp[i+1][j+1][k].isdone && !vp[i][j][k+1].isdone)//7 ||(!vp[i][j][k+1].isdone && !vp[i][j+1][k+1].isdone && !vp[i+1][j][k].isdone)//8 ||(!vp[i][j][k].isdone && !vp[i][j][k+1].isdone && !vp[i+1][j+1][k].isdone)//9 ||(!vp[i+1][j+1][k].isdone && !vp[i+1][j+1][k+1].isdone && !vp[i][j][k+1].isdone)//10 ||(!vp[i+1][j][k].isdone && !vp[i+1][j][k+1].isdone && !vp[i][j+1][k].isdone)//11 ||(!vp[i][j+1][k].isdone && !vp[i][j+1][k+1].isdone && !vp[i+1][j][k].isdone)) { if(!vp[i][j][k].isdone && !vp[i+1][j][k].isdone && !vp[i][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; tp[3][0]=i+1;tp[3][1]=j;tp[3][2]=k+1; tp[4][0]=i+1;tp[4][1]=j+1;tp[4][2]=k+1; }//1 else if(!vp[i][j+1][k].isdone && !vp[i+1][j+1][k].isdone && !vp[i+1][j][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k+1; tp[4][0]=i;tp[4][1]=j;tp[4][2]=k+1; }//2 else if(!vp[i][j+1][k+1].isdone && !vp[i+1][j+1][k+1].isdone && !vp[i][j][k].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k+1; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k+1; tp[3][0]=i+1;tp[3][1]=j+1;tp[3][2]=k; tp[4][0]=i+1;tp[4][1]=j;tp[4][2]=k; }//3 else if(!vp[i][j][k+1].isdone && !vp[i+1][j][k+1].isdone && !vp[i][j+1][k].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k; tp[3][0]=i+1;tp[3][1]=j+1;tp[3][2]=k+1; tp[4][0]=i+1;tp[4][1]=j+1;tp[4][2]=k; }//4 else if(!vp[i][j][k].isdone && !vp[i][j+1][k].isdone && !vp[i+1][j][k+1].isdone) { //tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; //tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; //tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; //tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k+1; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k+1; tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k; tp[3][0]=i+1;tp[3][1]=j+1;tp[3][2]=k; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k+1; tp[4][0]=i+1;tp[4][1]=j+1;tp[4][2]=k+1; }//5 else if(!vp[i+1][j][k+1].isdone && !vp[i+1][j+1][k+1].isdone && !vp[i][j][k].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k+1; tp[4][0]=i;tp[4][1]=j+1;tp[4][2]=k; }//6 else if(!vp[i+1][j][k].isdone && !vp[i+1][j+1][k].isdone && !vp[i][j][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k; tp[3][0]=i+1;tp[3][1]=j+1;tp[3][2]=k+1; tp[4][0]=i;tp[4][1]=j+1;tp[4][2]=k+1; }//7 else if(!vp[i][j][k+1].isdone && !vp[i][j+1][k+1].isdone && !vp[i+1][j][k].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k+1; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k+1; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k; tp[4][0]=i+1;tp[4][1]=j+1;tp[4][2]=k; }//8 else if(!vp[i][j][k].isdone && !vp[i][j][k+1].isdone && !vp[i+1][j+1][k].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k+1; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k+1; tp[4][0]=i+1;tp[4][1]=j+1;tp[4][2]=k+1; }//9 else if(!vp[i+1][j+1][k].isdone && !vp[i+1][j+1][k+1].isdone && !vp[i][j][k+1].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k+1; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k; tp[4][0]=i;tp[4][1]=j;tp[4][2]=k; }//10 else if(!vp[i+1][j][k].isdone && !vp[i+1][j][k+1].isdone && !vp[i][j+1][k].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k+1; tp[3][0]=i;tp[3][1]=j;tp[3][2]=k+1; tp[4][0]=i;tp[4][1]=j+1;tp[4][2]=k+1; }//11 else if(!vp[i][j+1][k].isdone && !vp[i][j+1][k+1].isdone && !vp[i+1][j][k].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k+1; tp[3][0]=i+1;tp[3][1]=j+1;tp[3][2]=k+1; tp[4][0]=i+1;tp[4][1]=j;tp[4][2]=k+1; }//12 for(ii=0;ii<5;ii++) { if(vertseq[tp[ii][0]][tp[ii][1]][tp[ii][2]]==-1) { vertseq[tp[ii][0]][tp[ii][1]][tp[ii][2]]=vertnumber; verts[vertnumber].x=tp[ii][0]; verts[vertnumber].y=tp[ii][1]; verts[vertnumber].z=tp[ii][2]; vertnumber++; } } faces[facenumber].a=vertseq[tp[0][0]][tp[0][1]][tp[0][2]]; faces[facenumber].b=vertseq[tp[1][0]][tp[1][1]][tp[1][2]]; faces[facenumber++].c=vertseq[tp[2][0]][tp[2][1]][tp[2][2]]; faces[facenumber].a=vertseq[tp[0][0]][tp[0][1]][tp[0][2]]; faces[facenumber].b=vertseq[tp[2][0]][tp[2][1]][tp[2][2]]; faces[facenumber++].c=vertseq[tp[3][0]][tp[3][1]][tp[3][2]]; faces[facenumber].a=vertseq[tp[0][0]][tp[0][1]][tp[0][2]]; faces[facenumber].b=vertseq[tp[4][0]][tp[4][1]][tp[4][2]]; faces[facenumber++].c=vertseq[tp[1][0]][tp[1][1]][tp[1][2]]; }//no.6 12-2 }//total5 else if(sumtype==6) { if((!vp[i][j][k].isdone && !vp[i+1][j][k].isdone) ||(!vp[i][j+1][k].isdone && !vp[i+1][j+1][k].isdone) ||(!vp[i][j+1][k+1].isdone && !vp[i+1][j+1][k+1].isdone) ||(!vp[i][j][k+1].isdone && !vp[i+1][j][k+1].isdone) ||(!vp[i][j][k].isdone && !vp[i][j+1][k].isdone) ||(!vp[i+1][j][k+1].isdone && !vp[i+1][j+1][k+1].isdone) ||(!vp[i+1][j][k].isdone && !vp[i+1][j+1][k].isdone) ||(!vp[i][j][k+1].isdone && !vp[i][j+1][k+1].isdone) ||(!vp[i][j][k].isdone && !vp[i][j][k+1].isdone) ||(!vp[i+1][j+1][k].isdone && !vp[i+1][j+1][k+1].isdone) ||(!vp[i+1][j][k].isdone && !vp[i+1][j][k+1].isdone) ||(!vp[i][j+1][k].isdone && !vp[i][j+1][k+1].isdone)) { if(!vp[i][j][k].isdone && !vp[i+1][j][k].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; tp[3][0]=i+1;tp[3][1]=j;tp[3][2]=k+1; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k; }//1 else if(!vp[i][j+1][k].isdone && !vp[i+1][j+1][k].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k; tp[3][0]=i+1;tp[3][1]=j;tp[3][2]=k; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k+1; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k+1; }//2 else if(!vp[i][j+1][k+1].isdone && !vp[i+1][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k+1; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k; }//3 else if(!vp[i][j][k+1].isdone && !vp[i+1][j][k+1].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k+1; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k+1; }//4 else if(!vp[i][j][k].isdone && !vp[i][j+1][k].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k+1; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; tp[3][0]=i+1;tp[3][1]=j;tp[3][2]=k; }//5 else if(!vp[i+1][j][k+1].isdone && !vp[i+1][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k+1; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; }//6 else if(!vp[i+1][j][k].isdone && !vp[i+1][j+1][k].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k+1; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k; }//7 else if(!vp[i][j][k+1].isdone && !vp[i][j+1][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k+1; tp[3][0]=i+1;tp[3][1]=j;tp[3][2]=k+1; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k; }//8 else if(!vp[i][j][k].isdone && !vp[i][j][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k+1; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k; tp[3][0]=i+1;tp[3][1]=j;tp[3][2]=k; }//9 else if(!vp[i+1][j+1][k].isdone && !vp[i+1][j+1][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k+1; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k+1; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; }//10 else if(!vp[i+1][j][k].isdone && !vp[i+1][j][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k+1; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k; tp[3][0]=i+1;tp[3][1]=j+1;tp[3][2]=k; }//11 else if(!vp[i][j+1][k].isdone && !vp[i][j+1][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k+1; tp[3][0]=i;tp[3][1]=j;tp[3][2]=k+1; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k; }//12 for(ii=0;ii<4;ii++) { if(vertseq[tp[ii][0]][tp[ii][1]][tp[ii][2]]==-1) { vertseq[tp[ii][0]][tp[ii][1]][tp[ii][2]]=vertnumber; verts[vertnumber].x=tp[ii][0]; verts[vertnumber].y=tp[ii][1]; verts[vertnumber].z=tp[ii][2]; vertnumber++; } } faces[facenumber].a=vertseq[tp[0][0]][tp[0][1]][tp[0][2]]; faces[facenumber].b=vertseq[tp[1][0]][tp[1][1]][tp[1][2]]; faces[facenumber++].c=vertseq[tp[2][0]][tp[2][1]][tp[2][2]]; faces[facenumber].a=vertseq[tp[0][0]][tp[0][1]][tp[0][2]]; faces[facenumber].b=vertseq[tp[2][0]][tp[2][1]][tp[2][2]]; faces[facenumber++].c=vertseq[tp[3][0]][tp[3][1]][tp[3][2]]; }//no.2 12 else if((!vp[i][j][k].isdone && !vp[i+1][j+1][k+1].isdone) ||(!vp[i+1][j][k].isdone && !vp[i][j+1][k+1].isdone) ||(!vp[i][j+1][k].isdone && !vp[i+1][j][k+1].isdone) ||(!vp[i+1][j+1][k].isdone && !vp[i][j][k+1].isdone)) { if(!vp[i][j][k].isdone && !vp[i+1][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k+1; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; tp[3][0]=i;tp[3][1]=j;tp[3][2]=k+1; tp[4][0]=i;tp[4][1]=j+1;tp[4][2]=k; tp[5][0]=i+1;tp[5][1]=j;tp[5][2]=k; }//1 else if(!vp[i+1][j][k].isdone && !vp[i][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k+1; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k; tp[3][0]=i+1;tp[3][1]=j;tp[3][2]=k+1; tp[4][0]=i;tp[4][1]=j;tp[4][2]=k; tp[5][0]=i+1;tp[5][1]=j+1;tp[5][2]=k; }//2 else if(!vp[i][j+1][k].isdone && !vp[i+1][j][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k+1; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k+1; tp[4][0]=i+1;tp[4][1]=j+1;tp[4][2]=k; tp[5][0]=i;tp[5][1]=j;tp[5][2]=k; }//3 else if(!vp[i+1][j+1][k].isdone && !vp[i][j][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k+1; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k; tp[3][0]=i+1;tp[3][1]=j+1;tp[3][2]=k+1; tp[4][0]=i+1;tp[4][1]=j;tp[4][2]=k; tp[5][0]=i;tp[5][1]=j+1;tp[5][2]=k; }//4 for(ii=0;ii<6;ii++) { if(vertseq[tp[ii][0]][tp[ii][1]][tp[ii][2]]==-1) { vertseq[tp[ii][0]][tp[ii][1]][tp[ii][2]]=vertnumber; verts[vertnumber].x=tp[ii][0]; verts[vertnumber].y=tp[ii][1]; verts[vertnumber].z=tp[ii][2]; vertnumber++; } } faces[facenumber].a=vertseq[tp[0][0]][tp[0][1]][tp[0][2]]; faces[facenumber].b=vertseq[tp[1][0]][tp[1][1]][tp[1][2]]; faces[facenumber++].c=vertseq[tp[2][0]][tp[2][1]][tp[2][2]]; faces[facenumber].a=vertseq[tp[3][0]][tp[3][1]][tp[3][2]]; faces[facenumber].b=vertseq[tp[4][0]][tp[4][1]][tp[4][2]]; faces[facenumber++].c=vertseq[tp[5][0]][tp[5][1]][tp[5][2]]; }//no.4 4 else if((!vp[i][j][k].isdone && !vp[i+1][j][k+1].isdone) ||(!vp[i+1][j][k].isdone && !vp[i][j][k+1].isdone) ||(!vp[i+1][j][k].isdone && !vp[i+1][j+1][k+1].isdone) ||(!vp[i+1][j+1][k].isdone && !vp[i+1][j][k+1].isdone) ||(!vp[i+1][j+1][k].isdone && !vp[i][j+1][k+1].isdone) ||(!vp[i][j+1][k].isdone && !vp[i+1][j+1][k+1].isdone) ||(!vp[i][j+1][k].isdone && !vp[i][j][k+1].isdone) ||(!vp[i][j][k].isdone && !vp[i][j+1][k+1].isdone) ||(!vp[i][j][k+1].isdone && !vp[i+1][j+1][k+1].isdone) ||(!vp[i+1][j][k+1].isdone && !vp[i][j+1][k+1].isdone) ||(!vp[i][j][k].isdone && !vp[i+1][j+1][k].isdone) ||(!vp[i+1][j][k].isdone && !vp[i][j+1][k].isdone)) { if(!vp[i][j][k].isdone && !vp[i+1][j][k+1].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k; tp[3][0]=i+1;tp[3][1]=j+1;tp[3][2]=k+1; }//1 else if(!vp[i+1][j][k].isdone && !vp[i][j][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k+1; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k+1; tp[3][0]=i+1;tp[3][1]=j+1;tp[3][2]=k; }//2 else if(!vp[i+1][j][k].isdone && !vp[i+1][j+1][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k+1; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k+1; }//3 else if(!vp[i+1][j+1][k].isdone && !vp[i+1][j][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k+1; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k+1; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k; }//4 else if(!vp[i+1][j+1][k].isdone && !vp[i][j+1][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k+1; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; tp[3][0]=i;tp[3][1]=j;tp[3][2]=k+1; }//5 else if(!vp[i][j+1][k].isdone && !vp[i+1][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k+1; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k+1; tp[3][0]=i;tp[3][1]=j;tp[3][2]=k; }//6 else if(!vp[i][j+1][k].isdone && !vp[i][j][k+1].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k+1; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k; tp[3][0]=i+1;tp[3][1]=j;tp[3][2]=k+1; }//7 else if(!vp[i][j][k].isdone && !vp[i][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k+1; tp[3][0]=i+1;tp[3][1]=j;tp[3][2]=k; }//8 else if(!vp[i][j][k+1].isdone && !vp[i+1][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k+1; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k+1; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k; tp[3][0]=i+1;tp[3][1]=j+1;tp[3][2]=k; }//9 else if(!vp[i+1][j][k+1].isdone && !vp[i][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k+1; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; tp[3][0]=i;tp[3][1]=j+1;tp[3][2]=k; }//10 else if(!vp[i][j][k].isdone && !vp[i+1][j+1][k].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k+1; tp[3][0]=i;tp[3][1]=j;tp[3][2]=k+1; }//11 else if(!vp[i+1][j][k].isdone && !vp[i][j+1][k].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k+1; tp[3][0]=i+1;tp[3][1]=j;tp[3][2]=k+1; }//12 for(ii=0;ii<4;ii++) { if(vertseq[tp[ii][0]][tp[ii][1]][tp[ii][2]]==-1) { vertseq[tp[ii][0]][tp[ii][1]][tp[ii][2]]=vertnumber; verts[vertnumber].x=tp[ii][0]; verts[vertnumber].y=tp[ii][1]; verts[vertnumber].z=tp[ii][2]; vertnumber++; } } faces[facenumber].a=vertseq[tp[0][0]][tp[0][1]][tp[0][2]]; faces[facenumber].b=vertseq[tp[1][0]][tp[1][1]][tp[1][2]]; faces[facenumber++].c=vertseq[tp[2][0]][tp[2][1]][tp[2][2]]; faces[facenumber].a=vertseq[tp[0][0]][tp[0][1]][tp[0][2]]; faces[facenumber].b=vertseq[tp[2][0]][tp[2][1]][tp[2][2]]; faces[facenumber++].c=vertseq[tp[3][0]][tp[3][1]][tp[3][2]]; }//no.3 12 }//total6 else if(sumtype==7) { if(!vp[i][j][k].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k+1; }//1 else if(!vp[i+1][j][k].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k+1; }//2 else if(!vp[i+1][j+1][k].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k+1; }//3 else if(!vp[i][j+1][k].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k+1; }//4 else if(!vp[i][j][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j+1;tp[1][2]=k+1; tp[2][0]=i;tp[2][1]=j;tp[2][2]=k; }//5 else if(!vp[i+1][j][k+1].isdone) { tp[0][0]=i+1;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i;tp[1][1]=j;tp[1][2]=k+1; tp[2][0]=i+1;tp[2][1]=j;tp[2][2]=k; }//6 else if(!vp[i+1][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j+1;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j;tp[1][2]=k+1; tp[2][0]=i+1;tp[2][1]=j+1;tp[2][2]=k; }//7 else if(!vp[i][j+1][k+1].isdone) { tp[0][0]=i;tp[0][1]=j;tp[0][2]=k+1; tp[1][0]=i+1;tp[1][1]=j+1;tp[1][2]=k+1; tp[2][0]=i;tp[2][1]=j+1;tp[2][2]=k; }//8 for(ii=0;ii<3;ii++) { if(vertseq[tp[ii][0]][tp[ii][1]][tp[ii][2]]==-1) { vertseq[tp[ii][0]][tp[ii][1]][tp[ii][2]]=vertnumber; verts[vertnumber].x=tp[ii][0]; verts[vertnumber].y=tp[ii][1]; verts[vertnumber].z=tp[ii][2]; vertnumber++; } } faces[facenumber].a=vertseq[tp[0][0]][tp[0][1]][tp[0][2]]; faces[facenumber].b=vertseq[tp[1][0]][tp[1][1]][tp[1][2]]; faces[facenumber++].c=vertseq[tp[2][0]][tp[2][1]][tp[2][2]]; }//total7 }//every ijk }//j }//i verts=(vertinfo *)realloc(verts,vertnumber*sizeof(vertinfo)); faces=(faceinfo *)realloc(faces,facenumber*sizeof(faceinfo)); for(i=0;i 1000 #pragma once #endif // _MSC_VER > 1000 class ProteinSurface { public: ProteinSurface(); void boundbox(int seqinit,int seqterm,atom *proseq,bool atomtype,point3d *minp,point3d *maxp); point3d ptran; int boxlength; bool flagradius; double proberadius; double fixsf; double scalefactor; point3d pmin,pmax; int pheight,pwidth,plength; int widxz[13]; int *depty[13]; double cutradis; void boundingatom(bool btype); volumepixel ***vp; void initpara(int seqinit,int seqterm,atom* proseq,bool atomtype,bool btype); void fillvoxels(int seqinit,int seqterm,bool atomtype,atom* proseq,bool bcolor); void fillatom(int indx,atom* proseq,bool bcolor); void fillatomwaals(int indx,atom* proseq,bool bcolor); void fillvoxelswaals(int seqinit,int seqterm,bool atomtype,atom* proseq,bool bcolor); void fastoneshell(int* innum,int *allocout,voxel2 ***boundpoint,int* outnum, int *elimi); void fastdistancemap(int type); voxel2* inarray; voxel2* outarray; int totalsurfacevox; int totalinnervox; faceinfo *faces; vertinfo *verts; int facenumber,vertnumber; void buildboundary(); void marchingcubeinit(int stype); void marchingcubeorigin(int stype); void marchingcubeorigin2(int stype); void marchingcube(int stype); double carea,cvolume; double sarea,svolume; void calcareavolume(); void computenorm(); int ncav; double *eachcavityvolume; void cavitynumbers(); void cavitiesareavolume(); void outputcavityatoms(int seqinit,int seqterm,atom* proseq,char *filename); void surfaceinterior(); void atomsinout(int seqinit,int seqterm,atom* proseq); void outputoff(char *filename); void outputply(char *filename,atom* proseq,int ncolor,int tinout); void outsas(int numbb,boneinfo *bb,atom* proseq,char *filename); void laplaciansmooth(int numiter); void checkEuler(); void checkinoutpropa(); double *depval; int numdep; void calcdepth(int numbb,int seqinit,int seqterm,atom* proseq,boneinfo *bb,bool type);//edt virtual ~ProteinSurface(); }; #endif // !defined(AFX_PROTEINSURFACE_H__0413A5ED_33E6_4E18_A96C_CFF9B940C2CB__INCLUDED_) ./EDTSurf.cpp0000644000175000017500000003151212010611116013042 0ustar moellermoeller/*//////////////////////////////////////////////////////////////// Permission to use, copy, modify, and distribute this program for any purpose, with or without fee, is hereby granted, provided that the notices on the head, the reference information, and this copyright notice appear in all copies or substantial portions of the Software. It is provided "as is" without express or implied warranty. *//////////////////////////////////////////////////////////////// #include "CommonPara.h" #include "ParsePDB.h" #include "ProteinSurface.h" #include int main(int argc, char** argv) { ParsePDB pp; ProteinSurface pps; int inum[4]; double fnum[2]; char inname[200]; char tpname[200]; char filename[200]; bool flagopt[7]; bool bcolor; int i; clock_t remcstart, remcfinish; if(argc<3) { printf("usage: EDTSurf -i pdbname ...\n"); printf("-o outname\n"); printf("-t 1-MC 2-VCMC\n"); printf("-s 1-VWS 2-SAS 3-MS 4-SES\n"); printf("-c 1-pure 2-atom 3-chain\n"); printf("-p probe radius [0,2.0]\n"); printf("-f scale factor (0,20.0]\n"); printf("-h 1-in and out 2-out 3-in\n"); printf("output1: outname.ply\n"); printf("output2: outname.asa\n"); printf("output3: outname-cav.pdb\n"); return 0; } for(i=0;i<7;i++) { flagopt[i]=false; } //default value inum[0]=2;//1-MC 2-VCMC inum[1]=3;//1-VWS 2-SAS 3-MS 4-SES inum[2]=2;//1-pure 2-atom 3-chain inum[3]=1;//1-in and out 2-out 3-in fnum[0]=1.4;//probe radius fnum[1]=4.00;//scale factor strcpy(tpname,"out"); i=1; //set value while(i0 && tval<2.0) fnum[0]=tval; else { printf("omit wrong value after -p\n"); } i+=2; } else { printf("please set value after -p\n"); i+=1; } } else if(strcmp(argv[i],"-f")==0) { if(i+10.5 && tval<=20.0) fnum[1]=tval; else { printf("omit wrong value after -f\n"); fnum[1]=0.5; } i+=2; } else { printf("please set value after -f\n"); i+=1; } } else { printf("omit wrong option\n"); i+=1; } } if(!flagopt[0]) { int len,lpre; len=strlen(inname); lpre=len-1; while(lpre>=0 && inname[lpre]!='.' && inname[lpre]!='/' && inname[lpre]!='\\') lpre--; if(inname[lpre]=='.') lpre--; if(lpre>=0) { strncpy(tpname,inname,lpre+1); tpname[lpre+1]='\0'; } } printf("The specification is: input: %s, ",inname); if(inum[0]==1) printf("triangulation: MC, "); else printf("triangulation: VCMC, "); if(inum[1]==1) printf("surface: VWS, "); else if(inum[1]==2 || inum[1]==0) printf("surface: SAS, "); else printf("surface: MS, "); if(inum[2]==1) printf("color: pure, "); else if(inum[2]==2) printf("color: atom, "); else printf("color: chain, "); if(inum[3]==1) printf("surface: outer+inner, "); else if(inum[3]==2) printf("surface: outer, "); else printf("surface: inner, "); printf("radius: %6.3f, ",fnum[0]); printf("scale: %6.3f, ",fnum[1]); printf("outname: %s\n",tpname); printf("Load file...\n"); bcolor=true; pp.loadpdb(inname); pp.extractbb(0,-1,1); // pp.PCA(); pps.proberadius=fnum[0]; pps.fixsf=fnum[1]; remcstart=clock(); if(inum[1]==1) { printf("Initialize...\n"); pps.initpara(pp.promod[0].procha[0].chainseg.init,pp.promod[0].procha[pp.promod[0].nchain].chainseg.term,pp.proseq,false,false); printf("actual boxlength %3d, box[%3d*%3d*%3d], scale factor %6.3f\n", pps.boxlength,pps.plength,pps.pwidth,pps.pheight,pps.scalefactor); printf("Build van der Waals solid\n"); pps.fillvoxels(pp.promod[0].procha[0].chainseg.init,pp.promod[0].procha[pp.promod[0].nchain].chainseg.term,false,pp.proseq,bcolor); pps.buildboundary(); printf("Build triangulated surface\n"); if(inum[0]==1) pps.marchingcubeorigin2(1); else if(inum[0]==2) pps.marchingcube(1); } else if(inum[1]==2) { printf("Initialize...\n"); pps.initpara(pp.promod[0].procha[0].chainseg.init,pp.promod[0].procha[pp.promod[0].nchain].chainseg.term,pp.proseq,false,true); printf("actual boxlength %3d, box[%3d*%3d*%3d], scale factor %6.3f\n", pps.boxlength,pps.plength,pps.pwidth,pps.pheight,pps.scalefactor); printf("Build solvent-accessible solid\n"); pps.fillvoxels(pp.promod[0].procha[0].chainseg.init,pp.promod[0].procha[pp.promod[0].nchain].chainseg.term,false,pp.proseq,bcolor); pps.buildboundary(); printf("Build triangulated surface\n"); if(inum[0]==1) pps.marchingcubeorigin2(3); else if(inum[0]==2) pps.marchingcube(3); } else if(inum[1]==3) { printf("Initialize...\n"); pps.initpara(pp.promod[0].procha[0].chainseg.init,pp.promod[0].procha[pp.promod[0].nchain].chainseg.term,pp.proseq,true,true); printf("actual boxlength %3d, box[%3d*%3d*%3d], scale factor %6.3f\n", pps.boxlength,pps.plength,pps.pwidth,pps.pheight,pps.scalefactor); printf("Build solvent-accessible solid\n"); pps.fillvoxels(pp.promod[0].procha[0].chainseg.init,pp.promod[0].procha[pp.promod[0].nchain].chainseg.term,true,pp.proseq,bcolor); pps.buildboundary(); printf("Euclidean Distance Transform\n"); pps.fastdistancemap(0); printf("Build triangulated surface\n"); if(inum[0]==1) pps.marchingcubeorigin2(4); else if(inum[0]==2) pps.marchingcube(4); } else if(inum[1]==4) { printf("Initialize...\n"); pps.initpara(pp.promod[0].procha[0].chainseg.init,pp.promod[0].procha[pp.promod[0].nchain].chainseg.term,pp.proseq,false,true); printf("actual boxlength %3d, box[%3d*%3d*%3d], scale factor %6.3f\n", pps.boxlength,pps.plength,pps.pwidth,pps.pheight,pps.scalefactor); printf("Build solvent-accessible solid\n"); pps.fillvoxels(pp.promod[0].procha[0].chainseg.init,pp.promod[0].procha[pp.promod[0].nchain].chainseg.term,false,pp.proseq,bcolor); pps.buildboundary(); printf("Euclidean Distance Transform\n"); pps.fastdistancemap(0); printf("Build van der Waals solid\n"); pps.boundingatom(false); pps.fillvoxelswaals(pp.promod[0].procha[0].chainseg.init,pp.promod[0].procha[pp.promod[0].nchain].chainseg.term,false,pp.proseq,bcolor); printf("Build triangulated surface\n"); if(inum[0]==1) pps.marchingcubeorigin2(2); else if(inum[0]==2) pps.marchingcube(2); } else if(inum[1]==0) { printf("Initialize...\n"); pps.initpara(pp.promod[0].procha[0].chainseg.init,pp.promod[0].procha[pp.promod[0].nchain].chainseg.term,pp.proseq,true,true); printf("actual boxlength %3d, box[%3d*%3d*%3d], scale factor %6.3f\n", pps.boxlength,pps.plength,pps.pwidth,pps.pheight,pps.scalefactor); printf("Build solvent-accessible solid\n"); pps.fillvoxels(pp.promod[0].procha[0].chainseg.init,pp.promod[0].procha[pp.promod[0].nchain].chainseg.term,true,pp.proseq,bcolor); pps.buildboundary(); printf("Euclidean Distance Transform\n"); pps.fastdistancemap(1); printf("Calculate Depth\n"); pps.calcdepth(pp.numbb,pp.promod[0].procha[0].chainseg.init,pp.promod[0].procha[pp.promod[0].nchain].chainseg.term,pp.proseq,pp.bb,true); } remcfinish=clock(); double duration = (double)(remcfinish - remcstart)/CLOCKS_PER_SEC; printf("Total time %.3f seconds\n",duration); //depth if(inum[1]==0) { printf("Output atom depth and residue depth\n"); sprintf(filename,"%s_atom.dep",tpname); FILE *file; file=fopen(filename,"wt"); fprintf(file,"index atom# res# depth\n"); for(i=pp.promod[0].procha[0].chainseg.init;i<=pp.promod[0].procha[pp.promod[0].nchain].chainseg.term;i++) { fprintf(file,"%5d %5d %4d %7.3f\n",i-pp.promod[0].procha[0].chainseg.init+1,pp.proseq[i].seqno,pp.proseq[i].resno,pps.depval[i]); } fclose(file); sprintf(filename,"%s_res.dep",tpname); file=fopen(filename,"wt"); fprintf(file,"indx res# A depth\n"); for(i=0;i0) { printf("Output cavity information\n"); sprintf(filename,"%s-cav.pdb",tpname); pps.outputcavityatoms(pp.promod[0].procha[0].chainseg.init, pp.promod[0].procha[pp.promod[0].nchain].chainseg.term,pp.proseq,filename); } pps.laplaciansmooth(1); pps.computenorm(); printf("Output 3D model\n"); pps.checkinoutpropa(); sprintf(filename,"%s.ply",tpname); pps.outputply(filename,pp.proseq,inum[2]-1,inum[3]-1); if(inum[1]==2) { printf("Output residue surface area\n"); sprintf(filename,"%s.asa",tpname); pps.outsas(pp.numbb,pp.bb,pp.proseq,filename); } return 1; }