AGX Dynamics 2.42.3.0
Loading...
Searching...
No Matches
Shovel.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 <agx/BitState.h>
27#include <agx/Plane.h>
28
29namespace agxCollide
30{
31 class Geometry;
32 class Shape;
33}
34
35namespace agxTerrain
36{
37 //--- Forward declarations ---//
38 class ShovelAggregateContactMaterialContainer;
41 class Terrain;
42 class TerrainMaterial;
43
45
48
63 {
64 public:
66 class Settings;
67
74 static Shovel* find(const agxSDK::Simulation* simulation, const agx::Name& name);
75
82 static Shovel* find(const agxSDK::Simulation* simulation, const agx::Uuid& uuid);
83
89 static ShovelPtrVector findAll(const agxSDK::Simulation* simulation);
90
105 Shovel( agx::RigidBody* shovelBody,
106 const agx::Line& topEdge,
107 const agx::Line& cuttingEdge,
108 const agx::Vec3& toothDirection=agx::Vec3(0,0,0),
109 agx::Real toothLength=0.15,
110 ShovelDebugRenderSettings* settings = nullptr);
111
123 Shovel( agx::RigidBody* shovelBody,
124 const agx::Line& topEdge,
125 const agx::Line& cuttingEdge,
126 const agx::Line& teethEdge,
127 ShovelDebugRenderSettings* settings = nullptr );
128
133 {
137 PRIMARY = 0,
142 DEFORM_BACK = 1,
147 DEFORM_RIGHT = 2,
152 DEFORM_LEFT = 3
153 };
154
155 /*
156 \return if the shovel is valid after construction. If it is not valid, it will not be possible to add the shovel to
157 a simulation.
158 */
159 virtual bool isValid() const override;
160
165
170
176
182
186 const agx::Line& getTopEdge() const;
187
192
196 const agx::Line& getCuttingEdge() const;
197
202
207
212
217
222
228
234
239
245
250
255
260
265
267 {
272 };
273
278
296
301 void setTopEdge(agx::Line topEdge);
302
307 void setCuttingEdge(agx::Line cuttingEdge);
308
316 void setTeethEdge( agx::Line teethEdge );
317
322 void setCutTopPlane(agx::Plane cutTopPlane);
323
328
333
338
343
348
353
358
369
382
387
392
397
405
413
425 agx::Real getTotalSoilBulkVolume( agx::Real packingFraction = 0.67 ) const;
426
431
438
444
450
455
462
470
476 void setEnable(bool enable);
477
482 bool getEnable() const;
483
489
494
501 void setConnectedShovel( Shovel* shovel );
502
508
509 public:
510
515
520
525
530
535
540
545
550
555
560
566
571 void setEnableForTerrain(Terrain* terrain, bool enable);
572
576 bool getEnableForTerrain(Terrain* terrain) const;
577
587 Shovel::ExcavationMode mode = Shovel::ExcavationMode::PRIMARY );
588
589
598 agx::ContactMaterial* getShovelAggregateContactMaterial( Shovel::ExcavationMode mode = Shovel::ExcavationMode::PRIMARY ) const;
599
604
609
614
622
629
637
644
651
660
670
680
688 bool getPenetrationForce(agx::Vec3& force, agx::Vec3& torque) const;
689
696
703
710
711
718
724 bool isDigging() const;
725
730
738
739 /*
740 \return the active terrain that the shovel is acting on. If the shovel is currently not excavating, return nullptr.
741 */
743
744 /*
745 \return if the shovel is currently active. The shovel is active either while interacting with a terrain, or if
746 there are particels in the inner shape.
747 */
748 bool isActive() const;
749
750 /*
751 \return the current number of maximum soil aggregate contact points
752 */
754
755 /*
756 \return the current number of active soil aggregate
757 contact points in the shovel.
758 */
760
765 {
766 public:
771
777
782 void setEnable(bool enable);
783
788 void setEnableCreateDynamicMass(bool enable);
789
794 void setEnableForceFeedback(bool enable);
795
799 bool getEnable() const;
800
805
810
815
816 void store( agxStream::OutputArchive& out ) const { m_excavationFlags.store( out ); }
817 void restore( agxStream::InputArchive& in ) { m_excavationFlags.restore( in ); }
818
819 private:
820 enum StateFlags : agx::UInt32
821 {
822 ENABLED = 1 << 0,
823 ENABLE_CREATE_DYNAMIC_MASS = 1 << 1,
824 ENABLE_FORCE_FEEDBACK = 1 << 2
825 };
826 using Flags = agx::BitState<StateFlags, agx::UInt32>;
827 Flags m_excavationFlags;
828 };
829
837 agx::Plane calculateCutTopPlane();
838
845 agx::Plane calculateTeethTopPlane();
846
852 void setEdgesCodirectional();
853
854 bool getShovelPlanes(agx::Plane& bottomPlane,
855 agx::Plane& backPlane,
856 agx::Plane& leftPlane,
857 agx::Plane& rightPlane) const;
858
859 void removeTerrainShovelContacts(Terrain* terrain);
860
861 /* Contact filtering for deformers */
862 void removeTerrainShovelContactsDeformer(Terrain* terrain);
863
864 agx::Real getSubmergedEdgeLength(const agx::Line& edge, const Terrain* terrain) const;
865
866 agx::Vec3 getSurfaceTangentFromDeadLoad(agx::Real deadload) const;
867
868 agx::Vec3 getCuttingEdgeVelocity();
869
870 void setInnerContactArea( agx::Real contactArea );
871
872 /* Set whether the settings are dirty. Prompts the shovel to update internal classes due to changed settings. */
873 void setSettingsAreDirty(bool enable);
874
875 bool getSettingsAreDirty() const;
876
877 bool hasValidTeethVolume() const;
878
879 bool hasValidToothSettings() const;
880
881 void updateVoxelCollisionGeometries();
882
883 agx::Physics::GranularBodySystem* getGranularBodySystem() const;
884
885 virtual void onAssemblyAdd( agxSDK::Assembly* assembly ) override;
886
892 agx::Vec3 getUpDirection() const;
893
894 const agx::Vec3iVector& getVoxelsInActiveZoneLastTimeStep();
895
896 void init();
897
898 void updateTeethGeometry();
899
900 ShovelDebugRenderSettings* getDebugRenderSettings() const { return m_debugRenderSettings; }
901
902 void aggregatePreCollide();
903
904 void updateAggregateCacheData();
905
906 void debugRenderAggregatePositions();
907
908 agx::Vec3 getGeneratedForwardVector() const { return m_forwardDirection; }
909
910 agx::Vec3 getGeneratedBottomVector() const { return m_bottomPlateDirection; }
911
912 TangentPatchData& getTangentPatchData() { return m_tangentData; }
913
916
917 protected:
922
926 virtual ~Shovel();
927
928 /* Default value for contact region threshold */
929 agx::Real computeDefaultContactRegionThreshold() const;
930
931 /*
932 Creates a frame which uses the shovel body's frame as parent. Other shovel internals
933 attaches to this frame to make sure they follow along the shovel rigid body.
934 Requires that the shovel body isn't nullptr.
935 */
936 agx::Frame* createParentFrame();
937
938 void initSoilAggregate();
939
940 agxSDK::TerrainManager* getTerrainManager();
941
942 TerrainPtrVec getTerrainsInSimulation();
943
947 virtual void addNotification() override;
948
952 virtual void removeNotification() override;
953
958 void setAggregateMaterial(agx::Material* material);
959
963 void initalizeContactMaterialsForExistingTerrains(agxSDK::Simulation* simulation);
964
965 /*
966 Checks if all internal contact materials are correct.
967 If there is an active terrain (ie, we are excavating or bulldozing)
968 the contact material will be customized for that terrain.
969 */
970 void checkContactMaterials();
971
980 virtual void preCollide() override;
981
991 virtual void pre() override;
992
997 virtual void post() override;
998
1003 virtual void last() override;
1004
1008 void calculateDeadLoadFraction();
1009
1010 /*
1011 Checks if there are particles inside the shovels collision geometries.
1012 */
1013 bool shovelHasParticles() const;
1014
1018 void clearActiveZoneWedges() const;
1019
1023 void calculateForbiddenBounds();
1024
1028 static agx::UInt excavationModeToDeformerCollectionIndex(Shovel::ExcavationMode excavationMode);
1029
1030 private:
1031 enum DeformSide
1032 {
1033 BACK = 0,
1034 LEFT = 1,
1035 RIGHT = 2
1036 };
1037
1038 private:
1042 void createDeformers( const agx::Line& cuttingEdge,
1043 const agx::Line& topEdge,
1044 const agx::Vec3& forwardVector,
1045 const agxCollide::GeometryRefVector& voxelCollisionGeometries );
1046
1047 agx::Vec3Vector extractVertices(const agxCollide::GeometryRefVector& voxelCollisionGeometries);
1048
1049 agx::Vec3 findEdgePoint( agx::Vec3Vector& vertices,
1050 agx::Vec3 point,
1051 agx::Plane& frontPlane,
1052 agx::Plane& bottomPlane,
1053 agx::Plane& sidePlane,
1054 agx::Real tol );
1055
1056 void addDeformers(const std::array<DeformerCollectionRef, 3>& deformers);
1057
1058 bool shouldDeformMass(Terrain* terrain);
1059
1064 agx::Vec3 computeBottomPlateDirection();
1065
1070 agx::Vec3 computeForwardDirection();
1071
1075 void constructAndAddDeformers();
1076
1077 protected:
1078
1079 ShovelDebugRenderSettingsRef m_debugRenderSettings;
1080
1082
1084 {
1088 };
1089
1090 // Shovel bodies
1092 agx::FrameRef m_parentFrame; /* Parent frame for shovel geometries synchronized with model center of shovel body. */
1094
1095 // Geometries used to find shovel-voxel collisions
1097
1098 // Configuration:
1105
1106 // Settings
1108 std::array< ExcavationSettings, 4 > m_excavationSettings;
1109
1110 // Caching of dead load
1112 // Caching of inner contact area
1114
1115 agx::Real m_deadLoadAngle=0;
1116
1118
1120
1124 // Voxel collision geometries HAVE to be calculated before creating the active zone otherwise it is not possible to create an inner shape.
1127 std::array<DeformerCollectionRef, 3> m_deformers;
1129
1136 };
1137
1143 {
1144 public:
1146
1148
1150
1152
1156
1157 private:
1158 agx::Vector< agx::ContactMaterialRef > m_contactMaterials;
1159 };
1160
1162 {
1163 friend class Shovel;
1164 public:
1165 /*
1166 \return true if the given rigidBody is part of a shovel.
1167 */
1168 static bool isRigidBodyShovel(const agx::RigidBody* rigidBody);
1169
1170 /*
1171 \return true if the given geometry is part of shovels rigidBody.
1172 */
1173 static bool isGeometryShovel(const agxCollide::Geometry* geometry);
1174
1175 protected:
1176 /*
1177 Set some properties on the rigid body to mark it as part of a shovel.
1178 Used in the shovel constructor.
1179 */
1180 static void setIsRigidBodyShovel(agx::RigidBody* rigidBody, bool enable);
1181 };
1182
1183}
#define AGX_DECLARE_POINTER_TYPES(type)
Definition: Referenced.h:254
#define AGXSTREAM_DECLARE_SERIALIZABLE(T)
Use this in a Serializable class to add the required methods Important: Use full namespace in the dec...
Definition: Serializable.h:207
#define AGXTERRAIN_EXPORT
#define AGX_DECLARE_VECTOR_TYPES(type)
Definition: agx/Vector.h:34
Axis aligned bounding box implementation.
Definition: BoundingAABB.h:38
The geometry representation used by the collision detection engine.
Definition: Geometry.h:92
Simulation is a class that bridges the collision space agxCollide::Space and the dynamic simulation s...
Definition: Simulation.h:131
An agxTerrain::TerrainToolInstance in a simulation, receiving step and contact callbacks in a control...
Class for reading a binary stream of serialized data.
Definition: InputArchive.h:51
Class for writing serialized data in binary format to a stream.
Definition: OutputArchive.h:57
This class is an abstract base class for all classes that can be stored and retrieved from an Archive...
Definition: Serializable.h:44
Simple container class for storing and handling explicit contact material for shovel-aggregate contac...
Definition: Shovel.h:1143
agx::ContactMaterial * getContactMaterial(Shovel::ExcavationMode excavationMode) const
bool setContactMaterial(Shovel::ExcavationMode excavationMode, agx::ContactMaterial *contactMaterial)
static bool isGeometryShovel(const agxCollide::Geometry *geometry)
static bool isRigidBodyShovel(const agx::RigidBody *rigidBody)
static void setIsRigidBodyShovel(agx::RigidBody *rigidBody, bool enable)
Class containing the settings for the different ExcavationModes for a shovel.
Definition: Shovel.h:765
ExcavationSettings()
Default constructor.
void setEnable(bool enable)
Set whether the excavation mode should be enabled, creating dynamic mass and generating force feedbac...
ExcavationSettings(agx::UInt32 state)
Constructor taking an internal state variable from another excavation setting object.
void store(agxStream::OutputArchive &out) const
Definition: Shovel.h:816
void setEnableForceFeedback(bool enable)
Set true/false if the excavation mode should generate force feedback from created aggregates.
void restore(agxStream::InputArchive &in)
Definition: Shovel.h:817
void setEnableCreateDynamicMass(bool enable)
Set true/false if the excavation mode should create dynamic mass.
Shovel object used to interact with a terrain via an active zone that converts solid terrain to dynam...
Definition: Shovel.h:63
bool setShovelAggregateContactMaterial(agx::ContactMaterial *contactMaterial, Shovel::ExcavationMode mode=Shovel::ExcavationMode::PRIMARY)
Explicitly set contact material properties in a shovel-aggregate contact for a specific excavation mo...
agx::Plane getCutTopPlaneWorld() const
agx::Vec3 getAggregateTerrainContactForce(Shovel::ExcavationMode excavationMode) const
Get the terrain <-> aggregate contact force for the given excavation mode.
agx::Real getTotalSoilBulkVolume(agx::Real packingFraction=0.67) const
Returns the total bulk volume moved by the shovel, both in the inner shapes and in the soil wedges in...
agx::Vec3 getContactForce() const
Given geometry contacts exists and the solver has solved them - calculates total shovel contact force...
size_t getNumberOfActiveContactPoints()
agx::Real getInnerSoilBulkVolume() const
Get the last computed dead load bulk volume of the shovel, i.e the inner volume that is filled with d...
void setConnectedShovel(Shovel *shovel)
agx::Plane getSeparationPlatePlane() const
agx::Real getAggregateTerrainContactDepth(Shovel::ExcavationMode excavationMode) const
agx::Line m_topEdge
Definition: Shovel.h:1100
const agx::Plane & getTeethTopPlane() const
agx::RigidBodyRef m_shovelBody
Definition: Shovel.h:1091
agx::Vec3 m_bottomPlateDirection
Definition: Shovel.h:1103
agx::Real getInnerSoilMass() const
agx::Vec3 getSeparationNormalForce() const
Given geometry contacts exists and the solver has solved them - calculates total contact normal force...
bool collisionGeometriesAreInsideTerrain(Terrain *terrain) const
Check if any of the collision geometries are inside terrain bounds.
agx::Vec3 getSecondaryForwardVector() const
agx::Real getInnerVolume() const
SoilParticleVector getInnerSoilParticles() const
ShovelDebugRenderSettingsRef m_debugRenderSettings
Definition: Shovel.h:1079
DeformController * getDeformController() const
static Shovel * find(const agxSDK::Simulation *simulation, const agx::Name &name)
Find first shovel with given name.
agx::Plane getCurrentSeparationPlane(ExcavationMode mode) const
virtual bool isValid() const override
agx::Plane getTeethTopPlaneWorld() const
Shovel * m_connectedShovel
Definition: Shovel.h:1119
const agx::Vector< agxCollide::BoundingAABB > & getForbiddenBounds()
Get the shovels forbidden bounds.
agx::Real m_deadLoadFraction
Definition: Shovel.h:1111
static ShovelPtrVector findAll(const agxSDK::Simulation *simulation)
Finds all shovels in the given simulation.
agx::Frame * getParentFrame() const
agx::Vec3 getBottomPlateDirection() const
agx::Plane getTeethSeparationPlane() const
SoilParticleAggregate * getSoilParticleAggregate() const
bool m_settingsAreDirty
Definition: Shovel.h:1117
agx::Material * getAggregateMaterial() const
Shovel * getConnectedShovel()
void setEnableShovelTerrainGeometryContacts(Terrain *terrain, bool enable)
Set if regular geometry contacts should be created between the shovel geometries and the associated t...
void setCutTopPlane(agx::Plane cutTopPlane)
Set the cutting plane in local space.
agx::Vec3 getBottomPlateDirectionWorld() const
agx::Vector< agxCollide::BoundingAABB > m_forbiddenBounds
Definition: Shovel.h:1133
const agx::RigidBody * getWedgeAggregate(Shovel::ExcavationMode excavationMode) const
agxCollide::GeometryContactPtrVector getShovelAggregateContacts(Shovel::ExcavationMode excavationMode) const
Get the shovel <-> aggregate contacts with the soil particle aggregate for the given excavation mode.
agx::Real getDynamicMass() const
agx::Line getTeethEdgeWorld() const
agx::Real getTotalSoilMass() const
agx::MaterialRef m_aggregateMaterial
Definition: Shovel.h:1130
agx::Vec3 getDeformationContactForce() const
Given geometry contacts exists and the solver has solved them - calculates total contact force betwee...
agx::FrameRef m_parentFrame
Definition: Shovel.h:1092
void setTopEdge(agx::Line topEdge)
Set the top edge in local space.
ShovelAggregateContactMaterialContainer * getShovelTerrainContactMaterialContainer() const
Shovel(agx::RigidBody *shovelBody, const agx::Line &topEdge, const agx::Line &cuttingEdge, const agx::Line &teethEdge, ShovelDebugRenderSettings *settings=nullptr)
Alternative basic constructor that takes a teeth location edge instead of direction in local space to...
agx::Vec3 getToothOrCuttingDirectionWorld() const
const agxCollide::GeometryRefVector & getVoxelCollisionGeometries() const
agx::Real getSoilAggregateMass(Shovel::ExcavationMode excavationMode) const
Returns the total soil aggregate mass in the shovel for the specific excavation mode.
agx::Line getTeethEdge() const
agx::Plane getExcavationTopPlane() const
bool getEnable() const
Access the state enable flag.
void setTeethEdge(agx::Line teethEdge)
Set the teeth edge in local space.
agx::Vec3 getCuttingDirectionWorld() const
agx::Vec3 getSeparationContactForce() const
Given geometry contacts exists and the solver has solved them - calculates total contact force betwee...
ShovelAggregateContactMaterialContainerRef m_shovelAggregateCMContainer
Definition: Shovel.h:1121
ShovelSettings * getSettings()
void setEnableForTerrain(Terrain *terrain, bool enable)
Set if the shovel is enabled for the particular terrain.
agxCollide::GeometryRefVector m_voxelCollisionGeometries
Definition: Shovel.h:1096
SoilParticleAggregateRef m_soilParticleAggregate
Definition: Shovel.h:1122
agx::Real getSecondarySeparationAngle() const
AggregateContactGenerator * getAggregateContactGenerator() const
SoilParticleVector getTotalSoilParticles() const
agx::Real getDeadLoadFraction() const
Get the last computed dead load fraction of the shovel, i.e how much of it's inner volume that is fil...
agx::Vec3 getAggregateTerrainTangentialForce(Shovel::ExcavationMode excavationMode) const
Get the terrain <-> aggregate tangential force for the given excavation mode.
agx::Vec3iVector m_voxelsInPrimaryActiveZoneLastTimeStep
Definition: Shovel.h:1134
agx::Vec3 getCuttingDirection() const
const agx::Plane & getCutTopPlane() const
PrimaryActiveZone * getActiveZone() const
agx::Line getTopEdgeWorld() const
Terrain * m_activeTerrain
Definition: Shovel.h:1132
agx::Plane getExcavationTopPlaneWorld() const
std::array< ExcavationSettings, 4 > m_excavationSettings
Definition: Shovel.h:1108
const agx::Line & getTopEdge() const
void setEnable(bool enable)
Change state enable of this shovel.
SoilPenetrationResistanceRef m_penetrationResistance
Definition: Shovel.h:1123
const ShovelSettings * getSettings() const
agx::ContactMaterial * getShovelAggregateContactMaterial(Shovel::ExcavationMode mode=Shovel::ExcavationMode::PRIMARY) const
Get the explicitly set contact material in a shovel-aggregate contact corresponding to a specified ex...
size_t getMaximumNumberOfContactPoints()
agx::Vec3 getSeparationFrictionForce() const
Given geometry contacts exists and the solver has solved them - calculates total contact friction for...
agxCollide::BoundingAABB m_collisionBound
Definition: Shovel.h:1135
agx::Line getCuttingEdgeWorld() const
Terrain * getActiveTerrain() const
bool isDigging() const
Check if the shovel is currently in digging mode with a terrain, i.e if the cutting edge is submerged...
PrimaryActiveZoneRef m_activeZone
Definition: Shovel.h:1125
void setExcavationSettings(ExcavationMode mode, ExcavationSettings excavationSettings)
Set a settings object for an ExcavationMode of the shovel.
agx::Real getInnerParticleVolume() const
AdvancedShovelSettings * getAdvancedSettings()
agxCollide::GeometryContactPtrVector getAggregateTerrainContacts(Shovel::ExcavationMode excavationMode) const
Get the aggregate <-> terrain geometry contacts with the shovel given an excavation mode.
bool getPenetrationForce(agx::Vec3 &force, agx::Vec3 &torque) const
The result includes the active force and torque from the penetration resistance from the active terra...
Shovel(agx::RigidBody *shovelBody, const agx::Line &topEdge, const agx::Line &cuttingEdge, const agx::Vec3 &toothDirection=agx::Vec3(0, 0, 0), agx::Real toothLength=0.15, ShovelDebugRenderSettings *settings=nullptr)
Basic constructor.
static Shovel * find(const agxSDK::Simulation *simulation, const agx::Uuid &uuid)
Find shovel with given UUID.
agx::Vec3 getAggregateTerrainNormalForce(Shovel::ExcavationMode excavationMode) const
Get the terrain <-> aggregate normal force for the given excavation mode.
agx::Real getInnerContactArea() const
Get the last computed inner contact area of the shovel, i.e the estimated cross-section area of the i...
agx::Real getAggregateTerrainContactArea(Shovel::ExcavationMode excavationMode) const
Get the aggregate <-> terrain contact area given an excavation mode and a shovel.
agx::Bool canDeformTerrain(Terrain *terrain) const
agx::Vec3 getToothOrCuttingDirection() const
TangentPatchData m_tangentData
Definition: Shovel.h:1093
agx::Line getExcavationEdgeWorld() const
AggregateContactGeneratorRef m_aggregateContactGenerator
Definition: Shovel.h:1126
SoilPenetrationResistance * getPenetrationResistance() const
agx::Vec3 getSecondaryForwardVectorWorld() const
const agxCollide::BoundingAABB & getCollisionBound() const
agx::Line m_cuttingEdge
Definition: Shovel.h:1099
AdvancedShovelSettings * getAdvancedSettings() const
ShovelSettingsRef m_shovelSettings
Definition: Shovel.h:1081
std::array< DeformerCollectionRef, 3 > m_deformers
Definition: Shovel.h:1127
agx::Vec3 m_forwardDirection
Definition: Shovel.h:1104
agx::RigidBody * getRigidBody() const
bool getEnableForTerrain(Terrain *terrain) const
agx::Vec3 getExcavationModeContactForce(Shovel::ExcavationMode excavationMode) const
Calculates total contact force between the soil aggregate associated with the specified excavation mo...
agx::Plane m_teethTopPlane
Definition: Shovel.h:1102
bool setSoilPenetrationModel(agxTerrain::SoilPenetrationResistance::PenetrationModel model)
Set the soil penetration model used for the shovel.
bool getSoilPenetrationModel(agxTerrain::SoilPenetrationResistance::PenetrationModel &model) const
Get the soil penetration model used for the shovel.
bool isActive() const
agx::Vec3 getToothDirectionWorld() const
DeformControllerRef m_deformController
Definition: Shovel.h:1128
agx::Real m_innerContactArea
Definition: Shovel.h:1113
const agx::Line & getCuttingEdge() const
ExcavationSettings & getExcavationSettings(ExcavationMode mode)
ExcavationMode
Enum for describing the different excavation modes of a shovel:
Definition: Shovel.h:133
void setCuttingEdge(agx::Line cuttingEdge)
Set the cutting edge in local space.
agx::Plane m_cutTopPlane
Definition: Shovel.h:1101
agx::Real computeCuttingEdgeLength() const
This class is used to describe the general material properties of the Terrain.
A terrain model based a 3D grid model with overlapping height field that can be deformed by interacti...
Definition: Terrain.h:92
This class store the combine material properties between two agx::Material's.
Definition: Material.h:518
The object defining a frame of reference and providing transformations operations.
Definition: agx/Frame.h:68
Main material class which acts as a holder of a Surface Material and a Bulk material.
Definition: Material.h:378
Representation of a name string.
Definition: Name.h:33
Class representing the mathematical concept of a plane, also called a half- space.
Definition: agx/Plane.h:32
Base class providing referencing counted objects.
Definition: Referenced.h:120
The rigid body class, combining a geometric model and a frame of reference.
Definition: RigidBody.h:49
A UUID, or Universally unique identifier, is intended to uniquely identify information in a distribut...
Definition: Uuid.h:42
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
This namespace consists of a set of classes for handling geometric intersection tests including boole...
The agxSDK namespace contain classes to bridge the collision detection system and the dynamical simul...
Definition: Constraint.h:31
The agxTerrain namespace contains a 3D model for a dynamic deformable Terrain and related classes.
Definition: Geometry.h:59
agx::Vector< TangentPatch > TangentPatchData
The agx namespace contains the dynamics/math part of the AGX Dynamics API.
uint32_t UInt32
Definition: Integer.h:32
bool Bool
Definition: Integer.h:40
uint64_t UInt
Definition: Integer.h:27
double Real
Definition: Real.h:41