@@ -68,27 +68,25 @@ sub new {
68
68
# Initialize preview notebook
69
69
$self -> {preview_notebook } = Wx::Notebook-> new($self , -1, wxDefaultPosition, [335,335], wxNB_BOTTOM);
70
70
71
- # Initialize 2D preview canvas
72
- $self -> {canvas } = Slic3r::GUI::Plater::2D-> new($self -> {preview_notebook }, wxDefaultSize, $self -> {objects }, $self -> {model }, $self -> {config });
73
- $self -> {preview_notebook }-> AddPage($self -> {canvas }, ' 2D' );
74
- $self -> {canvas }-> on_select_object(sub {
71
+ # Initialize handlers for canvases
72
+ my $on_select_object = sub {
75
73
my ($obj_idx ) = @_ ;
76
74
$self -> select_object($obj_idx );
77
- }) ;
78
- $self -> { canvas } -> on_double_click( sub {
75
+ };
76
+ my $ on_double_click = sub {
79
77
$self -> object_settings_dialog if $self -> selected_object;
80
- }) ;
81
- $self -> { canvas } -> on_right_click( sub {
82
- my ($click_pos ) = @_ ;
78
+ };
79
+ my $ on_right_click = sub {
80
+ my ($canvas , $ click_pos ) = @_ ;
83
81
84
82
my ($obj_idx , $object ) = $self -> selected_object;
85
83
return if !defined $obj_idx ;
86
84
87
85
my $menu = $self -> object_menu;
88
- $self -> { canvas } -> PopupMenu($menu , $click_pos );
86
+ $canvas -> PopupMenu($menu , $click_pos );
89
87
$menu -> Destroy;
90
- }) ;
91
- $self -> { canvas } -> on_instance_moved( sub {
88
+ };
89
+ my $ on_instance_moved = sub {
92
90
my ($obj_idx , $instance_idx ) = @_ ;
93
91
94
92
$self -> update;
@@ -100,12 +98,24 @@ sub new {
100
98
} else {
101
99
$self -> resume_background_process;
102
100
}
103
- });
101
+ };
102
+
103
+ # Initialize 2D preview canvas
104
+ $self -> {canvas } = Slic3r::GUI::Plater::2D-> new($self -> {preview_notebook }, wxDefaultSize, $self -> {objects }, $self -> {model }, $self -> {config });
105
+ $self -> {preview_notebook }-> AddPage($self -> {canvas }, ' 2D' );
106
+ $self -> {canvas }-> on_select_object($on_select_object );
107
+ $self -> {canvas }-> on_double_click($on_double_click );
108
+ $self -> {canvas }-> on_right_click(sub { $on_right_click -> ($self -> {canvas }, @_ ); });
109
+ $self -> {canvas }-> on_instance_moved($on_instance_moved );
104
110
105
111
# Initialize 3D preview and toolpaths preview
106
112
if ($Slic3r::GUI::have_OpenGL ) {
107
113
$self -> {canvas3D } = Slic3r::GUI::Plater::3D-> new($self -> {preview_notebook }, $self -> {objects }, $self -> {model }, $self -> {config });
108
114
$self -> {preview_notebook }-> AddPage($self -> {canvas3D }, ' 3D' );
115
+ $self -> {canvas3D }-> set_on_select_object($on_select_object );
116
+ $self -> {canvas3D }-> set_on_double_click($on_double_click );
117
+ $self -> {canvas3D }-> set_on_right_click(sub { $on_right_click -> ($self -> {canvas3D }, @_ ); });
118
+ $self -> {canvas3D }-> set_on_instance_moved($on_instance_moved );
109
119
110
120
$self -> {toolpaths2D } = Slic3r::GUI::Plater::2DToolpaths-> new($self -> {preview_notebook }, $self -> {print });
111
121
$self -> {preview_notebook }-> AddPage($self -> {toolpaths2D }, ' Preview' );
@@ -233,7 +243,7 @@ sub new {
233
243
}
234
244
235
245
$_ -> SetDropTarget(Slic3r::GUI::Plater::DropTarget-> new($self ))
236
- for $ self , $self -> {canvas }, $self -> {list };
246
+ for grep defined ( $_ ), $ self , $self -> {canvas }, $self -> { canvas3D }, $self -> {list };
237
247
238
248
EVT_COMMAND($self , -1, $THUMBNAIL_DONE_EVENT , sub {
239
249
my ($self , $event ) = @_ ;
@@ -655,7 +665,7 @@ sub rotate {
655
665
656
666
$self -> selection_changed; # refresh info (size etc.)
657
667
$self -> update;
658
- $self -> { canvas } -> Refresh ;
668
+ $self -> refresh_canvases ;
659
669
}
660
670
661
671
sub flip {
@@ -684,7 +694,7 @@ sub flip {
684
694
685
695
$self -> selection_changed; # refresh info (size etc.)
686
696
$self -> update;
687
- $self -> { canvas } -> Refresh ;
697
+ $self -> refresh_canvases ;
688
698
}
689
699
690
700
sub changescale {
@@ -739,7 +749,7 @@ sub changescale {
739
749
740
750
$self -> selection_changed(1); # refresh info (size, volume etc.)
741
751
$self -> update;
742
- $self -> { canvas } -> Refresh ;
752
+ $self -> refresh_canvases ;
743
753
}
744
754
745
755
sub arrange {
@@ -765,7 +775,7 @@ sub arrange {
765
775
} else {
766
776
$self -> resume_background_process;
767
777
}
768
- $self -> { canvas } -> Refresh ;
778
+ $self -> refresh_canvases ;
769
779
}
770
780
771
781
sub split_object {
@@ -1146,7 +1156,7 @@ sub on_thumbnail_made {
1146
1156
1147
1157
$self -> {objects }[$obj_idx ]-> transform_thumbnail($self -> {model }, $obj_idx );
1148
1158
$self -> update;
1149
- $self -> { canvas } -> Refresh ;
1159
+ $self -> refresh_canvases ;
1150
1160
}
1151
1161
1152
1162
# this method gets called whenever print center is changed or the objects' bounding box changes
@@ -1158,8 +1168,7 @@ sub update {
1158
1168
$self -> {model }-> center_instances_around_point($self -> bed_centerf);
1159
1169
}
1160
1170
1161
- $self -> {canvas }-> Refresh;
1162
- $self -> {canvas3D }-> update if $self -> {canvas3D };
1171
+ $self -> refresh_canvases;
1163
1172
}
1164
1173
1165
1174
sub on_extruders_change {
@@ -1207,7 +1216,7 @@ sub list_item_deselected {
1207
1216
1208
1217
if ($self -> {list }-> GetFirstSelected == -1) {
1209
1218
$self -> select_object(undef );
1210
- $self -> { canvas } -> Refresh ;
1219
+ $self -> refresh_canvases ;
1211
1220
}
1212
1221
}
1213
1222
@@ -1217,7 +1226,7 @@ sub list_item_selected {
1217
1226
1218
1227
my $obj_idx = $event -> GetIndex;
1219
1228
$self -> select_object($obj_idx );
1220
- $self -> { canvas } -> Refresh ;
1229
+ $self -> refresh_canvases ;
1221
1230
}
1222
1231
1223
1232
sub list_item_activated {
@@ -1385,6 +1394,13 @@ sub selected_object {
1385
1394
return ($obj_idx , $self -> {objects }[$obj_idx ]),
1386
1395
}
1387
1396
1397
+ sub refresh_canvases {
1398
+ my ($self ) = @_ ;
1399
+
1400
+ $self -> {canvas }-> Refresh;
1401
+ $self -> {canvas3D }-> update if $self -> {canvas3D };
1402
+ }
1403
+
1388
1404
sub validate_config {
1389
1405
my $self = shift ;
1390
1406
0 commit comments