You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

82 lines
2.4 KiB
C++

#ifndef MANAGED_SCAN_H
#define MANAGED_SCAN_H
#include "scan.h"
#include "scanserver/sharedScan.h"
class ManagedScan : public Scan {
public:
static void openDirectory(const std::string& path, IOType type,
int start, int end = -1);
static void closeDirectory();
static std::size_t getMemorySize();
virtual ~ManagedScan();
virtual void setRangeFilter(double max, double min);
virtual void setHeightFilter(double top, double bottom);
virtual void setRangeMutation(double range);
virtual void setReductionParameter(double voxelSize, int nrpts = 0,
PointType pointtype = PointType());
void setShowReductionParameter(double voxelSize, int nrpts = 0,
PointType pointtype = PointType());
virtual void setOcttreeParameter(double reduction_voxelSize,
double octtree_voxelSize, PointType pointtype,
bool loadOct, bool saveOct);
virtual const char* getIdentifier() const { return m_shared_scan->getIdentifier(); }
virtual DataPointer get(const std::string& identifier);
virtual void get(unsigned int types);
virtual DataPointer create(const std::string& identifier, unsigned int size);
virtual void clear(const std::string& identifier);
virtual unsigned int readFrames();
virtual void saveFrames();
virtual unsigned int getFrameCount();
virtual void getFrame(unsigned int i, const double*& pose_matrix, AlgoType& type);
protected:
virtual void createSearchTreePrivate();
virtual void calcReducedOnDemandPrivate();
virtual void calcNormalsOnDemandPrivate() {};
virtual void addFrame(AlgoType type);
private:
//! Reference to the shared scan
SharedScan* m_shared_scan;
//! SharedScan vector to be deleted on closeDirectory
static SharedScanVector* shared_scans;
//! Flag to keep track of whether we have to update/create reduced points at the start
bool m_reduced_ready;
//! Flag to reset the persistent frames on write actions in slam to avoid a clear call
bool m_reset_frames_on_write;
//! Voxelsize of the octtree used for reduction
double show_reduction_voxelSize;
//! Which point to take out of the reduction octtree, 0 for center
int show_reduction_nrpts;
//! Pointtype used for the reduction octtree
PointType show_reduction_pointtype;
ManagedScan(SharedScan* shared_scan);
//! Create reduced points for show
void calcReducedShow();
//! Create Octtree for show
void createOcttree();
};
#endif //MANAGED_SCAN_H