int PASCAL WinMain(HINSTANCE inst,HINSTANCE,LPSTR param,int) { int ac; static char *av[512],tmp[4096],prog[MAX_PATH]; strcpy(prog,"Unknown"); GetModuleFileNameA(inst,prog,260); strncpy(tmp,param,256); av[0]=prog; YsArguments(&ac,av+1,510,tmp); return main(ac+1,av); }
YSRESULT YsShell::MergeDat(const char fn[]) { FILE *fp; YsArray <YsShellVertexHandle> vtHdList; fp=fopen(fn,"r"); if(fp!=NULL) { char buf[4096]; YsArray <YsShellVertexHandle,64> plVtHd; while(fgets(buf,4095,fp)!=NULL) { int ac; char *av[1024]; if(YsArguments(&ac,av,1024,buf)==YSOK && ac>0) { if(av[0][0]=='v' || av[0][0]=='V') { if(ac>=4) { YsShellVertexHandle vtHd; YsVec3 pos; double x,y,z; x=atof(av[1]); y=atof(av[2]); z=atof(av[3]); pos.Set(x,y,z); vtHd=AddVertexH(pos); vtHdList.Append(vtHd); } else { goto ERREND; } } else if(av[0][0]=='f' || av[0][0]=='F') // D:Delta=Triangle { if(ac>=4) { int i; YsShellPolygonHandle plHd; plVtHd.Set(ac-1,NULL); for(i=0; i<ac-1; i++) { plVtHd[i]=vtHdList[atoi(av[i+1])]; } plHd=AddPolygonH(ac-1,vtHdList); SetColorOfPolygon(plHd,YsBlue()); } else { goto ERREND; } } } } fclose(fp); return YSOK; } ERREND: if(fp!=NULL) { fclose(fp); } return YSERR; }
YSRESULT YsShell::MergeMsh(const char fn[]) { FILE *fp; int nNod,nEl2; YsShellVertexHandle *nodVtHd; int ac; char buf[256],str[256],*av[32]; nNod=0; nEl2=0; nodVtHd=NULL; fp=fopen(fn,"r"); if(fp!=NULL) { while(fgets(str,256,fp)!=NULL) { int i; for(i=0; str[i]!=0; i++) { if(str[i]=='#') { str[i]=0; break; } } strcpy(buf,str); YsArguments(&ac,av,32,buf); if(ac>0) { if(strcmp(av[0],"nofnod")==0) { int i; nNod=atoi(av[1]); nodVtHd=new YsShellVertexHandle [nNod+1]; if(nodVtHd==NULL) { YsExceptionHandler::Exception(YsExceptionHandler::OUTOFMEMORY,"YsShell::MergeMsh()"); } for(i=0; i<nNod; i++) { nodVtHd[i]=NULL; } } else if(strcmp(av[0],"nofel2")==0) { nEl2=atoi(av[1]); } else if(strcmp(av[0],"nod")==0) { if(nodVtHd!=NULL) { int ndId; YsVec3 pos; ndId=atoi(av[1]); pos.Set(atof(av[2]),atof(av[3]),atof(av[4])); nodVtHd[ndId]=AddVertexH(pos); } else { YsErrOut("YsShell::LoadTri()\n"); YsErrOut(" nofnod didn't come before nod\n"); fclose(fp); goto ERREND; } } else if(strcmp(av[0],"el2")==0) { YsShellVertexHandle vtHd[4]; if(atoi(av[2])==3) { vtHd[0]=nodVtHd[atoi(av[3])]; vtHd[1]=nodVtHd[atoi(av[4])]; vtHd[2]=nodVtHd[atoi(av[5])]; if(vtHd[0]!=NULL && vtHd[1]!=NULL && vtHd[2]!=NULL) { AddPolygonH(3,vtHd); } } else if(atoi(av[2])==4) { vtHd[0]=nodVtHd[atoi(av[3])]; vtHd[1]=nodVtHd[atoi(av[4])]; vtHd[2]=nodVtHd[atoi(av[5])]; vtHd[3]=nodVtHd[atoi(av[6])]; if(vtHd[0]!=NULL && vtHd[1]!=NULL && vtHd[2]!=NULL && vtHd[3]!=NULL) { AddPolygonH(4,vtHd); } } else { YsErrOut("YsShell::LoadMsh()\n"); YsErrOut(" Load Error\n"); YsErrOut(" Refered to undefined node or non-tri&non-quad element\n"); fclose(fp); goto ERREND; } } } } } fclose(fp); return YSOK; ERREND: if(nodVtHd!=NULL) { delete [] nodVtHd; } return YSERR; }
YSRESULT YsShell::MergeMs3(const char fn[]) { FILE *fp; YsArray <YsShellVertexHandle> vtHdList; fp=fopen(fn,"r"); if(fp!=NULL) { char buf[256]; YsShellVertexHandle plVtHd[4]; while(fgets(buf,255,fp)!=NULL) { if('#'==buf[0]) { continue; } int ac; char *av[16]; if(YsArguments(&ac,av,16,buf)==YSOK && ac>0) { if(av[0][0]=='v' || av[0][0]=='V') { if(ac>=4) { YsShellVertexHandle vtHd; YsVec3 pos; double x,y,z; x=atof(av[1]); y=atof(av[2]); z=atof(av[3]); pos.Set(x,y,z); vtHd=AddVertexH(pos); vtHdList.Append(vtHd); } else { goto ERREND; } } else if(av[0][0]=='D' || av[0][0]=='d') // D:Delta=Triangle { if(ac>=4) { plVtHd[0]=vtHdList[atoi(av[1])]; plVtHd[1]=vtHdList[atoi(av[2])]; plVtHd[2]=vtHdList[atoi(av[3])]; SetColorOfPolygon(AddPolygonH(3,plVtHd),YsBlue()); } else { goto ERREND; } } else if(av[0][0]=='Q' || av[0][0]=='q') { if(ac>=5) { plVtHd[0]=vtHdList[atoi(av[1])]; plVtHd[1]=vtHdList[atoi(av[2])]; plVtHd[2]=vtHdList[atoi(av[3])]; plVtHd[3]=vtHdList[atoi(av[4])]; SetColorOfPolygon(AddPolygonH(4,plVtHd),YsBlue()); } else { goto ERREND; } } } } fclose(fp); return YSOK; } ERREND: if(fp!=NULL) { fclose(fp); } return YSERR; }
YSRESULT YsShell::LoadTri(const char fn[]) { FILE *fp; int nNod,nTri; YsShellVertexHandle *nodVtHd; int ac; char buf[256],str[256],*av[32]; nNod=0; nTri=0; nodVtHd=NULL; fp=fopen(fn,"r"); if(fp!=NULL) { while(fgets(str,256,fp)!=NULL) { strcpy(buf,str); YsArguments(&ac,av,32,buf); if(ac>0) { if(strcmp(av[0],"nofnod")==0) { int i; nNod=atoi(av[1]); nodVtHd=new YsShellVertexHandle [nNod+1]; if(nodVtHd==NULL) { YsExceptionHandler::Exception(YsExceptionHandler::OUTOFMEMORY,"YsShell::LoadTri()"); } for(i=0; i<nNod; i++) { nodVtHd[i]=NULL; } } else if(strcmp(av[0],"noftri")==0) { nTri=atoi(av[1]); } else if(strcmp(av[0],"nod")==0) { if(nodVtHd!=NULL) { int ndId; YsVec3 pos; ndId=atoi(av[1]); pos.Set(atof(av[2]),atof(av[3]),atof(av[4])); nodVtHd[ndId]=AddVertexH(pos); } else { YsErrOut("YsShell::LoadTri()\n"); YsErrOut(" nofnod didn't come before nod\n"); fclose(fp); goto ERREND; } } else if(strcmp(av[0],"tri")==0) { YsShellVertexHandle vtHd[3]; vtHd[0]=nodVtHd[atoi(av[2])]; vtHd[1]=nodVtHd[atoi(av[3])]; vtHd[2]=nodVtHd[atoi(av[4])]; if(vtHd[0]!=NULL && vtHd[1]!=NULL && vtHd[2]!=NULL) { AddPolygonH(3,vtHd); } else { YsErrOut("YsShell::LoadTri()\n"); YsErrOut(" Nodes must be defined before triangles.\n"); fclose(fp); goto ERREND; } } } } } fclose(fp); return YSOK; ERREND: if(nodVtHd!=NULL) { delete [] nodVtHd; } return YSERR; }