From 2cec3a8fc87a2560a044a934b369872a2318acf9 Mon Sep 17 00:00:00 2001
From: even <philippe.even@loria.fr>
Date: Tue, 27 Nov 2018 08:53:46 +0100
Subject: [PATCH] Scanner area storage

---
 Code/Seg/BSTools/bsidetitem.cpp               |  3 +-
 Code/Seg/BSTools/bsprofileitem.cpp            |  4 +-
 Code/Seg/BlurredSegment/bstracker.cpp         | 12 ++--
 Code/Seg/BlurredSegment/bstracker.h           |  9 +++
 .../DirectionalScanner/scannerprovider.cpp    | 25 +++----
 Code/Seg/DirectionalScanner/scannerprovider.h | 71 ++++++++++---------
 6 files changed, 66 insertions(+), 58 deletions(-)

diff --git a/Code/Seg/BSTools/bsidetitem.cpp b/Code/Seg/BSTools/bsidetitem.cpp
index 81ebea8..16a3551 100755
--- a/Code/Seg/BSTools/bsidetitem.cpp
+++ b/Code/Seg/BSTools/bsidetitem.cpp
@@ -57,6 +57,7 @@ void BSIdetItem::setImage (QImage *image, VMap *idata)
   this->gMap = idata;
   this->imageWidth = image->width ();
   this->imageHeight = image->height ();
+  scanp.setSize (image->width (), image->height ());
 }
 
 
@@ -75,7 +76,7 @@ void BSIdetItem::buildScans (Pt2i p1, Pt2i p2)
   offy = 0;
 
   // Gets a scan iterator
-  ds = scanp.getScanner (p1, p2, 0, 0, imageWidth, imageHeight);
+  ds = scanp.getScanner (p1, p2);
 
   // Extracts the left scan (with central one)
   vector<Pt2i> pix;
diff --git a/Code/Seg/BSTools/bsprofileitem.cpp b/Code/Seg/BSTools/bsprofileitem.cpp
index f0aaa03..5d32163 100755
--- a/Code/Seg/BSTools/bsprofileitem.cpp
+++ b/Code/Seg/BSTools/bsprofileitem.cpp
@@ -108,6 +108,7 @@ void BSProfileItem::setImage (QImage *image, VMap *idata)
   this->gMap = idata;
   this->imageWidth = image->width ();
   this->imageHeight = image->height ();
+  scanp.setSize (image->width (), image->height ());
 }
 
 
@@ -127,8 +128,7 @@ void BSProfileItem::buildScans (Pt2i p1, Pt2i p2)
   stripe = 0;
 
   // Gets a scan iterator
-  DirectionalScanner *ds = scanp.getScanner (p1, p2,
-                                             0, 0, imageWidth, imageHeight);
+  DirectionalScanner *ds = scanp.getScanner (p1, p2);
 
   // Extracts the left scan (with central one)
   vector<Pt2i> pix;
diff --git a/Code/Seg/BlurredSegment/bstracker.cpp b/Code/Seg/BlurredSegment/bstracker.cpp
index ddd5a69..50deb34 100755
--- a/Code/Seg/BlurredSegment/bstracker.cpp
+++ b/Code/Seg/BlurredSegment/bstracker.cpp
@@ -70,6 +70,7 @@ void BSTracker::clear ()
 void BSTracker::setGradientMap (VMap *data)
 {
   gMap = data;
+  scanp.setSize (gMap->getWidth (), gMap->getHeight ());
   delete cand;
   cand = new int[data->getHeightWidthMax ()];
 }
