Graphic Calculator: FIDocalcus
Проект трёх первокурсников (по инженерному практикуму в первом семестре) по созданию графического калькулятора на FLTK C++
Loading...
Searching...
No Matches
Graphix_calc::Axis Class Reference

Фигура, представляющая собой мат. ось координат More...

#include <Axis.h>

Inheritance diagram for Graphix_calc::Axis:
Collaboration diagram for Graphix_calc::Axis:

Public Types

enum  Orientation { horizontal , vertical }
 

Public Member Functions

 Axis (Orientation orient, Graph_lib::Point origin, pix_amount length, double _unit_intr, const std::string &label_text)
 Инициализирует новый экземпляр Axis.
 
 Axis (Orientation orient, Graph_lib::Point origin, pix_amount length, double _unit_intr, pix_amount _mark_intr, const std::string &label_text)
 Инициализирует новый экземпляр Axis.
 
 ~Axis ()
 
Color color () const
 
void draw () const
 
void draw_lines () const override
 
Color fill_color () const
 
Line_style get_style () const
 
void init (Orientation orient, Graph_lib::Point origin, pix_amount length)
 Устанавливает все нужные точки
 
virtual void move (int dx, int dy)
 
size_t number_of_points () const
 
Point point (int i) const
 
void set_color (Graph_lib::Color c)
 
void set_fill_color (Color _color)
 
void set_style (Line_style sty)
 

Protected Member Functions

void add (Point p)
 
void set_point (int i, Point p)
 

Private Attributes

Color c {static_cast<Color>(fl_color())}
 
Color f_c {Color::invisible}
 
Graph_lib::Text label
 Надпись рядом с осью
 
Line_style ls {0}
 
pix_amount mark_intr
 Длина отмечаемого отрезка
 
std::vector< Graph_lib::Text * > marks
 Надписи к насечкам
 
Graph_lib::Lines notches
 Насечки
 
std::vector< Point > points
 
double unit_intr
 Длина единичного отрезка
 

Detailed Description

Фигура, представляющая собой мат. ось координат

Member Enumeration Documentation

◆ Orientation

Enumerator
horizontal 
vertical 
@ vertical
Definition Axis.h:14
@ horizontal
Definition Axis.h:14

Constructor & Destructor Documentation

◆ Axis() [1/2]

Graphix_calc::Axis::Axis ( Orientation orient,
Graph_lib::Point origin,
pix_amount length,
double _unit_intr,
const std::string & label_text )

Инициализирует новый экземпляр Axis.

Parameters
orientориентация
originцентр коорд.
lengthдлина оси
_unit_intrдлина ед. отрезка
label_textподпись
22 : unit_intr{_unit_intr},
23 mark_intr{pix_amount(_unit_intr)},
24 // надпись располагаем с отступом
25 // IDK: насколько тут плох тернарный оператор?
26 // (просто возникает проблема с запретом копирования Shape)
28 ? Point{origin.x - margin, origin.y - length / 2 + margin}
29 : Point{origin.x + length / 2 - margin, origin.y - margin},
30 label_text} {
31 init(orient, origin, length);
32}
unsigned int pix_amount
Definition Point.h:3
double unit_intr
Длина единичного отрезка
Definition Axis.h:61
Graph_lib::Text label
Надпись рядом с осью
Definition Axis.h:67
void init(Orientation orient, Graph_lib::Point origin, pix_amount length)
Устанавливает все нужные точки
Definition Axis.cpp:66
pix_amount mark_intr
Длина отмечаемого отрезка
Definition Axis.h:64
constexpr pix_amount margin
Вспомогательный отступ
Definition constants.h:40
Definition Point.h:7
pix_amount y
Definition Point.h:30
pix_amount x
Definition Point.h:30
Here is the call graph for this function:

◆ Axis() [2/2]

Graphix_calc::Axis::Axis ( Orientation orient,
Graph_lib::Point origin,
pix_amount length,
double _unit_intr,
pix_amount _mark_intr,
const std::string & label_text )

Инициализирует новый экземпляр Axis.

Parameters
orientориентация
originцентр коорд.
lengthдлина оси
_unit_intrдлина ед. отрезка
_mark_intrдлина марк. отрезка
label_textподпись
37 : unit_intr{_unit_intr},
38 mark_intr{_mark_intr},
39 // надпись располагаем с отступом
40 // IDK: насколько тут плох тернарный оператор?
41 // (просто возникает проблема с запретом копирования Shape)
43 ? Point{origin.x - margin, origin.y - length / 2 + margin}
44 : Point{origin.x + length / 2 - margin, origin.y - margin},
45 label_text} {
46 init(orient, origin, length);
47}
Here is the call graph for this function:

