#include "ldt.h"

// ----------------------------------------------------------------------------
// Description : CallBack from reading 'Edit-ModifGeometric' section
// ----------------------------------------------------------------------------


int Geometry3D::LoadModif( LDT_tdst_Link *pLink )
{
  LDT_tdeParseResult result=ParseResult_BeginSection;
  Geometry3D *p_oGeom=(Geometry3D *)LDT_GetLinkValue( pLink );
  

  p_oGeom -> m_oListOfModifiedPoints . RemoveAll();
  p_oGeom -> m_oListOfGMTModif . RemoveAll();
  p_oGeom -> m_oListOfFMDModif . RemoveAll ();


  while( result!=ParseResult_EndSection ) 
  {
  	result=LDT_GetNextEntry();
  	switch( result )
  	{
  	  case ParseResult_Entry: /* an entry */
  	  {
  	    char *szEntry=LDT_szGetEntryName();
  	    switch (*(long*)(szEntry+4))
        {
        case 'ioPd' : /* MovedPoint */
  	      {
            ACP_tdxIndex xIndex = atoi( LDT_szGetParam(1) );
            if( xIndex < GEO_xGetGeometricObjectNumberOfPoints( p_oGeom -> GetStruct() ) )
            {
                p_oGeom -> fn_vAddModification( xIndex);
            }
  	      }
  	      break;
  	      case 'etaM' : /* GameMaterial */
  	      {
            ACP_tdxHandleOfElement hElement = atoi( LDT_szGetParam( 1 ) );
			      ACP_tdxIndex xIndexInElement = 0; 

			      GMT_tdxHandleToGameMaterial hGM = NULL;
			      SCR_tdst_Link_Value *p_stValue = SCR_fnp_st_Link_SearchKey (GMT_fn_p_stGetLinkTable(), LDT_szGetParam(3));
			      if (p_stValue)
				      hGM = (GMT_tdxHandleToGameMaterial) SCR_M_ul_Link_GetValue (p_stValue);
			      if (hGM)
				      p_oGeom -> fn_vAddGMTModification( hElement, xIndexInElement, hGM );
  	      }
  	      break;
  	      case 'caFd' : /* MovedFace */
  	      {
            ACP_tdxIndex xElementIT = atoi( LDT_szGetParam( 1 ) );
            ACP_tdxIndex xIndexFaceIT = atoi( LDT_szGetParam( 2 ) );
      			ACP_tdxIndex xElementFMD = atoi( LDT_szGetParam( 3 ) );
            ACP_tdxIndex xIndexFaceFMD = atoi( LDT_szGetParam( 4 ) );

      			p_oGeom -> fn_vAddFMDModification( xElementIT, xIndexFaceIT, xElementFMD, xIndexFaceFMD);
  	      }
  	      break;
  	    }
  	  }
  	}
  }

  // form modif
  if( !p_oGeom -> m_oListOfModifiedPoints . IsEmpty() )
    p_oGeom -> fn_vSetCurrentState( C_szFormModif, FALSE );    
  // material modif
  if( !p_oGeom -> m_oListOfGMTModif . IsEmpty() )
    p_oGeom -> fn_vSetCurrentState( C_szMaterialModif,FALSE );
	if( !p_oGeom -> m_oListOfFMDModif . IsEmpty() )
    p_oGeom -> fn_vSetCurrentState( C_szFMDModif,FALSE );

  return 0;
}
