#ifndef _GROUNDCACHE_HXX
#define _GROUNDCACHE_HXX
-#include <osg/Group>
-#include <osg/ref_ptr>
-
#include <simgear/compiler.h>
#include <simgear/constants.h>
#include <simgear/math/SGMath.hxx>
#include <simgear/scene/bvh/BVHNode.hxx>
#include <simgear/structure/SGSharedPtr.hxx>
+// #define GROUNDCACHE_DEBUG
+#ifdef GROUNDCACHE_DEBUG
+#include <osg/Group>
+#include <osg/ref_ptr>
+#include <simgear/timing/timestamp.hxx>
+#endif
+
class SGMaterial;
namespace simgear {
class BVHLineGeometry;
// Prepare the ground cache for the wgs84 position pt_*.
// That is take all vertices in the ball with radius rad around the
// position given by the pt_* and store them in a local scene graph.
- bool prepare_ground_cache(double ref_time, const SGVec3d& pt,
- double rad);
+ bool prepare_ground_cache(double startSimTime, double endSimTime,
+ const SGVec3d& pt, double rad);
// Returns true if the cache is valid.
// Also the reference time, point and radius values where the cache
const SGVec3d& get_down() const
{ return down; }
+ // The time offset that originates from a simtime different than zero
+ // at initialization time of the fdm.
+ double get_cache_time_offset() const
+ { return cache_time_offset; }
+ void set_cache_time_offset(double time_offset)
+ { cache_time_offset = time_offset; }
bool get_body(double t, SGMatrixd& bodyToWorld, SGVec3d& linearVel,
SGVec3d& angularVel, simgear::BVHNode::Id id);
// The time reference for later call to intersection test routines.
// Is required since we will have moving triangles in carriers.
double cache_ref_time;
+ // The time the cache was initialized.
+ double cache_time_offset;
// The wire to track.
const simgear::BVHLineGeometry* _wire;
bool found_ground;
SGSharedPtr<simgear::BVHNode> _localBvhTree;
+
+#ifdef GROUNDCACHE_DEBUG
+ SGTimeStamp _lookupTime;
+ unsigned _lookupCount;
+ SGTimeStamp _buildTime;
+ unsigned _buildCount;
+
+ osg::ref_ptr<osg::Group> _group;
+#endif
};
#endif