mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 20:21:12 -06:00 
			
		
		
		
	Select standard camera views (left / right / top / bottom / front / rear / default)
by menu.
This commit is contained in:
		
							parent
							
								
									5268574ade
								
							
						
					
					
						commit
						ee4b9ab82f
					
				
					 3 changed files with 79 additions and 0 deletions
				
			
		|  | @ -73,6 +73,15 @@ use constant SELECTED_COLOR => [0,1,0,1]; | |||
| # For mesh selection: Mouse hovers over the object, but object not selected yet - dark green. | ||||
| use constant HOVER_COLOR    => [0.4,0.9,0,1]; | ||||
| 
 | ||||
| # phi / theta angles to orient the camera. | ||||
| use constant VIEW_DEFAULT    => [45.0,45.0]; | ||||
| use constant VIEW_LEFT       => [90.0,90.0]; | ||||
| use constant VIEW_RIGHT      => [-90.0,90.0]; | ||||
| use constant VIEW_TOP        => [0.0,0.0]; | ||||
| use constant VIEW_BOTTOM     => [0.0,180.0]; | ||||
| use constant VIEW_FRONT      => [0.0,90.0]; | ||||
| use constant VIEW_REAR       => [180.0,90.0]; | ||||
| 
 | ||||
| # make OpenGL::Array thread-safe | ||||
| { | ||||
|     no warnings 'redefine'; | ||||
|  | @ -321,6 +330,41 @@ sub set_viewport_from_scene { | |||
|     $self->_dirty(1); | ||||
| } | ||||
| 
 | ||||
| # Set the camera to a default orientation, | ||||
| # zoom to volumes. | ||||
| sub select_view { | ||||
|     my ($self, $direction) = @_; | ||||
|     my $dirvec; | ||||
|     if (ref($direction)) { | ||||
|         $dirvec = $direction; | ||||
|     } else { | ||||
|         if ($direction eq 'default') { | ||||
|             $dirvec = VIEW_DEFAULT; | ||||
|         } elsif ($direction eq 'left') { | ||||
|             $dirvec = VIEW_LEFT; | ||||
|         } elsif ($direction eq 'right') { | ||||
|             $dirvec = VIEW_RIGHT; | ||||
|         } elsif ($direction eq 'top') { | ||||
|             $dirvec = VIEW_TOP; | ||||
|         } elsif ($direction eq 'bottom') { | ||||
|             $dirvec = VIEW_BOTTOM; | ||||
|         } elsif ($direction eq 'front') { | ||||
|             $dirvec = VIEW_FRONT; | ||||
|         } elsif ($direction eq 'rear') { | ||||
|             $dirvec = VIEW_REAR; | ||||
|         } | ||||
|     } | ||||
|     $self->_sphi($dirvec->[0]); | ||||
|     $self->_stheta($dirvec->[1]); | ||||
|     # Avoid gimball lock. | ||||
|     $self->_stheta(150) if $self->_stheta > 150; | ||||
|     $self->_stheta(0) if $self->_stheta < 0; | ||||
|     # View everything. | ||||
|     $self->zoom_to_volumes; | ||||
|     $self->on_viewport_changed->() if $self->on_viewport_changed; | ||||
|     $self->Refresh; | ||||
| } | ||||
| 
 | ||||
| sub zoom_to_bounding_box { | ||||
|     my ($self, $bb) = @_; | ||||
|      | ||||
|  |  | |||
|  | @ -274,6 +274,18 @@ sub _init_menubar { | |||
|             $self->select_tab($tab_offset+2); | ||||
|         }, undef, 'printer_empty.png'); | ||||
|     } | ||||
| 
 | ||||
|     # View menu | ||||
|     if (!$self->{no_plater}) { | ||||
|         $self->{viewMenu} = Wx::Menu->new; | ||||
|         $self->_append_menu_item($self->{viewMenu}, "Default", 'Default View', sub { $self->select_view('default'); }); | ||||
|         $self->_append_menu_item($self->{viewMenu}, "Top"    , 'Top View'    , sub { $self->select_view('top'    ); }); | ||||
|         $self->_append_menu_item($self->{viewMenu}, "Bottom" , 'Bottom View' , sub { $self->select_view('bottom' ); }); | ||||
|         $self->_append_menu_item($self->{viewMenu}, "Front"  , 'Front View'  , sub { $self->select_view('front'  ); }); | ||||
|         $self->_append_menu_item($self->{viewMenu}, "Rear"   , 'Rear View'   , sub { $self->select_view('rear'   ); }); | ||||
|         $self->_append_menu_item($self->{viewMenu}, "Left"   , 'Left View'   , sub { $self->select_view('left'   ); }); | ||||
|         $self->_append_menu_item($self->{viewMenu}, "Right"  , 'Right View'  , sub { $self->select_view('right'  ); }); | ||||
|     } | ||||
|      | ||||
|     # Help menu | ||||
|     my $helpMenu = Wx::Menu->new; | ||||
|  | @ -307,6 +319,7 @@ sub _init_menubar { | |||
|         $menubar->Append($self->{plater_menu}, "&Plater") if $self->{plater_menu}; | ||||
|         $menubar->Append($self->{object_menu}, "&Object") if $self->{object_menu}; | ||||
|         $menubar->Append($windowMenu, "&Window"); | ||||
|         $menubar->Append($self->{viewMenu}, "&View") if $self->{viewMenu}; | ||||
|         $menubar->Append($helpMenu, "&Help"); | ||||
|         $self->SetMenuBar($menubar); | ||||
|     } | ||||
|  | @ -775,6 +788,14 @@ sub select_tab { | |||
|     $self->{tabpanel}->SetSelection($tab); | ||||
| } | ||||
| 
 | ||||
| # Set a camera direction, zoom to all objects. | ||||
| sub select_view { | ||||
|     my ($self, $direction) = @_; | ||||
|     if (! $self->{no_plater}) { | ||||
|         $self->{plater}->select_view($direction); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| sub _append_menu_item { | ||||
|     my ($self, $menu, $string, $description, $cb, $id, $icon) = @_; | ||||
|      | ||||
|  |  | |||
|  | @ -1827,6 +1827,20 @@ sub object_menu { | |||
|     return $menu; | ||||
| } | ||||
| 
 | ||||
| # Set a camera direction, zoom to all objects. | ||||
| sub select_view { | ||||
|     my ($self, $direction) = @_; | ||||
|     my $idx_page = $self->{preview_notebook}->GetSelection; | ||||
|     my $page = ($idx_page == &Wx::wxNOT_FOUND) ? '3D' : $self->{preview_notebook}->GetPageText($idx_page); | ||||
|     if ($page eq 'Preview') { | ||||
|         $self->{preview3D}->canvas->select_view($direction); | ||||
|         $self->{canvas3D}->set_viewport_from_scene($self->{preview3D}->canvas); | ||||
|     } else { | ||||
|         $self->{canvas3D}->select_view($direction); | ||||
|         $self->{preview3D}->canvas->set_viewport_from_scene($self->{canvas3D}); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| package Slic3r::GUI::Plater::DropTarget; | ||||
| use Wx::DND; | ||||
| use base 'Wx::FileDropTarget'; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 bubnikv
						bubnikv