Finished the wipe tower UI.

This commit is contained in:
bubnikv 2017-05-19 21:48:32 +02:00
parent 70db88dd90
commit 6fa280be0b
5 changed files with 45 additions and 26 deletions

View file

@ -910,7 +910,10 @@ sub UseVBOs {
if (! defined ($self->{use_VBOs})) {
# This is a special path for wxWidgets on GTK, where an OpenGL context is initialized
# first when an OpenGL widget is shown for the first time. How ugly.
return 0 if (! $self->init && $^O eq 'linux');
# It seems like the wipe tower configuration fills in the VBOs before the window is created.
# Therefore it is safer to wait for the first screen refresh on Windows and OSX as well.
# return 0 if (! $self->init && $^O eq 'linux');
return 0 if (! $self->init);
# Don't use VBOs if anything fails.
$self->{use_VBOs} = 0;
if ($self->GetContext) {

View file

@ -107,6 +107,13 @@ sub new {
$self->{canvas3D}->set_on_double_click($on_double_click);
$self->{canvas3D}->set_on_right_click(sub { $on_right_click->($self->{canvas3D}, @_); });
$self->{canvas3D}->set_on_instances_moved($on_instances_moved);
$self->{canvas3D}->set_on_wipe_tower_moved(sub {
my ($new_pos_3f) = @_;
my $cfg = Slic3r::Config->new;
$cfg->set('wipe_tower_x', $new_pos_3f->x);
$cfg->set('wipe_tower_y', $new_pos_3f->y);
$self->GetFrame->{options_tabs}{print}->load_config($cfg);
});
$self->{canvas3D}->set_on_model_update(sub {
if ($Slic3r::GUI::Settings->{_}{background_processing}) {
$self->{apply_config_timer}->Stop if defined $self->{apply_config_timer};
@ -1713,8 +1720,7 @@ sub on_config_change {
$self->{preview3D}->set_bed_shape($self->{config}->bed_shape)
if $self->{preview3D};
$update_scheduled = 1;
} elsif ($opt_key =~ '^wipe_tower' || $opt_key == 'single_extruder_multi_material') {
#$self->{canvas3D}->reload_scene if $self->{canvas3D};
} elsif ($opt_key =~ '^wipe_tower' || $opt_key eq 'single_extruder_multi_material') {
$update_scheduled = 1;
} elsif ($opt_key eq 'serial_port') {
if ($config->get('serial_port')) {

View file

@ -26,6 +26,7 @@ sub new {
$self->{config} = $config;
$self->{on_select_object} = sub {};
$self->{on_instances_moved} = sub {};
$self->{on_wipe_tower_moved} = sub {};
$self->on_select(sub {
my ($volume_idx) = @_;
@ -36,6 +37,8 @@ sub new {
my @volume_idxs = @_;
my %done = (); # prevent moving instances twice
my $object_moved;
my $wipe_tower_moved;
foreach my $volume_idx (@volume_idxs) {
my $volume = $self->volumes->[$volume_idx];
my $obj_idx = $volume->object_idx;
@ -50,13 +53,17 @@ sub new {
->offset
->translate($volume->origin->x, $volume->origin->y); #))
$model_object->invalidate_bounding_box;
$object_moved = 1;
} elsif ($obj_idx == 1000) {
# Move a wipe tower proxy.
$wipe_tower_moved = $volume->origin;
}
}
$self->{on_instances_moved}->()
if $self->{on_instances_moved};
if $object_moved && $self->{on_instances_moved};
$self->{on_wipe_tower_moved}->($wipe_tower_moved)
if $wipe_tower_moved && $self->{on_wipe_tower_moved};
});
return $self;
@ -82,6 +89,11 @@ sub set_on_instances_moved {
$self->{on_instances_moved} = $cb;
}
sub set_on_wipe_tower_moved {
my ($self, $cb) = @_;
$self->{on_wipe_tower_moved} = $cb;
}
sub set_on_model_update {
my ($self, $cb) = @_;
$self->on_model_update($cb);
@ -90,14 +102,6 @@ sub set_on_model_update {
sub reload_scene {
my ($self) = @_;
if (0) {
my $i = 1;
print STDERR "3D::reload_scene - Stack Trace:\n";
while ( (my @call_details = (caller($i++))) ){
print STDERR $call_details[1].":".$call_details[2]." in function ".$call_details[3]."\n";
}
}
$self->reset_objects;
$self->update_bed_size;
@ -107,10 +111,6 @@ sub reload_scene {
$self->select_volume($_) for @volume_idxs;
}
}
if (0) {
print "Config: $self->{config}\n";
$self->{config}->save('d:\temp\cfg.ini');
}
if (defined $self->{config}->nozzle_diameter) {
# Should the wipe tower be visualized?
my $extruders_count = scalar @{ $self->{config}->nozzle_diameter };

View file

@ -390,13 +390,17 @@ sub update_tree {
sub update_dirty {
my $self = shift;
my $list_updated;
foreach my $i ($self->{default_suppressed}..$#{$self->{presets}}) {
my $preset = $self->get_preset($i);
$self->{presets_choice}->SetString(
$i - $self->{default_suppressed},
($i == $self->current_preset && $self->is_dirty) ? $preset->name . " (modified)" : $preset->name);
my $label = ($i == $self->current_preset && $self->is_dirty) ? $preset->name . " (modified)" : $preset->name;
my $idx = $i - $self->{default_suppressed};
if ($self->{presets_choice}->GetString($idx) ne $label) {
$self->{presets_choice}->SetString($idx, $label);
$list_updated = 1;
}
}
$self->{presets_choice}->SetSelection($self->current_preset - $self->{default_suppressed}); # http://trac.wxwidgets.org/ticket/13769
$self->{presets_choice}->SetSelection($self->current_preset - $self->{default_suppressed}) if ($list_updated); # http://trac.wxwidgets.org/ticket/13769
$self->_on_presets_changed;
}
@ -473,11 +477,13 @@ sub load_config {
foreach my $opt_key (@{$self->{config}->diff($config)}) {
$self->{config}->set($opt_key, $config->get($opt_key));
$keys_modified{$opt_key} = 1;
$self->update_dirty;
}
# Initialize UI components with the config values.
$self->reload_config;
$self->_update(\%keys_modified);
if (keys(%keys_modified)) {
$self->update_dirty;
# Initialize UI components with the config values.
$self->reload_config;
$self->_update(\%keys_modified);
}
}
sub get_preset_config {
@ -1444,8 +1450,11 @@ sub _extruders_count_changed {
$self->_on_value_change('extruders_count', $extruders_count);
}
sub _extruder_options { qw(nozzle_diameter min_layer_height max_layer_height extruder_offset retract_length retract_lift retract_lift_above retract_lift_below retract_speed deretract_speed retract_before_wipe retract_restart_extra retract_before_travel wipe
retract_layer_change retract_length_toolchange retract_restart_extra_toolchange) }
sub _extruder_options {
qw(nozzle_diameter min_layer_height max_layer_height extruder_offset
retract_length retract_lift retract_lift_above retract_lift_below retract_speed deretract_speed
retract_before_wipe retract_restart_extra retract_before_travel wipe
retract_layer_change retract_length_toolchange retract_restart_extra_toolchange) }
sub _build_extruder_pages {
my $self = shift;

View file

@ -442,6 +442,7 @@ $j
Retraction options:
--retract-length Length of retraction in mm when pausing extrusion (default: $config->{retract_length}[0])
--retract-speed Speed for retraction in mm/s (default: $config->{retract_speed}[0])
--deretract-speed Speed for deretraction (loading of filament after a retract) in mm/s (default: $config->{retract_speed}[0])
--retract-restart-extra
Additional amount of filament in mm to push after
compensating retraction (default: $config->{retract_restart_extra}[0])