Making some meaningful progress feedback.

This commit is contained in:
tamasmeszaros 2018-05-25 16:55:55 +02:00
parent 5fe83110cb
commit fcef1b107e
4 changed files with 32 additions and 7 deletions

View File

@ -476,7 +476,7 @@ sub quick_slice {
# show processbar dialog
$progress_dialog = Wx::ProgressDialog->new(L('Slicing…'), L("Processing ").$input_file_basename."…",
100, $self, 0);
100, $self, 4);
$progress_dialog->Pulse;
{

View File

@ -113,10 +113,18 @@ sub export_png {
my $self = shift;
my %params = @_;
$_->slice for @{$self->objects};
my @sobjects = @{$self->objects};
my $objnum = scalar @sobjects;
for(my $oi = 0; $oi < $objnum; $oi++)
{
$sobjects[$oi]->slice;
$self->status_cb->(($oi + 1)*100/$objnum - 1, "Slicing...");
}
my $fh = $params{output_file};
$self->status_cb->(90, "Exporting zipped archive...");
$self->print_to_png($fh);
$self->status_cb->(100, "Done.");
}
# Export SVG slices for the offline SLA printing.
@ -125,7 +133,13 @@ sub export_svg {
my $self = shift;
my %params = @_;
$_->slice for @{$self->objects};
my @sobjects = @{$self->objects};
my $objnum = scalar @sobjects;
for(my $oi = 0; $oi < $objnum; $oi++)
{
$sobjects[$oi]->slice;
$self->status_cb->(($oi + 1)*100/$objnum - 1, "Slicing...");
}
my $fh = $params{output_fh};
if (!$fh) {

View File

@ -35,7 +35,7 @@ sub slice {
return if $self->step_done(STEP_SLICE);
$self->set_step_started(STEP_SLICE);
$self->print->status_cb->(10, "Processing triangulated mesh");
# $self->print->status_cb->(10, "Processing triangulated mesh");
$self->_slice;

View File

@ -1254,6 +1254,7 @@ std::string Print::output_filepath(const std::string &path)
void Print::set_status(int percent, const std::string &message)
{
printf("Print::status %d => %s\n", percent, message.c_str());
std::cout.flush();
}
/*
@ -1463,9 +1464,13 @@ void Print::print_to(std::string dirpath,
FilePrinter<format> printer(std::forward<Args>(args)...);
printer.layers(layers.size()); // Allocate space for all the layers
set_status(0, "Rasterizing and compressing sliced layers");
int st_prev = 0;
// Method that prints one layer
auto process_layer = [this, &layers, &printer, print_bb, dir, cx, cy]
(unsigned layer_id)
auto process_layer = [this, &layers, &printer, &st_prev,
print_bb, dir, cx, cy] (unsigned layer_id)
{
Layer& l = *(layers[layer_id]);
@ -1504,7 +1509,11 @@ void Print::print_to(std::string dirpath,
printer.finishLayer(layer_id); // Finish the layer for later saving it.
std::cout << "Layer " << layer_id << " processed." << std::endl;
auto st = static_cast<int>(layer_id*100.0/layers.size());
if(st > st_prev) {
set_status(st, "processed");
st_prev = st;
}
// printer.saveLayer(layer_id, dir); We could save the layer immediately
};
@ -1518,7 +1527,9 @@ void Print::print_to(std::string dirpath,
// for(unsigned l = 0; l < layers.size(); ++l) process_layer(l);
// Save the print into the file system.
set_status(0, "Writing layers to disk");
printer.save(dir);
set_status(100, "Done.");
}
void Print::print_to_png(std::string dirpath, long width_px, long height_px,