◆ ~Axis()

Graphix_calc::Axis::~Axis ( )
49 {
50 for (const auto& mark : marks) delete mark;
51}
std::vector< Graph_lib::Text * > marks
Надписи к насечкам
Definition Axis.h:73

Member Function Documentation

◆ add()

void Graph_lib::Shape::add ( Point p)
inlineprotectedinherited
176{ points.push_back(p); }
std::vector< Point > points
Definition Shapes.h:212
Here is the caller graph for this function:

◆ color()

Color Graph_lib::Shape::color ( ) const
inlineinherited
191{ return c; }
Color c
Definition Shapes.h:213
Here is the caller graph for this function:

◆ draw()

void Graph_lib::Shape::draw ( ) const
inherited
10 {
11 Fl_Color prev_color = fl_color(); // не существует хорошего портативного
12 // способа получения текущего стиля
15 draw_lines();
16 fl_color(prev_color); // reset color (к предыдущему) and style (к дефолтному)
18}
Line_style ls
Definition Shapes.h:214
virtual void draw_lines() const
Definition Shapes.cpp:20
W & reference_to(void *ptr_wid)
Definition Widgets.h:16
unsigned int as_uint() const
Definition Shapes.h:57
pix_amount w() const
Definition Shapes.h:94
unsigned int style() const
Definition Shapes.h:96
Here is the call graph for this function:
Here is the caller graph for this function:

◆ draw_lines()

void Graphix_calc::Axis::draw_lines ( ) const
overridevirtual

Reimplemented from Graph_lib::Shape.

53 {
54 Shape::draw_lines();
55 label.draw();
56 for (const auto& mark : marks) mark->draw();
57 notches.draw();
58}
void draw() const
Definition Shapes.cpp:10
Graph_lib::Lines notches
Насечки
Definition Axis.h:70
Here is the call graph for this function:

◆ fill_color()

Color Graph_lib::Shape::fill_color ( ) const
inlineinherited
199{ return f_c; }
Color f_c
Definition Shapes.h:215
Here is the caller graph for this function:

◆ get_style()

Line_style Graph_lib::Shape::get_style ( ) const
inlineinherited
195{ return ls; }

◆ init()

void Graphix_calc::Axis::init ( Orientation orient,
Graph_lib::Point origin,
pix_amount length )

Устанавливает все нужные точки

Parameters
orientориентация
originначало координат
lengthдлина оси

Надпись к насечке

Надпись к насечке

