mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-15 18:58:00 -06:00
WIP: Plater, tracking in Plater.pm
This commit is contained in:
parent
1f926964ee
commit
ceb295944a
3 changed files with 136 additions and 31 deletions
|
@ -41,6 +41,7 @@ our $PROCESS_COMPLETED_EVENT = Wx::NewEventType;
|
|||
my $PreventListEvents = 0;
|
||||
our $appController;
|
||||
|
||||
# XXX: VK: done, except callback handling and timer
|
||||
sub new {
|
||||
my ($class, $parent, %params) = @_;
|
||||
my $self = $class->SUPER::new($parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
|
||||
|
@ -813,12 +814,14 @@ sub new {
|
|||
return $self;
|
||||
}
|
||||
|
||||
# XXX: VK: WIP
|
||||
# sets the callback
|
||||
sub on_select_preset {
|
||||
my ($self, $cb) = @_;
|
||||
$self->{on_select_preset} = $cb;
|
||||
}
|
||||
|
||||
# XXX: merged with on_select_preset
|
||||
# Called from the platter combo boxes selecting the active print, filament or printer.
|
||||
sub _on_select_preset {
|
||||
my ($self, $group, $choice, $idx) = @_;
|
||||
|
@ -855,6 +858,7 @@ sub _on_select_preset {
|
|||
$self->on_config_change(wxTheApp->{preset_bundle}->full_config);
|
||||
}
|
||||
|
||||
# XXX: VK: done
|
||||
sub on_layer_editing_toggled {
|
||||
my ($self, $new_state) = @_;
|
||||
Slic3r::GUI::_3DScene::enable_layers_editing($self->{canvas3D}, $new_state);
|
||||
|
@ -873,11 +877,13 @@ sub on_layer_editing_toggled {
|
|||
$self->{canvas3D}->Update;
|
||||
}
|
||||
|
||||
sub GetFrame { # XXX: main_frame in C++ Plater
|
||||
# XXX: VK: done (Plater::priv::main_frame)
|
||||
sub GetFrame {
|
||||
my ($self) = @_;
|
||||
return &Wx::GetTopLevelParent($self);
|
||||
}
|
||||
|
||||
# XXX: not done
|
||||
# Called after the Preferences dialog is closed and the program settings are saved.
|
||||
# Update the UI based on the current preferences.
|
||||
sub update_ui_from_settings
|
||||
|
@ -889,6 +895,7 @@ sub update_ui_from_settings
|
|||
}
|
||||
}
|
||||
|
||||
# XXX: VK: done
|
||||
# Update preset combo boxes (Print settings, Filament, Material, Printer) from their respective tabs.
|
||||
# Called by
|
||||
# Slic3r::GUI::Tab::Print::_on_presets_changed
|
||||
|
@ -934,12 +941,14 @@ sub update_presets {
|
|||
wxTheApp->{preset_bundle}->export_selections(wxTheApp->{app_config});
|
||||
}
|
||||
|
||||
# XXX: VK: done, in on_action_add()
|
||||
sub add {
|
||||
my ($self) = @_;
|
||||
my @input_files = wxTheApp->open_model($self);
|
||||
$self->load_files(\@input_files);
|
||||
}
|
||||
|
||||
# XXX: VK: done
|
||||
sub load_files {
|
||||
my ($self, $input_files) = @_;
|
||||
|
||||
|
@ -1030,6 +1039,7 @@ sub load_files {
|
|||
return @obj_idx;
|
||||
}
|
||||
|
||||
# XXX: VK: done, except a few todos
|
||||
sub load_model_objects {
|
||||
my ($self, @model_objects) = @_;
|
||||
|
||||
|
@ -1112,6 +1122,7 @@ sub load_model_objects {
|
|||
return @obj_idx;
|
||||
}
|
||||
|
||||
# XXX: Removed
|
||||
sub bed_centerf {
|
||||
my ($self) = @_;
|
||||
|
||||
|
@ -1120,6 +1131,7 @@ sub bed_centerf {
|
|||
return Slic3r::Pointf->new(unscale($bed_center->x), unscale($bed_center->y)); #)
|
||||
}
|
||||
|
||||
# XXX: VK: done
|
||||
sub remove {
|
||||
my ($self, $obj_idx) = @_;
|
||||
|
||||
|
@ -1146,6 +1158,7 @@ sub remove {
|
|||
$self->update;
|
||||
}
|
||||
|
||||
# XXX: VK: done
|
||||
sub reset {
|
||||
my ($self) = @_;
|
||||
|
||||
|
@ -1166,6 +1179,7 @@ sub reset {
|
|||
$self->update;
|
||||
}
|
||||
|
||||
# XXX: not done
|
||||
sub increase {
|
||||
my ($self, $copies) = @_;
|
||||
$copies //= 1;
|
||||
|
@ -1197,6 +1211,7 @@ sub increase {
|
|||
$self->schedule_background_process;
|
||||
}
|
||||
|
||||
# XXX: not done
|
||||
sub decrease {
|
||||
my ($self, $copies_asked) = @_;
|
||||
my $copies = $copies_asked // 1;
|
||||
|
@ -1224,6 +1239,7 @@ sub decrease {
|
|||
$self->update;
|
||||
}
|
||||
|
||||
# XXX: not done
|
||||
sub set_number_of_copies {
|
||||
my ($self) = @_;
|
||||
# get current number of copies
|
||||
|
@ -1242,6 +1258,7 @@ sub set_number_of_copies {
|
|||
}
|
||||
}
|
||||
|
||||
# XXX: not done (?)
|
||||
sub _get_number_from_user { # XXX: Enrico
|
||||
my ($self, $title, $prompt_message, $error_message, $default, $only_positive) = @_;
|
||||
for (;;) {
|
||||
|
@ -1264,6 +1281,7 @@ sub _get_number_from_user { # XXX: Enrico
|
|||
}
|
||||
}
|
||||
|
||||
# XXX: not done
|
||||
sub rotate {
|
||||
my ($self, $angle, $axis, $relative_key, $axis_x, $axis_y, $axis_z) = @_;
|
||||
$relative_key //= 'absolute'; # relative or absolute coordinates
|
||||
|
@ -1334,6 +1352,7 @@ sub rotate {
|
|||
$self->update;
|
||||
}
|
||||
|
||||
# XXX: not done
|
||||
sub mirror {
|
||||
my ($self, $axis) = @_;
|
||||
|
||||
|
@ -1363,6 +1382,7 @@ sub mirror {
|
|||
$self->update;
|
||||
}
|
||||
|
||||
# XXX: not done
|
||||
sub changescale {
|
||||
my ($self, $axis, $tosize) = @_;
|
||||
|
||||
|
@ -1437,6 +1457,7 @@ sub changescale {
|
|||
$self->update;
|
||||
}
|
||||
|
||||
# XXX: not done
|
||||
sub arrange {
|
||||
my ($self) = @_;
|
||||
|
||||
|
@ -1454,6 +1475,7 @@ sub arrange {
|
|||
$self->update(0);
|
||||
}
|
||||
|
||||
# XXX: not done
|
||||
sub split_object {
|
||||
my $self = shift;
|
||||
|
||||
|
@ -1485,6 +1507,7 @@ sub split_object {
|
|||
}
|
||||
}
|
||||
|
||||
# XXX: not done
|
||||
# Trigger $self->async_apply_config() after 500ms.
|
||||
# The call is delayed to avoid restarting the background processing during typing into an edit field.
|
||||
sub schedule_background_process {
|
||||
|
@ -1492,6 +1515,7 @@ sub schedule_background_process {
|
|||
$self->{apply_config_timer}->Start(0.5 * 1000, 1); # 1 = one shot, every half a second.
|
||||
}
|
||||
|
||||
# XXX: not done
|
||||
# Executed asynchronously by a timer every PROCESS_DELAY (0.5 second).
|
||||
# The timer is started by schedule_background_process(),
|
||||
sub async_apply_config {
|
||||
|
@ -1526,6 +1550,7 @@ sub async_apply_config {
|
|||
}
|
||||
}
|
||||
|
||||
# XXX: not done
|
||||
# Background processing is started either by the "Slice now" button, by the "Export G-code button" or by async_apply_config().
|
||||
sub start_background_process {
|
||||
my ($self) = @_;
|
||||
|
@ -1546,6 +1571,7 @@ sub start_background_process {
|
|||
$self->{background_slicing_process}->start;
|
||||
}
|
||||
|
||||
# XXX: not done
|
||||
# Stop the background processing
|
||||
sub stop_background_process {
|
||||
my ($self) = @_;
|
||||
|
@ -1554,6 +1580,7 @@ sub stop_background_process {
|
|||
# $self->{preview3D}->reload_print if $self->{preview3D};
|
||||
}
|
||||
|
||||
# XXX: not done
|
||||
# Called by the "Slice now" button, which is visible only if the background processing is disabled.
|
||||
sub reslice {
|
||||
# explicitly cancel a previous thread and start a new one.
|
||||
|
@ -1574,6 +1601,7 @@ sub reslice {
|
|||
}
|
||||
}
|
||||
|
||||
# XXX: VK: done
|
||||
sub export_gcode {
|
||||
my ($self, $output_file) = @_;
|
||||
|
||||
|
@ -1654,6 +1682,7 @@ sub export_gcode {
|
|||
return $self->{export_gcode_output_file};
|
||||
}
|
||||
|
||||
# XXX: not done
|
||||
# This message should be called by the background process synchronously.
|
||||
sub on_update_print_preview {
|
||||
my ($self) = @_;
|
||||
|
@ -1666,6 +1695,7 @@ sub on_update_print_preview {
|
|||
Slic3r::GUI::_3DScene::reload_scene($self->{canvas3D}, 1);
|
||||
}
|
||||
|
||||
# XXX: not done
|
||||
# This gets called also if we have no threads.
|
||||
sub on_progress_event {
|
||||
my ($self, $percent, $message) = @_;
|
||||
|
@ -1676,6 +1706,7 @@ sub on_progress_event {
|
|||
$self->statusbar->SetStatusText("$message...");
|
||||
}
|
||||
|
||||
# XXX: not done
|
||||
# Called when the G-code export finishes, either successfully or with an error.
|
||||
# This gets called also if we don't have threads.
|
||||
sub on_process_completed {
|
||||
|
@ -1743,6 +1774,7 @@ sub on_process_completed {
|
|||
# $self->{preview3D}->reload_print if $self->{preview3D};
|
||||
}
|
||||
|
||||
# XXX: partially done in the Sidebar
|
||||
# Fill in the "Sliced info" box with the result of the G-code generator.
|
||||
sub print_info_box_show {
|
||||
my ($self, $show) = @_;
|
||||
|
@ -1819,6 +1851,7 @@ sub print_info_box_show {
|
|||
$panel->Refresh;
|
||||
}
|
||||
|
||||
# XXX: not done - to be removed
|
||||
sub do_print {
|
||||
my ($self) = @_;
|
||||
|
||||
|
@ -1832,6 +1865,7 @@ sub do_print {
|
|||
$printer_panel->load_print_job($self->{print_file}, $filament_stats);
|
||||
}
|
||||
|
||||
# XXX: VK: done
|
||||
sub export_stl {
|
||||
my ($self) = @_;
|
||||
return if !@{$self->{objects}};
|
||||
|
@ -1842,6 +1876,7 @@ sub export_stl {
|
|||
$self->statusbar->SetStatusText(L("STL file exported to ").$output_file);
|
||||
}
|
||||
|
||||
# XXX: not done
|
||||
sub reload_from_disk {
|
||||
my ($self) = @_;
|
||||
|
||||
|
@ -1873,6 +1908,7 @@ sub reload_from_disk {
|
|||
$self->remove($obj_idx);
|
||||
}
|
||||
|
||||
# XXX: VK: done
|
||||
sub export_object_stl {
|
||||
my ($self) = @_;
|
||||
my ($obj_idx, $object) = $self->selected_object;
|
||||
|
@ -1884,6 +1920,7 @@ sub export_object_stl {
|
|||
$self->statusbar->SetStatusText(L("STL file exported to ").$output_file);
|
||||
}
|
||||
|
||||
# XXX: not done
|
||||
sub fix_through_netfabb {
|
||||
my ($self) = @_;
|
||||
my ($obj_idx, $object) = $self->selected_object;
|
||||
|
@ -1912,6 +1949,7 @@ sub fix_through_netfabb {
|
|||
$self->remove($obj_idx);
|
||||
}
|
||||
|
||||
# XXX: VK: WIP
|
||||
sub export_amf {
|
||||
my ($self) = @_;
|
||||
return if !@{$self->{objects}};
|
||||
|
@ -1928,6 +1966,7 @@ sub export_amf {
|
|||
}
|
||||
}
|
||||
|
||||
# XXX: VK: WIP
|
||||
sub export_3mf {
|
||||
my ($self) = @_;
|
||||
return if !@{$self->{objects}};
|
||||
|
@ -1944,6 +1983,7 @@ sub export_3mf {
|
|||
}
|
||||
}
|
||||
|
||||
# XXX: VK: done
|
||||
# Ask user to select an output file for a given file format (STl, AMF, 3MF).
|
||||
# Propose a default file name based on the 'output_filename_format' configuration value.
|
||||
sub _get_export_file {
|
||||
|
@ -1993,6 +2033,7 @@ sub _get_export_file {
|
|||
# $self->{objects}[$obj_idx]->thumbnail(undef);
|
||||
#}
|
||||
|
||||
# XXX: VK: done
|
||||
# this method gets called whenever print center is changed or the objects' bounding box changes
|
||||
# (i.e. when an object is added/removed/moved/rotated/scaled)
|
||||
sub update {
|
||||
|
@ -2016,6 +2057,7 @@ sub update {
|
|||
$self->Thaw;
|
||||
}
|
||||
|
||||
# XXX: done in sidebar?
|
||||
# When a printer technology is changed, the UI needs to be updated to show/hide needed preset combo boxes.
|
||||
sub show_preset_comboboxes{
|
||||
my ($self, $showSLA) = @_; #if showSLA is oposite value to "ptFFF"
|
||||
|
@ -2034,6 +2076,7 @@ sub show_preset_comboboxes{
|
|||
$self->Layout;
|
||||
}
|
||||
|
||||
# XXX: not done
|
||||
# When a number of extruders changes, the UI needs to be updated to show a single filament selection combo box per extruder.
|
||||
# Also the wxTheApp->{preset_bundle}->filament_presets needs to be resized accordingly
|
||||
# and some reasonable default has to be selected for the additional extruders.
|
||||
|
@ -2078,6 +2121,7 @@ sub on_extruders_change {
|
|||
$self->Layout;
|
||||
}
|
||||
|
||||
# XXX: not done
|
||||
sub on_config_change {
|
||||
my ($self, $config) = @_;
|
||||
|
||||
|
@ -2144,6 +2188,7 @@ sub on_config_change {
|
|||
$self->schedule_background_process;
|
||||
}
|
||||
|
||||
# XXX: not done
|
||||
sub item_changed_selection {
|
||||
my ($self, $obj_idx) = @_;
|
||||
|
||||
|
@ -2159,6 +2204,7 @@ sub item_changed_selection {
|
|||
}
|
||||
}
|
||||
|
||||
# XXX: VK: done
|
||||
sub collect_selections {
|
||||
my ($self) = @_;
|
||||
my $selections = [];
|
||||
|
@ -2168,6 +2214,7 @@ sub collect_selections {
|
|||
return $selections;
|
||||
}
|
||||
|
||||
# XXX: not done
|
||||
# Called when clicked on the filament preset combo box.
|
||||
# When clicked on the icon, show the color picker.
|
||||
sub filament_color_box_lmouse_down
|
||||
|
@ -2221,6 +2268,7 @@ sub filament_color_box_lmouse_down
|
|||
# }
|
||||
#}
|
||||
|
||||
# XXX: not done
|
||||
sub changed_object_settings {
|
||||
my ($self, $obj_idx, $parts_changed, $part_settings_changed) = @_;
|
||||
|
||||
|
@ -2246,6 +2294,7 @@ sub changed_object_settings {
|
|||
}
|
||||
}
|
||||
|
||||
# XXX: VK: done
|
||||
# Called to update various buttons depending on whether there are any objects or
|
||||
# whether background processing (export of a G-code, sending to Octoprint, forced background re-slicing) is active.
|
||||
sub object_list_changed {
|
||||
|
@ -2276,6 +2325,7 @@ sub object_list_changed {
|
|||
for grep $self->{"btn_$_"}, qw(reslice export_gcode print send_gcode);
|
||||
}
|
||||
|
||||
# XXX: VK: WIP
|
||||
# Selection of an active 3D object changed.
|
||||
sub selection_changed {
|
||||
my ($self) = @_;
|
||||
|
@ -2393,6 +2443,7 @@ sub selection_changed {
|
|||
$self->{right_panel}->Thaw;
|
||||
}
|
||||
|
||||
# XXX: VK: done
|
||||
sub select_object {
|
||||
my ($self, $obj_idx, $child) = @_;
|
||||
|
||||
|
@ -2413,6 +2464,7 @@ sub select_object {
|
|||
$self->selection_changed(1);
|
||||
}
|
||||
|
||||
# XXX: not done
|
||||
sub select_object_from_cpp {
|
||||
my ($self, $obj_idx, $vol_idx) = @_;
|
||||
|
||||
|
@ -2457,16 +2509,19 @@ sub select_object_from_cpp {
|
|||
$self->selection_changed(1);
|
||||
}
|
||||
|
||||
# XXX: VK: done
|
||||
sub selected_object {
|
||||
my ($self) = @_;
|
||||
my $obj_idx = first { $self->{objects}[$_]->selected } 0..$#{ $self->{objects} };
|
||||
return defined $obj_idx ? ($obj_idx, $self->{objects}[$obj_idx]) : undef;
|
||||
}
|
||||
|
||||
# XXX: VK: done
|
||||
sub statusbar {
|
||||
return $_[0]->GetFrame->{statusbar};
|
||||
}
|
||||
|
||||
# XXX: not done, to be removed (?)
|
||||
sub object_menu {
|
||||
my ($self) = @_;
|
||||
|
||||
|
@ -2577,6 +2632,7 @@ sub object_menu {
|
|||
return $menu;
|
||||
}
|
||||
|
||||
# XXX: not done
|
||||
# Set a camera direction, zoom to all objects.
|
||||
sub select_view {
|
||||
my ($self, $direction) = @_;
|
||||
|
@ -2594,6 +2650,8 @@ sub select_view {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
# XXX: VK: done, in PlaterDropTarget
|
||||
package Slic3r::GUI::Plater::DropTarget;
|
||||
use Wx::DND;
|
||||
use base 'Wx::FileDropTarget';
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue