//--------------------------------------------------------- bool CPit_Eliminator::Dig_Channels(void) { bool bPit; int x, y, i, ix, iy; double z; for(y=0; y<Get_NY() && Set_Progress(y); y++) { for(x=0; x<Get_NX(); x++) { z = pDTM->asDouble(x, y); for(i=0, bPit=true; i<8 && bPit; i++) { ix = Get_xTo(i, x); iy = Get_yTo(i, y); if( !is_InGrid(ix, iy) || z > pDTM->asDouble(ix, iy) ) { bPit = false; } } if( bPit ) { Dig_Channel(x, y); } } } return( is_Progress() ); }
//--------------------------------------------------------- bool CSG_Module_Grid::Set_Progress_NCells(int iCell) { if( Get_System()->is_Valid() && (Get_System()->Get_NCells() <= 100 || !(iCell % (Get_System()->Get_NCells() / 100))) ) { return( CSG_Module::Set_Progress(iCell, Get_System()->Get_NCells()) ); } return( is_Progress() ); }
//--------------------------------------------------------- bool CSG_Module_Grid::Set_Progress_NCells(sLong iCell) { if( Get_System()->is_Valid() ) { return( CSG_Module::Set_Progress((double)iCell, (double)Get_System()->Get_NCells()) ); } return( is_Progress() ); }
//--------------------------------------------------------- bool CLife::On_Execute(void) { //----------------------------------------------------- m_pLife = m_Grid_Target.Get_Grid("LIFE", SG_DATATYPE_Byte); if( !m_pLife ) { Error_Set(_TL("could not create target grid")); return( false ); } //----------------------------------------------------- m_nColors = Parameters("FADECOLOR")->asInt(); for(int y=0; y<m_pLife->Get_NY(); y++) { for(int x=0; x<m_pLife->Get_NX(); x++) { m_pLife->Set_Value(x, y, CSG_Random::Get_Uniform(0, 100) < 50 ? 0 : m_nColors); } } //----------------------------------------------------- m_pLife->Set_Name(_TL("Conway's Game of Life")); m_pLife->Set_NoData_Value(-1); DataObject_Add (m_pLife); DataObject_Set_Colors(m_pLife, 11, SG_COLORS_WHITE_BLUE); DataObject_Update (m_pLife, 0, m_nColors, SG_UI_DATAOBJECT_SHOW); //----------------------------------------------------- int i; m_Count.Create(m_pLife->Get_System(), SG_DATATYPE_Byte); for(i=1; Process_Get_Okay(true) && Next_Cycle(i > m_nColors); i++) { Process_Set_Text(CSG_String::Format("%s: %d", _TL("Life Cycle"), i)); DataObject_Update(m_pLife, 0, m_nColors); } m_Count.Destroy(); //----------------------------------------------------- if( is_Progress() ) { Message_Add(CSG_String::Format("\n%s %d %s\n", _TL("Dead after"), i, _TL("Life Cycles")), false); } return( true ); }
//--------------------------------------------------------- bool CPit_Eliminator::Fill_Sinks(void) { int x, y; for(y=0; y<Get_NY() && Set_Progress(y); y++) { for(x=0; x<Get_NX(); x++) { Fill_Check(x, y); } } return( is_Progress() ); }
//--------------------------------------------------------- bool CGeoref_Grid::Get_Target_Extent(CSG_Rect &Extent, bool bEdge) { if( Parameters("METHOD")->asInt() == GEOREF_Triangulation ) // triangulation { return( m_Engine.Get_Reference_Extent(Extent) ); } //----------------------------------------------------- CSG_Grid *pGrid = Parameters("GRID")->asGrid(); Extent.m_rect.xMin = Extent.m_rect.yMin = 1.0; Extent.m_rect.xMax = Extent.m_rect.yMax = 0.0; //----------------------------------------------------- if( bEdge ) { for(int y=0; y<pGrid->Get_NY(); y++) { Add_Target_Extent(Extent, pGrid->Get_XMin(), pGrid->Get_System().Get_yGrid_to_World(y)); Add_Target_Extent(Extent, pGrid->Get_XMax(), pGrid->Get_System().Get_yGrid_to_World(y)); } for(int x=0; x<pGrid->Get_NX(); x++) { Add_Target_Extent(Extent, pGrid->Get_System().Get_xGrid_to_World(x), pGrid->Get_YMin()); Add_Target_Extent(Extent, pGrid->Get_System().Get_xGrid_to_World(x), pGrid->Get_YMax()); } } //----------------------------------------------------- else { for(int y=0; y<pGrid->Get_NY() && Set_Progress(y, pGrid->Get_NY()); y++) { for(int x=0; x<pGrid->Get_NX(); x++) { if( !pGrid->is_NoData(x, y) ) { TSG_Point p = pGrid->Get_System().Get_Grid_to_World(x, y); Add_Target_Extent(Extent, p.x, p.y); } } } } return( is_Progress() && Extent.Get_XRange() > 0.0 && Extent.Get_YRange() > 0.0 ); }
//--------------------------------------------------------- bool CGEOTRANS_Grid::Get_Target_Extent(CSG_Grid *pSource, TSG_Rect &Extent, bool bEdge) { if( !pSource ) { return( false ); } int x, y; Extent.xMin = Extent.yMin = 1.0; Extent.xMax = Extent.yMax = 0.0; if( bEdge ) { double d; for(y=0, d=pSource->Get_YMin(); y<pSource->Get_NY(); y++, d+=pSource->Get_Cellsize()) { Get_MinMax(Extent, pSource->Get_XMin(), d); Get_MinMax(Extent, pSource->Get_XMax(), d); } for(x=0, d=pSource->Get_XMin(); x<pSource->Get_NX(); x++, d+=pSource->Get_Cellsize()) { Get_MinMax(Extent, d, pSource->Get_YMin()); Get_MinMax(Extent, d, pSource->Get_YMax()); } } else { TSG_Point p; for(y=0, p.y=pSource->Get_YMin(); y<pSource->Get_NY() && Set_Progress(y, pSource->Get_NY()); y++, p.y+=pSource->Get_Cellsize()) { for(x=0, p.x=pSource->Get_XMin(); x<pSource->Get_NX(); x++, p.x+=pSource->Get_Cellsize()) { if( !pSource->is_NoData(x, y) ) { Get_MinMax(Extent, p.x, p.y); } } } } return( is_Progress() && Extent.xMin < Extent.xMax && Extent.yMin < Extent.yMax ); }
//--------------------------------------------------------- bool CCRS_Transform_Grid::Get_Target_System(const CSG_Grid_System &System, bool bEdge) { int x, y, Resolution; TSG_Rect Extent; Extent.xMin = Extent.yMin = 1.0; Extent.xMax = Extent.yMax = 0.0; Get_MinMax(Extent, System.Get_XMin(), System.Get_YMin()); Get_MinMax(Extent, System.Get_XMax(), System.Get_YMin()); Get_MinMax(Extent, System.Get_XMin(), System.Get_YMax()); Get_MinMax(Extent, System.Get_XMax(), System.Get_YMax()); Resolution = 256; switch( 1 ) { case 1: // edges { double d; int yStep = 1 + System.Get_NY() / Resolution; for(y=0, d=System.Get_YMin(); y<System.Get_NY(); y+=yStep, d+=yStep*System.Get_Cellsize()) { Get_MinMax(Extent, System.Get_XMin(), d); Get_MinMax(Extent, System.Get_XMax(), d); } int xStep = 1 + System.Get_NX() / Resolution; for(x=0, d=System.Get_XMin(); x<System.Get_NX(); x+=xStep, d+=xStep*System.Get_Cellsize()) { Get_MinMax(Extent, d, System.Get_YMin()); Get_MinMax(Extent, d, System.Get_YMax()); } } break; case 2: // all cells { TSG_Point p; int xStep = 1 + System.Get_NX() / Resolution; int yStep = 1 + System.Get_NY() / Resolution; for(y=0, p.y=System.Get_YMin(); y<System.Get_NY() && Set_Progress(y, System.Get_NY()); y+=yStep, p.y+=yStep*System.Get_Cellsize()) { for(x=0, p.x=System.Get_XMin(); x<System.Get_NX(); x+=xStep, p.x+=xStep*System.Get_Cellsize()) { Get_MinMax(Extent, p.x, p.y); } } } break; } return( is_Progress() && Extent.xMin < Extent.xMax && Extent.yMin < Extent.yMax && m_Grid_Target.Init_User(Extent, System.Get_NY()) && Dlg_Parameters("GET_USER") ); }
//--------------------------------------------------------- bool CPROJ4_Grid::Get_Target_Extent(CSG_Grid *pSource, TSG_Rect &Extent) { if( !pSource ) { return( false ); } int x, y, Resolution; Resolution = 256; Extent.xMin = Extent.yMin = 1.0; Extent.xMax = Extent.yMax = 0.0; switch( 1 ) { case 0: // corners { Get_MinMax(Extent, pSource->Get_XMin(), pSource->Get_YMin()); Get_MinMax(Extent, pSource->Get_XMax(), pSource->Get_YMin()); Get_MinMax(Extent, pSource->Get_XMin(), pSource->Get_YMax()); Get_MinMax(Extent, pSource->Get_XMax(), pSource->Get_YMax()); } break; case 1: // edges { double d; int yStep = 1 + pSource->Get_NY() / Resolution; for(y=0, d=pSource->Get_YMin(); y<pSource->Get_NY(); y+=yStep, d+=yStep*pSource->Get_Cellsize()) { Get_MinMax(Extent, pSource->Get_XMin(), d); Get_MinMax(Extent, pSource->Get_XMax(), d); } int xStep = 1 + pSource->Get_NX() / Resolution; for(x=0, d=pSource->Get_XMin(); x<pSource->Get_NX(); x+=xStep, d+=xStep*pSource->Get_Cellsize()) { Get_MinMax(Extent, d, pSource->Get_YMin()); Get_MinMax(Extent, d, pSource->Get_YMax()); } } break; case 2: // all cells { TSG_Point p; int xStep = 1 + pSource->Get_NX() / Resolution; int yStep = 1 + pSource->Get_NY() / Resolution; for(y=0, p.y=pSource->Get_YMin(); y<pSource->Get_NY() && Set_Progress(y, pSource->Get_NY()); y+=yStep, p.y+=yStep*pSource->Get_Cellsize()) { for(x=0, p.x=pSource->Get_XMin(); x<pSource->Get_NX(); x+=xStep, p.x+=xStep*pSource->Get_Cellsize()) { if( !pSource->is_NoData(x, y) ) { Get_MinMax(Extent, p.x, p.y); } } } } break; } return( is_Progress() && Extent.xMin < Extent.xMax && Extent.yMin < Extent.yMax ); }
//--------------------------------------------------------- bool CWator::On_Execute(void) { //----------------------------------------------------- m_pWator = m_Grid_Target.Get_Grid("GRID", SG_DATATYPE_Byte); if( !m_pWator ) { Error_Set(_TL("could not create target grid")); return( false ); } //----------------------------------------------------- m_pWator->Set_Name(_TL("Wa-Tor")); m_pWator->Set_NoData_Value(-1); CSG_Colors Colors(3); Colors.Set_Color(0, SG_COLOR_BLACK); Colors.Set_Color(1, SG_COLOR_GREEN); Colors.Set_Color(2, SG_COLOR_RED ); DataObject_Add (m_pWator); DataObject_Set_Colors(m_pWator, Colors); DataObject_Update (m_pWator, 0, 2, SG_UI_DATAOBJECT_SHOW); //----------------------------------------------------- if( Parameters("REFRESH")->asBool() ) { double Fish_perc = Parameters("INIT_FISH" )->asDouble(); double Shark_perc = Parameters("INIT_SHARK")->asDouble() + Fish_perc; #pragma omp parallel for for(int y=0; y<m_pWator->Get_NY(); y++) { for(int x=0; x<m_pWator->Get_NX(); x++) { double perc = CSG_Random::Get_Uniform(0, 100); if( perc <= Fish_perc ) { m_pWator->Set_Value(x, y, FISH); } else if( perc <= Shark_perc ) { m_pWator->Set_Value(x, y, SHARK); } else { m_pWator->Set_Value(x, y, 0); } } } } //----------------------------------------------------- CSG_Table *pTable = Parameters("TABLE")->asTable(); pTable->Destroy(); pTable->Set_Name(_TL("Wa-Tor")); pTable->Add_Field("Cycle" , SG_DATATYPE_Int); pTable->Add_Field("Fishes", SG_DATATYPE_Int); pTable->Add_Field("Sharks", SG_DATATYPE_Int); //----------------------------------------------------- m_Fish_Birth = Parameters("FISH_BIRTH" )->asInt(); m_Shark_Birth = Parameters("SHARK_BIRTH" )->asInt(); m_Shark_Starve = Parameters("SHARK_STARVE")->asInt(); m_Next .Create(m_pWator, SG_DATATYPE_Byte); m_Age .Create(m_pWator, SG_DATATYPE_Byte); m_Starve.Create(m_pWator, SG_DATATYPE_Byte); #pragma omp parallel for for(int y=0; y<m_pWator->Get_NY(); y++) { for(int x=0; x<m_pWator->Get_NX(); x++) { switch( m_pWator->asByte(x, y) ) { case FISH: m_Age .Set_Value(x, y, CSG_Random::Get_Uniform(0.0, m_Fish_Birth )); break; case SHARK: m_Age .Set_Value(x, y, CSG_Random::Get_Uniform(0.0, m_Shark_Birth )); m_Starve.Set_Value(x, y, CSG_Random::Get_Uniform(0.0, m_Shark_Starve)); break; } } } //----------------------------------------------------- int i; SG_UI_Progress_Lock(true); for(i=1; Process_Get_Okay(true) && Next_Cycle(); i++) { Process_Set_Text("%s: %d", _TL("Life Cycle"), i); CSG_Table_Record *pRecord = pTable->Add_Record(); pRecord->Set_Value(0, i); pRecord->Set_Value(1, m_nFishes); pRecord->Set_Value(2, m_nSharks); DataObject_Update(m_pWator, 0, 2); DataObject_Update(pTable); } SG_UI_Progress_Lock(false); //----------------------------------------------------- m_Next .Destroy(); m_Age .Destroy(); m_Starve.Destroy(); if( is_Progress() ) { Message_Fmt("\n%s %d %s", _TL("Dead after"), i, _TL("Life Cycles")); } return( true ); }