67 {
68 switch (orient) {
69 case Axis::horizontal: {
70 // установка точек для линии оси
71 Shape::add(Point{origin.x - length / 2, origin.y});
72 Shape::add(Point{origin.x + length / 2, origin.y});
73
74 // цикл по установке насечек и надписям к ним
75 // (начинаем с единицы, так как начало координат очевидно)
76 for (pix_amount i = 1; i < length / 2; i++) {
77 // IDK: по идее, хорошо бы еще единичный отрезок рисовать, но тогда там
78 // длины разные (из-за округления)
79
80 // в этом случае насечка находится на нужном расстоянии от origin
81 if (i % mark_intr == 0) {
82 // добавляем насечки с двух сторон
83 notches.add(Point{origin.x + i, origin.y + notch_side / 2},
84 Point{origin.x + i, origin.y - notch_side / 2});
85 notches.add(Point{origin.x - i, origin.y + notch_side / 2},
86 Point{origin.x - i, origin.y - notch_side / 2});
87
88 // также добавляем текст к этим насечкам
89
90 /// @brief Надпись к насечке
91 Text* mark = new Text(
92 Point(origin.x + i - notch_side / 2, origin.y + margin),
93 // (конвертируем, так как надписи к насечками в веществ.)
94 format(
95 converted_to_real({origin.x + i, origin.y}, origin, unit_intr)
96 .x,
100 marks.push_back(mark);
101
102 mark = new Text(
103 Point(origin.x - i - notch_side, origin.y + margin),
104 // (конвертируем, так как надписи к насечками в веществ.)
105 format(
106 converted_to_real({origin.x - i, origin.y}, origin, unit_intr)
107 .x,
111 marks.push_back(mark);
112 }
113 }
114 break;
115 }
116 case Axis::vertical: {
117 // установка точек для линии оси
118 Shape::add(Point{origin.x, origin.y + length / 2});
119 Shape::add(Point{origin.x, origin.y - length / 2});
120
121 // цикл по установке насечек и надписям к ним
122 // (начинаем с единицы, так как начало координат очевидно)
123 for (pix_amount i = 1; i < length / 2; i++) {
124 // IDK: по идее, хорошо бы еще единичный отрезок рисовать, но тогда там
125 // длины разные (из-за округления)
126
127 // в этом случае насечка находится на нужном расстоянии от origin
128 if (i % mark_intr == 0) {
129 // добавляем насечки с двух сторон
130 notches.add(Point{origin.x + notch_side / 2, origin.y + i},
131 Point{origin.x - notch_side / 2, origin.y + i});
132 notches.add(Point{origin.x + notch_side / 2, origin.y - i},
133 Point{origin.x - notch_side / 2, origin.y - i});
134
135 // также добавляем текст к этим насечкам
136
137 /// @brief Надпись к насечке
138 Text* mark = new Text(
139 Point(origin.x + margin, origin.y + i + notch_side / 2),
140 // (конвертируем, так как надписи к насечками в веществ.)
141 format(
142 converted_to_real({origin.x, origin.y + i}, origin, unit_intr)
143 .y,
147 marks.push_back(mark);
148
149 mark = new Text(
150 Point(origin.x + margin, origin.y - i + notch_side / 2),
151 // (конвертируем, так как надписи к насечками в веществ.)
152 format(
153 converted_to_real({origin.x, origin.y - i}, origin, unit_intr)
154 .y,
158 marks.push_back(mark);
159 }
160 }
161 break;
162 }
163 }
164}
void add(Point point_1, Point point_2)
Definition Shapes.h:277
void set_color(Color _color)
Definition Shapes.h:189
Definition Shapes.h:287
void set_font_size(unsigned int s)
Definition Shapes.h:304
constexpr pix_amount notch_side
Длина насечки
Definition constants.h:78
constexpr unsigned int notch_font_size
Стандартный размер текста для насечек
Definition constants.h:75
constexpr unsigned int notch_marks_format_prec
Количество знаков после точки для подписей к насечкам на осях
Definition constants.h:81
string format(double num, unsigned int after_comma_digits_amount)
Definition utilities.cpp:9
Math_calc::Point converted_to_real(Graph_lib::Point p, Graph_lib::Point origin, double unit_intr)
Definition utilities.cpp:33
@ black
Definition Shapes.h:30
Here is the call graph for this function:
Here is the caller graph for this function:

◆ move()

void Graph_lib::Shape::move ( int dx,
int dy )
virtualinherited

Reimplemented in Graph_lib::Image.

28 {
29 for (unsigned int i = 0; i < points.size(); ++i) {
30 points[i].x += dx;
31 points[i].y += dy;
32 }
33}
Here is the caller graph for this function:

◆ number_of_points()

size_t Graph_lib::Shape::number_of_points ( ) const
inlineinherited
203{ return points.size(); }
Here is the caller graph for this function:

◆ point()

Point Graph_lib::Shape::point ( int i) const
inlineinherited
201{ return points[i]; }
Here is the caller graph for this function:

◆ set_color()

void Graphix_calc::Axis::set_color ( Graph_lib::Color c)
60 {
61 Shape::set_color(c);
64}
Here is the call graph for this function:
Here is the caller graph for this function:

◆ set_fill_color()

void Graph_lib::Shape::set_fill_color ( Color _color)
inlineinherited
197{ f_c = _color; }

◆ set_point()

void Graph_lib::Shape::set_point ( int i,
Point p )
inlineprotectedinherited
178{ points[i] = p; }

◆ set_style()

void Graph_lib::Shape::set_style ( Line_style sty)
inlineinherited
193{ ls = sty; }

Member Data Documentation

◆ c

Color Graph_lib::Shape::c {static_cast<Color>(fl_color())}
privateinherited
213{static_cast<Color>(fl_color())};

◆ f_c

Color Graph_lib::Shape::f_c {Color::invisible}
privateinherited
@ invisible
Definition Shapes.h:41

◆ label

Graph_lib::Text Graphix_calc::Axis::label
private

Надпись рядом с осью

◆ ls

Line_style Graph_lib::Shape::ls {0}
privateinherited
214{0};

◆ mark_intr

pix_amount Graphix_calc::Axis::mark_intr
private

Длина отмечаемого отрезка

◆ marks

std::vector<Graph_lib::Text*> Graphix_calc::Axis::marks
private

Надписи к насечкам

◆ notches

Graph_lib::Lines Graphix_calc::Axis::notches
private

Насечки

◆ points

std::vector<Point> Graph_lib::Shape::points
privateinherited

◆ unit_intr

double Graphix_calc::Axis::unit_intr
private

Длина единичного отрезка


The documentation for this class was generated from the following files: