| @@ -40,6 +40,16 @@ static uint8_t clip_bits(int, int); | |||
| static void draw_solid_line(struct line*); | |||
| static void draw_thin_line(struct line*); | |||
| /** | |||
| * \brief Draw a line on the screen using the given character. | |||
| * | |||
| * \param x1 X coordinate of the first point. | |||
| * \param y1 Y coordinate of the first point. | |||
| * \param x2 X coordinate of the second point. | |||
| * \param y2 Y coordinate of the second point. | |||
| * \param c Character to draw the line with. | |||
| * \return nothing | |||
| */ | |||
| void ee_draw_line(int x1, int y1, int x2, int y2, char c) | |||
| { | |||
| struct line s; | |||
| @@ -52,6 +62,15 @@ void ee_draw_line(int x1, int y1, int x2, int y2, char c) | |||
| clip_line(&s); | |||
| } | |||
| /** | |||
| * \brief Draw a thin line on the screen, using ASCII art. | |||
| * | |||
| * \param x1 X coordinate of the first point. | |||
| * \param y1 Y coordinate of the first point. | |||
| * \param x2 X coordinate of the second point. | |||
| * \param y2 Y coordinate of the second point. | |||
| * \return nothing | |||
| */ | |||
| void ee_draw_thin_line(int x1, int y1, int x2, int y2) | |||
| { | |||
| struct line s; | |||
| @@ -63,6 +82,12 @@ void ee_draw_thin_line(int x1, int y1, int x2, int y2) | |||
| clip_line(&s); | |||
| } | |||
| /** | |||
| * \brief Generic Cohen-Sutherland line clipping function. | |||
| * | |||
| * \param s a line structure | |||
| * \return nothing | |||
| */ | |||
| static void clip_line(struct line* s) | |||
| { | |||
| uint8_t bits1, bits2; | |||
| @@ -114,6 +139,13 @@ static void clip_line(struct line* s) | |||
| clip_line(s); | |||
| } | |||
| /** | |||
| * \brief Helper function for clip_line(). | |||
| * | |||
| * \param x X coordinate of the point. | |||
| * \param y Y coordinate of the point. | |||
| * \return b The clipping bits for the given point. | |||
| */ | |||
| static uint8_t clip_bits(int x, int y) | |||
| { | |||
| uint8_t b = 0; | |||
| @@ -131,6 +163,13 @@ static uint8_t clip_bits(int x, int y) | |||
| return b; | |||
| } | |||
| /** | |||
| * \brief Solid line drawing function, using Bresenham's mid-point line | |||
| * scan-conversion algorithm. | |||
| * | |||
| * \param s a line structure | |||
| * \return nothing | |||
| */ | |||
| static void draw_solid_line(struct line* s) | |||
| { | |||
| int x1, y1, x2, y2; | |||
| @@ -193,6 +232,13 @@ static void draw_solid_line(struct line* s) | |||
| } | |||
| } | |||
| /** | |||
| * \brief Thin line drawing function, using Bresenham's mid-point line | |||
| * scan-conversion algorithm and ASCII art graphics. | |||
| * | |||
| * \param s a line structure | |||
| * \return nothing | |||
| */ | |||
| static void draw_thin_line(struct line* s) | |||
| { | |||
| char *charmapx, *charmapy; | |||