@@ -81,10 +82,8 @@ BlurredSegment *BSTracker::fastTrack (const Pt2i &p1, const Pt2i &p2,
   // Creates the scanner
   DirectionalScanner *ds = NULL;
   if (p0 != NULL)
-    ds = scanp.getScanner (*p0, p1.vectorTo (p2), 4 * imaxWidth, false,
-                           0, 0, gMap->getWidth (), gMap->getHeight ());
-  else ds = scanp.getScanner (p1, p2,
-                              0, 0, gMap->getWidth (), gMap->getHeight ());
+    ds = scanp.getScanner (*p0, p1.vectorTo (p2), 4 * imaxWidth, false);
+  else ds = scanp.getScanner (p1, p2);
   if (ds == NULL) return NULL;
 
   // Builds a BS builder around a central point
@@ -210,9 +209,8 @@ BlurredSegment *BSTracker::fineTrack (const Pt2i &center, const Vr2i &scandir,
   fail = 0;
 
   // Creation of the directional scanner and the array of candidates
-  DirectionalScanner *ds = scanp.getScanner (
-                 center, normal, scanwidth, dynamicScans,
-                 0, 0, gMap->getWidth (), gMap->getHeight ());
+  DirectionalScanner *ds = scanp.getScanner (center, normal,
+                                             scanwidth, dynamicScans);
   if (ds == NULL)
   {
     fail = FAILURE_NO_START;
diff --git a/Code/Seg/BlurredSegment/bstracker.h b/Code/Seg/BlurredSegment/bstracker.h
index 641c812..4812cde 100755
--- a/Code/Seg/BlurredSegment/bstracker.h
+++ b/Code/Seg/BlurredSegment/bstracker.h
@@ -256,6 +256,15 @@ private :
   static const int FAILURE_LOST_ORIENTATION;
 
 
+  /** Scanned map left bound. */
+  int xmin;
+  /** Scanned map lower bound. */
+  int ymin;
+  /** Scanned map width. */
+  int width;
+  /** Scanned map height. */
+  int height;
+
   /** Blurred segment max width for fast tracks. */
   int imaxWidth;
   /** Blurred segment max width for fine tracks. */
diff --git a/Code/Seg/DirectionalScanner/scannerprovider.cpp b/Code/Seg/DirectionalScanner/scannerprovider.cpp
index 6cc5bed..163f507 100755
--- a/Code/Seg/DirectionalScanner/scannerprovider.cpp
+++ b/Code/Seg/DirectionalScanner/scannerprovider.cpp
@@ -1,5 +1,5 @@
-#include <cstdlib>
-#include <iostream>
+// #include <cstdlib>
+// #include <iostream>
 #include "scannerprovider.h"
 #include "directionalscannero2.h"
 #include "directionalscannero7.h"
@@ -12,9 +12,7 @@
 
 
 
-DirectionalScanner *ScannerProvider::getScanner (
-                Pt2i p1, Pt2i p2,
-                int xmin, int ymin, int xmax, int ymax)
+DirectionalScanner *ScannerProvider::getScanner (Pt2i p1, Pt2i p2)
 {
   // Enforces P1 to be lower than P2
   // or to left of P2 in cas of equality
@@ -99,9 +97,8 @@ DirectionalScanner *ScannerProvider::getScanner (
 
 
 
-DirectionalScanner *ScannerProvider::getScanner (
-                Pt2i p1, Pt2i p2, Pt2i v1, Pt2i v2,
-                int xmin, int ymin, int xmax, int ymax)
+DirectionalScanner *ScannerProvider::getScanner (Pt2i p1, Pt2i p2,
+                                                 Pt2i v1, Pt2i v2)
 {
   // Get the scan strip center
   int cx = (p1.x () + p2.x ()) / 2;
@@ -138,13 +135,12 @@ DirectionalScanner *ScannerProvider::getScanner (
                                         a, b, c1, c2, nbs, steps, cx, cy));
     else
       return (new DirectionalScannerO7 (xmin, ymin, xmax, ymax,
-                                       a, b, c1, c2, nbs, steps, cx, cy));
+                                        a, b, c1, c2, nbs, steps, cx, cy));
 }
 
 
-DirectionalScanner *ScannerProvider::getScanner (
-                Pt2i centre, Vr2i normal, int length,
-                int xmin, int ymin, int xmax, int ymax)
+DirectionalScanner *ScannerProvider::getScanner (Pt2i centre, Vr2i normal,
+                                                 int length)
 {
   // Gets the steps position array
   int nbs = 0;
@@ -181,9 +177,8 @@ DirectionalScanner *ScannerProvider::getScanner (
 }
 
 
-DirectionalScanner *ScannerProvider::getScanner (
-                Pt2i centre, Vr2i normal, int length, bool controlable,
-                int xmin, int ymin, int xmax, int ymax)
+DirectionalScanner *ScannerProvider::getScanner (Pt2i centre, Vr2i normal,
+                                                 int length, bool controlable)
 {
   // Gets the steps position array
   int nbs = 0;
diff --git a/Code/Seg/DirectionalScanner/scannerprovider.h b/Code/Seg/DirectionalScanner/scannerprovider.h
index 1b0eac7..b184d52 100755
--- a/Code/Seg/DirectionalScanner/scannerprovider.h
+++ b/Code/Seg/DirectionalScanner/scannerprovider.h
@@ -13,7 +13,6 @@ using namespace std;
  * \brief Directional scanner provider.
  * Provides ad-hoc directional scanners in the relevant octant
  *   and according to static or dynamical needs.
- * \author {P. Even}
  */
 class ScannerProvider
 {
@@ -24,28 +23,42 @@ public:
    * @fn ScannerProvider()
    * \brief Builds a directional scanner provider.
    */
-  ScannerProvider () : isOrtho (false) { }
+  ScannerProvider () : isOrtho (false),
+                       xmin (0), ymin (0), xmax (100), ymax (100) { }
   
   /**
-   * @fn getScanner(Pt2i p1, Pt2i p2,
-   *                int xmin, int xmax, int ymin, int ymax)
+   * @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.
-   * @param xmin Left border of the scan area.
-   * @param xmax Right border of the scan area.
-   * @param ymin Low border of the scan area.
-   * @param ymax Up border of the scan area.
    */
-  DirectionalScanner *getScanner (Pt2i p1, Pt2i p2,
-                                  int xmin, int xmax, int ymin, int ymax);
+  DirectionalScanner *getScanner (Pt2i p1, Pt2i p2);
   
   /**
-   * @fn getScanner(Pt2i p1, Pt2i p2, Pt2i v1, Pt2i v2,
-   *                int xmin, int ymin, nt xmax, int ymax)
+   * @fn 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
@@ -54,18 +67,11 @@ public:
    * @param p2 end control point
    * @param v1 direction start point
    * @param v2 direction end point
-   * @param xmin left border of the scan area
-   * @param xmax right border of the scan area
-   * @param ymin low border of the scan area
-   * @param ymax up border of the scan area
    */
-  DirectionalScanner *getScanner (Pt2i p1, Pt2i p2,
-                                  Pt2i v1, Pt2i v2,
-                                  int xmin, int ymin, int xmax, int ymax);
+  DirectionalScanner *getScanner (Pt2i p1, Pt2i p2, Pt2i v1, Pt2i v2);
 
   /**
-   * @fn getScanner(Pt2i centre, Vr2i normal, int length,
-   *                int xmin, int ymin, nt xmax, int ymax)
+   * @fn getScanner(Pt2i centre, Vr2i normal, int length)
    * \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
@@ -73,13 +79,8 @@ public:
    * @param centre central point
    * @param normal scan strip normal vector
    * @param length length of a scan line
-   * @param xmin left border of the scan area
-   * @param xmax right border of the scan area
-   * @param ymin low border of the scan area
-   * @param ymax up border of the scan area
    */
-  DirectionalScanner *getScanner (Pt2i centre, Vr2i normal, int length,
-                                  int xmin, int ymin, int xmax, int ymax);
+  DirectionalScanner *getScanner (Pt2i centre, Vr2i normal, int length);
 
   /**
    * @fn getScanner(Pt2i centre, Vr2i normal, int length, bool controlable,
@@ -92,14 +93,9 @@ public:
    * @param normal scan strip normal vector
    * @param length length of a scan line
    * @param controlable controlability request (true for a dynamical scanner)
-   * @param xmin left border of the scan area
-   * @param xmax right border of the scan area
-   * @param ymin low border of the scan area
-   * @param ymax up border of the scan area
    */
   DirectionalScanner *getScanner (Pt2i centre, Vr2i normal,
-                                  int length, bool controlable,
-                                  int xmin, int ymin, int xmax, int ymax);
+                                  int length, bool controlable);
 
   /**
    * @fn setOrtho(bool status)
@@ -113,6 +109,15 @@ 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;
 };
 
 #endif
-- 
GitLab