00001 /* 00002 * Copyright (c) 2016, Lukas Pfeifhofer <lukas.pfeifhofer@devlabs.pro> 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 * 1. Redistributions of source code must retain the above copyright notice, 00009 * this list of conditions and the following disclaimer. 00010 * 00011 * 2. Redistributions in binary form must reproduce the above copyright notice, 00012 * this list of conditions and the following disclaimer in the documentation 00013 * and/or other materials provided with the distribution. 00014 * 00015 * 3. Neither the name of the copyright holder nor the names of its contributors 00016 * may be used to endorse or promote products derived from this software without 00017 * specific prior written permission. 00018 * 00019 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 00020 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00021 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00022 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 00023 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 00024 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 00025 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 00026 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 00027 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 00028 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00029 * POSSIBILITY OF SUCH DAMAGE. 00030 */ 00031 00032 #ifndef MARKER_RVIZ_PLUGIN_MARKER_H 00033 #define MARKER_RVIZ_PLUGIN_MARKER_H 00034 00035 #include <string> 00036 #include "rviz/ogre_helpers/object.h" 00037 #include "rviz/ogre_helpers/axes.h" 00038 #include "rviz/ogre_helpers/movable_text.h" 00039 00040 namespace Ogre { 00041 class SceneManager; 00042 00043 class SceneNode; 00044 00045 class Entity; 00046 } 00047 00048 namespace marker_rviz_plugin { 00049 00050 class MarkerResources { 00051 public: 00052 MarkerResources(); 00053 00054 ~MarkerResources(); 00055 }; 00056 00057 class Marker : public rviz::Object { 00058 public: 00059 00060 Marker(Ogre::SceneManager *scene_manager, Ogre::SceneNode *parent_node = 0, int id = -1); 00061 00062 virtual ~Marker(); 00063 00064 void setShowAxes(bool showAxes); 00065 00066 void setShowMarker(bool showMarker); 00067 00068 void setShowLabel(bool showLabel); 00069 00070 void setColorLabel(Ogre::ColourValue color); 00071 00072 virtual void setColor(float r, float g, float b, float a); 00073 00074 virtual void setOrientation(const Ogre::Quaternion &orientation); 00075 00076 virtual void setPosition(const Ogre::Vector3 &position); 00077 00078 virtual void setScale(const Ogre::Vector3 &scale); 00079 00080 virtual const Ogre::Vector3 &getPosition(); 00081 00082 virtual const Ogre::Quaternion &getOrientation(); 00083 00084 void setUserData(const Ogre::Any &data); 00085 00086 protected: 00087 static MarkerResources static_resources_; // load static resources once for this class 00088 00089 Ogre::SceneNode *scene_node_; 00090 Ogre::SceneNode *markerNode_; 00091 00092 Ogre::Entity *markerEntity_; 00093 rviz::Axes *axes_; 00094 rviz::MovableText *text_; 00095 Ogre::SceneNode *text_node_; 00096 00097 }; 00098 00099 } 00100 00101 00102 #endif //MARKER_RVIZ_PLUGIN_MARKER_H