00001 /* 00002 * Copyright (c) 2011, 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 #ifndef GRIPPER_CLICK_PLUGIN_H_ 00031 #define GRIPPER_CLICK_PLUGIN_H_ 00032 00033 00034 #include "pr2_gripper_click/GripperClickPickupAction.h" 00035 #include "pr2_gripper_click/GripperClickPlaceAction.h" 00036 00037 00038 namespace rviz { 00039 class VisualizationManager; 00040 } 00041 00042 namespace Ogre { 00043 class SceneNode; 00044 } 00045 00046 namespace pr2_gripper_click { 00047 00048 00049 // Interface class for a plugin that hooks into the 00050 // plugin switcher 00051 template<class ActionClass> 00052 class GripperClickPlugin 00053 { 00054 public: 00055 00056 typedef typename ActionClass::_action_result_type::_result_type ResultType; 00057 typedef typename ActionClass::_action_goal_type::_goal_type GoalType; 00058 00059 GripperClickPlugin( std::string name ) : 00060 name_( name ), 00061 description_changed_(false) {} 00062 00063 virtual ~GripperClickPlugin(){} 00064 00065 std::string getName() { return name_; } 00066 00067 // use this to change the help text that appears in the bottom part of the window 00068 void setDescription( const std::string &description ) { 00069 description_ = description; 00070 description_changed_ = true; 00071 } 00072 00073 // the interface all plugins have to provide: 00074 00075 virtual bool setGoal( const typename GoalType::ConstPtr &goal ) = 0; 00076 00077 // do the actual initialization, instantiate ogre elements etc. 00078 virtual void init( rviz::VisualizationManager *vis_manager, Ogre::SceneManager* scene_manager, Ogre::SceneNode* camera_node ) = 0; 00079 00080 virtual void update(float wall_dt, float ros_dt) = 0; 00081 00082 // @return true if a result is available 00083 virtual bool hasValidResult() = 0; 00084 00085 // make the orge content visible / invisible 00086 virtual void show( ) = 0; 00087 virtual void hide( ) = 0; 00088 00089 virtual void onRenderWindowMouseEvents( wxMouseEvent& event, Ogre::Ray &mouse_ray ) = 0; 00090 00091 //get the current gripper params for visualisation 00092 virtual void getGripperParams( bool &visible, Ogre::Vector3 &position, Ogre::Quaternion &orientation, float &angle ) 00093 { 00094 visible = false; 00095 } 00096 00097 virtual bool getResult(ResultType &result) = 0; 00098 00099 std::string& getDescription() { return description_; } 00100 bool descriptionChanged() { bool c=description_changed_; description_changed_=false; return c; } 00101 00102 private: 00103 00104 std::string name_; 00105 00106 std::string description_; 00107 bool description_changed_; 00108 }; 00109 00110 } 00111 00112 #endif /* GRIPPER_CLICK_PLUGIN_H_ */