static void process_node(Model* model, struct aiNode* node, struct aiScene* scene) { for (int i = 0; i < node->mNumMeshes; i++) { struct aiMesh* mesh = scene->mMeshes[node->mMeshes[i]]; model->meshes[node->mMeshes[i]] = process_mesh(mesh, scene); } for (int i = 0; i < node->mNumChildren; i++) { process_node(model, node->mChildren[i], scene); } }
void process_node(const aiNode* node, const aiScene* scene, std::vector<std::string>& mesh_names, std::unordered_map<std::string, GLuint>& bone_id_map, const std::string& modelname){ for(GLuint i = 0; i < node->mNumMeshes; i++) { aiMesh* mesh = scene->mMeshes[node->mMeshes[i]]; mesh_names.push_back(process_mesh(mesh, scene, bone_id_map, modelname)); } for(GLuint i = 0; i < node->mNumChildren; i++) { process_node(node->mChildren[i], scene, mesh_names, bone_id_map, modelname); } }
int convert(const char *infname) { int i, bufsz; const struct aiScene *aiscn; struct goat3d *goat; char *outfname; bufsz = output_filename(0, 0, infname, "goat3d"); outfname = alloca(bufsz); output_filename(outfname, bufsz, infname, "goat3d"); printf("converting %s -> %s\n", infname, outfname); if(!(aiscn = aiImportFile(infname, SCE_PPFLAGS))) { fprintf(stderr, "failed to import %s\n", infname); return -1; } goat = goat3d_create(); for(i=0; i<(int)aiscn->mNumMaterials; i++) { struct aiMaterial *aimat = aiscn->mMaterials[i]; struct goat3d_material *mat = goat3d_create_mtl(); process_material(mat, aimat); goat3d_add_mtl(goat, mat); } for(i=0; i<(int)aiscn->mNumMeshes; i++) { struct aiMesh *aimesh = aiscn->mMeshes[i]; struct goat3d_mesh *mesh = goat3d_create_mesh(); process_mesh(goat, mesh, aimesh); goat3d_add_mesh(goat, mesh); } for(i=0; i<(int)aiscn->mRootNode->mNumChildren; i++) { process_node(goat, 0, aiscn->mRootNode->mChildren[i]); } goat3d_save(goat, outfname); goat3d_free(goat); aiReleaseImport(aiscn); return 0; }
int ProcessMedlineArticle( DBPROCESS *db, MedArt *rec, int is_pub ) { AbPList plist; RETCODE rc; DBCHAR state_msg[40]; /* Text description of state */ DBINT state; int status; /* Clear out the input record */ bzero( rec, sizeof(MedArt) ); bzero( &plist, sizeof(plist) ); /* Get rid of all patches */ /* Collect the data from the database */ for(status = True; status != Error; rc = dbresults( db )) { /* Get the next header row from the batch and then skip to the results batch associated with the header (dbresults call) */ rc = SybaseLoad( db, 1, INTBIND, 0, &state, 2, NTBSTRINGBIND, sizeof(state_msg), state_msg, 0 ); if( rc == REG_ROW ) { /* EOF marked with MR_STATE_DONE as the state */ if( state == MR_STATE_DONE ) return( True ); /* Prepare to read the results section */ rc = dbresults(db); } if( rc != SUCCEED ) return( Error ); /* Dispatch to the handler for this block of input */ switch( state ) { case MR_STATE_ARTICLE: /* This one should be first */ if ( is_pub ) status = process_pub_article( db, rec ); else status = process_article( db, rec ); if( status != True ) return( status ); break; case MR_STATE_ISO_VTITLE: status = patch_string(db, rec->vtitle, sizeof(rec->vtitle)); break; case MR_STATE_ISO_ADDRESS: status = patch_string(db, rec->address, sizeof(rec->address)); break; case MR_STATE_AUTHOR: status = process_author( db, rec ); break; case MR_STATE_ISO_AUTHOR: status = patch_author( db, rec ); break; case MR_STATE_ISO_ABSTRACT: if( plist.n_patches > 0 ) bzero( &plist, sizeof(plist) ); status = patch_abstract( db, rec, &plist ); break; case MR_STATE_ABSTRACT: status = process_abstract( db, rec, &plist ); break; case MR_STATE_MESH: status = process_mesh( db, rec ); break; case MR_STATE_SUBHEADING: status = process_subheading( db, rec ); break; case MR_STATE_SUBSTANCE: status = process_substance( db, rec ); break; case MR_STATE_CROSSREFERENCE: status = process_xref( db, rec ); break; case MR_STATE_SUPPORT: status = process_support( db, rec ); break; case MR_STATE_GENESYMBOL: status = process_genesymbol( db, rec ); break; default: /* Unknown state - ignore it */ status = skip_undefined_section( db ); break; } } /* Return the proper status */ return( Error ); }