Add line styling to in-process AOS plotter

Change-Id: I967cf9f39ae754832e25f24633576a2c571656ae
Signed-off-by: James Kuszmaul <james.kuszmaul@bluerivertech.com>
diff --git a/frc971/analysis/in_process_plotter.cc b/frc971/analysis/in_process_plotter.cc
index cd52b1c..f345ebc 100644
--- a/frc971/analysis/in_process_plotter.cc
+++ b/frc971/analysis/in_process_plotter.cc
@@ -63,7 +63,8 @@
 }
 
 void Plotter::AddLine(const std::vector<double> &x,
-                      const std::vector<double> &y, std::string_view label) {
+                      const std::vector<double> &y, std::string_view label,
+                      std::string_view line_style) {
   CHECK_EQ(x.size(), y.size());
   CHECK(!position_.IsNull())
       << "You must call AddFigure() before calling AddLine().";
@@ -83,10 +84,20 @@
   const Color *color = &color_wheel_.at(color_wheel_position_);
   color_wheel_position_ = (color_wheel_position_ + 1) % color_wheel_.size();
 
+  LineStyle::Builder style_builder = builder_.MakeBuilder<LineStyle>();
+  if (line_style.find('*') != line_style.npos) {
+    style_builder.add_point_size(3.0);
+  } else {
+    style_builder.add_point_size(0.0);
+  }
+  style_builder.add_draw_line(line_style.find('-') != line_style.npos);
+  const flatbuffers::Offset<LineStyle> style_offset = style_builder.Finish();
+
   auto line_builder = builder_.MakeBuilder<Line>();
   line_builder.add_label(label_offset);
   line_builder.add_points(points_offset);
   line_builder.add_color(color);
+  line_builder.add_style(style_offset);
   lines_.push_back(line_builder.Finish());
 }
 
diff --git a/frc971/analysis/in_process_plotter.h b/frc971/analysis/in_process_plotter.h
index 3d7a037..1c97287 100644
--- a/frc971/analysis/in_process_plotter.h
+++ b/frc971/analysis/in_process_plotter.h
@@ -43,7 +43,7 @@
   void AddFigure(std::string_view title = "", double width = 900,
                  double height = 400);
   void AddLine(const std::vector<double> &x, const std::vector<double> &y,
-               std::string_view label = "");
+               std::string_view label = "", std::string_view line_style = "*-");
   void ShareXAxis(bool share) { share_x_axis_ = share; }
   void XLabel(std::string_view label);
   void YLabel(std::string_view label);
diff --git a/frc971/analysis/plot_data.fbs b/frc971/analysis/plot_data.fbs
index c21add1..641cd6e 100644
--- a/frc971/analysis/plot_data.fbs
+++ b/frc971/analysis/plot_data.fbs
@@ -27,10 +27,16 @@
   b:float (id: 2);
 }
 
+table LineStyle {
+  point_size:float (id: 0);
+  draw_line:bool (id: 1);
+}
+
 table Line {
   label:string (id: 0);
   points:[Point] (id: 1);
   color:Color (id: 2);
+  style:LineStyle (id: 3);
 }
 
 table Figure {
diff --git a/frc971/analysis/plot_data_utils.ts b/frc971/analysis/plot_data_utils.ts
index 80c4cca..a93a2ae 100644
--- a/frc971/analysis/plot_data_utils.ts
+++ b/frc971/analysis/plot_data_utils.ts
@@ -79,6 +79,14 @@
               line.setColor(
                   [lineFb.color().r(), lineFb.color().g(), lineFb.color().b()]);
             }
+            if (lineFb.style()) {
+              if (lineFb.style().pointSize() !== null) {
+                line.setPointSize(lineFb.style().pointSize());
+              }
+              if (lineFb.style().drawLine() !== null) {
+                line.setDrawLine(lineFb.style().drawLine());
+              }
+            }
             line.setPoints(points);
           }
         }