Newer
Older
#ifndef SCANNER_PROVIDER_H
#define SCANNER_PROVIDER_H
#include <cstdlib>
#include "directionalscanner.h"
using namespace std;
/**
* @class ScannerProvider scannerprovider.h
* \brief Directional scanner provider.
* Provides ad-hoc directional scanners in the relevant octant
* and according to static or dynamical needs.
*/
class ScannerProvider
{
public:
/**
* @fn ScannerProvider()
* \brief Builds a directional scanner provider.
*/
ScannerProvider () : isOrtho (false),
xmin (0), ymin (0), xmax (100), ymax (100) { }
* @fn void setSize (int sizex, int sizey)
* \brief Sets the scanned area size.
* @param sizex Scan area width.
* @param sizey Scan area height.
*/
void setSize (int sizex, int sizey) {
xmax = xmin + sizex; ymax = ymin + sizey; }
/**
* @fn void setArea (int x0, int y0, int sizex, in sizey)
* \brief Sets the scanned area size.
* @param x0 Left column coordinate of the scan area.
* @param y0 Lower line coordinate of the scan area.
* @param sizex Scan area width.
* @param sizey Scan area height.
*/
void setArea (int x0, int y0, int sizex, int sizey) {
xmin = x0, ymin = y0, xmax = x0 + sizex; ymax = y0 + sizey; }
/**
* @fn getScanner(Pt2i p1, Pt2i p2)
* \brief Returns an incremental directional scanner.
* Returns a directional scanner from two control points.
* The scan strip is composed of parallel scan lines, the first one being
* defined by control points p1 and p2.
* @param p1 Start control point.
* @param p2 End control point.
*/
* \brief Returns an incremental directional scanner.
* Returns a directional scanner from two points and direction v1 -> v2.
* The scan strip is composed of parallel scan lines, centered on the middle
* of (p1,p2) and aligned on (v1,v2).
* @param p1 start control point
* @param p2 end control point
* @param v1 direction start point
* @param v2 direction end point
*/
DirectionalScanner *getScanner (Pt2i p1, Pt2i p2, Pt2i v1, Pt2i v2);
* \brief Returns an incremental directional scanner.
* Returns a directional scanner from two points and direction v1 -> v2.
* The scan strip is composed of parallel scan lines, centered on the middle
* of (p1,p2) and aligned on (v1,v2).
* @param centre central point
* @param normal scan strip normal vector
* @param length length of a scan line
*/
DirectionalScanner *getScanner (Pt2i centre, Vr2i normal, int length);
/**
* @fn getScanner(Pt2i centre, Vr2i normal, int length, bool controlable,
* int xmin, int ymin, nt xmax, int ymax)
* \brief Returns an incremental directional scanner.
* Returns a directional scanner from two points and direction v1 -> v2.
* The scan strip is composed of parallel scan lines, centered on the middle
* of (p1,p2) and aligned on (v1,v2).
* @param centre central point
* @param normal scan strip normal vector
* @param controlable controlability request (true for a dynamical scanner)
*/
DirectionalScanner *getScanner (Pt2i centre, Vr2i normal,
/**
* @fn setOrtho(bool status)
* \brief Sets the orthogonal scanner modality.
* @param status new status for the orthogonal scanner modality.
*/
inline void setOrtho (bool status) { isOrtho = status; }
private:
/** Orthogonal scanner modality. */
bool isOrtho;
/** Scan area lowest x coordinate. */
int xmin;
/** Scan area lowest y coordinate. */
int ymin;
/** Scan area highest x coordinate. */
int xmax;
/** Scan area highest y coordinate. */
int ymax;