Commit 99f83d7e authored by Sylvain Thery's avatar Sylvain Thery

debug picking in histogram

add marking/getting cells corresponding to a column of histo or quantiles
parent e44709ec
...@@ -268,6 +268,30 @@ void MyQT::cb_redraw() ...@@ -268,6 +268,30 @@ void MyQT::cb_redraw()
void MyQT::clickHisto(unsigned int i,unsigned int j) void MyQT::clickHisto(unsigned int i,unsigned int j)
{ {
std::cout << "CLICK on column Histo: "<< i << " / Quantiles: "<< j <<std::endl; std::cout << "CLICK on column Histo: "<< i << " / Quantiles: "<< j <<std::endl;
if (i != Utils::QT::RenderHistogram::NONE)
{
std::vector<unsigned int > vc;
l_histo->cellsOfHistogramColumn(i,vc);
std::cout << "Cells of histo: "<< std::endl;
for (unsigned int k=0; k <vc.size(); ++k)
std::cout << vc[k]<<"/";
std::cout << std::endl;
CellMarker<VERTEX> cm(myMap);
std::cout << l_histo->markCellsOfHistogramColumn(i,cm) << " marked cells"<< std::endl;
}
if (j != Utils::QT::RenderHistogram::NONE)
{
std::vector<unsigned int > vc;
l_histo->cellsOfHistogramColumn(j,vc);
std::cout << "Cells of quantile: "<< std::endl;
for (unsigned int k=0; k <vc.size(); ++k)
std::cout << vc[k]<<"/";
std::cout << std::endl;
}
} }
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#define __HISTOGRAM__ #define __HISTOGRAM__
#include "Topology/generic/attributeHandler.h" #include "Topology/generic/attributeHandler.h"
#include "Topology/generic/cellmarker.h"
#include "Geometry/vector_gen.h" #include "Geometry/vector_gen.h"
#include "Utils/colorMaps.h" #include "Utils/colorMaps.h"
#include "Utils/vbo.h" #include "Utils/vbo.h"
...@@ -311,24 +312,43 @@ public: ...@@ -311,24 +312,43 @@ public:
* return cells of histogram's column * return cells of histogram's column
* @param c column of histogram * @param c column of histogram
* @param vc vector of cells (indices) * @param vc vector of cells (indices)
* @return true if not empty * @return number of cells
*/ */
bool cellsOfHistogramColumn( unsigned int c, std::vector<unsigned int> vc) const; unsigned int cellsOfHistogramColumn( unsigned int c, std::vector<unsigned int>& vc) const;
/** /**
* return cells of quantile's column * return cells of quantile's column
* @param c column of quantile * @param c column of quantile
* @param vc vector of cells (indices) * @param vc vector of cells (indices)
* @return true if not empty * @return number of cells
*/ */
bool cellsOfQuauntilesColumn( unsigned int c, std::vector<unsigned int> vc) const; unsigned int cellsOfQuantilesColumn( unsigned int c, std::vector<unsigned int>& vc) const;
/**
* mark cells of histogram's column
* @param c column of quantile
* @param cm marker
* @return number of marked cells
*/
template <typename CELLMARKER>
unsigned int markCellsOfHistogramColumn(unsigned int c, CELLMARKER& cm) const;
/**
* mark cells of quantile's column
* @param c column of quantile
* @param cm marker
* @return number of marked cells
*/
template <typename CELLMARKER>
unsigned int markCellsOfQuantilesColumn(unsigned int c, CELLMARKER& cm) const;
/** /**
* get the colorMap * get the colorMap
*/ */
const HistoColorMap& colorMap() const; const HistoColorMap& colorMap() const;
}; };
......
...@@ -22,7 +22,8 @@ ...@@ -22,7 +22,8 @@
* * * *
*******************************************************************************/ *******************************************************************************/
// forward #include <algorithm>
namespace CGoGN namespace CGoGN
{ {
...@@ -224,6 +225,58 @@ inline bool Histogram::dataComp( const std::pair<double, unsigned int>& a, const ...@@ -224,6 +225,58 @@ inline bool Histogram::dataComp( const std::pair<double, unsigned int>& a, const
} }
template <typename CELLMARKER>
unsigned int Histogram::markCellsOfHistogramColumn(unsigned int c, CELLMARKER& cm) const
{
if (!m_sorted)
{
std::sort(m_dataIdx.begin(),m_dataIdx.end(),dataComp);
m_sorted = true;
}
double bi = (m_max-m_min)/m_nbclasses * c + m_min;
double bs = (m_max-m_min)/m_nbclasses * (c+1) + m_min;
unsigned int nb=m_dataIdx.size();
unsigned int i=0;
while ((i<nb) && (data(i)< bi))
++i;
unsigned int nbc=0;
while ((i<nb) && (data(i)< bs))
{
cm.mark(idx(i++));
++nbc;
}
return nbc;
}
template <typename CELLMARKER>
unsigned int Histogram::markCellsOfQuantilesColumn(unsigned int c, CELLMARKER& cm) const
{
double bi = m_interv[c];
double bs = m_interv[c+1];
unsigned int nb=m_dataIdx.size();
unsigned int i=0;
while ((i<nb) && (data(i)< bi))
++i;
unsigned int nbc=0;
while ((i<nb) && (data(i)< bs))
{
cm.mark(idx(i++));
++nbc;
}
return nbc;
}
} }
} }
......
...@@ -74,6 +74,9 @@ class RenderHistogram : public QWidget ...@@ -74,6 +74,9 @@ class RenderHistogram : public QWidget
void axeVals(); void axeVals();
public: public:
static const unsigned int NONE = 0xffffffff;
/** /**
* constructor * constructor
* @param parent parent widget * @param parent parent widget
...@@ -143,8 +146,8 @@ public: ...@@ -143,8 +146,8 @@ public:
signals: signals:
/** /**
* emitted signal when a column of histogram is clicked * emitted signal when a column of histogram is clicked
* @param i column of histo (0xffffffff if none) * @param i column of histo (NONE if none)
* @param j column of quantileq (0xffffffff if none) * @param j column of quantileq (NONE if none)
*/ */
void clicked(unsigned int, unsigned int); void clicked(unsigned int, unsigned int);
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
*******************************************************************************/ *******************************************************************************/
#include "Algo/Histogram/histogram.h" #include "Algo/Histogram/histogram.h"
#include <algorithm>
namespace CGoGN namespace CGoGN
{ {
...@@ -157,7 +157,7 @@ void Histogram::histoColorizeVBO(Utils::VBO& vbo) ...@@ -157,7 +157,7 @@ void Histogram::histoColorizeVBO(Utils::VBO& vbo)
} }
bool Histogram::cellsOfHistogramColumn(unsigned int c, std::vector<unsigned int> vc) const unsigned int Histogram::cellsOfHistogramColumn(unsigned int c, std::vector<unsigned int>& vc) const
{ {
if (!m_sorted) if (!m_sorted)
{ {
...@@ -167,8 +167,8 @@ bool Histogram::cellsOfHistogramColumn(unsigned int c, std::vector<unsigned int> ...@@ -167,8 +167,8 @@ bool Histogram::cellsOfHistogramColumn(unsigned int c, std::vector<unsigned int>
vc.clear(); vc.clear();
double bi = (m_min+m_max)/m_nbclasses * c + m_min; double bi = (m_max-m_min)/m_nbclasses * c + m_min;
double bs = (m_min+m_max)/m_nbclasses * (c+1) + m_min; double bs = (m_max-m_min)/m_nbclasses * (c+1) + m_min;
unsigned int nb=m_dataIdx.size(); unsigned int nb=m_dataIdx.size();
unsigned int i=0; unsigned int i=0;
...@@ -177,14 +177,12 @@ bool Histogram::cellsOfHistogramColumn(unsigned int c, std::vector<unsigned int> ...@@ -177,14 +177,12 @@ bool Histogram::cellsOfHistogramColumn(unsigned int c, std::vector<unsigned int>
++i; ++i;
while ((i<nb) && (data(i)< bs)) while ((i<nb) && (data(i)< bs))
{ vc.push_back(idx(i++));
vc.push_back(idx(i));
}
return !vc.empty(); return vc.size();
} }
bool Histogram::cellsOfQuauntilesColumn( unsigned int c, std::vector<unsigned int> vc) const unsigned int Histogram::cellsOfQuantilesColumn( unsigned int c, std::vector<unsigned int>& vc) const
{ {
vc.clear(); vc.clear();
...@@ -198,14 +196,14 @@ bool Histogram::cellsOfQuauntilesColumn( unsigned int c, std::vector<unsigned in ...@@ -198,14 +196,14 @@ bool Histogram::cellsOfQuauntilesColumn( unsigned int c, std::vector<unsigned in
++i; ++i;
while ((i<nb) && (data(i)< bs)) while ((i<nb) && (data(i)< bs))
{ vc.push_back(idx(i++));
vc.push_back(idx(i));
}
return !vc.empty(); return vc.size();
} }
} }
} }
} }
......
...@@ -288,7 +288,7 @@ void RenderHistogram::svgExport(const std::string& filename) ...@@ -288,7 +288,7 @@ void RenderHistogram::svgExport(const std::string& filename)
void RenderHistogram::mousePressEvent(QMouseEvent* event) void RenderHistogram::mousePressEvent(QMouseEvent* event)
{ {
int x = -1; int x = NONE;
int widthAxl = 8*m_axl_nbd; int widthAxl = 8*m_axl_nbd;
const std::vector<unsigned int>& pop = m_histo.getPopulation(); const std::vector<unsigned int>& pop = m_histo.getPopulation();
...@@ -307,7 +307,7 @@ void RenderHistogram::mousePressEvent(QMouseEvent* event) ...@@ -307,7 +307,7 @@ void RenderHistogram::mousePressEvent(QMouseEvent* event)
} }
const std::vector<double>& interv = m_histo.getQuantilesIntervals(); const std::vector<double>& interv = m_histo.getQuantilesIntervals();
int xx = -1; int xx = NONE;
if ( m_drawQuantiles && !interv.empty()) if ( m_drawQuantiles && !interv.empty())
{ {
double lw = (m_histo.getMax() - m_histo.getMin()) / double(m_w); double lw = (m_histo.getMax() - m_histo.getMin()) / double(m_w);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment