Fixed camera shifting after generating gcode

This commit is contained in:
Enrico Turri 2018-02-19 11:28:56 +01:00
parent ac904b2731
commit 7375f6a6f5
4 changed files with 17 additions and 1 deletions

View file

@ -68,6 +68,7 @@ __PACKAGE__->mk_accessors( qw(_quat _dirty init
_zoom _zoom
_legend_enabled _legend_enabled
_apply_zoom_to_volumes_filter
) ); ) );
@ -142,6 +143,7 @@ sub new {
$self->_zoom(1); $self->_zoom(1);
$self->_legend_enabled(0); $self->_legend_enabled(0);
$self->use_plain_shader(0); $self->use_plain_shader(0);
$self->_apply_zoom_to_volumes_filter(0);
# Collection of GLVolume objects # Collection of GLVolume objects
$self->volumes(Slic3r::GUI::_3DScene::GLVolume::Collection->new); $self->volumes(Slic3r::GUI::_3DScene::GLVolume::Collection->new);
@ -704,14 +706,18 @@ sub zoom_to_volume {
sub zoom_to_volumes { sub zoom_to_volumes {
my ($self) = @_; my ($self) = @_;
$self->_apply_zoom_to_volumes_filter(1);
$self->zoom_to_bounding_box($self->volumes_bounding_box); $self->zoom_to_bounding_box($self->volumes_bounding_box);
$self->_apply_zoom_to_volumes_filter(0);
} }
sub volumes_bounding_box { sub volumes_bounding_box {
my ($self) = @_; my ($self) = @_;
my $bb = Slic3r::Geometry::BoundingBoxf3->new; my $bb = Slic3r::Geometry::BoundingBoxf3->new;
$bb->merge($_->transformed_bounding_box) for @{$self->volumes}; foreach my $v (@{$self->volumes}) {
$bb->merge($v->transformed_bounding_box) if (! $self->_apply_zoom_to_volumes_filter || $v->zoom_to_volumes);
}
return $bb; return $bb;
} }

View file

@ -2211,26 +2211,31 @@ void _3DScene::_update_gcode_volumes_visibility(const GCodePreviewData& preview_
case GCodePreviewVolumeIndex::Travel: case GCodePreviewVolumeIndex::Travel:
{ {
volume->is_active = preview_data.travel.is_visible; volume->is_active = preview_data.travel.is_visible;
volume->zoom_to_volumes = false;
break; break;
} }
case GCodePreviewVolumeIndex::Retraction: case GCodePreviewVolumeIndex::Retraction:
{ {
volume->is_active = preview_data.retraction.is_visible; volume->is_active = preview_data.retraction.is_visible;
volume->zoom_to_volumes = false;
break; break;
} }
case GCodePreviewVolumeIndex::Unretraction: case GCodePreviewVolumeIndex::Unretraction:
{ {
volume->is_active = preview_data.unretraction.is_visible; volume->is_active = preview_data.unretraction.is_visible;
volume->zoom_to_volumes = false;
break; break;
} }
case GCodePreviewVolumeIndex::Shell: case GCodePreviewVolumeIndex::Shell:
{ {
volume->is_active = preview_data.shell.is_visible; volume->is_active = preview_data.shell.is_visible;
volume->zoom_to_volumes = false;
break; break;
} }
default: default:
{ {
volume->is_active = false; volume->is_active = false;
volume->zoom_to_volumes = false;
break; break;
} }
} }

View file

@ -215,6 +215,7 @@ public:
drag_group_id(-1), drag_group_id(-1),
selected(false), selected(false),
is_active(true), is_active(true),
zoom_to_volumes(true),
hover(false), hover(false),
tverts_range(0, size_t(-1)), tverts_range(0, size_t(-1)),
qverts_range(0, size_t(-1)) qverts_range(0, size_t(-1))
@ -253,6 +254,8 @@ public:
bool selected; bool selected;
// Whether or not this volume is active for rendering // Whether or not this volume is active for rendering
bool is_active; bool is_active;
// Whether or not to use this volume when applying zoom_to_volumes()
bool zoom_to_volumes;
// Boolean: Is mouse over this object? // Boolean: Is mouse over this object?
bool hover; bool hover;

View file

@ -42,6 +42,8 @@
%code%{ RETVAL = THIS->hover; %}; %code%{ RETVAL = THIS->hover; %};
void set_hover(int i) void set_hover(int i)
%code%{ THIS->hover = i; %}; %code%{ THIS->hover = i; %};
int zoom_to_volumes()
%code%{ RETVAL = THIS->zoom_to_volumes; %};
int object_idx() const; int object_idx() const;
int volume_idx() const; int volume_idx() const;