ObjParser::ObjParser(const char* baseDir, const char* objFilename) { m_baseDir = (char*)malloc(sizeof(char) * (strlen(baseDir) + 1)); strcpy(m_baseDir, baseDir); m_objFilename = (char*)malloc(sizeof(char) * (strlen(m_baseDir) + strlen(objFilename) + 1)); strcpy(m_objFilename, m_baseDir); strcat(m_objFilename, objFilename); parseObj(); parseMtl(); }
void readUserObjects(void) { FILE *fp; String atom_name, push_action, label, icon, drag_icon; char s[MAXAPPSTRINGLEN]; int i, p; usrObjects.nr = 0; usrObjects.obj = NULL; if (!(fp = fopen(resources.usrobj_file, "r"))) { if (exists(resources.usrobj_file)) error(topShell, "Cannot read object file", resources.usrobj_file); return; } for (i=0; (p = parseObj(fp, &atom_name, &push_action, &label, &icon, &drag_icon)) > 0; i++) { usrObjects.obj = (UserObjectRec *) XTREALLOC(usrObjects.obj, (i+1) * sizeof(UserObjectRec)); usrObjects.obj[i].atom_name = XtNewString(strparse(s, atom_name, "\\:")); if ((usrObjects.obj[i].atom = XmInternAtom(dpy, usrObjects.obj[i].atom_name, False)) == None) { XTFREE(usrObjects.obj[i].atom_name); error(topShell, "Couldn't initialize user defined object", atom_name); i--; } else { usrObjects.obj[i].push_action = XtNewString(strparse(s, push_action, "\\:")); usrObjects.obj[i].label = XtNewString(strparse(s, label, "\\:")); usrObjects.obj[i].icon = XtNewString(strparse(s, icon, "\\:")); usrObjects.obj[i].drag_icon = XtNewString(strparse(s, drag_icon, "\\:")); } } if (p == -1) error(topShell, "Error in objects file:", resources.usrobj_file); usrObjects.nr = i; if (fclose(fp)) sysError(topShell, "Error reading objects file:"); }
inline Val parseVal() { // Check value type switch(getC()) { case '{': return parseObj(); case '[': return parseArr(); case '"': return parseStr(); case 't': return parseBlnTrue(); case 'f': return parseBlnFalse(); case 'n': return parseNll(); } // Check if value is a number if(isNumStart(getC())) return parseNum(); throwError("Invalid value", std::string{"No match for values beginning with `"} + getC() + "`"); return Val{Nll{}}; }
int main(int argc,char *argv[] ){ uint obj_index=0; uint coords_index=0; glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA | GLUT_MULTISAMPLE | GLUT_ALPHA | GLUT_STENCIL); glutInitWindowSize(600,600); glutInitWindowPosition(100,100); glutCreateWindow("partViewer3D"); int err = glewInit(); if (GLEW_OK != err) { // problem: glewInit failed, something is seriously wrong printf("GLEW Error: %s\n", glewGetErrorString(err)); return 1; } //////////* Command line argument processing *///////////// for(uint i=0;i<argc;i++){ if(strcmp(argv[i],"-obj")==0){ obj_index=i+1; use_obj=true; break; } } for(uint i=0;i<argc;i++){ if(strcmp((argv[i]+strlen(argv[i])-4),".dat")==0){ coords_index=i; break; } } if(argc > 4){ animation=true; ani_files=argc-3; printf("ani_files:%d\n",ani_files); ani_matrix=malloc(ani_files*sizeof(*ani_matrix)); for(uint i=0;i<ani_files;i++){ ani_matrix[i]=malloc(strlen(argv[i+3])*sizeof(ani_matrix)); strcpy(ani_matrix[i], argv[i+coords_index]); } } ///////////////////////////////////////////////////////////// if(!animation) parseCoords(argv[coords_index],"\t"); else parseCoords(ani_matrix[0],"\t"); for(uint i = 0; i < nPart; i++){ particle[i].selected = 0; particle[i].hidden = 0; particle[i].solid = 0; } if(use_obj)parseObj(argv[obj_index]); init(); glutDisplayFunc(display); glutIdleFunc(idle); glutReshapeFunc(reshape); glutKeyboardFunc(keyDown); glutKeyboardUpFunc(keyUp); glutSpecialFunc(specialDown); glutSpecialUpFunc(specialUp); glutMouseFunc(onMouse); glutMotionFunc(onMotion); glutMainLoop(); return 1; }