28 typedef
agx::HashTable<
agx::Vec3i,
agx::Vec3f> VoxelToVelocityTable;
29 typedef
agx::HashTable<
agx::Vec3i,
agx::UInt32> VoxelToTerrainMaterialTable;
37 : terrainMaterial( nullptr )
38 , material( nullptr ) {}
41 : terrainMaterial(terrainMaterial)
55 static constexpr float MAX_MASS = 1.0;
80 TerrainDataAtlas(
agx::Real voxelSize,
size_t resolutionX,
size_t resolutionY,
agx::Real lowestminimumHeight);
89 float getOccupancy(
const Grid::GridCoord& coord)
const;
97 agx::Real getMass(
const Grid::GridCoord& coord)
const;
111 float addOccupancy(
const agx::Vec2i& ti,
float occupancy);
126 float addOccupancy(
const Grid::GridCoord& coord,
float occupancy);
153 float removeOccupancy(
const Grid::GridCoord& coord,
float occupancy,
agx::Real& removedMass);
189 bool addMass(
const Grid::GridCoord& coord,
agx::Real mass,
float compaction);
199 float getMassOccupancy(
const Grid::GridCoord& coord, MassType massType)
const;
208 void setMassOccupancy(
const Grid::GridCoord& coord, MassType massType,
float value);
218 float addMassOccupancy(
const Grid::GridCoord& coord, MassType massType,
float value);
226 void setCompaction(
const Grid::GridCoord& coord,
float value);
233 float getCompaction(
const Grid::GridCoord& coord)
const;
242 float getCompactedSolidMassOccupancy(
const Grid::GridCoord& coord)
const;
249 float getMaximumAllowedSolidMassOccupancyInVoxel(
const Grid::GridCoord& coord)
const;
256 bool isActiveVoxel(
const Grid::GridCoord& coord, MassType massType)
const;
266 float getTotalMassOccupancyInVoxel(
const Grid::GridCoord& coord)
const;
268 void setVelocity(
const Grid::GridCoord& coord,
const agx::Vec3f& value);
269 agx::Vec3f getVelocity(
const Grid::GridCoord& coord)
const;
270 void clearVelocityGrid();
272 bool addNewTerrainMaterial(TerrainMaterial* terrainMaterial);
273 void setDefaultTerrainMaterial(TerrainMaterial* defaultTerrainMaterial,
agx::Material* defaultMaterial =
nullptr);
274 TerrainMaterial* getDefaulTerrainMaterial()
const;
275 int setTerrainMaterialInVoxels(
const Grid::GridCoordVector& coords, TerrainMaterial* terrainMaterial);
276 bool setTerrainMaterialInVoxel(
const Grid::GridCoord& coord, TerrainMaterial* terrainMaterial);
277 bool setTerrainMaterialInVoxel(
const Grid::GridCoord& coord,
const agx::UInt32 terrainMaterialIndex);
282 agx::UInt32 getTerrainMaterialPairIndex(TerrainMaterial* terrainMaterial)
const;
287 bool terrainMaterialIndexIsValid(
const agx::UInt32& terrainMaterialIndex)
const;
289 TerrainMaterial* getTerrainMaterialInVoxel(
const Grid::GridCoord& coord)
const;
290 TerrainMaterial* getTerrainMaterialByIndex(
const agx::UInt32 terrainMaterialIndex)
const;
293 void clearTerrainMaterials();
298 void setTerrainMaterialIndexInVoxelNoChecks(
const Grid::GridCoord& coord,
const agx::UInt32 terrainMaterialIndex);
301 bool exchangeTerrainMaterial(TerrainMaterial* oldTerrainMaterial, TerrainMaterial* newTerrainMaterial);
302 bool removeTerrainMaterial(TerrainMaterial* terrainMaterialToRemove);
303 bool associateMaterialToTerrainMaterial(
agx::Material* material, TerrainMaterial* terrainMaterial);
307 agx::Material* getMaterial(TerrainMaterial* terrainMaterial)
const;
308 agx::Material* getMaterialInVoxel(
const Grid::GridCoord& coord)
const;
313 agx::UInt32 getTerrainMaterialIndex(
const Grid::GridCoord& coord)
const;
314 void clearTerrainMaterialGrid();
315 bool removeSpecificTerrainMaterialFromVoxel(
const Grid::GridCoord& coord);
317 MaterialPairVector getTerrainMaterialPairs();
318 void setTerrainMaterialPairs(MaterialPairVector materialPairs);
320 Grid* getSolidGridMassOccupancyData()
const;
322 BasicGrid* getGridMassOccupancyData(MassType massType)
const;
323 BasicGrid* getCompactionGridData()
const;
325 size_t getTotalGridMemoryUsage()
const;
327 size_t getTotalActiveVoxels()
const;
329 void clearMassOccupancyGrid(MassType massType);
331 agx::Real getMassOccupancyInTerrain(MassType massType)
const;
333 VoxelToVelocityTable& getVelocityTable();
334 VoxelToTerrainMaterialTable& getTerrainMaterialTable();
336 bool getEnableMinimumHeights()
const;
338 void setEnableMinimumHeights(
bool enable);
354 virtual ~TerrainDataAtlas();
356 agx::Real getBaseDensity(
const Grid::GridCoord& coord)
const;
357 float getBaseDensityFloat(
const Grid::GridCoord& coord)
const;
359 void fillGridVector();
369 VoxelToVelocityTable m_voxelToVelocityTable;
373 VoxelToTerrainMaterialTable m_voxelToTerrainMaterialTable;
377 Grid* m_rawSolidMassOccupancyGrid;
#define AGX_DECLARE_POINTER_TYPES(type)
#define AGXTERRAIN_STORE_RESTORE_INTERFACE
#define AGXTERRAIN_EXPORT
Main material class which acts as a holder of a Surface Material and a Bulk material.
Base class providing referencing counted objects.
Templated stack array class.
Vector containing 'raw' data.
#define DOXYGEN_END_INTERNAL_BLOCK()
#define DOXYGEN_START_INTERNAL_BLOCK()
agx::SymmetricPair< const agx::Material * > MaterialPair
The agxTerrain namespace contains a 3D model for a dynamic deformable Terrain and related classes.
agx::ref_ptr< BasicGrid > BasicGridRef
agx::ref_ptr< TerrainMaterial > TerrainMaterialRef
The agx namespace contains the dynamics/math part of the AGX Dynamics API.
UInt32 hash(const T &key)