static bool export_list(int _iH5File, int *_piVar, char* _pstName, int _iVarType) { int iRet = 0; bool bReturn = false; int iItemNumber = 0; SciErr sciErr = getListItemNumber(pvApiCtx, _piVar, &iItemNumber); if (sciErr.iErr) { printError(&sciErr, 0); return false; } //create groupe name char* pstGroupName = createGroupName(_pstName); char pstMsg[256]; sprintf(pstMsg, "list (%d)", iItemNumber); print_type(pstMsg); iLevel++; //open list void *pvList = openList(_iH5File, pstGroupName, iItemNumber); for (int i = 0 ; i < iItemNumber ; i++) { int *piNewVar = NULL; getListItemAddress(pvApiCtx, _piVar, i + 1, &piNewVar);//1 indexed char* pstPathName = createPathName(pstGroupName, i); if (piNewVar == NULL) { //undefined item bReturn = export_undefined(_iH5File, piNewVar, pstPathName); } else { bReturn = export_data(_iH5File, piNewVar, pstPathName); } iRet = addItemInList(_iH5File, pvList, i, pstPathName); FREE(pstPathName); if (bReturn == false || iRet) { return false; } } iLevel--; closeList(_iH5File, pvList, _pstName, iItemNumber, _iVarType); FREE(pstGroupName); //close list return true; }
GLuint GLODMesh::createObject( const LODSettings& lodsettings ) { // check if object is already created assert( ( _lodGroupName == 0 ) && "LOD object has already been created!" ); // make a local copy of lod settings object _p_lodSettings = new LODSettings( lodsettings ); // first create a group createGroupName(); _lodObjectName = s_lodObject; ++s_lodObject; glodNewObject( _lodGroupName, _lodObjectName, _p_lodSettings->getMode() ); // create one single vertex array out of exsiting triangles and triangle strips osg::Vec3Array* p_vertarray = new osg::Vec3Array(); osg::IndexArray* p_indexarray = new osg::UShortArray(); osg::IndexArray* p_indices = _p_geometry->getVertexIndices(); unsigned int numPrims = _p_geometry->getNumPrimitiveSets(); { for ( unsigned int primcnt = 0; primcnt < numPrims; ++primcnt ) { osg::PrimitiveSet* p_set = _p_geometry->getPrimitiveSet( primcnt ); switch( p_set->getMode() ) { case osg::PrimitiveSet::TRIANGLES: buildObjectTrianlge( p_set, p_indices ); break; default: { log_warning << "unsupported primitive for building LOD, only TRIANGLES supported" << std::endl; continue; } } } } return _lodObjectName; }