OGS
StratBar.cpp
Go to the documentation of this file.
1 
15 #include "StratBar.h"
16 
17 #include <QPainter>
18 
20  std::map<std::string, DataHolderLib::Color>* stratColors,
21  QGraphicsItem* parent)
22  : QGraphicsItem(parent), _station(station)
23 {
24  if (stratColors)
25  {
26  _stratColors = *stratColors;
27  }
28 }
29 
30 QRectF StratBar::boundingRect() const
31 {
32  return QRectF(0, 0, BARWIDTH + 10, totalLogHeight());
33 }
34 
35 void StratBar::paint(QPainter* painter,
36  const QStyleOptionGraphicsItem* option,
37  QWidget* widget)
38 {
39  Q_UNUSED(option)
40  Q_UNUSED(widget)
41 
42  double top = 0;
43  double height = 0;
44 
45  QPen pen(Qt::black, 1, Qt::SolidLine, Qt::SquareCap, Qt::RoundJoin);
46  pen.setCosmetic(true);
47  painter->setPen(pen);
48  // painter->drawRect(_bar);
49 
50  // pen.setWidth(1);
51  std::vector<GeoLib::Point*> profile = _station->getProfile();
52  std::vector<std::string> soilNames = _station->getSoilNames();
53  std::size_t nLayers = profile.size();
54 
55  painter->drawLine(0, 0, BARWIDTH + 5, 0);
56 
57  for (std::size_t i = 1; i < nLayers; i++)
58  {
59  top += height;
60  height = logHeight(((*(profile[i - 1]))[2] - (*(profile[i]))[2]));
61  QRectF layer(0, top, BARWIDTH, height);
62  DataHolderLib::Color const& c(
63  DataHolderLib::getColor(soilNames[i], _stratColors));
64  QBrush brush(QColor(static_cast<int>(c[0]),
65  static_cast<int>(c[1]),
66  static_cast<int>(c[2]),
67  127),
68  Qt::SolidPattern);
69  painter->setBrush(brush);
70 
71  painter->drawRect(layer);
72  painter->drawLine(0,
73  static_cast<int>(layer.bottom()),
74  BARWIDTH + 5,
75  static_cast<int>(layer.bottom()));
76  // painter->drawText(BARWIDTH+10, layer.bottom(),
77  // QString::number((*(profile[i]))[2]));
78  }
79 }
80 
82 {
83  double height = 0;
84  std::vector<GeoLib::Point*> profile = _station->getProfile();
85 
86  for (std::size_t i = 1; i < profile.size(); i++)
87  {
88  height += (log((*(profile[i - 1]))[2] - (*(profile[i]))[2] + 1) * 100);
89  }
90 
91  return height;
92 }
Definition of the StratBar class.
A borehole as a geometric object.
const std::vector< std::string > & getSoilNames() const
const std::vector< Point * > & getProfile() const
double logHeight(double h) const
Calculates the height for a soil layer by "log(d+1)*100".
Definition: StratBar.h:57
double totalLogHeight() const
Calculates the total height of the bar by calculating and adding the log-height for all layers in the...
Definition: StratBar.cpp:81
static const int BARWIDTH
The default width of the bar.
Definition: StratBar.h:63
QRectF boundingRect() const override
Returns the bounding rectangle of the bar.
Definition: StratBar.cpp:30
std::map< std::string, DataHolderLib::Color > _stratColors
Definition: StratBar.h:66
GeoLib::StationBorehole * _station
Definition: StratBar.h:65
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override
Paints the bar.
Definition: StratBar.cpp:35
StratBar(GeoLib::StationBorehole *station, std::map< std::string, DataHolderLib::Color > *stratColors=nullptr, QGraphicsItem *parent=nullptr)
Constructor.
Definition: StratBar.cpp:19
std::array< unsigned char, 4 > Color
Definition: Color.h:24
Color getColor(const std::string &id, std::map< std::string, Color > &colors)
Definition: Color.cpp:36