#include <rastermap.h>
|
int | MapWidth (void) |
|
int | MapHeight (void) |
|
int | Get (int a_x, int a_y) |
|
char * | GetID (void) |
|
int * | GetMagicP (int a_x, int a_y) |
|
void | Put (int a_x, int a_y, int a_elem) |
|
| RasterMap (const char *a_mapfile, Landscape *m_landscape) |
|
| ~RasterMap (void) |
|
void | Manipulation1 () |
|
int | CellReplacementNeighbour (int a_x, int a_y, int a_polyref) |
| A method for helping remove tiny polygons. More...
|
|
bool | MissingCellReplace (int a_x, int a_y, bool a_fieldsonly) |
| A method for removing missing polygons. More...
|
|
bool | MissingCellReplaceWrap (int a_x, int a_y, bool a_fieldsonly) |
| A method for removing missing polygons - tests for edge conditions. More...
|
|
Definition at line 45 of file rastermap.h.
RasterMap::RasterMap |
( |
const char * |
a_mapfile, |
|
|
Landscape * |
m_landscape |
|
) |
| |
Definition at line 46 of file rastermap.cpp.
References cfg_manipulation1_on, g_msg, CfgBool::value(), MapErrorMsg::Warn(), and WARN_FILE.
48 m_landscape = a_landscape;
51 IFile = fopen(a_mapfile,
"rb");
57 fread(
m_id, 1, 12, IFile);
59 if (strcmp(
m_id,
"An LSB File") == 0 )
Init1(a_mapfile, a_landscape);
else Init2(a_mapfile, a_landscape);
CfgBool cfg_manipulation1_on("RASTER_MANIPULATION_ONE_ON", CFG_CUSTOM, false)
class MapErrorMsg * g_msg
void Warn(MapErrorState a_level, std::string a_msg1, std::string a_msg2)
void Init2(const char *a_mapfile, Landscape *m_landscape)
void Init1(const char *a_mapfile, Landscape *m_landscape)
RasterMap::~RasterMap |
( |
void |
| ) |
|
int RasterMap::CellReplacementNeighbour |
( |
int |
a_x, |
|
|
int |
a_y, |
|
|
int |
a_polyref |
|
) |
| |
A method for helping remove tiny polygons.
Replaces a cell value with the most common value from the surrounding 8 cells. If near the edge nothing is done. Return value is the new value of the cell or -1 if nothing is done. First tests to make sure that the polygon we are removing is at these coords.
Definition at line 216 of file rastermap.cpp.
References g_msg, and MapErrorMsg::Warn().
224 if ((a_x < 1) || (a_x >
m_width - 2) || (a_y < 1) || (a_y >
m_height - 2))
return -1;
225 int toreplace =
Get(a_x, a_y);
226 if (toreplace != a_polyref)
228 g_msg->
Warn(
"RasterMap::CellReplacementNeighbour: x,y pair does not match polyref ", a_polyref);
231 int surroundingcells[8];
232 surroundingcells[0] =
Get(a_x - 1, a_y - 1);
233 surroundingcells[1] =
Get(a_x , a_y - 1);
234 surroundingcells[2] =
Get(a_x + 1, a_y - 1);
235 surroundingcells[3] =
Get(a_x - 1, a_y);
236 surroundingcells[4] =
Get(a_x + 1, a_y);
237 surroundingcells[5] =
Get(a_x - 1, a_y + 1);
238 surroundingcells[6] =
Get(a_x , a_y + 1);
239 surroundingcells[7] =
Get(a_x + 1, a_y + 1);
242 for (
int i = 0; i < 8; i++)
245 for (
int j = 0; j < 8; j++)
247 if (surroundingcells[j] == surroundingcells[i]) count[i]++;
252 for (
int i = 0; i < 8; i++)
254 if (count[i]>found) index = i;
256 return surroundingcells[index];
int Get(int a_x, int a_y)
class MapErrorMsg * g_msg
void Warn(MapErrorState a_level, std::string a_msg1, std::string a_msg2)
int RasterMap::Get |
( |
int |
a_x, |
|
|
int |
a_y |
|
) |
| |
|
inline |
Definition at line 86 of file rastermap.h.
References g_msg, MapErrorMsg::Warn(), and WARN_BUG.
Referenced by Landscape::GetActualGooseGrazingForage(), Landscape::SupplyBirdMaizeForage(), Landscape::SupplyBirdSeedForage(), Landscape::SupplyCentroidX(), Landscape::SupplyCentroidY(), Landscape::SupplyLEHigh(), Landscape::SupplyOpenness(), Landscape::SupplySoilType(), Landscape::SupplySoilTypeR(), and Pesticide::TwinMapSpray().
90 "RasterMap::Get(): Coordinates out of range!",
"" );
class MapErrorMsg * g_msg
void Warn(MapErrorState a_level, std::string a_msg1, std::string a_msg2)
char* RasterMap::GetID |
( |
void |
| ) |
|
|
inline |
int * RasterMap::GetMagicP |
( |
int |
a_x, |
|
|
int |
a_y |
|
) |
| |
|
inline |
void RasterMap::Init1 |
( |
const char * |
a_mapfile, |
|
|
Landscape * |
m_landscape |
|
) |
| |
|
protected |
Definition at line 66 of file rastermap.cpp.
References cfg_rectangularmaps_on, g_msg, m_polymapping, CfgBool::value(), MapErrorMsg::Warn(), WARN_FATAL, and WARN_FILE.
68 m_landscape = a_landscape;
73 IFile = fopen(a_mapfile,
"rb");
79 fread(
m_id, 1, 12, IFile);
80 fread(&
m_width, 1,
sizeof(
int), IFile);
86 "RasterMap::RasterMap(): Out of memory.",
"");
93 for (
int x = 0; x<
m_x; x++) {
94 for (
int y = 0; y<
m_y; y++) {
102 sprintf(error_num,
"%d",
Get(x, y));
103 g_msg->
Warn(
WARN_FILE,
"RasterMap::RasterMap(): Unknown polygon map number (could be a hole):", error_num);
113 sprintf(error_num,
"%d",
Get(x, y));
114 g_msg->
Warn(
WARN_FILE,
"RasterMap::RasterMap():" " Unknown polygon ref number:", error_num);
void Put(int a_x, int a_y, int a_elem)
int Get(int a_x, int a_y)
CfgBool cfg_rectangularmaps_on("RASTER_RECTANGULARMAPS_ON", CFG_CUSTOM, true)
class MapErrorMsg * g_msg
int * m_polymapping
m_polymapping is a mapping from polygon numbers into the list of landscape elements, m_elems. When using this it is important that it is the poly num and not the map index that is used in calling.
void Warn(MapErrorState a_level, std::string a_msg1, std::string a_msg2)
void RasterMap::Init2 |
( |
const char * |
a_mapfile, |
|
|
Landscape * |
m_landscape |
|
) |
| |
|
protected |
Definition at line 122 of file rastermap.cpp.
References g_msg, m_polymapping, MapErrorMsg::Warn(), WARN_FATAL, and WARN_FILE.
124 m_landscape = a_landscape;
127 ifstream IFile(a_mapfile, ios::binary);
128 if (!IFile.is_open()) {
134 IFile.read((
char*)&
m_width,
sizeof (
int));
135 IFile.read((
char*)&
m_height,
sizeof (
int));
139 "RasterMap::RasterMap(): Out of memory.",
"");
147 for (
int x = 0; x<
m_x; x++)
149 for (
int y = 0; y<
m_y; y++)
154 sprintf(error_num,
"%d",
Get(x, y));
155 g_msg->
Warn(
WARN_FILE,
"RasterMap::RasterMap(): Unknown polygon map number (could be a hole):", error_num);
162 sprintf(error_num,
"%d",
Get(x, y));
163 g_msg->
Warn(
WARN_FILE,
"RasterMap::RasterMap():" " Unknown polygon ref number:", error_num);
int Get(int a_x, int a_y)
class MapErrorMsg * g_msg
int * m_polymapping
m_polymapping is a mapping from polygon numbers into the list of landscape elements, m_elems. When using this it is important that it is the poly num and not the map index that is used in calling.
void Warn(MapErrorState a_level, std::string a_msg1, std::string a_msg2)
void RasterMap::Manipulation1 |
( |
| ) |
|
Definition at line 176 of file rastermap.cpp.
References cfg_rastermapmanipmultiply, and CfgInt::value().
180 o1=fopen(
"RasterDump1.lsb",
"wb");
181 o2=fopen(
"RasterDump2.lsb",
"wb");
184 fwrite( l_id, 1, 12, o1 );
185 fwrite( & new_height, 1,
sizeof(
int ), o1 );
186 for (
int y=0; y<
m_width; y++ ) {
187 for (
int x = 0; x <
m_width ; x++ ) {
188 int l_poly =
Get(x,y);
189 fwrite( & l_poly, 1,
sizeof(
int ), o1 );
190 fwrite( & l_poly, 1,
sizeof(
int ), o1 );
192 for (
int x = 0; x <
m_width ; x++ ) {
193 int l_poly =
Get(x,y);
194 fwrite( & l_poly, 1,
sizeof(
int ), o1 );
195 fwrite( & l_poly, 1,
sizeof(
int ), o1 );
200 fwrite( l_id, 1, 12, o2 );
201 fwrite( &new_height, 1,
sizeof(
int ), o2 );
202 for (
int m=0; m<multiply; m++) {
203 for (
int y=0; y<
m_width; y++ ) {
204 for (
int mm=0; mm<multiply; mm++) {
205 for (
int x = 0; x <
m_width ; x++ ) {
206 int l_poly =
Get(x,y);
207 fwrite( & l_poly, 1,
sizeof(
int ), o2 );
int Get(int a_x, int a_y)
CfgInt cfg_rastermapmanipmultiply("RASTER_MANIPULATION_MULTIPLYFACTOR", CFG_CUSTOM, 2)
int RasterMap::MapHeight |
( |
void |
| ) |
|
|
inline |
int RasterMap::MapWidth |
( |
void |
| ) |
|
|
inline |
bool RasterMap::MissingCellReplace |
( |
int |
a_x, |
|
|
int |
a_y, |
|
|
bool |
a_fieldsonly |
|
) |
| |
A method for removing missing polygons.
Definition at line 259 of file rastermap.cpp.
261 int surroundingcells[8];
262 surroundingcells[0] =
Get(a_x - 1, a_y - 1);
263 surroundingcells[1] =
Get(a_x, a_y - 1);
264 surroundingcells[2] =
Get(a_x + 1, a_y - 1);
265 surroundingcells[3] =
Get(a_x - 1, a_y);
266 surroundingcells[4] =
Get(a_x + 1, a_y);
267 surroundingcells[5] =
Get(a_x - 1, a_y + 1);
268 surroundingcells[6] =
Get(a_x, a_y + 1);
269 surroundingcells[7] =
Get(a_x + 1, a_y + 1);
273 unsigned offset = (unsigned)(((
double)rand() / RAND_MAX + 1) * 8);
274 for (
unsigned i = 0; i < 8; i++)
279 Put(a_x, a_y, surroundingcells[(i + offset) % 8]);
void Put(int a_x, int a_y, int a_elem)
TTypesOfLandscapeElement SupplyElementType(int a_polyref)
int Get(int a_x, int a_y)
bool IsFieldType(TTypesOfLandscapeElement a_tole)
bool RasterMap::MissingCellReplaceWrap |
( |
int |
a_x, |
|
|
int |
a_y, |
|
|
bool |
a_fieldsonly |
|
) |
| |
A method for removing missing polygons - tests for edge conditions.
Definition at line 288 of file rastermap.cpp.
References tole_Field, tole_Orchard, tole_PermanentSetaside, tole_PermPasture, tole_PermPastureLowYield, tole_PermPastureTussocky, tole_PermPastureTussockyWet, and tole_Vildtager.
290 int surroundingcells[8];
291 if (a_x >= 1 && a_y >= 1) surroundingcells[0] =
Get(a_x - 1, a_y - 1);
else surroundingcells[0] =
Get(a_x, a_y);
292 if (a_y >= 1) surroundingcells[1] =
Get(a_x, a_y - 1);
else surroundingcells[1] =
Get(a_x, a_y);
293 if (a_x < m_width-1 && a_y >= 1) surroundingcells[2] =
Get(a_x + 1, a_y - 1);
else surroundingcells[2] =
Get(a_x, a_y);
294 if (a_x >= 1) surroundingcells[3] =
Get(a_x - 1, a_y);
else surroundingcells[3] =
Get(a_x, a_y);
295 if (a_x <
m_width-1) surroundingcells[4] =
Get(a_x + 1, a_y);
else surroundingcells[4] =
Get(a_x, a_y);
296 if (a_x >= 1 && a_y <
m_height-1) surroundingcells[5] =
Get(a_x - 1, a_y + 1);
else surroundingcells[5] =
Get(a_x, a_y);
297 if (a_y <
m_height-1) surroundingcells[6] =
Get(a_x, a_y + 1);
else surroundingcells[6] =
Get(a_x, a_y);
298 if (a_x <
m_width-1 && a_y <
m_height-1) surroundingcells[7] =
Get(a_x + 1, a_y + 1);
else surroundingcells[7] =
Get(a_x, a_y);
302 unsigned offset = (unsigned)(((
double)rand() / RAND_MAX + 1) * 8);
303 for (
unsigned i = 0; i < 8; i++)
310 Put(a_x, a_y, surroundingcells[(i + offset) % 8]);
void Put(int a_x, int a_y, int a_elem)
TTypesOfLandscapeElement SupplyElementType(int a_polyref)
int Get(int a_x, int a_y)
void RasterMap::Put |
( |
int |
a_x, |
|
|
int |
a_y, |
|
|
int |
a_elem |
|
) |
| |
|
inline |
The documentation for this class was generated from the following files: