Skip geometry from unfinished steps in 3D rendering

This commit is contained in:
Alessandro Ranellucci 2015-01-18 21:31:09 +01:00
parent b782351fd3
commit 3d500ca317
2 changed files with 18 additions and 12 deletions

View file

@ -924,6 +924,7 @@ use base qw(Slic3r::GUI::3DScene::Base);
use OpenGL qw(:glconstants :gluconstants :glufunctions);
use List::Util qw(first);
use Slic3r::Geometry qw(scale unscale epsilon);
use Slic3r::Print::State ':steps';
use constant COLORS => [ [1,1,0,1], [1,0.5,0.5,1], [0.5,1,0.5,1], [0.5,0.5,1,1] ];
@ -1102,14 +1103,18 @@ sub load_print_object_toolpaths {
foreach my $copy (@{ $object->_shifted_copies }) {
foreach my $layerm (@{$layer->regions}) {
$self->_extrusionentity_to_verts($layerm->perimeters, $top_z, $copy,
\@perim_qverts, \@perim_qnorms, \@perim_tverts, \@perim_tnorms);
if ($object->step_done(STEP_PERIMETERS)) {
$self->_extrusionentity_to_verts($layerm->perimeters, $top_z, $copy,
\@perim_qverts, \@perim_qnorms, \@perim_tverts, \@perim_tnorms);
}
$self->_extrusionentity_to_verts($layerm->fills, $top_z, $copy,
\@infill_qverts, \@infill_qnorms, \@infill_tverts, \@infill_tnorms);
if ($object->step_done(STEP_INFILL)) {
$self->_extrusionentity_to_verts($layerm->fills, $top_z, $copy,
\@infill_qverts, \@infill_qnorms, \@infill_tverts, \@infill_tnorms);
}
}
if ($layer->isa('Slic3r::Layer::Support')) {
if ($layer->isa('Slic3r::Layer::Support') && $object->step_done(STEP_SUPPORTMATERIAL)) {
$self->_extrusionentity_to_verts($layer->support_fills, $top_z, $copy,
\@support_qverts, \@support_qnorms, \@support_tverts, \@support_tnorms);

View file

@ -28,7 +28,6 @@ use constant TB_SCALE => &Wx::NewId;
use constant TB_SPLIT => &Wx::NewId;
use constant TB_CUT => &Wx::NewId;
use constant TB_SETTINGS => &Wx::NewId;
use constant CONFIG_TIMER_ID => &Wx::NewId;
# package variables to avoid passing lexicals to threads
our $THUMBNAIL_DONE_EVENT : shared = Wx::NewEventType;
@ -53,8 +52,6 @@ sub new {
$self->{model} = Slic3r::Model->new;
$self->{print} = Slic3r::Print->new;
$self->{objects} = [];
$self->{apply_config_timer} = Wx::Timer->new($self, CONFIG_TIMER_ID)
if $Slic3r::have_threads;
$self->{print}->set_status_cb(sub {
my ($percent, $message) = @_;
@ -291,10 +288,14 @@ sub new {
Slic3r::thread_cleanup();
});
EVT_TIMER($self, CONFIG_TIMER_ID, sub {
my ($self, $event) = @_;
$self->async_apply_config;
});
if ($Slic3r::have_threads) {
my $timer_id = Wx::NewId();
$self->{apply_config_timer} = Wx::Timer->new($self, $timer_id);
EVT_TIMER($self, $timer_id, sub {
my ($self, $event) = @_;
$self->async_apply_config;
});
}
$self->{canvas}->update_bed_size;
if ($self->{canvas3D}) {