/*****************
loadCB.c
Ver 1.0

LDT version of 
visual set loading
*****************/

#include "ldt.h"


/*****************************************************************
Name: 
Description: Create callback for LDT
Author: Mircea Petrescu
Date: 6/30/98
Modified: 
*****************************************************************/
int VS_iCreateGeneral( LDT_tdst_Link *pLink )
{
  GEO_tdxHandleToVisualSet _hVisualSet;

  GEO_M_CPAMalloc(_hVisualSet ,GEO_tdstVisualSet * ,sizeof ( GEO_tdstVisualSet ) ,E_uwGEONotEnoughtMemory );


  pLink->pObject=(void *)_hVisualSet;
  return 0;
}

/*****************************************************************
Name: 
Description: Load callback for LDT
Author: Mircea Petrescu
Date: 6/30/98
Modified: 
*****************************************************************/
int VS_iLoadGeneral( LDT_tdst_Link *pLink )
{
  
  LDT_tdeParseResult result=ParseResult_BeginSection;
  GEO_tdxHandleToVisualSet _hVisualSet=( GEO_tdxHandleToVisualSet )pLink->pObject;
  ACP_tdxIndex xLodCounter;
  GEO_tdstVisualSet *p_stLocalVS=(GEO_tdstVisualSet *)_hVisualSet;
  long lNbLOD=atol( LDT_szGetParam( 1 ) );

  char sz_LongPathForLinkTable[256];
  int iLen;

  iLen=LDT_ComputeSectionName(pLink,sz_LongPathForLinkTable);
  SCR_M_v_Link_SetAdditionalLong(SCR_fnp_st_Link_SetValue(&VS_g_stLinkTable,sz_LongPathForLinkTable,(unsigned long)p_stLocalVS),1,iLen);

  GEO_M_CPAMalloc(p_stLocalVS -> d_xThresholdsTable ,MTH_tdxReal *,sizeof ( MTH_tdxReal  ) * lNbLOD,E_uwGEONotEnoughtMemory );
  GEO_M_CPAMalloc(p_stLocalVS -> d_p_stLodDefinitions ,GEO_tdstGeometricObject ** ,sizeof ( GEO_tdstGeometricObject * ) * lNbLOD,E_uwGEONotEnoughtMemory );
    
  p_stLocalVS -> xNbLodDefinitions = (ACP_tdxIndex)lNbLOD;
    
  for (xLodCounter = 0;
  xLodCounter < lNbLOD;
  xLodCounter ++)
  {
    p_stLocalVS -> d_xThresholdsTable[xLodCounter] = 0.0;
    p_stLocalVS -> d_p_stLodDefinitions[xLodCounter] = NULL;
  }


  while( result!=ParseResult_EndSection ) 
  {
  	result=LDT_GetNextEntry();
  	switch( result )
  	{
  	  case ParseResult_BeginSection: /* a subsection */
  	  {
		LDT_SetFileLong( 8, (long)_hVisualSet );
		LDT_SetFileLong( 9, (long)(atoi( LDT_szGetSectionName() )-1 ) );
		LDT_SetFileDouble( 7, (double)0.0 );
		LDT_LoadSection( NULL );
	  }
  	}
  }


  return 0;
}


/*****************************************************************
Name: 
Description: Create callback for LDT
Author: Mircea Petrescu
Date: 6/30/98
Modified: 
*****************************************************************/
int VS_iCreateLOD( LDT_tdst_Link *pLink )
{
  return 0;
}


/*****************************************************************
Name: 
Description: Load callback for LDT
Author: Mircea Petrescu
Date: 6/30/98
Modified: 
*****************************************************************/
int VS_iLoadLOD( LDT_tdst_Link *pLink )
{
  GEO_tdxHandleToVisualSet _hVisualSet=(GEO_tdxHandleToVisualSet)LDT_GetFileLong( 8 );
  ACP_tdxHandleOfObject   _hGeometricObject;
  long	l_NumberOfLOD=LDT_GetFileLong( 9 );
  MTH_tdxReal xThreshold=(MTH_tdxReal)LDT_GetFileDouble( 7 );
  LDT_tdeParseResult result=ParseResult_BeginSection;

  while( result!=ParseResult_EndSection ) 
  {
  	result=LDT_GetNextEntry();
  	switch( result )
  	{
  	  case ParseResult_Entry: /* an entry */
  	  {
  	    char *szEntry=LDT_szGetEntryName();
  	    switch (*(long*)(szEntry+6))
  	    {
  	      case 'hser' : /* LOD_Threshold */
  	      {
			xThreshold=(MTH_tdxReal)atof( LDT_szGetParam( 1 ) );
		  }
  	      break;
  	      case 'DOMr' : /* FichierMOD */
  	      {
			_hGeometricObject = GLI_pLoadGeometricInFile(LDT_szGetParam( 1 ));
			GLI_vSetVisualSetLOD(_hVisualSet,l_NumberOfLOD,xThreshold,_hGeometricObject);  	     
		  }
  	      break;
  	      case 'ILRr' : /* FichierRLI */
  	      {
			long lNumberOfTable ;
			ACP_tdxHandleToRadiosity *d_hRLI ;

			d_hRLI = GLI_vVisualSetLoadRLI ( LDT_szGetParam( 1 ), &lNumberOfTable ) ;
			GLI_vVisualSetSetRLITable(_hVisualSet, d_hRLI, lNumberOfTable) ;
  	      }
  	      break;
  	    }
  	  }
  	}
  }

  return 0;
}


/*-----------------------------------------------------------------------------
 *  Description : Used to register all script callback functions
 *-----------------------------------------------------------------------------
 *  Creation date : 05/05/97            Author : Sebastien DAVID (Gïzmo)
 *-----------------------------------------------------------------------------*/
void VS_fn_vRegisterAllScriptSections(void)
{
	LDT_RegisterType( C_Section_VSGeneral, VS_iCreateGeneral, VS_iLoadGeneral, LDT_REG_SECTION );
	LDT_RegisterType( C_SubSection_LOD, VS_iCreateLOD, VS_iLoadLOD, LDT_REG_SECTION );
}
