minimap creator: add option to render combined minimap
This commit is contained in:
@@ -2181,8 +2181,8 @@ bool World::saveMinimap(tile_index const& tile_idx, MinimapRenderSettings* setti
|
||||
|
||||
QImage image = pixel_buffer.toImage();
|
||||
|
||||
QSettings settings;
|
||||
QString str = settings.value ("project/path").toString();
|
||||
QSettings app_settings;
|
||||
QString str = app_settings.value ("project/path").toString();
|
||||
if (!(str.endsWith('\\') || str.endsWith('/')))
|
||||
{
|
||||
str += "/";
|
||||
@@ -2205,14 +2205,49 @@ bool World::saveMinimap(tile_index const& tile_idx, MinimapRenderSettings* setti
|
||||
void* blp_image = blp.createBlpDxtInMemory(true, FORMAT_DXT5, file_size);
|
||||
|
||||
std::string tex_name = std::string(basename + "_" + std::to_string(tile_idx.x) + "_" + std::to_string(tile_idx.z) + ".blp");
|
||||
|
||||
QFile file(dir.filePath(tex_name.c_str()));
|
||||
file.open(QIODevice::WriteOnly);
|
||||
QDataStream out(&file);
|
||||
|
||||
QDataStream out(&file);
|
||||
out.writeRawData(reinterpret_cast<char*>(blp_image), file_size);
|
||||
|
||||
file.close();
|
||||
|
||||
// Write combined file
|
||||
if (settings->combined_minimap)
|
||||
{
|
||||
QString image_path = QString(std::string(basename + "_combined_minimap.png").c_str());
|
||||
QImage combined_image;
|
||||
|
||||
if (dir.exists(image_path))
|
||||
{
|
||||
combined_image = QImage(dir.filePath(image_path));
|
||||
|
||||
if (combined_image.width() != 8192 | combined_image.height() != 8192)
|
||||
{
|
||||
combined_image = QImage(8192, 8192, QImage::Format_ARGB32);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
combined_image = QImage(8192, 8192, QImage::Format_ARGB32);
|
||||
}
|
||||
|
||||
QImage scaled_image = image.scaled(128, 128, Qt::KeepAspectRatio);
|
||||
|
||||
for (int i = 0; i < 128; ++i)
|
||||
{
|
||||
for (int j = 0; j < 128; ++j)
|
||||
{
|
||||
combined_image.setPixelColor(tile_idx.x * 128 + j, tile_idx.z * 128 + i, scaled_image.pixelColor(j, i));
|
||||
}
|
||||
}
|
||||
|
||||
combined_image.save(dir.filePath(image_path));
|
||||
|
||||
}
|
||||
|
||||
// Register in md5translate.trs
|
||||
std::string map_name = gMapDB.getMapName(mapIndex._map_id);
|
||||
std::string tilename_left = (boost::format("%s\\map_%d_%02d.blp") % map_name % tile_idx.x % tile_idx.z).str();
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <util/qt/overload.hpp>
|
||||
|
||||
#include <QFormLayout>
|
||||
#include <QGridLayout>
|
||||
#include <QGroupBox>
|
||||
#include <QCheckBox>
|
||||
#include <QButtonGroup>
|
||||
@@ -110,29 +111,48 @@ namespace noggit
|
||||
|
||||
render_settings_box_layout->addRow (resolution);
|
||||
|
||||
auto draw_models = new QCheckBox("Draw models", render_settings_box);
|
||||
auto file_format = new QComboBox(this);
|
||||
file_format->addItem(".blp");
|
||||
file_format->addItem(".png");
|
||||
file_format->setCurrentText(".blp");
|
||||
|
||||
render_settings_box_layout->addRow (file_format);
|
||||
|
||||
auto draw_elements_box_layout = new QGridLayout();
|
||||
render_settings_box_layout->addItem(draw_elements_box_layout);
|
||||
|
||||
auto draw_models = new QCheckBox("Models", render_settings_box);
|
||||
draw_models->setChecked(_render_settings.draw_m2);
|
||||
render_settings_box_layout->addRow (draw_models);
|
||||
draw_elements_box_layout->addWidget(draw_models, 0, 0);
|
||||
|
||||
auto draw_wmos = new QCheckBox("Draw WMOs", render_settings_box);
|
||||
auto draw_wmos = new QCheckBox("WMOs", render_settings_box);
|
||||
draw_wmos->setChecked(_render_settings.draw_wmo);
|
||||
render_settings_box_layout->addRow (draw_wmos);
|
||||
draw_elements_box_layout->addWidget(draw_wmos, 1, 0);
|
||||
|
||||
auto draw_water = new QCheckBox("Draw water", render_settings_box);
|
||||
auto draw_water = new QCheckBox("Water", render_settings_box);
|
||||
draw_water->setChecked(_render_settings.draw_water);
|
||||
render_settings_box_layout->addRow (draw_water);
|
||||
draw_elements_box_layout->addWidget(draw_water, 2, 0);
|
||||
|
||||
auto draw_adt = new QCheckBox("Draw ADT grid", render_settings_box);
|
||||
draw_adt->setChecked(_render_settings.draw_adt_grid);
|
||||
render_settings_box_layout->addRow (draw_adt);
|
||||
|
||||
auto draw_elevation = new QCheckBox("Draw elevation lines", render_settings_box);
|
||||
draw_elevation->setChecked(_render_settings.draw_elevation);
|
||||
render_settings_box_layout->addRow (draw_elevation);
|
||||
|
||||
auto use_filters = new QCheckBox("Use filters", render_settings_box);
|
||||
auto use_filters = new QCheckBox("Filter", render_settings_box);
|
||||
use_filters->setChecked(_render_settings.use_filters);
|
||||
render_settings_box_layout->addRow (use_filters);
|
||||
draw_elements_box_layout->addWidget(use_filters, 3, 0);
|
||||
|
||||
auto draw_adt = new QCheckBox("ADT grid", render_settings_box);
|
||||
draw_adt->setChecked(_render_settings.draw_adt_grid);
|
||||
draw_elements_box_layout->addWidget(draw_adt, 0, 1);
|
||||
|
||||
auto draw_elevation = new QCheckBox("Elevation", render_settings_box);
|
||||
draw_elevation->setChecked(_render_settings.draw_elevation);
|
||||
draw_elements_box_layout->addWidget(draw_elevation, 1, 1);
|
||||
|
||||
auto draw_shadows = new QCheckBox("Shadows", render_settings_box);
|
||||
draw_elevation->setChecked(_render_settings.draw_shadows);
|
||||
draw_elements_box_layout->addWidget(draw_shadows, 2, 1);
|
||||
|
||||
auto combined_minimap = new QCheckBox("Combine", render_settings_box);
|
||||
combined_minimap->setChecked(_render_settings.combined_minimap);
|
||||
draw_elements_box_layout->addWidget(combined_minimap, 3, 1);
|
||||
|
||||
|
||||
_progress_bar = new QProgressBar(this);
|
||||
_progress_bar->setRange(0, 4096);
|
||||
@@ -741,6 +761,13 @@ namespace noggit
|
||||
}
|
||||
);
|
||||
|
||||
connect ( file_format, &QComboBox::currentTextChanged
|
||||
, [&] (QString s)
|
||||
{
|
||||
_render_settings.file_format = s.toStdString();
|
||||
}
|
||||
);
|
||||
|
||||
connect (draw_models, &QCheckBox::stateChanged, [this] (int s)
|
||||
{
|
||||
_render_settings.draw_m2 = s;
|
||||
@@ -771,6 +798,16 @@ namespace noggit
|
||||
_render_settings.use_filters = s;
|
||||
});
|
||||
|
||||
connect (draw_shadows, &QCheckBox::stateChanged, [this] (int s)
|
||||
{
|
||||
_render_settings.draw_shadows = s;
|
||||
});
|
||||
|
||||
connect (combined_minimap, &QCheckBox::stateChanged, [this] (int s)
|
||||
{
|
||||
_render_settings.combined_minimap = s;
|
||||
});
|
||||
|
||||
// Buttons
|
||||
connect(cur_adt_btn, &QPushButton::clicked, [=]() {
|
||||
_render_settings.export_mode = MinimapGenMode::CURRENT_ADT;
|
||||
|
||||
@@ -36,6 +36,7 @@ enum MinimapGenMode
|
||||
struct MinimapRenderSettings
|
||||
{
|
||||
MinimapGenMode export_mode;
|
||||
std::string file_format = ".blp";
|
||||
|
||||
// Render settings
|
||||
int resolution = 512;
|
||||
@@ -44,7 +45,9 @@ struct MinimapRenderSettings
|
||||
bool draw_water = true;
|
||||
bool draw_adt_grid = false;
|
||||
bool draw_elevation = false;
|
||||
bool draw_shadows = false;
|
||||
bool use_filters = false;
|
||||
bool combined_minimap = false;
|
||||
|
||||
// Selection
|
||||
std::array<bool, 4096> selected_tiles = {false};
|
||||
|
||||
Reference in New Issue
Block a user