EditorMaterialSwitcher.hh
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2015 Open Source Robotics Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16 */
17 #ifndef GAZEBO_GUI_MODEL_EDITORMATERIALSWITCHER_HH_
18 #define GAZEBO_GUI_MODEL_EDITORMATERIALSWITCHER_HH_
19 
20 #include <string>
21 
23 #include "gazebo/util/system.hh"
24 
25 namespace gazebo
26 {
27  namespace gui
28  {
29  // forward declarations
30  class EditorMaterialListener;
31  class EditorRenderTargetListener;
32 
33  // typedefs that are used only in this class
35  std::shared_ptr<EditorRenderTargetListener>;
37  std::shared_ptr<EditorMaterialListener>;
38 
42  class GZ_GUI_VISIBLE EditorMaterialSwitcher
43  {
47  public: EditorMaterialSwitcher(const rendering::CameraPtr &_camera);
48 
50  public: ~EditorMaterialSwitcher() = default;
51 
55  public: void SetMaterialScheme(const std::string &_scheme);
56 
59  public: std::string MaterialScheme() const;
60 
63  private: EditorRenderTargetListenerPtr renderTargetListener;
64 
67  private: EditorMaterialListenerPtr materialListener;
68 
70  private: rendering::CameraPtr camera;
71 
73  private: std::string originalMaterialScheme;
74 
76  private: std::string materialScheme;
77  };
78 
81  class EditorRenderTargetListener : public Ogre::RenderTargetListener
82  {
87  const EditorMaterialListenerPtr &_switcher);
88 
90  public: ~EditorRenderTargetListener() = default;
91 
95  public: virtual void preRenderTargetUpdate(
96  const Ogre::RenderTargetEvent &_evt);
97 
101  public: virtual void postRenderTargetUpdate(
102  const Ogre::RenderTargetEvent &_evt);
103 
105  private: EditorMaterialListenerPtr materialListener;
106  };
107 
110  class EditorMaterialListener : public Ogre::MaterialManager::Listener
111  {
115  public: EditorMaterialListener(const rendering::CameraPtr &_camera);
116 
118  public: ~EditorMaterialListener() = default;
119 
130  public: virtual Ogre::Technique *handleSchemeNotFound(
131  uint16_t _schemeIndex, const Ogre::String &_schemeName,
132  Ogre::Material *_originalMaterial, uint16_t _lodIndex,
133  const Ogre::Renderable *_rend);
134 
136  private: rendering::CameraPtr camera;
137  };
138  }
139 }
140 #endif
std::shared_ptr< EditorMaterialListener > EditorMaterialListenerPtr
Definition: EditorMaterialSwitcher.hh:37
Ogre render target listener.
Definition: EditorMaterialSwitcher.hh:81
virtual void postRenderTargetUpdate(const Ogre::RenderTargetEvent &_evt)
Ogre's post-render update callback.
Ogre material listener.
Definition: EditorMaterialSwitcher.hh:110
EditorMaterialListener(const rendering::CameraPtr &_camera)
Constructor.
EditorRenderTargetListener(const EditorMaterialListenerPtr &_switcher)
Constructor.
Material switcher for the model editor used to toggle the material of the model.
Definition: EditorMaterialSwitcher.hh:42
virtual void preRenderTargetUpdate(const Ogre::RenderTargetEvent &_evt)
Ogre's pre-render update callback.
virtual Ogre::Technique * handleSchemeNotFound(uint16_t _schemeIndex, const Ogre::String &_schemeName, Ogre::Material *_originalMaterial, uint16_t _lodIndex, const Ogre::Renderable *_rend)
Ogre callback that is used to specify the material to use when the requested scheme is not found...
std::shared_ptr< EditorRenderTargetListener > EditorRenderTargetListenerPtr
Definition: EditorMaterialSwitcher.hh:35
boost::shared_ptr< Camera > CameraPtr
Definition: RenderTypes.hh:89
~EditorMaterialListener()=default
Destructor.
~EditorRenderTargetListener()=default
Destructor.