AGX Dynamics 2.42.2.1
Loading...
Searching...
No Matches
SoilSimulationInterface.h
Go to the documentation of this file.
1/*
2Copyright 2007-2025. Algoryx Simulation AB.
3
4All AGX source code, intellectual property, documentation, sample code,
5tutorials, scene files and technical white papers, are copyrighted, proprietary
6and confidential material of Algoryx Simulation AB. You may not download, read,
7store, distribute, publish, copy or otherwise disseminate, use or expose this
8material unless having a written signed agreement with Algoryx Simulation AB, or having been
9advised so by Algoryx Simulation AB for a time limited evaluation, or having purchased a
10valid commercial license from Algoryx Simulation AB.
11
12Algoryx Simulation AB disclaims all responsibilities for loss or damage caused
13from using this software, unless otherwise stated in written agreements with
14Algoryx Simulation AB.
15*/
16
17#pragma once
18
19#include <agxTerrain/export.h>
20
22
23namespace agxTerrain
24{
25 class Terrain;
26
29
31
37 {
38 public:
43 {
44 SQUARE_LATTICE_PACK = 0,
45 HEXAGONAL_CLOSE_PACK = 1
46 };
47
48 public:
54
61
69
78
83
87 bool isValid( agx::Physics::GranularBodyPtr ptr ) const;
88
89#if (!defined SWIG ) || ( defined SWIGCSHARP || defined SWIGJAVA)
95#endif
96
102
113 agx::Real radius,
114 const agx::Vec3& spacing,
115 agx::Real jitterFactor = agx::Real( 0 ),
116 PACKING_TYPE packingType = PACKING_TYPE::SQUARE_LATTICE_PACK );
117
122
129
139 void addCollisionGroup(const agx::Name& name);
140
147
151 size_t getNumSoilParticles() const;
152
157
162
167
173
178
183
188
189 public:
191 void onAddNotification();
192 void onRemoveNotification();
193
196
197 protected:
199
200 agx::Physics::GranularBodyPtr _createSoilParticle( agx::Real radius, const agx::Vec3& position, const agx::Vec3& velocity, agx::Material* material );
201 void initGranularBodySystem();
202 bool isLastTerrain();
203 bool isTerrainPagerActive();
204
205 private:
206 Terrain* m_terrain;
207 agx::Physics::GranularBodySystemRef m_soilParticleSystem;
208 };
209
210 AGX_FORCE_INLINE bool SoilSimulationInterface::isValid(agx::Physics::GranularBodyPtr ptr) const
211 {
212 return m_soilParticleSystem != nullptr ? m_soilParticleSystem->isValid(ptr) : false;
213 }
214}
#define AGX_DECLARE_POINTER_TYPES(type)
Definition: Referenced.h:254
#define AGXTERRAIN_STORE_RESTORE_INTERFACE
#define AGXTERRAIN_EXPORT
The geometry representation used by the collision detection engine.
Definition: Geometry.h:92
Type-specific Array used for fast access into the data held by a Buffer.
Definition: Array.h:107
Interface class for accessing data and functions for the internal soil particle simulation used in ag...
void removeSoilParticle(agx::Physics::GranularBodyPtr ptr)
Tag a soil particle for removal at the last stages of the current time step.
agx::Physics::ParticlePtrVector spawnSoilParticlesInGeometry(agxCollide::Geometry *geometry, agx::Real radius, const agx::Vec3 &spacing, agx::Real jitterFactor=agx::Real(0), PACKING_TYPE packingType=PACKING_TYPE::SQUARE_LATTICE_PACK)
Spawns soil particles with the soil material from this terrain in a specified geometry.
void addCollisionGroup(agx::UInt32 id)
Add the specified id to a vector of group id, this will make the created soil particles part of the g...
size_t getNumSoilParticles() const
Get the number of soil particles active in the soil simulation.
void removeCollisionGroup(agx::UInt32 id)
Remove a group id from the vector of group ids.
agx::Physics::GranularBodySystem * getGranularBodySystem() const
Returns the internal GranularBodySystem used to simulate the soil particles.
void tagParticlesAsSoilParticles(agx::Physics::ParticlePtrVector &particles)
Tag specified particles as soil particles with material from this terrain.
agx::Bound3 getSoilParticleBound() const
Get the complete bound of the soil particle system active in the simulation.
void removeCollisionGroup(const agx::Name &name)
SoilSimulationInterface(Terrain *terrain)
Construct given terrain instance.
const agxCollide::ParticlePairContactVector & getParticleParticleContacts() const
Returns the particle-particle contacts in the internal soil simulation.
bool isParticleGeometryContactValid(agx::Physics::ParticleGeometryContactPtr contact)
void addCollisionGroup(const agx::Name &name)
SoilParticleArray getSoilParticles() const
Get the soil particles active in the simulation.
PACKING_TYPE
Packing type when generating.
agx::Real calculateSoilParticleBulkVolume() const
agx::Physics::GranularBodyPtr createSoilParticle(agx::Real radius, const agx::Vec3 &position=agx::Vec3(), const agx::Vec3 &velocity=agx::Vec3())
Create a soil particle with specified radius and material in the internal soil simulation.
agx::Real calculateSoilParticleSpecificVolume() const
agx::Physics::GranularBodyPtr createSoilParticle(const agx::Vec3 &position=agx::Vec3(), const agx::Vec3 &velocity=agx::Vec3())
Create a soil particle with nominal radius and material in the internal soil simulation.
bool isGeometryPtrValid(agx::Physics::GeometryPtr geometry) const
bool isValid(agx::Physics::GranularBodyPtr ptr) const
bool isParticlePairContactValid(agx::Physics::ParticlePairContactPtr contact)
const agxCollide::ParticleGeometryContactVector & getParticleGeometryContacts() const
Returns the particle-geometry contacts in the internal soil simulation.
A terrain model based a 3D grid model with overlapping height field that can be deformed by interacti...
Definition: Terrain.h:92
Representation of a name string.
Definition: Name.h:33
Pointer to a entity instance of type Physics.Geometry.
Pointer to a entity instance of type Physics.GranularBody.
Pointer to a entity instance of type Physics.ParticleGeometryContact.
Pointer to a entity instance of type Physics.ParticlePairContact.
Base class providing referencing counted objects.
Definition: Referenced.h:120
Vector containing 'raw' data.
Definition: agx/Vector.h:246
#define DOXYGEN_END_INTERNAL_BLOCK()
Definition: macros.h:89
#define DOXYGEN_START_INTERNAL_BLOCK()
Definition: macros.h:88
#define AGX_FORCE_INLINE
Definition: macros.h:58
The agxTerrain namespace contains a 3D model for a dynamic deformable Terrain and related classes.
Definition: Geometry.h:59
agx::Physics::GranularBodyPtrArray SoilParticleArray
agx::Physics::GranularBodyPtrVector SoilParticleVector
The agx namespace contains the dynamics/math part of the AGX Dynamics API.
uint32_t UInt32
Definition: Integer.h:32
double Real
Definition: Real.h:41