Merge branch 'master' of https://github.com/prusa3d/Slic3r into opengl_to_cpp

This commit is contained in:
Enrico Turri 2018-06-26 12:20:23 +02:00
commit 9b2f760679
5 changed files with 492 additions and 419 deletions

View File

@ -1897,6 +1897,8 @@ sub on_config_change {
$update_scheduled = 1; $update_scheduled = 1;
} elsif ($opt_key eq 'printer_model') { } elsif ($opt_key eq 'printer_model') {
# update to force bed selection (for texturing) # update to force bed selection (for texturing)
Slic3r::GUI::_3DScene::set_bed_shape($self->{canvas3D}, $self->{config}->bed_shape) if $self->{canvas3D};
Slic3r::GUI::_3DScene::set_bed_shape($self->{preview3D}->canvas, $self->{config}->bed_shape) if $self->{preview3D};
$update_scheduled = 1; $update_scheduled = 1;
} }
} }

View File

@ -199,11 +199,11 @@ sub new {
my $old_zoom = $self->_zoom; my $old_zoom = $self->_zoom;
# Calculate the zoom delta and apply it to the current zoom factor # Calculate the zoom delta and apply it to the current zoom factor
my $zoom = $e->GetWheelRotation() / $e->GetWheelDelta(); my $zoom = -$e->GetWheelRotation() / $e->GetWheelDelta();
$zoom = max(min($zoom, 4), -4); $zoom = max(min($zoom, 4), -4);
$zoom /= 10; $zoom /= 10;
$self->_zoom($self->_zoom / (1-$zoom)); $self->_zoom($self->_zoom / (1-$zoom));
$self->_zoom(1) if $self->_zoom > 1; # prevent from zooming out too much $self->_zoom(1.25) if $self->_zoom > 1.25; # prevent from zooming out too much
{ {
# In order to zoom around the mouse point we need to translate # In order to zoom around the mouse point we need to translate
@ -227,7 +227,6 @@ sub new {
} }
$self->_dirty(1); $self->_dirty(1);
$self->Refresh;
}); });
EVT_MOUSE_EVENTS($self, \&mouse_event); EVT_MOUSE_EVENTS($self, \&mouse_event);
@ -255,8 +254,8 @@ sub mouse_event {
return if !$self->GetParent->enabled; return if !$self->GetParent->enabled;
my $pos = Slic3r::Pointf->new($e->GetPositionXY); my $pos = Slic3r::Pointf->new($e->GetPositionXY);
if ($e->Entering && &Wx::wxMSW) { if ($e->Entering && (&Wx::wxMSW || $^O eq 'linux')) {
# wxMSW needs focus in order to catch mouse wheel events # wxMSW and Linux needs focus in order to catch key events
$self->SetFocus; $self->SetFocus;
} elsif ($e->Dragging) { } elsif ($e->Dragging) {
if ($e->LeftIsDown || $e->MiddleIsDown || $e->RightIsDown) { if ($e->LeftIsDown || $e->MiddleIsDown || $e->RightIsDown) {
@ -276,7 +275,6 @@ sub mouse_event {
); );
$self->_dirty(1); $self->_dirty(1);
$self->Refresh;
} }
$self->_drag_start_xy($pos); $self->_drag_start_xy($pos);
} }
@ -631,6 +629,27 @@ sub Resize {
glLoadIdentity(); glLoadIdentity();
my $bb = $self->bb->clone; my $bb = $self->bb->clone;
# rescale in dependence of window aspect ratio
my $bb_size = $bb->size;
my $ratio_x = ($x != 0.0) ? $bb_size->x / $x : 1.0;
my $ratio_y = ($y != 0.0) ? $bb_size->y / $y : 1.0;
if ($ratio_y < $ratio_x) {
if ($ratio_y != 0.0) {
my $new_size_y = $bb_size->y * $ratio_x / $ratio_y;
my $half_delta_size_y = 0.5 * ($new_size_y - $bb_size->y);
$bb->set_y_min($bb->y_min - $half_delta_size_y);
$bb->set_y_max($bb->y_max + $half_delta_size_y);
}
} elsif ($ratio_x < $ratio_y) {
if ($ratio_x != 0.0) {
my $new_size_x = $bb_size->x * $ratio_y / $ratio_x;
my $half_delta_size_x = 0.5 * ($new_size_x - $bb_size->x);
$bb->set_x_min($bb->x_min - $half_delta_size_x);
$bb->set_x_max($bb->x_max + $half_delta_size_x);
}
}
# center bounding box around origin before scaling it # center bounding box around origin before scaling it
my $bb_center = $bb->center; my $bb_center = $bb->center;
@ -645,25 +664,25 @@ sub Resize {
# translate camera # translate camera
$bb->translate(@{$self->_camera_target}); $bb->translate(@{$self->_camera_target});
# keep camera_bb within total bb # # keep camera_bb within total bb
# (i.e. prevent user from panning outside the bounding box) # # (i.e. prevent user from panning outside the bounding box)
{ # {
my @translate = (0,0); # my @translate = (0,0);
if ($bb->x_min < $self->bb->x_min) { # if ($bb->x_min < $self->bb->x_min) {
$translate[X] += $self->bb->x_min - $bb->x_min; # $translate[X] += $self->bb->x_min - $bb->x_min;
} # }
if ($bb->y_min < $self->bb->y_min) { # if ($bb->y_min < $self->bb->y_min) {
$translate[Y] += $self->bb->y_min - $bb->y_min; # $translate[Y] += $self->bb->y_min - $bb->y_min;
} # }
if ($bb->x_max > $self->bb->x_max) { # if ($bb->x_max > $self->bb->x_max) {
$translate[X] -= $bb->x_max - $self->bb->x_max; # $translate[X] -= $bb->x_max - $self->bb->x_max;
} # }
if ($bb->y_max > $self->bb->y_max) { # if ($bb->y_max > $self->bb->y_max) {
$translate[Y] -= $bb->y_max - $self->bb->y_max; # $translate[Y] -= $bb->y_max - $self->bb->y_max;
} # }
$self->_camera_target->translate(@translate); # $self->_camera_target->translate(@translate);
$bb->translate(@translate); # $bb->translate(@translate);
} # }
# save camera # save camera
$self->_camera_bb($bb); $self->_camera_bb($bb);

File diff suppressed because it is too large Load Diff

View File

@ -6,6 +6,7 @@ xs/src/slic3r/GUI/ButtonsDescription.cpp
xs/src/slic3r/GUI/ConfigSnapshotDialog.cpp xs/src/slic3r/GUI/ConfigSnapshotDialog.cpp
xs/src/slic3r/GUI/ConfigWizard.cpp xs/src/slic3r/GUI/ConfigWizard.cpp
xs/src/slic3r/GUI/FirmwareDialog.cpp xs/src/slic3r/GUI/FirmwareDialog.cpp
xs/src/slic3r/GUI/GLCanvas3D.cpp
xs/src/slic3r/GUI/GUI.cpp xs/src/slic3r/GUI/GUI.cpp
xs/src/slic3r/GUI/MsgDialog.cpp xs/src/slic3r/GUI/MsgDialog.cpp
xs/src/slic3r/GUI/Tab.cpp xs/src/slic3r/GUI/Tab.cpp

View File

@ -29,6 +29,10 @@
int x_max() %code{% RETVAL = THIS->max.x; %}; int x_max() %code{% RETVAL = THIS->max.x; %};
int y_min() %code{% RETVAL = THIS->min.y; %}; int y_min() %code{% RETVAL = THIS->min.y; %};
int y_max() %code{% RETVAL = THIS->max.y; %}; int y_max() %code{% RETVAL = THIS->max.y; %};
void set_x_min(double val) %code{% THIS->min.x = val; %};
void set_x_max(double val) %code{% THIS->max.x = val; %};
void set_y_min(double val) %code{% THIS->min.y = val; %};
void set_y_max(double val) %code{% THIS->max.y = val; %};
std::string serialize() %code{% char buf[2048]; sprintf(buf, "%ld,%ld;%ld,%ld", THIS->min.x, THIS->min.y, THIS->max.x, THIS->max.y); RETVAL = buf; %}; std::string serialize() %code{% char buf[2048]; sprintf(buf, "%ld,%ld;%ld,%ld", THIS->min.x, THIS->min.y, THIS->max.x, THIS->max.y); RETVAL = buf; %};
bool defined() %code{% RETVAL = THIS->defined; %}; bool defined() %code{% RETVAL = THIS->defined; %};