#ifdef USE_MODEL #include "Gview.H" #include "partiview.H" #include "partiviewc.h" #include <string.h> #include "specks.h" #include "cat_model.h" #include "cat_modelutil.h" #include "findfile.h" extern "C" { extern void parti_model_init(); } void cat_model_render( struct stuff *st, struct mesh *m ) { /* Load default color, just in case it's needed */ if(st->coloredby == CONSTVAL) { struct valdesc *vd = &st->vdesc[st->curdata][CONSTVAL]; glColor4f( vd->cmin, vd->cmax, vd->mean, st->alpha ); } else { glColor4f( 1,1,1,st->alpha ); } ((WavObj *)(m->wavobj))->render(); } int parti_model_read( struct stuff **stp, int argc, char *argv[], char *fromfname, void * ) { if(argc < 1 || strcmp(argv[0], "mayaobj")) return 0; struct stuff *st = *stp; int timestep = st->datatime; struct mesh *m = NewN( struct mesh, 1 ); char *scenename = NULL; memset(m, 0, sizeof(*m)); m->type = MODEL; m->style = S_SOLID; int i; for(i = 1; i+1 < argc; i += 2) { if(!strncmp(argv[i], "-time", 3)) { timestep = atoi(argv[i+1]); } else if(!strcmp(argv[i], "-static")) { timestep = -1; i--; } else if(!strncmp(argv[i], "-c", 2)) { sscanf(argv[i+1], "%d", &m->cindex); } else if(!strcmp(argv[i], "-scene")) { scenename = argv[i+1]; } else { break; } } if(i+1 != argc) { msg("%s: expected [-scene scenename.ma] objmodel.obj", fromfname); Free(m); return 1; } char *modelfname = findfile( fromfname, argv[i] ); if(modelfname == NULL) { msg("%s: %s: can't find model file", fromfname, argv[i]); Free(m); return 1; } char *modelname = argv[i]; int namelen = strlen(modelfname); if(scenename == NULL) { scenename = NewA( char, namelen + 7 ); strcpy(scenename, modelfname); strcpy( strcmp(modelfname+namelen-4, ".obj") == 0 ? scenename+namelen-4 : scenename+namelen, ".scene" ); } m->objrender = cat_model_render; if( WavObj::readFile( modelname, modelfname, scenename, 1 ) ) { m->wavobj = WavObj::find( modelname ); } if(m->wavobj == NULL) { Free(m); return 1; } if(timestep >= 0) { if(timestep >= st->ntimes) specks_timespecksptr( st, st->curdata, timestep ); m->next = st->meshes[st->curdata][timestep]; st->meshes[st->curdata][timestep] = m; } else { m->next = st->staticmeshes; st->staticmeshes = m; } return 1; } void parti_model_init() { Model::preinit(); parti_add_reader( parti_model_read, "mayaobj", NULL ); } #endif /*USE_MODEL*/