selection_tool.cpp
Go to the documentation of this file.
00001 /*
00002  * Copyright (c) 2008, Willow Garage, Inc.
00003  * All rights reserved.
00004  *
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following conditions are met:
00007  *
00008  *     * Redistributions of source code must retain the above copyright
00009  *       notice, this list of conditions and the following disclaimer.
00010  *     * Redistributions in binary form must reproduce the above copyright
00011  *       notice, this list of conditions and the following disclaimer in the
00012  *       documentation and/or other materials provided with the distribution.
00013  *     * Neither the name of the Willow Garage, Inc. nor the names of its
00014  *       contributors may be used to endorse or promote products derived from
00015  *       this software without specific prior written permission.
00016  *
00017  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00018  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00020  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
00021  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00022  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00023  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00024  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00025  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00026  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00027  * POSSIBILITY OF SUCH DAMAGE.
00028  */
00029 
00030 #include <QKeyEvent>
00031 
00032 #include <OgreRay.h>
00033 #include <OgreSceneManager.h>
00034 #include <OgreCamera.h>
00035 #include <OgreMovableObject.h>
00036 #include <OgreRectangle2D.h>
00037 #include <OgreSceneNode.h>
00038 #include <OgreViewport.h>
00039 #include <OgreMaterialManager.h>
00040 #include <OgreTexture.h>
00041 #include <OgreTextureManager.h>
00042 
00043 #include <ros/time.h>
00044 
00045 #include "move_tool.h"
00046 
00047 #include "rviz/ogre_helpers/camera_base.h"
00048 #include "rviz/ogre_helpers/qt_ogre_render_window.h"
00049 #include "rviz/selection/selection_manager.h"
00050 #include "rviz/visualization_manager.h"
00051 #include "rviz/render_panel.h"
00052 #include "rviz/display.h"
00053 #include "rviz/viewport_mouse_event.h"
00054 #include "rviz/load_resource.h"
00055 
00056 #include "selection_tool.h"
00057 
00058 namespace rviz
00059 {
00060 
00061 SelectionTool::SelectionTool()
00062   : Tool()
00063   , move_tool_( new MoveTool() )
00064   , selecting_( false )
00065   , sel_start_x_( 0 )
00066   , sel_start_y_( 0 )
00067   , moving_( false )
00068 {
00069   shortcut_key_ = 's';
00070   access_all_keys_ = true;
00071 }
00072 
00073 SelectionTool::~SelectionTool()
00074 {
00075   delete move_tool_;
00076 }
00077 
00078 void SelectionTool::onInitialize()
00079 {
00080   move_tool_->initialize( context_ );
00081 }
00082 
00083 void SelectionTool::activate()
00084 {
00085   setStatus( "Click and drag to select objects on the screen." );
00086   context_->getSelectionManager()->setTextureSize(512);
00087   selecting_ = false;
00088   moving_ = false;
00089 //  context_->getSelectionManager()->enableInteraction(true);
00090 }
00091 
00092 void SelectionTool::deactivate()
00093 {
00094   context_->getSelectionManager()->removeHighlight();
00095 }
00096 
00097 void SelectionTool::update(float wall_dt, float ros_dt)
00098 {
00099   SelectionManager* sel_manager = context_->getSelectionManager();
00100 
00101   if (!selecting_)
00102   {
00103     sel_manager->removeHighlight();
00104   }
00105 }
00106 
00107 int SelectionTool::processMouseEvent( ViewportMouseEvent& event )
00108 {
00109   SelectionManager* sel_manager = context_->getSelectionManager();
00110 
00111   int flags = 0;
00112 
00113   if( event.alt() )
00114   {
00115     moving_ = true;
00116     selecting_ = false;
00117   }
00118   else
00119   {
00120     moving_ = false;
00121 
00122     if( event.leftDown() )
00123     {
00124       selecting_ = true;
00125 
00126       sel_start_x_ = event.x;
00127       sel_start_y_ = event.y;
00128     }
00129   }
00130 
00131   if( selecting_ )
00132   {
00133     sel_manager->highlight( event.viewport, sel_start_x_, sel_start_y_, event.x, event.y );
00134 
00135     if( event.leftUp() )
00136     {
00137       SelectionManager::SelectType type = SelectionManager::Replace;
00138 
00139       M_Picked selection;
00140 
00141       if( event.shift() )
00142       {
00143         type = SelectionManager::Add;
00144       }
00145       else if( event.control() )
00146       {
00147         type = SelectionManager::Remove;
00148       }
00149 
00150       sel_manager->select( event.viewport, sel_start_x_, sel_start_y_, event.x, event.y, type );
00151 
00152       selecting_ = false;
00153     }
00154 
00155     flags |= Render;
00156   }
00157   else if( moving_ )
00158   {
00159     sel_manager->removeHighlight();
00160 
00161     flags = move_tool_->processMouseEvent( event );
00162 
00163     if( event.type == QEvent::MouseButtonRelease )
00164     {
00165       moving_ = false;
00166     }
00167   }
00168   else
00169   {
00170     sel_manager->highlight( event.viewport, event.x, event.y, event.x, event.y );
00171   }
00172 
00173   return flags;
00174 }
00175 
00176 int SelectionTool::processKeyEvent( QKeyEvent* event, RenderPanel* panel )
00177 {
00178   SelectionManager* sel_manager = context_->getSelectionManager();
00179 
00180   if( event->key() == Qt::Key_F )
00181   {
00182     sel_manager->focusOnSelection();
00183   }
00184 
00185   return Render;
00186 }
00187 
00188 } // end namespace rviz
00189 
00190 #include <pluginlib/class_list_macros.h>
00191 PLUGINLIB_EXPORT_CLASS( rviz::SelectionTool, rviz::Tool )


rviz
Author(s): Dave Hershberger, David Gossow, Josh Faust
autogenerated on Thu Jun 6 2019 18:02:16