1 //----------------------------------------------------------------------------
2 // Anti-Grain Geometry - Version 2.4
3 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
5 // Permission to copy, use, modify, sell and distribute this software
6 // is granted provided this copyright notice appears in all copies.
7 // This software is provided "as is" without express or implied
8 // warranty, and with no claim as to its suitability for any purpose.
10 //----------------------------------------------------------------------------
11 // Contact: mcseem@antigrain.com
12 // mcseemagg@yahoo.com
13 // http://www.antigrain.com
14 //----------------------------------------------------------------------------
16 // class renderer_markers
18 //----------------------------------------------------------------------------
20 #ifndef AGG_RENDERER_MARKERS_INCLUDED
21 #define AGG_RENDERER_MARKERS_INCLUDED
23 #include "agg_basics.h"
24 #include "agg_renderer_primitives.h"
29 //---------------------------------------------------------------marker_e
35 marker_crossed_circle
,
36 marker_semiellipse_left
,
37 marker_semiellipse_right
,
38 marker_semiellipse_up
,
39 marker_semiellipse_down
,
41 marker_triangle_right
,
56 //--------------------------------------------------------renderer_markers
57 template<class BaseRenderer
> class renderer_markers
:
58 public renderer_primitives
<BaseRenderer
>
61 typedef renderer_primitives
<BaseRenderer
> base_type
;
62 typedef BaseRenderer base_ren_type
;
63 typedef typename
base_ren_type::color_type color_type
;
65 //--------------------------------------------------------------------
66 renderer_markers(base_ren_type
& rbuf
) :
70 //--------------------------------------------------------------------
71 bool visible(int x
, int y
, int r
) const
73 rect_i
rc(x
-r
, y
-r
, x
+y
, y
+r
);
74 return rc
.clip(base_type::ren().bounding_clip_box());
77 //--------------------------------------------------------------------
78 void square(int x
, int y
, int r
)
82 if(r
) base_type::outlined_rectangle(x
-r
, y
-r
, x
+r
, y
+r
);
83 else base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
87 //--------------------------------------------------------------------
88 void diamond(int x
, int y
, int r
)
98 base_type::ren().blend_pixel(x
- dx
, y
+ dy
, base_type::line_color(), cover_full
);
99 base_type::ren().blend_pixel(x
+ dx
, y
+ dy
, base_type::line_color(), cover_full
);
100 base_type::ren().blend_pixel(x
- dx
, y
- dy
, base_type::line_color(), cover_full
);
101 base_type::ren().blend_pixel(x
+ dx
, y
- dy
, base_type::line_color(), cover_full
);
105 base_type::ren().blend_hline(x
-dx
+1, y
+dy
, x
+dx
-1, base_type::fill_color(), cover_full
);
106 base_type::ren().blend_hline(x
-dx
+1, y
-dy
, x
+dx
-1, base_type::fill_color(), cover_full
);
115 base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
120 //--------------------------------------------------------------------
121 void circle(int x
, int y
, int r
)
125 if(r
) base_type::outlined_ellipse(x
, y
, r
, r
);
126 else base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
132 //--------------------------------------------------------------------
133 void crossed_circle(int x
, int y
, int r
)
139 base_type::outlined_ellipse(x
, y
, r
, r
);
140 int r6
= r
+ (r
>> 1);
143 base_type::ren().blend_hline(x
-r6
, y
, x
-r
, base_type::line_color(), cover_full
);
144 base_type::ren().blend_hline(x
+r
, y
, x
+r6
, base_type::line_color(), cover_full
);
145 base_type::ren().blend_vline(x
, y
-r6
, y
-r
, base_type::line_color(), cover_full
);
146 base_type::ren().blend_vline(x
, y
+r
, y
+r6
, base_type::line_color(), cover_full
);
150 base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
156 //------------------------------------------------------------------------
157 void semiellipse_left(int x
, int y
, int r
)
166 ellipse_bresenham_interpolator
ei(r
* 3 / 5, r
+r8
);
172 base_type::ren().blend_pixel(x
+ dy
, y
+ dx
, base_type::line_color(), cover_full
);
173 base_type::ren().blend_pixel(x
+ dy
, y
- dx
, base_type::line_color(), cover_full
);
177 base_type::ren().blend_vline(x
+dy
, y
-dx
+1, y
+dx
-1, base_type::fill_color(), cover_full
);
182 base_type::ren().blend_vline(x
+dy
, y
-dx
, y
+dx
, base_type::line_color(), cover_full
);
186 base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
192 //--------------------------------------------------------------------
193 void semiellipse_right(int x
, int y
, int r
)
202 ellipse_bresenham_interpolator
ei(r
* 3 / 5, r
+r8
);
208 base_type::ren().blend_pixel(x
- dy
, y
+ dx
, base_type::line_color(), cover_full
);
209 base_type::ren().blend_pixel(x
- dy
, y
- dx
, base_type::line_color(), cover_full
);
213 base_type::ren().blend_vline(x
-dy
, y
-dx
+1, y
+dx
-1, base_type::fill_color(), cover_full
);
218 base_type::ren().blend_vline(x
-dy
, y
-dx
, y
+dx
, base_type::line_color(), cover_full
);
222 base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
228 //--------------------------------------------------------------------
229 void semiellipse_up(int x
, int y
, int r
)
238 ellipse_bresenham_interpolator
ei(r
* 3 / 5, r
+r8
);
244 base_type::ren().blend_pixel(x
+ dx
, y
- dy
, base_type::line_color(), cover_full
);
245 base_type::ren().blend_pixel(x
- dx
, y
- dy
, base_type::line_color(), cover_full
);
249 base_type::ren().blend_hline(x
-dx
+1, y
-dy
, x
+dx
-1, base_type::fill_color(), cover_full
);
254 base_type::ren().blend_hline(x
-dx
, y
-dy
-1, x
+dx
, base_type::line_color(), cover_full
);
258 base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
264 //--------------------------------------------------------------------
265 void semiellipse_down(int x
, int y
, int r
)
274 ellipse_bresenham_interpolator
ei(r
* 3 / 5, r
+r8
);
280 base_type::ren().blend_pixel(x
+ dx
, y
+ dy
, base_type::line_color(), cover_full
);
281 base_type::ren().blend_pixel(x
- dx
, y
+ dy
, base_type::line_color(), cover_full
);
285 base_type::ren().blend_hline(x
-dx
+1, y
+dy
, x
+dx
-1, base_type::fill_color(), cover_full
);
290 base_type::ren().blend_hline(x
-dx
, y
+dy
+1, x
+dx
, base_type::line_color(), cover_full
);
294 base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
300 //--------------------------------------------------------------------
301 void triangle_left(int x
, int y
, int r
)
313 base_type::ren().blend_pixel(x
+ dy
, y
- dx
, base_type::line_color(), cover_full
);
314 base_type::ren().blend_pixel(x
+ dy
, y
+ dx
, base_type::line_color(), cover_full
);
318 base_type::ren().blend_vline(x
+dy
, y
-dx
+1, y
+dx
-1, base_type::fill_color(), cover_full
);
325 base_type::ren().blend_vline(x
+dy
, y
-dx
, y
+dx
, base_type::line_color(), cover_full
);
329 base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
335 //--------------------------------------------------------------------
336 void triangle_right(int x
, int y
, int r
)
348 base_type::ren().blend_pixel(x
- dy
, y
- dx
, base_type::line_color(), cover_full
);
349 base_type::ren().blend_pixel(x
- dy
, y
+ dx
, base_type::line_color(), cover_full
);
353 base_type::ren().blend_vline(x
-dy
, y
-dx
+1, y
+dx
-1, base_type::fill_color(), cover_full
);
360 base_type::ren().blend_vline(x
-dy
, y
-dx
, y
+dx
, base_type::line_color(), cover_full
);
364 base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
370 //--------------------------------------------------------------------
371 void triangle_up(int x
, int y
, int r
)
383 base_type::ren().blend_pixel(x
- dx
, y
- dy
, base_type::line_color(), cover_full
);
384 base_type::ren().blend_pixel(x
+ dx
, y
- dy
, base_type::line_color(), cover_full
);
388 base_type::ren().blend_hline(x
-dx
+1, y
-dy
, x
+dx
-1, base_type::fill_color(), cover_full
);
395 base_type::ren().blend_hline(x
-dx
, y
-dy
, x
+dx
, base_type::line_color(), cover_full
);
399 base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
405 //--------------------------------------------------------------------
406 void triangle_down(int x
, int y
, int r
)
418 base_type::ren().blend_pixel(x
- dx
, y
+ dy
, base_type::line_color(), cover_full
);
419 base_type::ren().blend_pixel(x
+ dx
, y
+ dy
, base_type::line_color(), cover_full
);
423 base_type::ren().blend_hline(x
-dx
+1, y
+dy
, x
+dx
-1, base_type::fill_color(), cover_full
);
430 base_type::ren().blend_hline(x
-dx
, y
+dy
, x
+dx
, base_type::line_color(), cover_full
);
434 base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
440 //--------------------------------------------------------------------
441 void four_rays(int x
, int y
, int r
)
453 base_type::ren().blend_pixel(x
- dx
, y
+ dy
, base_type::line_color(), cover_full
);
454 base_type::ren().blend_pixel(x
+ dx
, y
+ dy
, base_type::line_color(), cover_full
);
455 base_type::ren().blend_pixel(x
- dx
, y
- dy
, base_type::line_color(), cover_full
);
456 base_type::ren().blend_pixel(x
+ dx
, y
- dy
, base_type::line_color(), cover_full
);
457 base_type::ren().blend_pixel(x
+ dy
, y
- dx
, base_type::line_color(), cover_full
);
458 base_type::ren().blend_pixel(x
+ dy
, y
+ dx
, base_type::line_color(), cover_full
);
459 base_type::ren().blend_pixel(x
- dy
, y
- dx
, base_type::line_color(), cover_full
);
460 base_type::ren().blend_pixel(x
- dy
, y
+ dx
, base_type::line_color(), cover_full
);
464 base_type::ren().blend_hline(x
-dx
+1, y
+dy
, x
+dx
-1, base_type::fill_color(), cover_full
);
465 base_type::ren().blend_hline(x
-dx
+1, y
-dy
, x
+dx
-1, base_type::fill_color(), cover_full
);
466 base_type::ren().blend_vline(x
+dy
, y
-dx
+1, y
+dx
-1, base_type::fill_color(), cover_full
);
467 base_type::ren().blend_vline(x
-dy
, y
-dx
+1, y
+dx
-1, base_type::fill_color(), cover_full
);
474 base_type::solid_rectangle(x
+r3
+1, y
+r3
+1, x
-r3
-1, y
-r3
-1);
478 base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
484 //--------------------------------------------------------------------
485 void cross(int x
, int y
, int r
)
491 base_type::ren().blend_vline(x
, y
-r
, y
+r
, base_type::line_color(), cover_full
);
492 base_type::ren().blend_hline(x
-r
, y
, x
+r
, base_type::line_color(), cover_full
);
496 base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
502 //--------------------------------------------------------------------
503 void xing(int x
, int y
, int r
)
509 int dy
= -r
* 7 / 10;
512 base_type::ren().blend_pixel(x
+ dy
, y
+ dy
, base_type::line_color(), cover_full
);
513 base_type::ren().blend_pixel(x
- dy
, y
+ dy
, base_type::line_color(), cover_full
);
514 base_type::ren().blend_pixel(x
+ dy
, y
- dy
, base_type::line_color(), cover_full
);
515 base_type::ren().blend_pixel(x
- dy
, y
- dy
, base_type::line_color(), cover_full
);
520 base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
525 //--------------------------------------------------------------------
526 void dash(int x
, int y
, int r
)
530 if(r
) base_type::ren().blend_hline(x
-r
, y
, x
+r
, base_type::line_color(), cover_full
);
531 else base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
536 //--------------------------------------------------------------------
537 void dot(int x
, int y
, int r
)
541 if(r
) base_type::solid_ellipse(x
, y
, r
, r
);
542 else base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
546 //--------------------------------------------------------------------
547 void pixel(int x
, int y
, int)
549 base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
552 //--------------------------------------------------------------------
553 void marker(int x
, int y
, int r
, marker_e type
)
557 case marker_square
: square(x
, y
, r
); break;
558 case marker_diamond
: diamond(x
, y
, r
); break;
559 case marker_circle
: circle(x
, y
, r
); break;
560 case marker_crossed_circle
: crossed_circle(x
, y
, r
); break;
561 case marker_semiellipse_left
: semiellipse_left(x
, y
, r
); break;
562 case marker_semiellipse_right
: semiellipse_right(x
, y
, r
); break;
563 case marker_semiellipse_up
: semiellipse_up(x
, y
, r
); break;
564 case marker_semiellipse_down
: semiellipse_down(x
, y
, r
); break;
565 case marker_triangle_left
: triangle_left(x
, y
, r
); break;
566 case marker_triangle_right
: triangle_right(x
, y
, r
); break;
567 case marker_triangle_up
: triangle_up(x
, y
, r
); break;
568 case marker_triangle_down
: triangle_down(x
, y
, r
); break;
569 case marker_four_rays
: four_rays(x
, y
, r
); break;
570 case marker_cross
: cross(x
, y
, r
); break;
571 case marker_x
: xing(x
, y
, r
); break;
572 case marker_dash
: dash(x
, y
, r
); break;
573 case marker_dot
: dot(x
, y
, r
); break;
574 case marker_pixel
: pixel(x
, y
, r
); break;
579 //--------------------------------------------------------------------
581 void markers(int n
, const T
* x
, const T
* y
, T r
, marker_e type
)
588 base_type::ren().blend_pixel(int(*x
), int(*y
), base_type::fill_color(), cover_full
);
598 case marker_square
: do { square (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
599 case marker_diamond
: do { diamond (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
600 case marker_circle
: do { circle (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
601 case marker_crossed_circle
: do { crossed_circle (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
602 case marker_semiellipse_left
: do { semiellipse_left (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
603 case marker_semiellipse_right
: do { semiellipse_right(int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
604 case marker_semiellipse_up
: do { semiellipse_up (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
605 case marker_semiellipse_down
: do { semiellipse_down (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
606 case marker_triangle_left
: do { triangle_left (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
607 case marker_triangle_right
: do { triangle_right (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
608 case marker_triangle_up
: do { triangle_up (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
609 case marker_triangle_down
: do { triangle_down (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
610 case marker_four_rays
: do { four_rays (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
611 case marker_cross
: do { cross (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
612 case marker_x
: do { xing (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
613 case marker_dash
: do { dash (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
614 case marker_dot
: do { dot (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
615 case marker_pixel
: do { pixel (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
619 //--------------------------------------------------------------------
621 void markers(int n
, const T
* x
, const T
* y
, const T
* r
, marker_e type
)
626 case marker_square
: do { square (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
627 case marker_diamond
: do { diamond (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
628 case marker_circle
: do { circle (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
629 case marker_crossed_circle
: do { crossed_circle (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
630 case marker_semiellipse_left
: do { semiellipse_left (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
631 case marker_semiellipse_right
: do { semiellipse_right(int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
632 case marker_semiellipse_up
: do { semiellipse_up (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
633 case marker_semiellipse_down
: do { semiellipse_down (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
634 case marker_triangle_left
: do { triangle_left (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
635 case marker_triangle_right
: do { triangle_right (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
636 case marker_triangle_up
: do { triangle_up (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
637 case marker_triangle_down
: do { triangle_down (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
638 case marker_four_rays
: do { four_rays (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
639 case marker_cross
: do { cross (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
640 case marker_x
: do { xing (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
641 case marker_dash
: do { dash (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
642 case marker_dot
: do { dot (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
643 case marker_pixel
: do { pixel (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
647 //--------------------------------------------------------------------
649 void markers(int n
, const T
* x
, const T
* y
, const T
* r
, const color_type
* fc
, marker_e type
)
654 case marker_square
: do { base_type::fill_color(*fc
); square (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; } while(--n
); break;
655 case marker_diamond
: do { base_type::fill_color(*fc
); diamond (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; } while(--n
); break;
656 case marker_circle
: do { base_type::fill_color(*fc
); circle (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; } while(--n
); break;
657 case marker_crossed_circle
: do { base_type::fill_color(*fc
); crossed_circle (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; } while(--n
); break;
658 case marker_semiellipse_left
: do { base_type::fill_color(*fc
); semiellipse_left (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; } while(--n
); break;
659 case marker_semiellipse_right
: do { base_type::fill_color(*fc
); semiellipse_right(int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; } while(--n
); break;
660 case marker_semiellipse_up
: do { base_type::fill_color(*fc
); semiellipse_up (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; } while(--n
); break;
661 case marker_semiellipse_down
: do { base_type::fill_color(*fc
); semiellipse_down (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; } while(--n
); break;
662 case marker_triangle_left
: do { base_type::fill_color(*fc
); triangle_left (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; } while(--n
); break;
663 case marker_triangle_right
: do { base_type::fill_color(*fc
); triangle_right (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; } while(--n
); break;
664 case marker_triangle_up
: do { base_type::fill_color(*fc
); triangle_up (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; } while(--n
); break;
665 case marker_triangle_down
: do { base_type::fill_color(*fc
); triangle_down (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; } while(--n
); break;
666 case marker_four_rays
: do { base_type::fill_color(*fc
); four_rays (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; } while(--n
); break;
667 case marker_cross
: do { base_type::fill_color(*fc
); cross (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; } while(--n
); break;
668 case marker_x
: do { base_type::fill_color(*fc
); xing (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; } while(--n
); break;
669 case marker_dash
: do { base_type::fill_color(*fc
); dash (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; } while(--n
); break;
670 case marker_dot
: do { base_type::fill_color(*fc
); dot (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; } while(--n
); break;
671 case marker_pixel
: do { base_type::fill_color(*fc
); pixel (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; } while(--n
); break;
675 //--------------------------------------------------------------------
677 void markers(int n
, const T
* x
, const T
* y
, const T
* r
, const color_type
* fc
, const color_type
* lc
, marker_e type
)
682 case marker_square
: do { base_type::fill_color(*fc
); base_type::line_color(*lc
); square (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; ++lc
; } while(--n
); break;
683 case marker_diamond
: do { base_type::fill_color(*fc
); base_type::line_color(*lc
); diamond (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; ++lc
; } while(--n
); break;
684 case marker_circle
: do { base_type::fill_color(*fc
); base_type::line_color(*lc
); circle (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; ++lc
; } while(--n
); break;
685 case marker_crossed_circle
: do { base_type::fill_color(*fc
); base_type::line_color(*lc
); crossed_circle (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; ++lc
; } while(--n
); break;
686 case marker_semiellipse_left
: do { base_type::fill_color(*fc
); base_type::line_color(*lc
); semiellipse_left (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; ++lc
; } while(--n
); break;
687 case marker_semiellipse_right
: do { base_type::fill_color(*fc
); base_type::line_color(*lc
); semiellipse_right(int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; ++lc
; } while(--n
); break;
688 case marker_semiellipse_up
: do { base_type::fill_color(*fc
); base_type::line_color(*lc
); semiellipse_up (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; ++lc
; } while(--n
); break;
689 case marker_semiellipse_down
: do { base_type::fill_color(*fc
); base_type::line_color(*lc
); semiellipse_down (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; ++lc
; } while(--n
); break;
690 case marker_triangle_left
: do { base_type::fill_color(*fc
); base_type::line_color(*lc
); triangle_left (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; ++lc
; } while(--n
); break;
691 case marker_triangle_right
: do { base_type::fill_color(*fc
); base_type::line_color(*lc
); triangle_right (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; ++lc
; } while(--n
); break;
692 case marker_triangle_up
: do { base_type::fill_color(*fc
); base_type::line_color(*lc
); triangle_up (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; ++lc
; } while(--n
); break;
693 case marker_triangle_down
: do { base_type::fill_color(*fc
); base_type::line_color(*lc
); triangle_down (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; ++lc
; } while(--n
); break;
694 case marker_four_rays
: do { base_type::fill_color(*fc
); base_type::line_color(*lc
); four_rays (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; ++lc
; } while(--n
); break;
695 case marker_cross
: do { base_type::fill_color(*fc
); base_type::line_color(*lc
); cross (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; ++lc
; } while(--n
); break;
696 case marker_x
: do { base_type::fill_color(*fc
); base_type::line_color(*lc
); xing (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; ++lc
; } while(--n
); break;
697 case marker_dash
: do { base_type::fill_color(*fc
); base_type::line_color(*lc
); dash (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; ++lc
; } while(--n
); break;
698 case marker_dot
: do { base_type::fill_color(*fc
); base_type::line_color(*lc
); dot (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; ++lc
; } while(--n
); break;
699 case marker_pixel
: do { base_type::fill_color(*fc
); base_type::line_color(*lc
); pixel (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; ++lc
; } while(--n
); break;