Program Listing for File Drawer.h#
↰ Return to documentation for file (src/main/cpp/lib/Drawer.h)
#ifndef DRAWER_H_
#define DRAWER_H_
#include "IOVector.h"
class Drawer
{
protected:
CoordinateConverter m_coord_converter;
std::size_t m_num_inputs;
public:
/* Constant affecting the distance of the control points of a link Bezier curve */
static constexpr double LINK_CONTROL_STRENGTH = 100;
struct TextAlignment
{
const static TextAlignment LEFT, HALF_LEFT, CENTERED, HALF_RIGHT, RIGHT;
double ratio;
TextAlignment (double ratio);
};
Drawer (int width, int height, std::size_t num_inputs) :
m_coord_converter (width, height), m_num_inputs (num_inputs)
{
}
virtual
~Drawer ()
{
}
virtual void
change_surface (const std::string& fpath, int width, int height,
std::size_t num_inputs) = 0;
virtual void
draw_output_grid (const OutputGrid& grid) = 0;
virtual void
draw_input_axis (const InputAxis& axis) = 0;
virtual void
draw_io_vector (const IOVector& elem) = 0;
virtual void
finish () = 0;
inline void
set_num_inputs (std::size_t num_inputs)
{
m_num_inputs = num_inputs;
}
protected:
virtual void
set_surface (const std::string& fpath, int width, int height) = 0;
virtual void
draw_histogram (const InputAxis::Histogram& histogram, double radius,
const Angle& start, const Angle& end) = 0;
virtual void
draw_link (const Polar& origin1, const Polar& origin2, const Polar& target1,
const Polar& target2, const DrawerProperties<>& prop) = 0;
virtual void
draw_connector (const Polar& from, const Polar& to,
const DrawerProperties<>& prop) = 0;
virtual void
draw_segment_axis (double inner_radius, double thickness, const Angle& begin,
const Angle& end,
const DrawerProperties<std::array<Color, 10>>& prop,
Direction dir) = 0;
virtual void
draw_output_label (const Label& output_label, double radius_label,
double radius_output, const Angle& begin,
const Angle& end) = 0;
virtual void
draw_arrow (const Polar& start, const DrawerProperties<>& prop) = 0;
virtual void
draw_ring_segment (double radius, double thickness, const Angle& start,
const Angle& end, const DrawerProperties<>& prop,
Direction dir) = 0;
virtual void
draw_connector_segment (double start_radius, double start_angle,
double end_radius, double end_angle,
const DrawerProperties<>& prop) = 0;
virtual void
draw_line (const Polar& from, const Polar& to,
const DrawerProperties<>& prop) = 0;
virtual void
draw_arc (double inner_radius, const Angle& start, const Angle& end,
Direction dir) = 0;
virtual void
draw_coord_point (const Polar& coord, const Angle& width, double height,
const DrawerProperties<>& prop) = 0;
virtual void
draw_text_parallel (
const Label& label, const Polar & start, const TextAlignment& alignment =
TextAlignment::CENTERED) = 0;
virtual void
draw_text_orthogonal (
const Label& label, const Polar& start, const TextAlignment& alignment =
TextAlignment::CENTERED) = 0;
inline Polar
get_connector_start (const Polar& from, const Polar& to)
{
return Polar (from.radius () + 0.1 * (to.radius () - from.radius ()),
from.angle ());
}
inline Polar
get_connector_end (const Polar& from, const Polar& to)
{
return Polar (to.radius () - 0.1 * (to.radius () - from.radius ()),
to.angle ());
}
inline Cartesian
create_link_control_point (const Polar& point) const
{
Polar control (point);
control.radius () -= LINK_CONTROL_STRENGTH;
Cartesian control_c;
m_coord_converter.convert (control, control_c);
return control_c;
}
};
#endif /* DRAWER_H_ */