Heightmap.hh
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2012 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_RENDERING_HEIGHTMAP_HH_
18 #define GAZEBO_RENDERING_HEIGHTMAP_HH_
19 
20 #include <vector>
21 #include <string>
22 
23 #include <ignition/math/Vector3.hh>
24 #include <ignition/math/Vector2.hh>
25 
26 #include "gazebo/msgs/MessageTypes.hh"
29 #include "gazebo/util/system.hh"
30 
31 namespace boost
32 {
33  namespace filesystem
34  {
35  class path;
36  }
37 }
38 
39 namespace Ogre
40 {
41  class TerrainGroup;
42  class Terrain;
43 }
44 
45 namespace gazebo
46 {
47  namespace common
48  {
49  class Image;
50  }
51 
52  namespace rendering
53  {
54  // Forward declare private data.
55  class HeightmapPrivate;
56 
59 
62  class GZ_RENDERING_VISIBLE Heightmap
63  {
66  public: explicit Heightmap(ScenePtr _scene);
67 
69  public: virtual ~Heightmap();
70 
72  public: void Load();
73 
76  public: void LoadFromMsg(ConstVisualPtr &_msg);
77 
83  public: double Height(const double _x, const double _y,
84  const double _z = 1000) const;
85 
95  public: bool Flatten(CameraPtr _camera,
96  const ignition::math::Vector2i &_mousePos,
97  const double _outsideRadius,
98  const double _insideRadius,
99  const double _weight = 0.1);
100 
110  public: bool Smooth(CameraPtr _camera,
111  const ignition::math::Vector2i &_mousePos,
112  const double _outsideRadius,
113  const double _insideRadius,
114  const double _weight = 0.1);
115 
125  public: bool Raise(CameraPtr _camera,
126  const ignition::math::Vector2i &_mousePos,
127  const double _outsideRadius,
128  const double _insideRadius,
129  const double _weight = 0.1);
130 
140  public: bool Lower(CameraPtr _camera,
141  const ignition::math::Vector2i &_mousePos,
142  const double _outsideRadius,
143  const double _insideRadius,
144  const double _weight = 0.1);
145 
149  public: double AvgHeight(const ignition::math::Vector3d &_pos,
150  const double _brushSize) const;
151 
154  public: void SetWireframe(const bool _show);
155 
158  public: Ogre::TerrainGroup *OgreTerrain() const;
159 
162  public: common::Image Image() const;
163 
169  public: Ogre::TerrainGroup::RayResult MouseHit(CameraPtr _camera,
170  const ignition::math::Vector2i &_mousePos) const;
171 
176  public: void SplitHeights(const std::vector<float> &_heightmap,
177  const int _n, std::vector<std::vector<float> > &_v);
178 
182  public: unsigned int TerrainSubdivisionCount() const;
183 
186  public: void SetMaterial(const std::string &_materialName);
187 
190  public: std::string MaterialName() const;
191 
196  private: void CreateMaterial();
197 
205  private: void ModifyTerrain(Ogre::Vector3 _pos,
206  const double _outsideRadius, const double _insideRadius,
207  const double _weight, const std::string &_op);
208 
211  private: bool InitBlendMaps(Ogre::Terrain *_terrain);
212 
214  private: void ConfigureTerrainDefaults();
215 
219  private: void DefineTerrain(const int _x, const int _y);
220 
223  private: void SetupShadows(const bool _enabled);
224 
232  private: void UpdateTerrainHash(const std::string &_hash,
233  const boost::filesystem::path &_terrainDir);
234 
241  private: bool PrepareTerrainPaging(
242  const boost::filesystem::path &_terrainDirPath);
243 
246  private: std::unique_ptr<HeightmapPrivate> dataPtr;
247  };
249  }
250 }
251 #endif
Definition: JointMaker.hh:44
Forward declarations for the common classes.
Definition: Animation.hh:33
boost::shared_ptr< Scene > ScenePtr
Definition: RenderTypes.hh:81
Rendering a terrain using heightmap information.
Definition: Heightmap.hh:62
Definition: JointMaker.hh:39
Encapsulates an image.
Definition: Image.hh:74
boost::shared_ptr< Camera > CameraPtr
Definition: RenderTypes.hh:89