15 #include "pnmPainter.h" 38 _pen = PNMBrush::make_pixel(
LColorf(0, 0, 0, 1));
39 _fill = PNMBrush::make_pixel(
LColorf(1, 1, 1, 1));
52 xa -= (_pen->get_xc() - 0.5);
53 xb -= (_pen->get_xc() - 0.5);
54 ya -= (_pen->get_yc() - 0.5);
55 yb -= (_pen->get_yc() - 0.5);
61 if (xa == xb && ya == yb) {
66 if (cabs(xd) > cabs(yd)) {
70 int x_min = (int)cfloor(xa);
71 int x_max = (int)cceil(xb);
74 draw_hline_point(x_min, xa, ya, xd, yd, 1.0 - (xa - x_min));
77 for (
int x = x_min + 1; x < x_max; ++x) {
78 draw_hline_point(x, xa, ya, xd, yd, 1.0);
83 draw_hline_point(x_max, xa, ya, xd, yd, 1.0 - (x_max - xb));
88 int x_min = (int)cfloor(xb);
89 int x_max = (int)cceil(xa);
92 draw_hline_point(x_max, xa, ya, xd, yd, 1.0 - (x_max - xa));
95 for (
int x = x_max - 1; x > x_min; --x) {
96 draw_hline_point(x, xa, ya, xd, yd, 1.0);
101 draw_hline_point(x_min, xa, ya, xd, yd, 1.0 - (xb - x_min));
109 int y_min = (int)cfloor(ya);
110 int y_max = (int)cceil(yb);
113 draw_vline_point(y_min, xa, ya, xd, yd, 1.0 - (ya - y_min));
116 for (
int y = y_min + 1; y < y_max; ++y) {
117 draw_vline_point(y, xa, ya, xd, yd, 1.0);
120 if (y_max != y_min) {
122 draw_vline_point(y_max, xa, ya, xd, yd, 1.0 - (y_max - yb));
127 int y_min = (int)cfloor(yb);
128 int y_max = (int)cceil(ya);
131 draw_vline_point(y_max, xa, ya, xd, yd, 1.0 - (y_max - ya));
134 for (
int y = y_max - 1; y > y_min; --y) {
135 draw_vline_point(y, xa, ya, xd, yd, 1.0);
138 if (y_max != y_min) {
140 draw_vline_point(y_min, xa, ya, xd, yd, 1.0 - (yb - y_min));
172 int x_min = (int)cceil(xa);
173 int x_max = (int)cfloor(xb);
174 int y_min = (int)cceil(ya);
175 int y_max = (int)cfloor(yb);
176 for (
int y = y_min; y <= y_max; ++y) {
177 _fill->fill(_image, x_min, x_max, y, _xo, _yo);
The name of this class derives from the fact that we originally implemented it as a layer on top of t...
PNMPainter(PNMImage &image, int xo=0, int yo=0)
The constructor stores a pointer to the PNMImage you pass it, but it does not take ownership of the o...
void draw_line(float xa, float ya, float xb, float yb)
Draws an antialiased line on the PNMImage, using the current pen.
void draw_rectangle(float xa, float ya, float xb, float yb)
Draws a filled rectangule on the PNMImage, using the current pen for the outline, and the current fil...
This is the base class for all three-component vectors and points.