paysages3d/src/definition/TerrainHeightMap.h

55 lines
1.7 KiB
C++

#ifndef TERRAINHEIGHTMAP_H
#define TERRAINHEIGHTMAP_H
#include "definition_global.h"
#include "BaseDefinition.h"
namespace paysages {
namespace definition {
class TerrainHeightMapData;
class DEFINITIONSHARED_EXPORT TerrainHeightMap : public BaseDefinition
{
public:
TerrainHeightMap(TerrainDefinition* terrain);
virtual ~TerrainHeightMap();
virtual void copy(BaseDefinition* destination) const override;
virtual void save(PackStream* stream) const override;
virtual void load(PackStream* stream) override;
inline TerrainDefinition* getTerrain() const {return terrain;}
int getInterpolatedHeight(double x, double z, double* result);
int getGridHeight(int x, int z, double* result);
bool isPainted(int x, int z);
unsigned long getMemoryStats() const;
void clearPainting();
void brushElevation(const TerrainHeightMapBrush &brush, double value);
void brushSmooth(const TerrainHeightMapBrush &brush, double value);
void brushAddNoise(const TerrainHeightMapBrush &brush, NoiseGenerator* generator, double value);
void brushReset(const TerrainHeightMapBrush &brush, double value);
void brushFlatten(const TerrainHeightMapBrush &brush, double height, double force);
void endBrushStroke();
friend class TerrainHeightMapBrush;
friend class TerrainHeightMapBrushSmooth;
friend class TerrainHeightMapBrushReset;
protected:
double* getDataPointer(TerrainHeightMapData* data, int x, int z, TerrainHeightMapData* fallback, TerrainDefinition* terrain, int grow);
private:
TerrainDefinition* terrain;
TerrainHeightMapData* merged_data;
TerrainHeightMapData* brush_data;
};
}
}
#endif // TERRAINHEIGHTMAP_H