Sync viewport of 3D views. #2628

This commit is contained in:
Alessandro Ranellucci 2015-02-16 00:37:36 +01:00
parent 09c8563e71
commit d44bf38906
2 changed files with 23 additions and 0 deletions

View file

@ -16,6 +16,7 @@ __PACKAGE__->mk_accessors( qw(_quat _dirty init
enable_cutting
enable_picking
enable_moving
on_viewport_changed
on_hover
on_select
on_double_click
@ -108,6 +109,7 @@ sub new {
-($pos->y - $size->y/2) * ($zoom) / $self->_zoom,
0,
) if 0;
$self->on_viewport_changed->() if $self->on_viewport_changed;
$self->_dirty(1);
$self->Refresh;
});
@ -207,6 +209,7 @@ sub mouse_event {
);
$self->_quat(mulquats($self->_quat, \@quat));
}
$self->on_viewport_changed->() if $self->on_viewport_changed;
$self->Refresh;
}
$self->_drag_start_pos($pos);
@ -220,6 +223,7 @@ sub mouse_event {
$self->_camera_target->translate(
@{$orig->vector_to($cur_pos)->negative},
);
$self->on_viewport_changed->() if $self->on_viewport_changed;
$self->Refresh;
}
$self->_drag_start_xy($pos);
@ -256,6 +260,17 @@ sub reset_objects {
$self->_dirty(1);
}
sub set_viewport_from_scene {
my ($self, $scene) = @_;
$self->_sphi($scene->_sphi);
$self->_stheta($scene->_stheta);
$self->_camera_target($scene->_camera_target);
$self->_zoom($scene->_zoom);
$self->_quat($scene->_quat);
$self->_dirty(1);
}
sub zoom_to_bounding_box {
my ($self, $bb) = @_;
@ -267,6 +282,8 @@ sub zoom_to_bounding_box {
# center view around bounding box center
$self->_camera_target($bb->center);
$self->on_viewport_changed->() if $self->on_viewport_changed;
}
sub zoom_to_bed {