Code:
extern DllExport int GetStationCurveData( UF_KF_value_t *in, int num, UF_KF_value_t *out )
{
void getvalue( SPOT spot, char *spot_str, char *instance, float *val );
char *GDSVolumeName = NULL;
char *regionName = NULL;
char *geomName = NULL;
char geomLocation[ GDS_LOCATION_SIZE ] = "";
char msg[256]="";
float STAN_val[256];
int retVal = 0;
int i,x;
int n=0;
int maxNbr = 0;
int no=0;
int maxNbr_R = 0;
int maxNbr_Z= 0;
//int nbr = 0;
int arraysize;
int numPoints = 0;
//int mode = -1;
int numPoints_R =0;
int numPoints_Z =0;
////////////////////////////////////////////////////////////////////////////////////////////////////
// strcture for storing "R" & "Z" values for corrusponding stations //
// :Rajesh Gavali //
////////////////////////////////////////////////////////////////////////////////////////////////////
struct StaData
{
float RVAL[256];
float ZVAL[256];
};
struct StaData ST1[256];
SPOT iSPOT = NULL;
/////////////////////////////////////////////////////
// KF DATA //
/////////////////////////////////////////////////////
UF_KF_value_p_t ST_kf_value;
UF_KF_value_p_t R_kf_value;
UF_KF_value_p_t Z_kf_value;
UF_KF_value_p_t nos_kf_value;
UF_KF_value_p_t noZ_kf_value;
UF_KF_value_p_t Station_List_value;
UF_KF_value_p_t point = NULL;
UF_KF_value_p_t listValue = NULL;
UF_KF_list_p_t list = NULL;
UF_KF_list_p_t Station_Name_list = NULL;
UF_KF_list_p_t R_Val_list = NULL;
UF_KF_list_p_t Z_Val_list = NULL;
//////////////////////////////////////////////////////////
if(num==1)
{
PrintToInfoWindow( "\nInputs are correct!\n");
}
else
{
PrintToInfoWindow( "\nInputs are incorrect!\n");
}
retVal = UF_initialize();
if( retVal )
{
PrintToInfoWindow("Failed\n");
sprintf( infoMsg, "UF_initialize() failed\n" );
ReturnBadList( out );
return -1;
}
UF_KF_ask_string( in[0], &GDSVolumeName );
retVal = OpenGDS( GDSVolumeName );
if( retVal )
{
PrintToInfoWindow("Failed\n");
sprintf( infoMsg, "to open GDS Volume\n" );
ReturnBadList( out );
UF_terminate();
return -1;
}
if( GDSSpot == NULL )
{
PrintToInfoWindow("Failed\n");
sprintf( infoMsg, "SPOT is not set to GDS Volume\n" );
PrintToInfoWindow( infoMsg );
ReturnBadList( out );
UF_terminate();
return -1;
}
iSPOT = GDSSpot;
sprintf( geomLocation, "Cafmix.Cafd.Rec1" );
retVal = idsspot_set( &iSPOT, geomLocation, strlen( geomLocation ) );
if(retVal)
{
PrintToInfoWindow("cant set spot to Cafmix.Cafd.Rec1");
}
numPoints = ids_getnbr( &iSPOT, "STAN", strlen("STAN "));
if( numPoints <= 0 )
{
PrintToInfoWindow("Failed\n");
PrintToInfoWindow("Failed to get No. of Control points\n");
ReturnBadList( out );
UF_terminate();
return -1;
}
maxNbr = numPoints;
////////////////////////////////////////////////////////////////////////////////////////////////////
// we are getting corresponding "STATION NUMBERS" from this function //
// :Rajesh Gavali //
////////////////////////////////////////////////////////////////////////////////////////////////////
x=ids_getreal(&iSPOT,"STAN",&nbr,STAN_val,&maxNbr,strlen("STAN" ));
if(x)
{
PrintToInfoWindow( "not getting array data" );
}
sprintf( infoMsg, "\nstation numbers are :\n");
PrintToInfoWindow( infoMsg );
for(arraysize=0;arraysize<maxNbr;arraysize++)
{
sprintf( infoMsg, " \n%d]%f\n",arraysize,STAN_val[arraysize]);
PrintToInfoWindow( infoMsg );
}
////////////////////////////////////////////////////////////////////////////////////////////////////
// From this loop we are getting corresponding "R" values for each station curves //
// :Rajesh Gavali //
////////////////////////////////////////////////////////////////////////////////////////////////////
sprintf(geomLocation,":Cafmix.Cafd.Sta<%f>",STAN_val[0]);
retVal = idsspot_set( &iSPOT, geomLocation, strlen( geomLocation ) );
if(retVal)
{
PrintToInfoWindow("cant set spot to Cafmix.Cafd.Rec1");
}
maxNbr_R = ids_getnbr(&iSPOT, "R", strlen("R "));
if( maxNbr_R <= 0 )
{
PrintToInfoWindow("Failed\n");
PrintToInfoWindow("Failed to get No. of Control points\n");
ReturnBadList( out );
UF_terminate();
return -1;
}else
{
sprintf(geomLocation,"\nNO. OF R VALUES=%d\n",maxNbr_R);
PrintToInfoWindow(geomLocation);
}
sprintf( infoMsg, "\nR values are :\n");
PrintToInfoWindow( infoMsg );
for(arraysize=0;arraysize<maxNbr;arraysize++)
{
sprintf(geomLocation,":Cafmix.Cafd.Sta<%f>.R",STAN_val[arraysize]);
PrintToInfoWindow(geomLocation);
retVal = ids_getreal(&iSPOT ,geomLocation,&nbr,ST1[arraysize].RVAL,&maxNbr_R,strlen( geomLocation ));
for( i=0;i< maxNbr_R;i++)
{
sprintf( infoMsg, "\n%d]%f\n",i,ST1[arraysize].RVAL[i]);
PrintToInfoWindow( infoMsg );
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
// From this loop we are getting corresponding "Z" values for each station curves //
// :Rajesh Gavali //
////////////////////////////////////////////////////////////////////////////////////////////////////
sprintf(geomLocation,":Cafmix.Cafd.Sta<%f>",STAN_val[0]);
retVal = idsspot_set( &iSPOT, geomLocation, strlen( geomLocation ) );
if(retVal)
{
PrintToInfoWindow("cant set spot to Cafmix.Cafd.Rec1");
}
maxNbr_Z = ids_getnbr(&iSPOT, "Z", strlen("Z"));
if( maxNbr_Z <= 0 )
{
PrintToInfoWindow("Failed\n");
PrintToInfoWindow("Failed to get No. of Control points\n");
ReturnBadList( out );
UF_terminate();
return -1;
}else
{
sprintf(geomLocation,"\nNO. OF Z VALUES=%d\n",maxNbr_Z);
PrintToInfoWindow(geomLocation);
}
sprintf( infoMsg, "\nZ values are :\n");
PrintToInfoWindow( infoMsg );
for(arraysize=0;arraysize<maxNbr;arraysize++)
{
sprintf(geomLocation,":Cafmix.Cafd.Sta<%f>.Z",STAN_val[arraysize]);
PrintToInfoWindow(geomLocation);
retVal = ids_getreal(&iSPOT ,geomLocation,&nbr,ST1[arraysize].ZVAL,&maxNbr_Z,strlen( geomLocation ));
for( i=0;i<maxNbr_Z ;i++)
{
sprintf( infoMsg, "\n%d]%f\n",i,ST1[arraysize].ZVAL[i]);
PrintToInfoWindow( infoMsg );
}
}
for(arraysize=0;arraysize<maxNbr;arraysize++)
{
UF_KF_make_number (STAN_val[arraysize],&ST_kf_value );
UF_KF_list_push(list ,ST_kf_value, &list );
}
for(arraysize=0;arraysize<maxNbr;arraysize++)
{
for( i=0;i<maxNbr_R ;i++)
{
UF_KF_make_number (ST1[arraysize].RVAL[i],& R_kf_value);
UF_KF_list_push( list , R_kf_value, &list );
}
for( i=0;i<maxNbr_Z;i++)
{
UF_KF_make_number (ST1[arraysize].ZVAL[i],& Z_kf_value);
UF_KF_list_push(list,Z_kf_value,&list);
}
}
UF_KF_make_number (maxNbr,& nos_kf_value);
UF_KF_list_push(list, nos_kf_value,&list);
UF_KF_make_number (maxNbr_Z,&noZ_kf_value);
UF_KF_list_push(list,noZ_kf_value,&list);
UF_KF_make_list(list,out);
CloseGDS();
//free();
return 0;
}