//--------------------------------------------------------- bool CGrid_Invert::On_Execute(void) { CSG_Grid *pGrid = Parameters("INVERSE")->asGrid(); if( pGrid == NULL ) { pGrid = Parameters("GRID")->asGrid(); } else if( pGrid != Parameters("GRID")->asGrid() ) { pGrid->Create(*Parameters("GRID")->asGrid()); pGrid->Fmt_Name("%s [%s]", pGrid->Get_Name(), _TL("Inverse")); } //----------------------------------------------------- double zMin = pGrid->Get_Min(); double zMax = pGrid->Get_Max(); for(int y=0; y<Get_NY() && SG_UI_Process_Set_Progress(y, Get_NY()); y++) { #pragma omp parallel for for(int x=0; x<Get_NX(); x++) { if( !pGrid->is_NoData(x, y) ) { pGrid->Set_Value(x, y, zMax - (pGrid->asDouble(x, y) - zMin)); } } } //----------------------------------------------------- if( pGrid == Parameters("GRID")->asGrid() ) { DataObject_Update(pGrid); } return( true ); }
//--------------------------------------------------------- bool CSurfer_Export::On_Execute(void) { const char ID_BINARY[] = "DSBB"; FILE *Stream; CSG_Grid *pGrid = Parameters("GRID")->asGrid(); CSG_String File = Parameters("FILE")->asString(); bool bNoData = Parameters("NODATA")->asBool(); switch( Parameters("FORMAT")->asInt() ) { //----------------------------------------------------- case 0: // Surfer 6 - Binary... if( (Stream = fopen(File.b_str(), "wb")) != NULL ) { short sValue; double dValue; fwrite(ID_BINARY, 4, sizeof(char), Stream); sValue = (short)pGrid->Get_NX (); fwrite(&sValue, 1, sizeof(short ), Stream); sValue = (short)pGrid->Get_NY (); fwrite(&sValue, 1, sizeof(short ), Stream); dValue = pGrid->Get_XMin(); fwrite(&dValue, 1, sizeof(double), Stream); dValue = pGrid->Get_XMax(); fwrite(&dValue, 1, sizeof(double), Stream); dValue = pGrid->Get_YMin(); fwrite(&dValue, 1, sizeof(double), Stream); dValue = pGrid->Get_YMax(); fwrite(&dValue, 1, sizeof(double), Stream); dValue = pGrid->Get_Min (); fwrite(&dValue, 1, sizeof(double), Stream); dValue = pGrid->Get_Max (); fwrite(&dValue, 1, sizeof(double), Stream); //--------------------------------------------- float *fLine = (float *)SG_Malloc(pGrid->Get_NX() * sizeof(float)); for(int y=0; y<pGrid->Get_NY() && Set_Progress(y, pGrid->Get_NY()); y++) { for(int x=0; x<pGrid->Get_NX(); x++) { fLine[x] = bNoData && pGrid->is_NoData(x, y) ? NODATAVALUE : pGrid->asFloat(x, y); } fwrite(fLine, pGrid->Get_NX(), sizeof(float), Stream); } SG_Free(fLine); fclose(Stream); return( true ); } break; //----------------------------------------------------- case 1: // Surfer - ASCII... if( (Stream = fopen(File.b_str(), "w")) != NULL ) { fprintf(Stream, "DSAA\n"); fprintf(Stream, "%d %d\n", pGrid->Get_NX (), pGrid->Get_NY ()); fprintf(Stream, "%f %f\n", pGrid->Get_XMin(), pGrid->Get_XMax()); fprintf(Stream, "%f %f\n", pGrid->Get_YMin(), pGrid->Get_YMax()); fprintf(Stream, "%f %f\n", pGrid->Get_Min (), pGrid->Get_Max ()); //--------------------------------------------- for(int y=0; y<pGrid->Get_NY() && Set_Progress(y, pGrid->Get_NY()); y++) { for(int x=0; x<pGrid->Get_NX(); x++) { fprintf(Stream, "%f ", bNoData && pGrid->is_NoData(x, y) ? NODATAVALUE : pGrid->asFloat(x, y)); } fprintf(Stream, "\n"); } fclose(Stream); return( true ); } break; } //----------------------------------------------------- return( false ); }