Commit baa017f0 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

Series::Point

parent 42577efb
Loading
Loading
Loading
Loading
+12 −15
Original line number Diff line number Diff line
@@ -156,15 +156,11 @@ void BarChart3D<TX, TY, TZ>::addSeries(Series3D<TX, TY, TZ>* series) {
  }

  for (const auto& point : series->getData()) {
    const auto& x_val = std::get<0>(point);
    const auto& y_val = std::get<1>(point);
    const auto& z_val = std::get<2>(point);
    x_domain->addValue(point.x());
    y_domain->addValue(point.y());
    y_domain->addValue(static_cast<TY>(point.z()));

    x_domain->addValue(x_val.value());
    y_domain->addValue(y_val.value());
    y_domain->addValue(static_cast<TY>(z_val.value()));

    if (!(y_val.value() <= y_val.value())) {
    if (!(point.y() <= point.z())) {
      RAISE(
          util::RuntimeException,
          "BarChart error: invalid point in series. Z value must be greater "
@@ -347,11 +343,11 @@ void BarChart3D<TX, TY, TZ>::stackData(
    for (const auto& y : bar.ys) {
      TY delta = y.second.value() - y.first.value();

      target->addCoord(
      target->addPoint(
          typename Series3D<TX, TY, TZ>::Point(
              bar.x,
              Series::Coord<TY>(cur),
          Series::Coord<TY>(cur + delta),
          true);
              Series::Coord<TY>(cur + delta)), true);

      cur += delta;
    }
@@ -371,10 +367,11 @@ void BarChart2D<TX, TY>::addSeries(Series2D<TX, TY>* series) {
  auto series3d = &series_.back();

  for (const auto& point : series->getData()) {
    // FIXPAUL copy properties
    series3d->addDatum(
        std::get<0>(point),
        Series::Coord<TX>(point.x()),
        Series::Coord<TY>(nullptr),
        std::get<1>(point));
        Series::Coord<TY>(point.y()));
  }

  BarChart3D<TX, TY, TY>::addSeries(series3d);
+12 −17
Original line number Diff line number Diff line
@@ -19,8 +19,8 @@ namespace ui {
template <typename TX, typename TY, typename TZ>
class SeriesJoin3D {
public:
  struct JoinedCoord {
    JoinedCoord(const Series::Coord<TX>& x_) : x(x_) {}
  struct JoinedPoint {
    JoinedPoint(const Series::Coord<TX>& x_) : x(x_) {}
    Series::Coord<TX> x;
    std::vector<std::pair<Series::Coord<TY>, Series::Coord<TZ>>> ys;
  };
@@ -30,10 +30,7 @@ public:
  // FIXPAUL this should not be O(n^2)
  void addSeries(Series3D<TX, TY, TZ>* series) {
    for (const auto& point : series->getData()) {
      addCoord(
          std::get<0>(point),
          std::get<1>(point),
          std::get<2>(point));
      addPoint(point);
    }

    for (auto& joined : data_) {
@@ -45,20 +42,18 @@ public:
    num_series_++;
  }

  void addCoord(
      const Series::Coord<TX>& x_val,
      const Series::Coord<TY>& y_val,
      const Series::Coord<TZ>& z_val,
  void addPoint(
    const typename Series3D<TX, TY, TZ>::Point& point,
    bool force = false) {
    JoinedCoord* joined = nullptr;
    JoinedPoint* joined = nullptr;
    for (auto& candidate : data_) {
      if (candidate.x == x_val) {
      if (candidate.x == point.x_coord()) {
        joined = &candidate;
      }
    }

    if (joined == nullptr) {
      data_.emplace_back(x_val);
      data_.emplace_back(point.x_coord());
      joined = &data_.back();
    }

@@ -67,7 +62,7 @@ public:
    }

    if (joined->ys.size() < num_series_ + 1 || force) {
      joined->ys.emplace_back(y_val, z_val);
      joined->ys.emplace_back(point.y_coord(), point.z_coord());
    }
  }

@@ -75,7 +70,7 @@ public:
    return data_.size();
  }

  const std::vector<JoinedCoord>& getData() const {
  const std::vector<JoinedPoint>& getData() const {
    return data_;
  }

@@ -88,7 +83,7 @@ public:
  }

protected:
  std::vector<JoinedCoord> data_;
  std::vector<JoinedPoint> data_;
  int num_series_;
};