1 //----------------------------------------------------------------------------
2 // Anti-Grain Geometry - Version 2.3
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
) :
71 //--------------------------------------------------------------------
72 bool visible(int x
, int y
, int r
) const
74 rect
rc(x
-r
, y
-r
, x
+y
, y
+r
);
75 return rc
.clip(base_type::ren().bounding_clip_box());
78 //--------------------------------------------------------------------
79 void square(int x
, int y
, int r
)
83 if(r
) base_type::outlined_rectangle(x
-r
, y
-r
, x
+r
, y
+r
);
84 else base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
88 //--------------------------------------------------------------------
89 void diamond(int x
, int y
, int r
)
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
);
102 base_type::ren().blend_pixel(x
+ dx
, y
- dy
, base_type::line_color(), cover_full
);
106 base_type::ren().blend_hline(x
-dx
+1, y
+dy
, x
+dx
-1, base_type::fill_color(), cover_full
);
107 base_type::ren().blend_hline(x
-dx
+1, y
-dy
, x
+dx
-1, base_type::fill_color(), cover_full
);
116 base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
121 //--------------------------------------------------------------------
122 void circle(int x
, int y
, int r
)
126 if(r
) base_type::outlined_ellipse(x
, y
, r
, r
);
127 else base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
133 //--------------------------------------------------------------------
134 void crossed_circle(int x
, int y
, int r
)
140 base_type::outlined_ellipse(x
, y
, r
, r
);
141 int r6
= r
+ (r
>> 1);
144 base_type::ren().blend_hline(x
-r6
, y
, x
-r
, base_type::line_color(), cover_full
);
145 base_type::ren().blend_hline(x
+r
, y
, x
+r6
, base_type::line_color(), cover_full
);
146 base_type::ren().blend_vline(x
, y
-r6
, y
-r
, base_type::line_color(), cover_full
);
147 base_type::ren().blend_vline(x
, y
+r
, y
+r6
, base_type::line_color(), cover_full
);
151 base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
157 //------------------------------------------------------------------------
158 void semiellipse_left(int x
, int y
, int r
)
167 ellipse_bresenham_interpolator
ei(r
* 3 / 5, r
+r8
);
173 base_type::ren().blend_pixel(x
+ dy
, y
+ dx
, base_type::line_color(), cover_full
);
174 base_type::ren().blend_pixel(x
+ dy
, y
- dx
, base_type::line_color(), cover_full
);
178 base_type::ren().blend_vline(x
+dy
, y
-dx
+1, y
+dx
-1, base_type::fill_color(), cover_full
);
183 base_type::ren().blend_vline(x
+dy
, y
-dx
, y
+dx
, base_type::line_color(), cover_full
);
187 base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
193 //--------------------------------------------------------------------
194 void semiellipse_right(int x
, int y
, int r
)
203 ellipse_bresenham_interpolator
ei(r
* 3 / 5, r
+r8
);
209 base_type::ren().blend_pixel(x
- dy
, y
+ dx
, base_type::line_color(), cover_full
);
210 base_type::ren().blend_pixel(x
- dy
, y
- dx
, base_type::line_color(), cover_full
);
214 base_type::ren().blend_vline(x
-dy
, y
-dx
+1, y
+dx
-1, base_type::fill_color(), cover_full
);
219 base_type::ren().blend_vline(x
-dy
, y
-dx
, y
+dx
, base_type::line_color(), cover_full
);
223 base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
229 //--------------------------------------------------------------------
230 void semiellipse_up(int x
, int y
, int r
)
239 ellipse_bresenham_interpolator
ei(r
* 3 / 5, r
+r8
);
245 base_type::ren().blend_pixel(x
+ dx
, y
- dy
, base_type::line_color(), cover_full
);
246 base_type::ren().blend_pixel(x
- dx
, y
- dy
, base_type::line_color(), cover_full
);
250 base_type::ren().blend_hline(x
-dx
+1, y
-dy
, x
+dx
-1, base_type::fill_color(), cover_full
);
255 base_type::ren().blend_hline(x
-dx
, y
-dy
-1, x
+dx
, base_type::line_color(), cover_full
);
259 base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
265 //--------------------------------------------------------------------
266 void semiellipse_down(int x
, int y
, int r
)
275 ellipse_bresenham_interpolator
ei(r
* 3 / 5, r
+r8
);
281 base_type::ren().blend_pixel(x
+ dx
, y
+ dy
, base_type::line_color(), cover_full
);
282 base_type::ren().blend_pixel(x
- dx
, y
+ dy
, base_type::line_color(), cover_full
);
286 base_type::ren().blend_hline(x
-dx
+1, y
+dy
, x
+dx
-1, base_type::fill_color(), cover_full
);
291 base_type::ren().blend_hline(x
-dx
, y
+dy
+1, x
+dx
, base_type::line_color(), cover_full
);
295 base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
301 //--------------------------------------------------------------------
302 void triangle_left(int x
, int y
, int r
)
314 base_type::ren().blend_pixel(x
+ dy
, y
- dx
, base_type::line_color(), cover_full
);
315 base_type::ren().blend_pixel(x
+ dy
, y
+ dx
, base_type::line_color(), cover_full
);
319 base_type::ren().blend_vline(x
+dy
, y
-dx
+1, y
+dx
-1, base_type::fill_color(), cover_full
);
326 base_type::ren().blend_vline(x
+dy
, y
-dx
, y
+dx
, base_type::line_color(), cover_full
);
330 base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
336 //--------------------------------------------------------------------
337 void triangle_right(int x
, int y
, int r
)
349 base_type::ren().blend_pixel(x
- dy
, y
- dx
, base_type::line_color(), cover_full
);
350 base_type::ren().blend_pixel(x
- dy
, y
+ dx
, base_type::line_color(), cover_full
);
354 base_type::ren().blend_vline(x
-dy
, y
-dx
+1, y
+dx
-1, base_type::fill_color(), cover_full
);
361 base_type::ren().blend_vline(x
-dy
, y
-dx
, y
+dx
, base_type::line_color(), cover_full
);
365 base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
371 //--------------------------------------------------------------------
372 void triangle_up(int x
, int y
, int r
)
384 base_type::ren().blend_pixel(x
- dx
, y
- dy
, base_type::line_color(), cover_full
);
385 base_type::ren().blend_pixel(x
+ dx
, y
- dy
, base_type::line_color(), cover_full
);
389 base_type::ren().blend_hline(x
-dx
+1, y
-dy
, x
+dx
-1, base_type::fill_color(), cover_full
);
396 base_type::ren().blend_hline(x
-dx
, y
-dy
, x
+dx
, base_type::line_color(), cover_full
);
400 base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
406 //--------------------------------------------------------------------
407 void triangle_down(int x
, int y
, int r
)
419 base_type::ren().blend_pixel(x
- dx
, y
+ dy
, base_type::line_color(), cover_full
);
420 base_type::ren().blend_pixel(x
+ dx
, y
+ dy
, base_type::line_color(), cover_full
);
424 base_type::ren().blend_hline(x
-dx
+1, y
+dy
, x
+dx
-1, base_type::fill_color(), cover_full
);
431 base_type::ren().blend_hline(x
-dx
, y
+dy
, x
+dx
, base_type::line_color(), cover_full
);
435 base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
441 //--------------------------------------------------------------------
442 void four_rays(int x
, int y
, int r
)
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
+ dx
, y
- dy
, 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
);
461 base_type::ren().blend_pixel(x
- dy
, y
+ dx
, base_type::line_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_hline(x
-dx
+1, y
-dy
, x
+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
);
468 base_type::ren().blend_vline(x
-dy
, y
-dx
+1, y
+dx
-1, base_type::fill_color(), cover_full
);
475 base_type::solid_rectangle(x
+r3
+1, y
+r3
+1, x
-r3
-1, y
-r3
-1);
479 base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
485 //--------------------------------------------------------------------
486 void cross(int x
, int y
, int r
)
492 base_type::ren().blend_vline(x
, y
-r
, y
+r
, base_type::line_color(), cover_full
);
493 base_type::ren().blend_hline(x
-r
, y
, x
+r
, base_type::line_color(), cover_full
);
497 base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
503 //--------------------------------------------------------------------
504 void xing(int x
, int y
, int r
)
510 int dy
= -r
* 7 / 10;
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
);
516 base_type::ren().blend_pixel(x
- dy
, y
- dy
, base_type::line_color(), cover_full
);
521 base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
526 //--------------------------------------------------------------------
527 void dash(int x
, int y
, int r
)
531 if(r
) base_type::ren().blend_hline(x
-r
, y
, x
+r
, base_type::line_color(), cover_full
);
532 else base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
537 //--------------------------------------------------------------------
538 void dot(int x
, int y
, int r
)
542 if(r
) base_type::solid_ellipse(x
, y
, r
, r
);
543 else base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
547 //--------------------------------------------------------------------
548 void pixel(int x
, int y
, int)
550 base_type::ren().blend_pixel(x
, y
, base_type::fill_color(), cover_full
);
553 //--------------------------------------------------------------------
554 void marker(int x
, int y
, int r
, marker_e type
)
558 case marker_square
: square(x
, y
, r
); break;
559 case marker_diamond
: diamond(x
, y
, r
); break;
560 case marker_circle
: circle(x
, y
, r
); break;
561 case marker_crossed_circle
: crossed_circle(x
, y
, r
); break;
562 case marker_semiellipse_left
: semiellipse_left(x
, y
, r
); break;
563 case marker_semiellipse_right
: semiellipse_right(x
, y
, r
); break;
564 case marker_semiellipse_up
: semiellipse_up(x
, y
, r
); break;
565 case marker_semiellipse_down
: semiellipse_down(x
, y
, r
); break;
566 case marker_triangle_left
: triangle_left(x
, y
, r
); break;
567 case marker_triangle_right
: triangle_right(x
, y
, r
); break;
568 case marker_triangle_up
: triangle_up(x
, y
, r
); break;
569 case marker_triangle_down
: triangle_down(x
, y
, r
); break;
570 case marker_four_rays
: four_rays(x
, y
, r
); break;
571 case marker_cross
: cross(x
, y
, r
); break;
572 case marker_x
: xing(x
, y
, r
); break;
573 case marker_dash
: dash(x
, y
, r
); break;
574 case marker_dot
: dot(x
, y
, r
); break;
575 case marker_pixel
: pixel(x
, y
, r
); break;
580 //--------------------------------------------------------------------
582 void markers(int n
, const T
* x
, const T
* y
, T r
, marker_e type
)
589 base_type::ren().blend_pixel(int(*x
), int(*y
), base_type::fill_color(), cover_full
);
599 case marker_square
: do { square (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
600 case marker_diamond
: do { diamond (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
601 case marker_circle
: do { circle (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
602 case marker_crossed_circle
: do { crossed_circle (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
603 case marker_semiellipse_left
: do { semiellipse_left (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
604 case marker_semiellipse_right
: do { semiellipse_right(int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
605 case marker_semiellipse_up
: do { semiellipse_up (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
606 case marker_semiellipse_down
: do { semiellipse_down (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
607 case marker_triangle_left
: do { triangle_left (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
608 case marker_triangle_right
: do { triangle_right (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
609 case marker_triangle_up
: do { triangle_up (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
610 case marker_triangle_down
: do { triangle_down (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
611 case marker_four_rays
: do { four_rays (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
612 case marker_cross
: do { cross (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
613 case marker_x
: do { xing (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
614 case marker_dash
: do { dash (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
615 case marker_dot
: do { dot (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
616 case marker_pixel
: do { pixel (int(*x
), int(*y
), int(r
)); ++x
; ++y
; } while(--n
); break;
620 //--------------------------------------------------------------------
622 void markers(int n
, const T
* x
, const T
* y
, const T
* r
, marker_e type
)
627 case marker_square
: do { square (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
628 case marker_diamond
: do { diamond (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
629 case marker_circle
: do { circle (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
630 case marker_crossed_circle
: do { crossed_circle (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
631 case marker_semiellipse_left
: do { semiellipse_left (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
632 case marker_semiellipse_right
: do { semiellipse_right(int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
633 case marker_semiellipse_up
: do { semiellipse_up (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
634 case marker_semiellipse_down
: do { semiellipse_down (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
635 case marker_triangle_left
: do { triangle_left (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
636 case marker_triangle_right
: do { triangle_right (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
637 case marker_triangle_up
: do { triangle_up (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
638 case marker_triangle_down
: do { triangle_down (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
639 case marker_four_rays
: do { four_rays (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
640 case marker_cross
: do { cross (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
641 case marker_x
: do { xing (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
642 case marker_dash
: do { dash (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
643 case marker_dot
: do { dot (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
644 case marker_pixel
: do { pixel (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; } while(--n
); break;
648 //--------------------------------------------------------------------
650 void markers(int n
, const T
* x
, const T
* y
, const T
* r
, const color_type
* fc
, marker_e type
)
655 case marker_square
: do { base_type::fill_color(*fc
); square (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; } while(--n
); break;
656 case marker_diamond
: do { base_type::fill_color(*fc
); diamond (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; } while(--n
); break;
657 case marker_circle
: do { base_type::fill_color(*fc
); circle (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; } while(--n
); break;
658 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;
659 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;
660 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;
661 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;
662 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;
663 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;
664 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;
665 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;
666 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;
667 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;
668 case marker_cross
: do { base_type::fill_color(*fc
); cross (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; } while(--n
); break;
669 case marker_x
: do { base_type::fill_color(*fc
); xing (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; } while(--n
); break;
670 case marker_dash
: do { base_type::fill_color(*fc
); dash (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; } while(--n
); break;
671 case marker_dot
: do { base_type::fill_color(*fc
); dot (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; } while(--n
); break;
672 case marker_pixel
: do { base_type::fill_color(*fc
); pixel (int(*x
), int(*y
), int(*r
)); ++x
; ++y
; ++r
; ++fc
; } while(--n
); break;
676 //--------------------------------------------------------------------
678 void markers(int n
, const T
* x
, const T
* y
, const T
* r
, const color_type
* fc
, const color_type
* lc
, marker_e type
)
683 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;
684 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;
685 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;
686 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;
687 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;
688 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;
689 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;
690 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;
691 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;
692 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;
693 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;
694 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;
695 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;
696 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;
697 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;
698 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;
699 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;
700 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;