]> rtime.felk.cvut.cz Git - hubacji1/bcar.git/commitdiff
Improve generate for gnuplot example code
authorJiri Vlasak <hubacji1@fel.cvut.cz>
Wed, 19 Jan 2022 21:27:13 +0000 (22:27 +0100)
committerJiri Vlasak <hubacji1@fel.cvut.cz>
Wed, 19 Jan 2022 21:27:47 +0000 (22:27 +0100)
src/gen_for_gnuplot.cc

index 81752174d4cb59dff1f7f89dfbfe87d8d83beed8..d719e064ed9d10279882a68631d7bb3ee149c30f 100644 (file)
  * SPDX-License-Identifier: GPL-3.0-only
  */
 
+#include <fstream>
 #include <iostream>
 #include <vector>
 #include "pslot.hh"
 
-int main()
+#define SP 0.5
+#define STEPS 10
+
+#define V v
+#define INIT_V vector<M> V;
+#define P(W) V.push_back(M(#W)); V.back().o.W = true;
+
+class M {
+public:
+       std::string fn;
+       std::ofstream f;
+       bcar::BicycleCar c;
+       bcar::BicycleCar::GenPlotOpts o;
+
+       void gpl()
+       {
+               this->c.gen_gnuplot_to(this->f, this->o);
+               this->c.next();
+       }
+
+       ~M()
+       {
+               this->f.close();
+       }
+       M(std::string fn) : fn(fn)
+       {
+               this->f.open(this->fn);
+               this->c.sp(SP);
+               this->c.set_max_steer();
+               this->o.ALL = false;
+       }
+       M(M const& m) : fn(m.fn), c(m.c), o(m.o)
+       {
+               this->f.open(this->fn);
+       }
+       M& operator=(M m)
+       {
+               swap(*this, m);
+               return *this;
+       }
+       friend void swap(M& f, M& t)
+       {
+               using std::swap;
+               f.f.close();
+               t.f.close();
+               swap(f.fn, t.fn);
+               swap(f.c, t.c);
+               swap(f.o, t.o);
+               f.f.open(f.fn);
+               t.f.open(t.fn);
+       }
+       M(M&& m) noexcept
+       {
+               swap(*this, m);
+       }
+};
+
+void
+gen_pl_script(std::vector<M>& ms)
+{
+       using namespace std;
+       ofstream f;
+       f.open("plot.pl");
+       f << "#!/usr/bin/gnuplot" << endl;
+       f << "set size ratio -1" << endl;
+       f << "plot";
+       for (auto& m: ms) {
+               f << " '" << m.fn << "'" << " w l,";
+       }
+       f << endl;
+       f << "pause -1" << endl;
+       f.close();
+}
+
+int
+main()
 {
        using namespace std;
        cout << fixed;
        cerr << fixed;
 
-       bcar::BicycleCar c;
-       bcar::BicycleCar::GenPlotOpts o;
-       o.ALL = false;
-       o.FRONT = true;
-       o.REAR = true;
-       o.MIRRORS = true;
-       c.sp(0.5);
-       c.set_max_steer();
-       for (unsigned int i = 0; i < 10; i++) {
-               c.gen_gnuplot_to(cout, o);
-               c.next();
+       INIT_V
+       P(LF_POINT)
+       P(LFM_POINT)
+       P(RF_POINT)
+       P(RFM_POINT)
+       P(CRA_POINT)
+
+       for (unsigned int i = 0; i < STEPS; i++) {
+               for (auto& m: V) {
+                       m.gpl();
+               }
        }
+       gen_pl_script(V);
        return 0;
 }