Editor: Heightmap Export function (small fix for import function)
Not without loss because megaglest uses floats for height
This commit is contained in:
parent
98c8cab708
commit
a700ced734
|
@ -185,6 +185,7 @@ void MainWindow::init(string fname) {
|
||||||
|
|
||||||
menuEdit->Append(miEditRandomizeHeights, wxT("Randomize &Heights"));
|
menuEdit->Append(miEditRandomizeHeights, wxT("Randomize &Heights"));
|
||||||
menuEdit->Append(miEditImportHeights, wxT("Import Heightsmap"));
|
menuEdit->Append(miEditImportHeights, wxT("Import Heightsmap"));
|
||||||
|
menuEdit->Append(miEditExportHeights, wxT("Export Heightsmap"));
|
||||||
menuEdit->Append(miEditRandomize, wxT("Randomi&ze Players"));
|
menuEdit->Append(miEditRandomize, wxT("Randomi&ze Players"));
|
||||||
menuEdit->Append(miEditSwitchSurfaces, wxT("Switch Sur&faces..."));
|
menuEdit->Append(miEditSwitchSurfaces, wxT("Switch Sur&faces..."));
|
||||||
menuEdit->Append(miEditInfo, wxT("&Info..."));
|
menuEdit->Append(miEditInfo, wxT("&Info..."));
|
||||||
|
@ -1121,6 +1122,46 @@ void MainWindow::onMenuEditImportHeights(wxCommandEvent &event) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::onMenuEditExportHeights(wxCommandEvent &event) {
|
||||||
|
if(program == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#if wxCHECK_VERSION(2, 9, 1)
|
||||||
|
wxFileDialog fd(this, wxT("Select file"), wxT(""), wxT(""), wxT("All Images|*.bmp;*.png;*.jpg;*.jpeg;*.gif;.*.tga;*.tiff;*.tif|PNG-Image (*.png)|*.png|JPEG-Image (*.jpg, *.jpeg)|*.jpg;*.jpeg|BMP-Image (*.bmp)|*.bmp|GIF-Image (*.gif)|*.gif|TIFF-Image (*.tif, *.tiff)|*.tiff;*.tif"), wxFD_SAVE);
|
||||||
|
#else
|
||||||
|
wxFileDialog fd(this, wxT("Select file"), wxT(""), wxT(""), wxT("All Images|*.bmp;*.png;*.jpg;*.jpeg;*.gif;.*.tga;*.tiff;*.tif|PNG-Image (*.png)|*.png|JPEG-Image (*.jpg, *.jpeg)|*.jpg;*.jpeg|BMP-Image (*.bmp)|*.bmp|GIF-Image (*.gif)|*.gif|TIFF-Image (*.tif, *.tiff)|*.tiff;*.tif"), wxSAVE);
|
||||||
|
#endif
|
||||||
|
fd.SetDirectory(heightMapDirectory);
|
||||||
|
if (fd.ShowModal() == wxID_OK) {
|
||||||
|
#ifdef WIN32
|
||||||
|
const wxWX2MBbuf tmp_buf = wxConvCurrent->cWX2MB(wxFNCONV(fd.GetPath()));
|
||||||
|
currentFile = tmp_buf;
|
||||||
|
|
||||||
|
auto_ptr<wchar_t> wstr(Ansi2WideString(currentFile.c_str()));
|
||||||
|
currentFile = utf8_encode(wstr.get());
|
||||||
|
#elif wxCHECK_VERSION(2, 9, 1)
|
||||||
|
currentFile = fd.GetPath().ToStdString();
|
||||||
|
#else
|
||||||
|
const wxWX2MBbuf tmp_buf = wxConvCurrent->cWX2MB(fd.GetPath());
|
||||||
|
currentFile = tmp_buf;
|
||||||
|
#endif
|
||||||
|
int map_w = program->getMap()->getW();
|
||||||
|
int map_h = program->getMap()->getH();
|
||||||
|
wxImage img(map_w, map_h);
|
||||||
|
unsigned char* img_data = img.GetData();
|
||||||
|
for(int i = 0; i < map_w; i++) {
|
||||||
|
for(int j = 0; j < map_h; j++) {
|
||||||
|
//cells[i][j].height=(data[(i+j*w)*3]*(MAX_MAP_CELL_HEIGHT-MIN_MAP_CELL_HEIGHT)/255)+MIN_MAP_CELL_HEIGHT;
|
||||||
|
img_data[(i+j*map_w)*3] = (unsigned char) ((program->getMap()->getHeight(i,j)-MIN_MAP_CELL_HEIGHT)*255/(MAX_MAP_CELL_HEIGHT-MIN_MAP_CELL_HEIGHT)+0.5);
|
||||||
|
img_data[(i+j*map_w)*3+1] = (unsigned char) ((program->getMap()->getHeight(i,j)-MIN_MAP_CELL_HEIGHT)*255/(MAX_MAP_CELL_HEIGHT-MIN_MAP_CELL_HEIGHT)+0.5);
|
||||||
|
img_data[(i+j*map_w)*3+2] = (unsigned char) ((program->getMap()->getHeight(i,j)-MIN_MAP_CELL_HEIGHT)*255/(MAX_MAP_CELL_HEIGHT-MIN_MAP_CELL_HEIGHT)+0.5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
img.SaveFile(currentFile);
|
||||||
|
}
|
||||||
|
heightMapDirectory=fd.GetDirectory();
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::onMenuEditRandomize(wxCommandEvent &event) {
|
void MainWindow::onMenuEditRandomize(wxCommandEvent &event) {
|
||||||
if(program == NULL) {
|
if(program == NULL) {
|
||||||
return;
|
return;
|
||||||
|
@ -1538,6 +1579,7 @@ BEGIN_EVENT_TABLE(MainWindow, wxFrame)
|
||||||
|
|
||||||
EVT_MENU(miEditRandomizeHeights, MainWindow::onMenuEditRandomizeHeights)
|
EVT_MENU(miEditRandomizeHeights, MainWindow::onMenuEditRandomizeHeights)
|
||||||
EVT_MENU(miEditImportHeights, MainWindow::onMenuEditImportHeights)
|
EVT_MENU(miEditImportHeights, MainWindow::onMenuEditImportHeights)
|
||||||
|
EVT_MENU(miEditExportHeights, MainWindow::onMenuEditExportHeights)
|
||||||
EVT_MENU(miEditRandomize, MainWindow::onMenuEditRandomize)
|
EVT_MENU(miEditRandomize, MainWindow::onMenuEditRandomize)
|
||||||
EVT_MENU(miEditSwitchSurfaces, MainWindow::onMenuEditSwitchSurfaces)
|
EVT_MENU(miEditSwitchSurfaces, MainWindow::onMenuEditSwitchSurfaces)
|
||||||
EVT_MENU(miEditInfo, MainWindow::onMenuEditInfo)
|
EVT_MENU(miEditInfo, MainWindow::onMenuEditInfo)
|
||||||
|
|
|
@ -139,6 +139,7 @@ private:
|
||||||
|
|
||||||
miEditRandomizeHeights,
|
miEditRandomizeHeights,
|
||||||
miEditImportHeights,
|
miEditImportHeights,
|
||||||
|
miEditExportHeights,
|
||||||
miEditRandomize,
|
miEditRandomize,
|
||||||
miEditSwitchSurfaces,
|
miEditSwitchSurfaces,
|
||||||
miEditInfo,
|
miEditInfo,
|
||||||
|
@ -262,6 +263,7 @@ public:
|
||||||
|
|
||||||
void onMenuEditRandomizeHeights(wxCommandEvent &event);
|
void onMenuEditRandomizeHeights(wxCommandEvent &event);
|
||||||
void onMenuEditImportHeights(wxCommandEvent &event);
|
void onMenuEditImportHeights(wxCommandEvent &event);
|
||||||
|
void onMenuEditExportHeights(wxCommandEvent &event);
|
||||||
void onMenuEditRandomize(wxCommandEvent &event);
|
void onMenuEditRandomize(wxCommandEvent &event);
|
||||||
void onMenuEditSwitchSurfaces(wxCommandEvent &event);
|
void onMenuEditSwitchSurfaces(wxCommandEvent &event);
|
||||||
void onMenuEditInfo(wxCommandEvent &event);
|
void onMenuEditInfo(wxCommandEvent &event);
|
||||||
|
|
|
@ -679,7 +679,7 @@ void MapPreview::randomizeHeights(bool withReset,int minimumHeight, int maximumH
|
||||||
void MapPreview::importMapHeights(unsigned char* data) {
|
void MapPreview::importMapHeights(unsigned char* data) {
|
||||||
for (int i = 0; i < w; ++i) {
|
for (int i = 0; i < w; ++i) {
|
||||||
for (int j = 0; j < h; ++j) {
|
for (int j = 0; j < h; ++j) {
|
||||||
cells[i][j].height=(data[(i+j*w)*3]*MAX_MAP_CELL_HEIGHT/255)+MIN_MAP_CELL_HEIGHT;
|
cells[i][j].height=((float) data[(i+j*w)*3]*(MAX_MAP_CELL_HEIGHT-MIN_MAP_CELL_HEIGHT)/255)+MIN_MAP_CELL_HEIGHT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue