[Plib-cvs] CVS: plib/demos/exposer/src bones.cxx,1.13,1.14 exposer.cxx,1.17,1.18 load_save.cxx,1.6,1
Brought to you by:
sjbaker
From: Steve B. <sj...@us...> - 2002-01-19 20:37:23
|
Update of /cvsroot/plib/plib/demos/exposer/src In directory usw-pr-cvs1:/tmp/cvs-serv2656/plib/demos/exposer/src Modified Files: bones.cxx exposer.cxx load_save.cxx load_save.h Log Message: Exposer will now operate in command-line mode to convert model+bones into tweened model. The SSG loader now observes the 'appstate' callback. ssgTween and ssgTweenController now include print() and getTypeName(). Significant changes to ssgaParticleSystem have taken place. Index: bones.cxx =================================================================== RCS file: /cvsroot/plib/plib/demos/exposer/src/bones.cxx,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- bones.cxx 2001/10/27 05:34:46 1.13 +++ bones.cxx 2002/01/19 20:37:20 1.14 @@ -16,8 +16,6 @@ bone = new Bone [ 1000 ] ; sgZeroVec3 ( curr_translate ) ; - - initBoneGUI () ; } @@ -42,7 +40,7 @@ hb -> setValue ( (shb == 'H') ? 0 : 1 ) ; pb -> setValue ( (spb == 'P') ? 0 : 1 ) ; rb -> setValue ( (srb == 'R') ? 0 : 1 ) ; - + hide_headingCB ( hb ) ; hide_pitchCB ( pb ) ; hide_rollCB ( rb ) ; Index: exposer.cxx =================================================================== RCS file: /cvsroot/plib/plib/demos/exposer/src/exposer.cxx,v retrieving revision 1.17 retrieving revision 1.18 diff -u -d -r1.17 -r1.18 --- exposer.cxx 2001/07/23 22:40:50 1.17 +++ exposer.cxx 2002/01/19 20:37:20 1.18 @@ -409,8 +409,11 @@ static void help () { fprintf ( stderr, "\n\n" ) ; - fprintf ( stderr, "exposer: Usage -\n\n" ) ; + fprintf ( stderr, "exposer: Interactive Usage -\n\n" ) ; fprintf ( stderr, " exposer\n" ) ; + fprintf ( stderr, " ...or...\n" ) ; + fprintf ( stderr, "exposer: Batch Tweenfile generation Usage -\n\n" ) ; + fprintf ( stderr, " exposer -f framerate modelfile bonefile tweenfile\n" ); fprintf ( stderr, "\n\n" ) ; } @@ -422,12 +425,23 @@ init_graphics () ; init_database () ; init_bones () ; + initBoneGUI () ; - loadCB ( NULL ) ; + /* Interactive? */ - glutPostRedisplay () ; - glutMainLoop () ; - return 0 ; + if ( argc <= 1 ) + { + loadCB ( NULL ) ; + + glutPostRedisplay () ; + glutMainLoop () ; + return 0 ; + } + + setTweenInterval ( 1.0f / atof ( argv [ 2 ] ) ) ; + loadFile ( argv [ 3 ], FALSE ) ; + loadBoneFile ( argv [ 4 ], FALSE ) ; + saveTweenFile ( argv [ 5 ], FALSE ) ; } Index: load_save.cxx =================================================================== RCS file: /cvsroot/plib/plib/demos/exposer/src/load_save.cxx,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- load_save.cxx 2001/07/23 22:40:50 1.6 +++ load_save.cxx 2002/01/19 20:37:21 1.7 @@ -53,7 +53,6 @@ void twsavepickfn ( puObject * ) { char path [ PUSTRING_MAX ] ; - char fname [ PUSTRING_MAX ] ; file_selector -> getValue ( path ) ; @@ -66,9 +65,19 @@ return ; } + saveTweenFile ( path, TRUE ) ; +} + + +void saveTweenFile ( char *path, int interactive ) +{ + char orig_path [ PUSTRING_MAX ] ; + char fname [ PUSTRING_MAX ] ; char *p = NULL ; int i ; + strcpy ( orig_path, path ) ; + for ( i = strlen(path) ; i >= 0 ; i-- ) if ( path[i] == '/' || path[i] == '\\' ) { @@ -92,12 +101,20 @@ /* SAVE THE TWEENED MODEL */ - if ( file_selector->getStringValue()[0] == '\0' ) + if ( orig_path[0] == '\0' ) { - puDeleteObject ( file_selector ) ; - file_selector = NULL ; - dialog ( "FAILED TO SAVE TWEENED MODEL!", 1, 0, 0 ) ; - return ; + if ( interactive ) + { + puDeleteObject ( file_selector ) ; + file_selector = NULL ; + dialog ( "FAILED TO SAVE TWEENED MODEL!", 1, 0, 0 ) ; + return ; + } + else + { + perror ( "saveTween:" ) ; + exit ( 1 ) ; + } } tweenScene = (ssgRoot *) makeTweenCopy ( skinScene ) ; @@ -111,18 +128,28 @@ makeTweenCopy ( tweenScene, skinScene ) ; } - if ( ! ssgSave ( file_selector->getStringValue(), tweenScene ) ) + if ( ! ssgSave ( orig_path, tweenScene ) ) { + if ( interactive ) + { + puDeleteObject ( file_selector ) ; + file_selector = NULL ; + dialog ( "FAILED TO SAVE TWEENED MODEL!", 1, 0, 0 ) ; + return ; + } + else + { + perror ( "saveTween:" ) ; + exit ( 1 ) ; + } + } + + if ( interactive ) + { puDeleteObject ( file_selector ) ; file_selector = NULL ; - dialog ( "FAILED TO SAVE TWEENED MODEL!", 1, 0, 0 ) ; - return ; + dialog ( "TWEENED MODEL WAS SAVED OK.", 1, 1, 0 ) ; } - - puDeleteObject ( file_selector ) ; - file_selector = NULL ; - - dialog ( "TWEENED MODEL WAS SAVED OK.", 1, 1, 0 ) ; } @@ -204,7 +231,6 @@ void bnpickfn ( puObject * ) { char path [ PUSTRING_MAX ] ; - char fname [ PUSTRING_MAX ] ; file_selector -> getValue ( path ) ; @@ -215,9 +241,18 @@ return ; } + loadBoneFile ( path, TRUE ) ; +} + +void loadBoneFile ( char *path, int interactive ) +{ + char orig_path [ PUSTRING_MAX ] ; + char fname [ PUSTRING_MAX ] ; char *p = NULL ; int i ; + strcpy ( orig_path, path ) ; + for ( i = strlen(path) ; i >= 0 ; i-- ) if ( path[i] == '/' || path[i] == '\\' ) { @@ -241,20 +276,36 @@ /* LOAD THE BONES */ - if ( file_selector->getStringValue()[0] == '\0' ) + if ( orig_path[0] == '\0' ) { - puDeleteObject ( file_selector ) ; - file_selector = NULL ; - return ; + if ( interactive ) + { + puDeleteObject ( file_selector ) ; + file_selector = NULL ; + return ; + } + else + { + perror ( "loadBones:" ) ; + exit ( 1 ) ; + } } - FILE *fd = fopen ( file_selector->getStringValue(), "ra" ) ; + FILE *fd = fopen ( orig_path, "ra" ) ; if ( fd == NULL ) { - puDeleteObject ( file_selector ) ; - file_selector = NULL ; - return ; + if ( interactive ) + { + puDeleteObject ( file_selector ) ; + file_selector = NULL ; + return ; + } + else + { + perror ( "loadBones:" ) ; + exit ( 1 ) ; + } } timebox->deleteAll () ; @@ -262,9 +313,11 @@ int numbones, numevents ; float floor_z_coord, maxtime, new_ground_speed ; - fscanf ( fd, "NUMBONES=%d NUMEVENTS=%d MAXTIME=%f Z_OFFSET=%f SPEED=%f\n", - &numbones, &numevents, - &maxtime, &floor_z_coord, &new_ground_speed ) ; + fscanf ( fd, + "NUMBONES=%d NUMEVENTS=%d MAXTIME=%f Z_OFFSET=%f SPEED=%f\n", + &numbones, &numevents, + &maxtime, &floor_z_coord, &new_ground_speed ) ; + /* Don't use the floor_z_coord from the file. */ /* ground -> setZcoord ( floor_z_coord ) ; */ @@ -275,7 +328,7 @@ if ( numbones != getNumBones () ) { fprintf ( stderr, - "Number of bones in model doesn't agree with number in bones file!\n" ) ; + "Number of bones in model (%d) doesn't agree with number in bones file (%d)!\n", getNumBones (), numbones ) ; exit ( 1 ) ; } @@ -285,8 +338,12 @@ eventList -> read ( numevents, fd ) ; fclose ( fd ) ; - puDeleteObject ( file_selector ) ; - file_selector = NULL ; + + if ( interactive ) + { + puDeleteObject ( file_selector ) ; + file_selector = NULL ; + } } @@ -344,7 +401,6 @@ void pickfn ( puObject * ) { char path [ PUSTRING_MAX ] ; - char fname [ PUSTRING_MAX ] ; file_selector -> getValue ( path ) ; @@ -362,6 +418,12 @@ return ; } + loadFile ( path, TRUE ) ; +} + +void loadFile ( char *path, int interactive ) +{ + char fname [ PUSTRING_MAX ] ; char *p = NULL ; for ( int i = strlen(path) ; i >= 0 ; i-- ) @@ -389,6 +451,8 @@ strcpy ( lastModelFileName, fname ) ; skinScene -> addKid ( ssgLoad ( fname, NULL ) ) ; + ssgFlatten ( skinScene -> getKid ( 0 ) ) ; + ssgStripify ( skinScene -> getKid ( 0 ) ) ; boneScene -> addKid ( extractBones ( skinScene ) ) ; extractVertices ( skinScene ) ; Index: load_save.h =================================================================== RCS file: /cvsroot/plib/plib/demos/exposer/src/load_save.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- load_save.h 2001/07/23 22:40:50 1.3 +++ load_save.h 2002/01/19 20:37:21 1.4 @@ -5,5 +5,9 @@ void bnsaveCB ( puObject * ) ; void twsaveCB ( puObject * ) ; +void loadFile ( char *fname, int interactive ) ; +void loadBoneFile ( char *fname, int interactive ) ; +void saveTweenFile ( char *fname, int interactive ) ; + void setTweenInterval ( float t ) ; |