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 
199  public: void SetLOD(const unsigned int _value);
200 
203  public: unsigned int LOD() const;
204 
209  private: void CreateMaterial();
210 
218  private: void ModifyTerrain(Ogre::Vector3 _pos,
219  const double _outsideRadius, const double _insideRadius,
220  const double _weight, const std::string &_op);
221 
224  private: bool InitBlendMaps(Ogre::Terrain *_terrain);
225 
227  private: void ConfigureTerrainDefaults();
228 
232  private: void DefineTerrain(const int _x, const int _y);
233 
236  private: void SetupShadows(const bool _enabled);
237 
245  private: void UpdateTerrainHash(const std::string &_hash,
246  const boost::filesystem::path &_terrainDir);
247 
253  private: bool PrepareTerrain(
254  const boost::filesystem::path &_terrainDirPath);
255 
257  private: void SaveHeightmap();
258 
261  private: std::unique_ptr<HeightmapPrivate> dataPtr;
262  };
264  }
265 }
266 #endif
boost::shared_ptr< Scene > ScenePtr
Definition: RenderTypes.hh:82
Rendering a terrain using heightmap information.
Definition: Heightmap.hh:62
Encapsulates an image.
Definition: Image.hh:75
boost::shared_ptr< Camera > CameraPtr
Definition: RenderTypes.hh:90