/** * @file RSPModel.c * @date 18/01/2023 * @author JackCarterSmith * @copyright GPL-v3.0 * @brief HOB model parser and export to Waveform OBJ format. * */ #if defined(RSPMODEL_DLL) #define RSPMODEL_DLLBUILD #endif #include #include #include #include "config.h" #include "RSPModel_errordefs.h" #include "RSPModel_datatypes.h" #include "hob_parser.h" #include "RSPModel.h" inline char* RSPModel_getVersion( void ) { return PRG_VERSION; } unsigned short RSPModel_processHOBFile( T_RSPMODEL_HOB* hob, const char* const filePath, const RSPMODEL_PARAMETERS params ) { unsigned short result = RSPLIB_SUCCESS; MEMFILE pMemFile = NULL; if ( hob == NULL || filePath == NULL ) return RSPLIB_ERROR_ARGS_NULL; RSP_ModelLib_LoadHOBFile(&pMemFile, filePath, ¶ms); result = RSP_ModelLib_ProcessHOBMemFile(hob, pMemFile, ¶ms); RSP_ModelLib_FreeHOBFile(&pMemFile); return result; } unsigned short RSPModel_processHOBFileMemory( T_RSPMODEL_HOB* hob, const void* const memFilePtr, const long memFileSize, const RSPMODEL_PARAMETERS params ) { unsigned short result = RSPLIB_SUCCESS; if ( hob == NULL || memFilePtr == NULL ) return RSPLIB_ERROR_ARGS_NULL; result = RSP_ModelLib_ProcessHOBMemFile(hob, (MEMFILE)memFilePtr, ¶ms); return result; } void RSPModel_freeHOB( T_RSPMODEL_HOB* hobStruct ) { int i,j; if (hobStruct == NULL) return; if (hobStruct->objects) { for ( i=0; iobj_count; i++ ) { if (hobStruct->objects[i].object_parts) { for ( j=0; jobjects[i].object_part_count; j++ ) { if (hobStruct->objects[i].object_parts[j].faces) free(hobStruct->objects[i].object_parts[j].faces); if (hobStruct->objects[i].object_parts[j].vertices) free(hobStruct->objects[i].object_parts[j].vertices); } free(hobStruct->objects[i].object_parts); } } free(hobStruct->objects); } } /* ------------------------------------------------------------------------- */ unsigned int RSPModel_getHOBFileObjCount( const char* const filePath ) { unsigned int result = 0; MEMFILE pMemFile = NULL; if (filePath != NULL) { RSP_ModelLib_LoadHOBFile(&pMemFile, filePath, 0); result = RSP_ModelLib_getObjectsCount(pMemFile); RSP_ModelLib_FreeHOBFile(&pMemFile); } return result; } unsigned int RSPModel_getHOBFileMemObjCount( const void* const memFilePtr ) { return RSP_ModelLib_getObjectsCount((MEMFILE)memFilePtr); } /* ------------------------------------------------------------------------- */ unsigned short RSPModel_objectToGL( const T_RSPMODEL_OBJECT* objStruct, void* glObj ) { #ifndef GL_SUPPORT return RSPLIB_ERROR_MOD_DISABLED; #endif return RSPLIB_SUCCESS; } unsigned short RSPModel_objectToD3D( const T_RSPMODEL_OBJECT* objStruct, void* D3DObj ) { #ifndef D3D_SUPPORT return RSPLIB_ERROR_MOD_DISABLED; #endif return RSPLIB_SUCCESS; }