AGX Dynamics 2.42.1.1
Loading...
Searching...
No Matches
RigidBodyTrajectoryDrawable.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#ifndef AGXOSG_RIGIDBODY_TRAJECTORIES_DRAWABLE_H
18#define AGXOSG_RIGIDBODY_TRAJECTORIES_DRAWABLE_H
19
20#include <agx/PushDisableWarnings.h> // Disabling warnings. Include agx/PopDisableWarnings.h below!
21#include <osg/Drawable>
22#include <osgViewer/Viewer>
23#include <osg/Version>
24#include <agx/PopDisableWarnings.h> // End of disabled warnings.
25
26#include <agxOSG/export.h>
28#include <agx/Task.h>
29#include <agx/observer_ptr.h>
30#include <agxSDK/Simulation.h>
31
32namespace agxOSG
33{
35 class AGXOSG_EXPORT RigidBodyTrajectoryDrawable : public osg::Drawable
36 {
37 typedef std::deque<agx::Vec3> PositionBuffer;
38 typedef std::deque<agx::Vec4f> ColorsBuffer;
39 typedef std::pair<PositionBuffer, ColorsBuffer> TrajectoryData;
41
42 public:
44
45 virtual osg::Object* cloneType() const { return new RigidBodyTrajectoryDrawable(m_simulation); }
46 virtual osg::Object* clone(const osg::CopyOp&) const { return new RigidBodyTrajectoryDrawable(*this); }
47 virtual bool isSameKindAs(const osg::Object* obj) const { return dynamic_cast<const RigidBodyTrajectoryDrawable *>(obj) != nullptr; }
48 virtual const char* libraryName() const { return "agxOSG"; }
49 virtual const char* className() const { return "RigidBodyTrajectoryDrawable"; }
50
52# if OSG_VERSION_GREATER_OR_EQUAL(3,4,0)
53 virtual osg::BoundingSphere computeBound() const;
54 virtual osg::BoundingBox computeBoundingBox() const;
55#else
56 virtual osg::BoundingBox computeBound() const;
57#endif
58
60 virtual void drawImplementation(osg::RenderInfo& renderInfo) const;
61
64
67
69 agx::UInt getNumTrajectoryPositions() const;
70
72 void setDefaultTrajectoryColor(const agx::Vec4f& color);
73
76
79
80 void setEnable( bool enable, bool doResample = true );
81
82 bool getEnable() const;
83
85
87
88 // Amount of particles that should sampled in the tracing. 0 None ; 1 All
89 void setSampling(agx::Real sampling, bool doResample = true);
90
91 agx::Real getSampling() const;
92
93 agxSDK::Simulation * getSimulation();
94
95 void resample();
96
98
100
109
115
116 protected:
118
120
122
124
125 void sample(agx::Index index);
126
128
130 // Variables
132 protected:
133
136
139
143
153 };
154
156
158
160
162
164}
165
166#endif /* AGXOSG_PARTICLE_SYSTEMDRAWABLE_H */
#define AGX_DECLARE_POINTER_TYPES(type)
Definition: Referenced.h:254
#define AGXOSG_EXPORT
agxSDK::Simulation::RigidBodyEvent::CallbackType m_removeRigidBodyCallback
agxSDK::Simulation::RigidBodyEvent::CallbackType m_addRigidBodyCallback
void removeRigidBodyCallback(agxSDK::Simulation *, agx::RigidBody *body)
virtual void drawImplementation(osg::RenderInfo &renderInfo) const
The actual draw method for the particle system.
virtual osg::Object * clone(const osg::CopyOp &) const
void updateTrajectories()
Update the trajectory structures.
virtual bool isSameKindAs(const osg::Object *obj) const
agx::UInt getNumTrajectoryPositions() const
Get the number of positions used in the trajectories.
void setOnlyDrawRigidBodyEmitterBodies(bool enable)
void setNumTrajectoryPositions(agx::UInt num)
Set the number of positions used in the trajectories.
void resetTrajectories()
Reset trajectories.
ScalarColorMap * getColorMap() const
RigidBodyTrajectoryDrawable(agxSDK::Simulation *simulation)
void handleDestructionEvent(agx::Index index)
void removeTrajectoryFromId(agx::Index particleId)
Remove the current stored trajectory from the drawable for a particle with given id.
void handleCreationEvent(agx::Index index)
void setEnable(bool enable, bool doResample=true)
void setDefaultTrajectoryColor(const agx::Vec4f &color)
Set default color of trajectories.
void addRigidBodyCallback(agxSDK::Simulation *, agx::RigidBody *body)
void sample(agx::Index index)
virtual osg::BoundingBox computeBound() const
Compute the bounding box around Drawables's geometry.
void setSampling(agx::Real sampling, bool doResample=true)
void setColorMap(ScalarColorMap *colorMap)
Set the scalar color map that will be used color the rigid body trajectories with respect to speed.
agx::Vector< TrajectoryData > m_destroyedTrajectories
Class that represents a linear scalar color map that converts a scalar interval to a specified color ...
Simulation is a class that bridges the collision space agxCollide::Space and the dynamic simulation s...
Definition: Simulation.h:131
T CallbackType
Definition: Event.h:37
Inheritance with partial specialization due to bug with ref_ptr containers.
The rigid body class, combining a geometric model and a frame of reference.
Definition: RigidBody.h:49
A class holding 4 dimensional vectors and providing basic arithmetic.
Definition: Vec4Template.h:35
Templated vector class.
Definition: agx/Vector.h:53
#define AGX_FORCE_INLINE
Definition: macros.h:58
The agxOSG namespace provides functionality for visualizing AGX simulations with OpenSceneGraph.
uint64_t UInt
Definition: Integer.h:27
double Real
Definition: Real.h:41
UInt32 Index
Definition: Integer.h:44