Finished the wipe tower UI.
This commit is contained in:
parent
70db88dd90
commit
6fa280be0b
5 changed files with 45 additions and 26 deletions
|
@ -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) {
|
||||
|
|
|
@ -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')) {
|
||||
|
|
|
@ -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 };
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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])
|
||||
|
|
Loading…
Reference in a new issue