codac 2.0.0
Loading...
Searching...
No Matches
codac2_Figure2D.h
Go to the documentation of this file.
1
9
10#pragma once
11
12#include <string>
13#include <vector>
14#include <memory>
15#include "codac2_Index.h"
18#include "codac2_Paving.h"
19#include "codac2_ColorMap.h"
20#include "codac2_Ellipsoid.h"
21#include "codac2_Polygon.h"
22
23#define DEFAULT_FIG_NAME "Codac - default figure"
24
25namespace codac2
26{
27 enum class GraphicOutput
28 {
29 VIBES = 0x01,
30 IPE = 0x02
31 };
32
33 constexpr int operator&(GraphicOutput a, GraphicOutput b)
34 { return static_cast<int>(static_cast<int>(a) & static_cast<int>(b)); }
35
36 constexpr GraphicOutput operator|(GraphicOutput a, GraphicOutput b)
37 { return static_cast<GraphicOutput>(static_cast<int>(a) | static_cast<int>(b)); }
38
39 struct FigureAxis
40 {
41 Index dim_id;
42 Interval limits;
43 std::string label;
44 };
45
46 inline FigureAxis axis(Index dim_id, const Interval& limits, const std::string& label = "")
47 {
48 assert_release(dim_id >= 0);
49 //assert_release(!limits.is_empty());
50
51 std::string axis_label = label;
52 if(axis_label.empty())
53 axis_label = "x_" + std::to_string(dim_id);
54
55 return { dim_id, limits, axis_label };
56 }
57
58 class DefaultFigure;
59 class PavingOut;
60 class PavingInOut;
61 template<typename P>
62 class Subpaving;
63
76 class Figure2D : public std::enable_shared_from_this<Figure2D>
77 {
78 public:
79
87 Figure2D(const std::string& name, GraphicOutput o, bool set_as_default = false);
88
94 const std::string& name() const;
95
101 Index size() const;
102
108 const std::vector<FigureAxis>& axes() const;
109
116 void set_axes(const FigureAxis& axis1, const FigureAxis& axis2);
117
123 const Index& i() const;
124
130 const Index& j() const;
131
137 const Vector& pos() const;
138
144 const Vector& window_size() const;
145
152 void set_window_properties(const Vector& pos, const Vector& size);
153
160 void center_viewbox(const Vector& c, const Vector& r);
161
167 double scaled_unit() const;
168
173
179 bool is_default() const;
180
185
191 void set_tdomain(const Interval& tdomain);
192
193 // Geometric shapes
194
201 void draw_point(const Vector& c, const StyleProperties& s = StyleProperties());
202
209 void draw_box(const IntervalVector& x, const StyleProperties& s = StyleProperties());
210
218 void draw_circle(const Vector& c, double r, const StyleProperties& s = StyleProperties());
219
227 void draw_ring(const Vector& c, const Interval& r, const StyleProperties& s = StyleProperties());
228
236 void draw_line(const Vector& p1, const Vector& p2, const StyleProperties& s = StyleProperties());
237
244 void draw_line(const Segment& e, const StyleProperties& s = StyleProperties());
245
254 void draw_arrow(const Vector& p1, const Vector& p2, float tip_length, const StyleProperties& s = StyleProperties());
255
262 void draw_polyline(const std::vector<Vector>& x, const StyleProperties& s = StyleProperties());
263
271 void draw_polyline(const std::vector<Vector>& x, float tip_length, const StyleProperties& s = StyleProperties());
272
280
288 void draw_parallelepiped(const Vector& z, const Matrix& A, const StyleProperties& s = StyleProperties());
289
298 void draw_pie(const Vector& c, const Interval& r, const Interval& theta, const StyleProperties& s = StyleProperties());
299
308 void draw_ellipse(const Vector& c, const Vector& ab, double theta, const StyleProperties& s = StyleProperties());
309
317
324 void draw_trajectory(const SampledTraj<Vector>& x, const StyleProperties& s = StyleProperties());
325
332 void draw_trajectory(const AnalyticTraj<VectorType>& x, const StyleProperties& s = StyleProperties());
333
340 void draw_trajectory(const SampledTraj<Vector>& x, const ColorMap& cmap);
341
348 void draw_trajectory(const AnalyticTraj<VectorType>& x, const ColorMap& cmap);
349
356 void plot_trajectory(const SampledTraj<double>& x, const StyleProperties& s = StyleProperties());
357
358 // Robots
359
367 void draw_tank(const Vector& x, float size, const StyleProperties& s = StyleProperties());
368
376 void draw_AUV(const Vector& x, float size, const StyleProperties& s = StyleProperties());
377
385 void draw_motor_boat(const Vector& x, float size, const StyleProperties& s = StyleProperties());
386
387 // Pavings
388
396 void draw_paving(const PavingOut& p,
399
408 void draw_paving(const PavingInOut& p,
412
419 template<typename P>
420 void draw_subpaving(const Subpaving<P>& p, const StyleProperties& s = StyleProperties())
421 {
422 for(const auto& pi : p.boxes())
423 draw_box(pi, s);
424 }
425
426 protected:
427
428 const std::string _name;
429 Vector _pos {50,50}, _window_size {500,500};
430 std::vector<FigureAxis> _axes { axis(0,{0,1}), axis(1,{0,1}) };
431 std::vector<std::shared_ptr<OutputFigure2D>> _output_figures;
432 Interval _tdomain;
433
434 friend DefaultFigure;
435 };
436
446 {
447 public:
448
454 static std::shared_ptr<Figure2D> selected_fig()
455 {
456 if(_selected_fig == nullptr)
457 _selected_fig = _default_fig;
458 return _selected_fig;
459 }
460
466 static void set(std::shared_ptr<Figure2D> fig)
467 {
468 _selected_fig = fig;
469 }
470
477 static void set_axes(const FigureAxis& axis1, const FigureAxis& axis2)
478 {
479 auto_init();
480 selected_fig()->set_axes(axis1,axis2);
481 }
482
489 static void set_window_properties(const Vector& pos, const Vector& size)
490 {
491 auto_init();
492 selected_fig()->set_window_properties(pos,size);
493 }
494
495 // Geometric shapes
496
503 static void draw_point(const Vector& c, const StyleProperties& s = StyleProperties())
504 {
505 auto_init();
506 selected_fig()->draw_point(c,s);
507 }
508
515 static void draw_box(const IntervalVector& x, const StyleProperties& s = StyleProperties())
516 {
517 auto_init();
518 selected_fig()->draw_box(x,s);
519 }
520
528 static void draw_circle(const Vector& c, double r, const StyleProperties& s = StyleProperties())
529 {
530 auto_init();
531 selected_fig()->draw_circle(c,r,s);
532 }
533
541 static void draw_ring(const Vector& c, const Interval& r, const StyleProperties& s = StyleProperties())
542 {
543 auto_init();
544 selected_fig()->draw_ring(c,r,s);
545 }
546
554 static void draw_line(const Vector& p1, const Vector& p2, const StyleProperties& s = StyleProperties())
555 {
556 auto_init();
557 selected_fig()->draw_line(p1,p2,s);
558 }
559
566 static void draw_line(const Segment& e, const StyleProperties& s = StyleProperties())
567 {
568 auto_init();
569 selected_fig()->draw_line(e,s);
570 }
571
580 static void draw_arrow(const Vector& p1, const Vector& p2, float tip_length, const StyleProperties& s = StyleProperties())
581 {
582 auto_init();
583 selected_fig()->draw_arrow(p1,p2,tip_length,s);
584 }
585
592 static void draw_polyline(const std::vector<Vector>& x, const StyleProperties& s = StyleProperties())
593 {
594 auto_init();
595 selected_fig()->draw_polyline(x,s);
596 }
597
605 static void draw_polyline(const std::vector<Vector>& x, float tip_length, const StyleProperties& s = StyleProperties())
606 {
607 auto_init();
608 selected_fig()->draw_polyline(x,tip_length,s);
609 }
610
617 static void draw_polygon(const Polygon& x, const StyleProperties& s = StyleProperties())
618 {
619 auto_init();
620 selected_fig()->draw_polygon(x,s);
621 }
622
630 static void draw_parallelepiped(const Vector& z, const Matrix& A, const StyleProperties& s = StyleProperties())
631 {
632 auto_init();
633 selected_fig()->draw_parallelepiped(z,A,s);
634 }
635
644 static void draw_pie(const Vector& c, const Interval& r, const Interval& theta, const StyleProperties& s = StyleProperties())
645 {
646 auto_init();
647 selected_fig()->draw_pie(c,r,theta,s);
648 }
649
658 static void draw_ellipse(const Vector& c, const Vector& ab, double theta, const StyleProperties& s = StyleProperties())
659 {
660 auto_init();
661 selected_fig()->draw_ellipse(c,ab,theta,s);
662 }
663
670 static void draw_ellipsoid(const Ellipsoid& e, const StyleProperties& s = StyleProperties())
671 {
672 auto_init();
673 selected_fig()->draw_ellipsoid(e,s);
674 }
675
682 static void draw_trajectory(const SampledTraj<Vector>& x, const StyleProperties& s = StyleProperties())
683 {
684 auto_init();
685 selected_fig()->draw_trajectory(x,s);
686 }
687
694 static void draw_trajectory(const AnalyticTraj<VectorType>& x, const StyleProperties& s = StyleProperties())
695 {
696 auto_init();
697 selected_fig()->draw_trajectory(x,s);
698 }
699
706 static void draw_trajectory(const SampledTraj<Vector>& x, const ColorMap& cmap)
707 {
708 auto_init();
709 selected_fig()->draw_trajectory(x,cmap);
710 }
711
718 static void draw_trajectory(const AnalyticTraj<VectorType>& x, const ColorMap& cmap)
719 {
720 auto_init();
721 selected_fig()->draw_trajectory(x,cmap);
722 }
723
730 static void plot_trajectory(const SampledTraj<double>& x, const StyleProperties& s = StyleProperties())
731 {
732 auto_init();
733 selected_fig()->plot_trajectory(x,s);
734 }
735
736 // Robots
737
745 static void draw_tank(const Vector& x, float size, const StyleProperties& s = StyleProperties())
746 {
747 auto_init();
748 selected_fig()->draw_tank(x,size,s);
749 }
750
758 static void draw_AUV(const Vector& x, float size, const StyleProperties& s = StyleProperties())
759 {
760 auto_init();
761 selected_fig()->draw_AUV(x,size,s);
762 }
763
771 static void draw_motor_boat(const Vector& x, float size, const StyleProperties& s = StyleProperties())
772 {
773 auto_init();
774 selected_fig()->draw_motor_boat(x,size,s);
775 }
776
777 // Pavings
778
786 static void draw_paving(const PavingOut& p,
787 const StyleProperties& boundary_style = StyleProperties::boundary(),
788 const StyleProperties& outside_style = StyleProperties::outside())
789 {
790 if(auto_init())
791 {
792 double rx = p.tree()->hull()[0].diam(), ry = p.tree()->hull()[1].diam();
793 _default_fig->set_window_properties({20.,20.},
794 rx > ry ? Vector({800.,800.*ry/rx}) : Vector({800.*rx/ry,800.}));
795 _default_fig->set_axes(axis(0,p.tree()->hull()[0]),axis(1,p.tree()->hull()[1]));
796 }
797
798 selected_fig()->draw_paving(p, boundary_style, outside_style);
799 }
800
809 static void draw_paving(const PavingInOut& p,
810 const StyleProperties& boundary_style = StyleProperties::boundary(),
811 const StyleProperties& outside_style = StyleProperties::outside(),
812 const StyleProperties& inside_style = StyleProperties::inside())
813 {
814 if(auto_init())
815 {
816 double rx = p.tree()->hull()[0].diam(), ry = p.tree()->hull()[1].diam();
817 _default_fig->set_window_properties({20.,20.},
818 rx > ry ? Vector({800.,800.*ry/rx}) : Vector({800.*rx/ry,800.}));
819 _default_fig->set_axes(axis(0,p.tree()->hull()[0]),axis(1,p.tree()->hull()[1]));
820 }
821
822 selected_fig()->draw_paving(p, boundary_style, outside_style, inside_style);
823 }
824
831 template<typename P>
832 static void draw_subpaving(const Subpaving<P>& p, const StyleProperties& s = StyleProperties())
833 {
834 auto_init();
835 selected_fig()->draw_subpaving(p, s);
836 }
837
838
839 protected:
840
841 static bool auto_init()
842 {
843 if(!_default_fig && !_selected_fig)
844 {
845 _default_fig = std::make_shared<Figure2D>(DEFAULT_FIG_NAME, GraphicOutput::VIBES);
846 _default_fig->set_window_properties({20.,20.}, {800.,800.});
847 _default_fig->set_axes(axis(0,{-10,10}),axis(1,{-10,10}));
848 _selected_fig = _default_fig;
849 return true;
850 }
851
852 return false;
853 }
854
855 friend Figure2D;
856
857 static std::shared_ptr<Figure2D> _default_fig;
858 static std::shared_ptr<Figure2D> _selected_fig;
859 };
860}
Default view class, used to manage the default figure.
Definition codac2_Figure2D.h:446
static void draw_trajectory(const SampledTraj< Vector > &x, const StyleProperties &s=StyleProperties())
Draws a trajectory on the figure.
Definition codac2_Figure2D.h:682
static void draw_paving(const PavingOut &p, const StyleProperties &boundary_style=StyleProperties::boundary(), const StyleProperties &outside_style=StyleProperties::outside())
Draws a paving on the figure.
Definition codac2_Figure2D.h:786
static void draw_pie(const Vector &c, const Interval &r, const Interval &theta, const StyleProperties &s=StyleProperties())
Draws a pie on the figure.
Definition codac2_Figure2D.h:644
static void draw_ring(const Vector &c, const Interval &r, const StyleProperties &s=StyleProperties())
Draws a ring on the figure.
Definition codac2_Figure2D.h:541
static void plot_trajectory(const SampledTraj< double > &x, const StyleProperties &s=StyleProperties())
Plots a trajectory on the figure (x-axis is the time)
Definition codac2_Figure2D.h:730
static void draw_circle(const Vector &c, double r, const StyleProperties &s=StyleProperties())
Draws a circle on the figure.
Definition codac2_Figure2D.h:528
static void set_axes(const FigureAxis &axis1, const FigureAxis &axis2)
Setter for the axes of the figure.
Definition codac2_Figure2D.h:477
static void draw_arrow(const Vector &p1, const Vector &p2, float tip_length, const StyleProperties &s=StyleProperties())
Draws an arrow on the figure.
Definition codac2_Figure2D.h:580
static void draw_line(const Segment &e, const StyleProperties &s=StyleProperties())
Draws a line on the figure.
Definition codac2_Figure2D.h:566
static void draw_polyline(const std::vector< Vector > &x, const StyleProperties &s=StyleProperties())
Draws a polyline on the figure.
Definition codac2_Figure2D.h:592
static void draw_ellipsoid(const Ellipsoid &e, const StyleProperties &s=StyleProperties())
Draws an ellipsoid on the figure.
Definition codac2_Figure2D.h:670
static void draw_AUV(const Vector &x, float size, const StyleProperties &s=StyleProperties())
Draws an AUV on the figure.
Definition codac2_Figure2D.h:758
static void set(std::shared_ptr< Figure2D > fig)
Setter for the default figure.
Definition codac2_Figure2D.h:466
static void draw_polyline(const std::vector< Vector > &x, float tip_length, const StyleProperties &s=StyleProperties())
Draws a polyline on the figure.
Definition codac2_Figure2D.h:605
static void draw_line(const Vector &p1, const Vector &p2, const StyleProperties &s=StyleProperties())
Draws a line on the figure.
Definition codac2_Figure2D.h:554
static void draw_subpaving(const Subpaving< P > &p, const StyleProperties &s=StyleProperties())
Draws a subpaving on the figure.
Definition codac2_Figure2D.h:832
static void draw_trajectory(const AnalyticTraj< VectorType > &x, const StyleProperties &s=StyleProperties())
Draws a trajectory on the figure.
Definition codac2_Figure2D.h:694
static void draw_parallelepiped(const Vector &z, const Matrix &A, const StyleProperties &s=StyleProperties())
Draws a parallelepiped z+A*[-1,1]^2 on the figure.
Definition codac2_Figure2D.h:630
static void draw_paving(const PavingInOut &p, const StyleProperties &boundary_style=StyleProperties::boundary(), const StyleProperties &outside_style=StyleProperties::outside(), const StyleProperties &inside_style=StyleProperties::inside())
Draws a paving on the figure.
Definition codac2_Figure2D.h:809
static void draw_ellipse(const Vector &c, const Vector &ab, double theta, const StyleProperties &s=StyleProperties())
Draws an ellipse on the figure.
Definition codac2_Figure2D.h:658
static void draw_polygon(const Polygon &x, const StyleProperties &s=StyleProperties())
Draws a Polygon object on the figure.
Definition codac2_Figure2D.h:617
static void draw_motor_boat(const Vector &x, float size, const StyleProperties &s=StyleProperties())
Draws a motor boat on the figure.
Definition codac2_Figure2D.h:771
static void draw_box(const IntervalVector &x, const StyleProperties &s=StyleProperties())
Draws a box on the figure.
Definition codac2_Figure2D.h:515
static void set_window_properties(const Vector &pos, const Vector &size)
Setter for the position and size of the window.
Definition codac2_Figure2D.h:489
static void draw_trajectory(const SampledTraj< Vector > &x, const ColorMap &cmap)
Draws a trajectory on the figure with a colormap.
Definition codac2_Figure2D.h:706
static void draw_tank(const Vector &x, float size, const StyleProperties &s=StyleProperties())
Draws a tank on the figure.
Definition codac2_Figure2D.h:745
static std::shared_ptr< Figure2D > selected_fig()
Getter for the default figure.
Definition codac2_Figure2D.h:454
static void draw_point(const Vector &c, const StyleProperties &s=StyleProperties())
Draws a point on the figure.
Definition codac2_Figure2D.h:503
static void draw_trajectory(const AnalyticTraj< VectorType > &x, const ColorMap &cmap)
Draws a trajectory on the figure with a colormap.
Definition codac2_Figure2D.h:718
Ellipsoid representation.
Definition codac2_Ellipsoid.h:43
const Index & j() const
Getter for the index of the vertical axis.
const std::vector< FigureAxis > & axes() const
Getter for the axes of the figure.
void draw_trajectory(const AnalyticTraj< VectorType > &x, const StyleProperties &s=StyleProperties())
Draws a trajectory on the figure.
void set_tdomain(const Interval &tdomain)
Setter for the time domain of the figure.
void draw_line(const Vector &p1, const Vector &p2, const StyleProperties &s=StyleProperties())
Draws a line on the figure.
void draw_trajectory(const SampledTraj< Vector > &x, const ColorMap &cmap)
Draws a trajectory on the figure with a colormap.
void draw_polyline(const std::vector< Vector > &x, float tip_length, const StyleProperties &s=StyleProperties())
Draws a polyline on the figure.
void draw_tank(const Vector &x, float size, const StyleProperties &s=StyleProperties())
Draws a tank on the figure.
void center_viewbox(const Vector &c, const Vector &r)
VIBes only: center the viewbox on a given point with a given radius.
const Vector & pos() const
Getter for the position of the figure.
void set_axes(const FigureAxis &axis1, const FigureAxis &axis2)
Setter for the axes of the figure.
void draw_box(const IntervalVector &x, const StyleProperties &s=StyleProperties())
Draws a box on the figure.
void draw_trajectory(const SampledTraj< Vector > &x, const StyleProperties &s=StyleProperties())
Draws a trajectory on the figure.
void draw_circle(const Vector &c, double r, const StyleProperties &s=StyleProperties())
Draws a circle on the figure.
void draw_motor_boat(const Vector &x, float size, const StyleProperties &s=StyleProperties())
Draws a motor boat on the figure.
void plot_trajectory(const SampledTraj< double > &x, const StyleProperties &s=StyleProperties())
Plots a trajectory on the figure (x-axis is the time)
void draw_polyline(const std::vector< Vector > &x, const StyleProperties &s=StyleProperties())
Draws a polyline on the figure.
const Vector & window_size() const
getter for the size of the window
bool is_default() const
void draw_AUV(const Vector &x, float size, const StyleProperties &s=StyleProperties())
Draws an AUV on the figure.
void set_as_default()
Sets the figure as the default view.
void draw_ring(const Vector &c, const Interval &r, const StyleProperties &s=StyleProperties())
Draws a ring on the figure.
void draw_ellipsoid(const Ellipsoid &e, const StyleProperties &s=StyleProperties())
Draws an ellipsoid on the figure.
void draw_trajectory(const AnalyticTraj< VectorType > &x, const ColorMap &cmap)
Draws a trajectory on the figure with a colormap.
void draw_pie(const Vector &c, const Interval &r, const Interval &theta, const StyleProperties &s=StyleProperties())
Draws a pie on the figure.
void draw_parallelepiped(const Vector &z, const Matrix &A, const StyleProperties &s=StyleProperties())
Draws a parallelepiped z+A*[-1,1]^2 on the figure.
double scaled_unit() const
Getter for the scaling factor of the figure.
void draw_line(const Segment &e, const StyleProperties &s=StyleProperties())
Draws a line on the figure.
const Index & i() const
Getter for the index of the horizontal axis.
const std::string & name() const
Getter for the name of the figure.
void draw_paving(const PavingInOut &p, const StyleProperties &bound_s=StyleProperties::boundary(), const StyleProperties &out_s=StyleProperties::outside(), const StyleProperties &in_s=StyleProperties::inside())
Draws a paving on the figure.
void draw_subpaving(const Subpaving< P > &p, const StyleProperties &s=StyleProperties())
Draws a subpaving on the figure.
Definition codac2_Figure2D.h:420
void draw_ellipse(const Vector &c, const Vector &ab, double theta, const StyleProperties &s=StyleProperties())
Draws an ellipse on the figure.
Figure2D(const std::string &name, GraphicOutput o, bool set_as_default=false)
Creates a new Figure2D object, with a given name and output.
void draw_paving(const PavingOut &p, const StyleProperties &bound_s=StyleProperties::boundary(), const StyleProperties &out_s=StyleProperties::outside())
Draws a paving on the figure.
void draw_polygon(const Polygon &x, const StyleProperties &s=StyleProperties())
Draws a Polygon object on the figure.
void auto_scale()
VIBes only: auto scale the figure.
Index size() const
Getter for the size of the figure.
void set_window_properties(const Vector &pos, const Vector &size)
Setter for the position and size of the window.
void draw_arrow(const Vector &p1, const Vector &p2, float tip_length, const StyleProperties &s=StyleProperties())
Draws an arrow on the figure.
void draw_point(const Vector &c, const StyleProperties &s=StyleProperties())
Draws a point on the figure.
Interval class, for representing closed and connected subsets of .
Definition codac2_Interval.h:62
Represents a polygon (convex or non-convex) defined by its vertices enclosed in IntervalVectors.
Definition codac2_Polygon.h:29
Represents a geometric segment defined by two points enclosed in IntervalVectors.
Definition codac2_Segment.h:28
Represents a set of RGB or HSV values.
Definition codac2_ColorMap.h:29
Style properties structure, to specify the style of a shape.
Definition codac2_StyleProperties.h:26
static StyleProperties inside()
Predefined "inside" style, dark gray edge and green fill.
static StyleProperties outside()
Predefined "outside" style, dark gray edge and cyan fill.
static StyleProperties boundary()
Predefined "boundary" style, dark gray edge and yellow fill.