19 #include "../include/tscope5/primitives.h"
20 #include "../include/tscope5/graphics.h"
21 #include "../include/tscope5/primitives_internal.h"
22 #include "../include/tscope5/system_internal.h"
23 #include "../include/tscope5/graphics_internal.h"
25 #include <allegro5/allegro_primitives.h>
46 ts5_log(TS5_LOGLEVEL_5,
"ts5_draw_pixel(%f,%f)\n", x, y);
48 if (_ts5_status.graphics.coordinate_scale
49 == TS5_RELATIVE_COORDINATES) {
54 if (_ts5_status.graphics.coordinate_system
55 == TS5_CARTESIAN_COORDINATES) {
60 x *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
61 y *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
63 if (_ts5_status.graphics.drawing_thickness <= 0.0) {
64 al_draw_pixel(x, y, _ts5_status.graphics.foreground_color);
67 al_draw_filled_circle(x, y,
68 _ts5_status.graphics.drawing_thickness *
69 _ts5_status.display[_ts5_status.active_display].sampling_factor,
70 _ts5_status.graphics.foreground_color);
87 ts5_log(TS5_LOGLEVEL_5,
"ts5_get_pixel_color(%f,%f)\n", x, y);
89 if (_ts5_status.graphics.coordinate_scale
90 == TS5_RELATIVE_COORDINATES) {
95 if (_ts5_status.graphics.coordinate_system
96 == TS5_CARTESIAN_COORDINATES) {
101 x *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
102 y *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
104 return (al_get_pixel(_ts5_data.target, x, y));
119 ts5_log(TS5_LOGLEVEL_5,
"ts5_draw_line(%f,%f,%f,%f)\n", x1, y1, x2, y2);
121 if (_ts5_status.graphics.coordinate_scale
122 == TS5_RELATIVE_COORDINATES) {
129 if (_ts5_status.graphics.coordinate_system
130 == TS5_CARTESIAN_COORDINATES) {
137 x1 *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
138 x2 *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
139 y1 *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
140 y2 *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
142 al_draw_line(x1, y1, x2, y2, _ts5_status.graphics.foreground_color,
143 _ts5_status.graphics.drawing_thickness *
144 _ts5_status.display[_ts5_status.active_display].sampling_factor);
159 ts5_log(TS5_LOGLEVEL_5,
"ts5_draw_rectangle(%f,%f,%f,%f)\n",
162 if (_ts5_status.graphics.coordinate_scale
163 == TS5_RELATIVE_COORDINATES) {
170 if (_ts5_status.graphics.coordinate_system
171 == TS5_CARTESIAN_COORDINATES) {
178 x1 *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
179 x2 *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
180 y1 *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
181 y2 *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
183 if (!_ts5_status.graphics.fill_mode) {
184 al_draw_rectangle(x1, y1, x2, y2,
185 _ts5_status.graphics.foreground_color,
186 _ts5_status.graphics.drawing_thickness *
187 _ts5_status.display[_ts5_status.active_display].sampling_factor);
190 al_draw_filled_rectangle(x1, y1, x2, y2,
191 _ts5_status.graphics.foreground_color);
207 double rx,
double ry)
210 ts5_log(TS5_LOGLEVEL_5,
"ts5_draw_rounded_rectangle(%f,%f,%f,%f,%f,%f)\n",
211 x1, y1, x2, y2, rx, ry);
213 if (_ts5_status.graphics.coordinate_scale
214 == TS5_RELATIVE_COORDINATES) {
223 if (_ts5_status.graphics.coordinate_system
224 == TS5_CARTESIAN_COORDINATES) {
255 x1 *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
256 x2 *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
257 y1 *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
258 y2 *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
259 rx *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
260 ry *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
262 if (!_ts5_status.graphics.fill_mode) {
263 al_draw_rounded_rectangle(x1, y1, x2, y2, rx, ry,
264 _ts5_status.graphics.foreground_color,
265 _ts5_status.graphics.drawing_thickness *
266 _ts5_status.display[_ts5_status.active_display].sampling_factor);
269 al_draw_filled_rounded_rectangle(x1, y1, x2, y2, rx, ry,
270 _ts5_status.graphics.foreground_color);
286 double x3,
double y3)
289 ts5_log(TS5_LOGLEVEL_5,
"ts5_draw_triangle(%f,%f,%f,%f,%f,%f)\n",
290 x1, y1, x2, y2, x3, y3);
292 if (_ts5_status.graphics.coordinate_scale
293 == TS5_RELATIVE_COORDINATES) {
302 if (_ts5_status.graphics.coordinate_system
303 == TS5_CARTESIAN_COORDINATES) {
312 x1 *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
313 x2 *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
314 x3 *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
315 y1 *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
316 y2 *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
317 y3 *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
319 if (!_ts5_status.graphics.fill_mode) {
320 al_draw_triangle(x1, y1, x2, y2, x3, y3,
321 _ts5_status.graphics.foreground_color,
322 _ts5_status.graphics.drawing_thickness *
323 _ts5_status.display[_ts5_status.active_display].sampling_factor);
326 al_draw_filled_triangle(x1, y1, x2, y2, x3, y3,
327 _ts5_status.graphics.foreground_color);
342 ts5_log(TS5_LOGLEVEL_5,
"ts5_draw_circle(%f,%f,%f)\n", cx, cy, r);
344 if (_ts5_status.graphics.coordinate_scale
345 == TS5_RELATIVE_COORDINATES) {
351 if (_ts5_status.graphics.coordinate_system
352 == TS5_CARTESIAN_COORDINATES) {
357 cx *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
358 cy *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
359 r *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
361 if (!_ts5_status.graphics.fill_mode) {
362 al_draw_circle(cx, cy, r, _ts5_status.graphics.foreground_color,
363 _ts5_status.graphics.drawing_thickness *
364 _ts5_status.display[_ts5_status.active_display].sampling_factor);
367 al_draw_filled_circle(cx, cy, r,
368 _ts5_status.graphics.foreground_color);
384 ts5_log(TS5_LOGLEVEL_5,
"ts5_draw_ellipse(%f,%f,%f,%f)\n", cx, cy, rx, ry);
386 if (_ts5_status.graphics.coordinate_scale
387 == TS5_RELATIVE_COORDINATES) {
394 if (_ts5_status.graphics.coordinate_system
395 == TS5_CARTESIAN_COORDINATES) {
400 cx *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
401 cy *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
402 rx *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
403 ry *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
405 if (!_ts5_status.graphics.fill_mode) {
406 al_draw_ellipse(cx, cy, rx, ry,
407 _ts5_status.graphics.foreground_color,
408 _ts5_status.graphics.drawing_thickness *
409 _ts5_status.display[_ts5_status.active_display].sampling_factor);
412 al_draw_filled_ellipse(cx, cy, rx, ry,
413 _ts5_status.graphics.foreground_color);
428 void ts5_draw_arc(
double cx,
double cy,
double r,
double start,
double delta)
431 ts5_log(TS5_LOGLEVEL_5,
"ts5_draw_arc(%f,%f,%f,%f,%f)\n",
432 cx, cy, r, start, delta);
434 if (_ts5_status.graphics.coordinate_scale
435 == TS5_RELATIVE_COORDINATES) {
441 if (_ts5_status.graphics.coordinate_system
442 == TS5_CARTESIAN_COORDINATES) {
447 cx *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
448 cy *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
449 r *= _ts5_status.display[_ts5_status.active_display].sampling_factor;
451 start = - start * TS5_PI / 180;
452 delta = - delta * TS5_PI / 180;
453 al_draw_arc(cx, cy, r, start, delta,
454 _ts5_status.graphics.foreground_color,
455 _ts5_status.graphics.drawing_thickness *
456 _ts5_status.display[_ts5_status.active_display].sampling_factor);
void ts5_draw_pixel(double x, double y)
Draw a pixel.
void ts5_draw_rectangle(double x1, double y1, double x2, double y2)
Draw a rectangle.
void ts5_check_primitives(char *calling_function)
Do some checks at the start of each primitives function.
void ts5_draw_rounded_rectangle(double x1, double y1, double x2, double y2, double rx, double ry)
Draw a rounded rectangle.
double ts5_relative_to_absolute_coordinate_x(const double x)
Convert a relative horizontal coordinate into an absolute horizontal coordinate.
void ts5_draw_ellipse(double cx, double cy, double rx, double ry)
Draw an ellipse.
TS5_COLOR ts5_get_pixel_color(double x, double y)
Get the color of a pixel.
void ts5_draw_circle(double cx, double cy, double r)
Draw a circle.
void ts5_log(const unsigned int level, const char *format,...)
Send info to a logging window.
double ts5_cartesian_to_display_coordinate_x(const double x)
Convert a horizontal Cartesian coordinate into a horizontal display coordinate.
double ts5_cartesian_to_display_coordinate_y(const double y)
Convert a vertical Cartesian coordinate into a vertical display coordinate.
void ts5_draw_arc(double cx, double cy, double r, double start, double delta)
Draw an arc.
void ts5_draw_triangle(double x1, double y1, double x2, double y2, double x3, double y3)
Draw a triangle.
void ts5_draw_line(double x1, double y1, double x2, double y2)
Draw a line segment.
double ts5_relative_to_absolute_coordinate_y(const double y)
Convert a relative vertical coordinate into an absolute vertical coordinate.