Permalink
Browse files

FIXED voxel export folder problem

- if the folder did not contain a folder separator at the end, the file
name was folder + filename in the folder above the target folder
- now the folder of the voxel export is always parsed as a QDir and
checked for existence, trailing separator or not both work now
this fixes #109
  • Loading branch information...
zebastian committed Jul 25, 2016
1 parent eb2c595 commit 6496e838fc9edb38ac4450d48cd0df28d3eb630b
@@ -61,7 +61,6 @@ void cVoxelExportDialog::on_pushButton_start_render_layers_clicked()
if (!slicerBusy)
{
SynchronizeInterfaceWindow(this, gPar, qInterface::read);
slicerBusy = true;
CVector3 limitMin;
CVector3 limitMax;
if (gPar->Get<bool>("voxel_custom_limit_enabled"))
@@ -75,28 +74,41 @@ void cVoxelExportDialog::on_pushButton_start_render_layers_clicked()
limitMax = gPar->Get<CVector3>("limit_max");
}
int maxIter = gPar->Get<int>("voxel_max_iter");
QString folder = gPar->Get<QString>("voxel_image_path");
QString folderString = gPar->Get<QString>("voxel_image_path");
int samplesX = gPar->Get<int>("voxel_samples_x");
int samplesY = gPar->Get<int>("voxel_samples_y");
int samplesZ = gPar->Get<int>("voxel_samples_z");
voxelExport =
new cVoxelExport(samplesX, samplesY, samplesZ, limitMin, limitMax, folder, maxIter);
QObject::connect(voxelExport,
SIGNAL(updateProgressAndStatus(const QString &, const QString &, double)), this,
SLOT(slotUpdateProgressAndStatus(const QString &, const QString &, double)));
QThread *thread = new QThread; // deleted by deleteLater()
voxelExport->moveToThread(thread);
QObject::connect(thread, SIGNAL(started()), voxelExport, SLOT(ProcessVolume()));
thread->setObjectName("Slicer");
thread->start();
QObject::connect(voxelExport, SIGNAL(finished()), this, SLOT(slotSlicerFinished()));
QObject::connect(voxelExport, SIGNAL(finished()), voxelExport, SLOT(deleteLater()));
QObject::connect(voxelExport, SIGNAL(finished()), thread, SLOT(quit()));
QObject::connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
ui->pushButton_start_render_layers->setEnabled(false);
ui->pushButton_stop_render_layers->setEnabled(true);
QDir folder(folderString);
if(folder.exists())
{
slicerBusy = true;
voxelExport =
new cVoxelExport(samplesX, samplesY, samplesZ, limitMin, limitMax, folder, maxIter);
QObject::connect(voxelExport,
SIGNAL(updateProgressAndStatus(const QString &, const QString &, double)), this,
SLOT(slotUpdateProgressAndStatus(const QString &, const QString &, double)));
QThread *thread = new QThread; // deleted by deleteLater()
voxelExport->moveToThread(thread);
QObject::connect(thread, SIGNAL(started()), voxelExport, SLOT(ProcessVolume()));
thread->setObjectName("Slicer");
thread->start();
QObject::connect(voxelExport, SIGNAL(finished()), this, SLOT(slotSlicerFinished()));
QObject::connect(voxelExport, SIGNAL(finished()), voxelExport, SLOT(deleteLater()));
QObject::connect(voxelExport, SIGNAL(finished()), thread, SLOT(quit()));
QObject::connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
ui->pushButton_start_render_layers->setEnabled(false);
ui->pushButton_stop_render_layers->setEnabled(true);
}
else
{
cErrorMessage::showMessage(
QObject::tr(
"Cannot start voxel export. Specified folder (%1) does not exist.").arg(folderString),
cErrorMessage::errorMessage);
}
}
else
{
@@ -727,6 +727,21 @@ void cCommandLineInterface::ReadCLI()
// voxel export
if (cliData.voxel)
{
QString folderString = gPar->Get<QString>("voxel_image_path");
QDir folder(folderString);
if(!folder.exists())
{
cErrorMessage::showMessage(
QObject::tr(
"Cannot start voxel export. Specified folder (%1) does not exist.").arg(folderString),
cErrorMessage::errorMessage);
cErrorMessage::showMessage(
QObject::tr("End frame has to be greater than start frame which is %1")
.arg(gPar->Get<int>("flight_first_to_render")),
cErrorMessage::errorMessage);
parser.showHelp(cliErrorFlightEndFrameSmallerStartFrame);
}
cliTODO = modeVoxel;
cliData.nogui = true;
systemData.noGui = true;
@@ -140,10 +140,12 @@ void cHeadless::RenderVoxel()
limitMax = gPar->Get<CVector3>("limit_max");
}
int maxIter = gPar->Get<int>("voxel_max_iter");
QString folder = gPar->Get<QString>("voxel_image_path");
QString folderString = gPar->Get<QString>("voxel_image_path");
int samplesX = gPar->Get<int>("voxel_samples_x");
int samplesY = gPar->Get<int>("voxel_samples_y");
int samplesZ = gPar->Get<int>("voxel_samples_z");
QDir folder(folderString);
cVoxelExport *voxelExport =
new cVoxelExport(samplesX, samplesY, samplesZ, limitMin, limitMax, folder, maxIter);
QObject::connect(voxelExport,
@@ -45,7 +45,7 @@
#include "progress_text.hpp"
cVoxelExport::cVoxelExport(
int w, int h, int l, CVector3 limitMin, CVector3 limitMax, QString folder, int maxIter)
int w, int h, int l, CVector3 limitMin, CVector3 limitMax, QDir folder, int maxIter)
: QObject()
{
this->w = w;
@@ -126,7 +126,7 @@ void cVoxelExport::ProcessVolume()
bool cVoxelExport::StoreLayer(int z)
{
QString filename = folder + QString("layer_%1.png").arg(z, 5, 10, QChar('0'));
QString filename = folder.absolutePath() + QDir::separator() + QString("layer_%1.png").arg(z, 5, 10, QChar('0'));
if (!ImageFileSavePNG::SavePNGQtBlackAndWhite(filename, voxelLayer, w, h))
{
qCritical() << "Cannot write to file " << filename;
@@ -49,7 +49,7 @@ class cVoxelExport : public QObject
public:
cVoxelExport(
int w, int h, int l, CVector3 limitMin, CVector3 limitMax, QString folder, int maxIter);
int w, int h, int l, CVector3 limitMin, CVector3 limitMax, QDir folder, int maxIter);
~cVoxelExport();
signals:
@@ -67,7 +67,7 @@ public slots:
int w, h, l;
CVector3 limitMin;
CVector3 limitMax;
QString folder;
QDir folder;
int maxIter;
bool stop;
};

0 comments on commit 6496e83

Please sign in to comment.