update dev300-m58
[ooovba.git] / agg / inc / agg_renderer_markers.h
blob631816ecd0ac41668887840bc6592ef52a829dc6
1 //----------------------------------------------------------------------------
2 // Anti-Grain Geometry - Version 2.3
3 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
4 //
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.
9 //
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"
26 namespace agg
29 //---------------------------------------------------------------marker_e
30 enum marker_e
32 marker_square,
33 marker_diamond,
34 marker_circle,
35 marker_crossed_circle,
36 marker_semiellipse_left,
37 marker_semiellipse_right,
38 marker_semiellipse_up,
39 marker_semiellipse_down,
40 marker_triangle_left,
41 marker_triangle_right,
42 marker_triangle_up,
43 marker_triangle_down,
44 marker_four_rays,
45 marker_cross,
46 marker_x,
47 marker_dash,
48 marker_dot,
49 marker_pixel,
51 end_of_markers
56 //--------------------------------------------------------renderer_markers
57 template<class BaseRenderer> class renderer_markers :
58 public renderer_primitives<BaseRenderer>
60 public:
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) :
67 base_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)
81 if(visible(x, y, 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)
91 if(visible(x, y, r))
93 if(r)
95 int dy = -r;
96 int dx = 0;
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);
104 if(dx)
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);
109 ++dy;
110 ++dx;
112 while(dy <= 0);
114 else
116 base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full);
121 //--------------------------------------------------------------------
122 void circle(int x, int y, int r)
124 if(visible(x, y, 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)
136 if(visible(x, y, r))
138 if(r)
140 base_type::outlined_ellipse(x, y, r, r);
141 int r6 = r + (r >> 1);
142 if(r <= 2) r6++;
143 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);
149 else
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)
160 if(visible(x, y, r))
162 if(r)
164 int r8 = r * 4 / 5;
165 int dy = -r;
166 int dx = 0;
167 ellipse_bresenham_interpolator ei(r * 3 / 5, r+r8);
170 dx += ei.dx();
171 dy += ei.dy();
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);
176 if(ei.dy() && dx)
178 base_type::ren().blend_vline(x+dy, y-dx+1, y+dx-1, base_type::fill_color(), cover_full);
180 ++ei;
182 while(dy < r8);
183 base_type::ren().blend_vline(x+dy, y-dx, y+dx, base_type::line_color(), cover_full);
185 else
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)
196 if(visible(x, y, r))
198 if(r)
200 int r8 = r * 4 / 5;
201 int dy = -r;
202 int dx = 0;
203 ellipse_bresenham_interpolator ei(r * 3 / 5, r+r8);
206 dx += ei.dx();
207 dy += ei.dy();
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);
212 if(ei.dy() && dx)
214 base_type::ren().blend_vline(x-dy, y-dx+1, y+dx-1, base_type::fill_color(), cover_full);
216 ++ei;
218 while(dy < r8);
219 base_type::ren().blend_vline(x-dy, y-dx, y+dx, base_type::line_color(), cover_full);
221 else
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)
232 if(visible(x, y, r))
234 if(r)
236 int r8 = r * 4 / 5;
237 int dy = -r;
238 int dx = 0;
239 ellipse_bresenham_interpolator ei(r * 3 / 5, r+r8);
242 dx += ei.dx();
243 dy += ei.dy();
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);
248 if(ei.dy() && dx)
250 base_type::ren().blend_hline(x-dx+1, y-dy, x+dx-1, base_type::fill_color(), cover_full);
252 ++ei;
254 while(dy < r8);
255 base_type::ren().blend_hline(x-dx, y-dy-1, x+dx, base_type::line_color(), cover_full);
257 else
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)
268 if(visible(x, y, r))
270 if(r)
272 int r8 = r * 4 / 5;
273 int dy = -r;
274 int dx = 0;
275 ellipse_bresenham_interpolator ei(r * 3 / 5, r+r8);
278 dx += ei.dx();
279 dy += ei.dy();
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);
284 if(ei.dy() && dx)
286 base_type::ren().blend_hline(x-dx+1, y+dy, x+dx-1, base_type::fill_color(), cover_full);
288 ++ei;
290 while(dy < r8);
291 base_type::ren().blend_hline(x-dx, y+dy+1, x+dx, base_type::line_color(), cover_full);
293 else
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)
304 if(visible(x, y, r))
306 if(r)
308 int dy = -r;
309 int dx = 0;
310 int flip = 0;
311 int r6 = r * 3 / 5;
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);
317 if(dx)
319 base_type::ren().blend_vline(x+dy, y-dx+1, y+dx-1, base_type::fill_color(), cover_full);
321 ++dy;
322 dx += flip;
323 flip ^= 1;
325 while(dy < r6);
326 base_type::ren().blend_vline(x+dy, y-dx, y+dx, base_type::line_color(), cover_full);
328 else
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)
339 if(visible(x, y, r))
341 if(r)
343 int dy = -r;
344 int dx = 0;
345 int flip = 0;
346 int r6 = r * 3 / 5;
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);
352 if(dx)
354 base_type::ren().blend_vline(x-dy, y-dx+1, y+dx-1, base_type::fill_color(), cover_full);
356 ++dy;
357 dx += flip;
358 flip ^= 1;
360 while(dy < r6);
361 base_type::ren().blend_vline(x-dy, y-dx, y+dx, base_type::line_color(), cover_full);
363 else
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)
374 if(visible(x, y, r))
376 if(r)
378 int dy = -r;
379 int dx = 0;
380 int flip = 0;
381 int r6 = r * 3 / 5;
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);
387 if(dx)
389 base_type::ren().blend_hline(x-dx+1, y-dy, x+dx-1, base_type::fill_color(), cover_full);
391 ++dy;
392 dx += flip;
393 flip ^= 1;
395 while(dy < r6);
396 base_type::ren().blend_hline(x-dx, y-dy, x+dx, base_type::line_color(), cover_full);
398 else
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)
409 if(visible(x, y, r))
411 if(r)
413 int dy = -r;
414 int dx = 0;
415 int flip = 0;
416 int r6 = r * 3 / 5;
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);
422 if(dx)
424 base_type::ren().blend_hline(x-dx+1, y+dy, x+dx-1, base_type::fill_color(), cover_full);
426 ++dy;
427 dx += flip;
428 flip ^= 1;
430 while(dy < r6);
431 base_type::ren().blend_hline(x-dx, y+dy, x+dx, base_type::line_color(), cover_full);
433 else
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)
444 if(visible(x, y, r))
446 if(r)
448 int dy = -r;
449 int dx = 0;
450 int flip = 0;
451 int r3 = -(r / 3);
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);
463 if(dx)
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);
470 ++dy;
471 dx += flip;
472 flip ^= 1;
474 while(dy <= r3);
475 base_type::solid_rectangle(x+r3+1, y+r3+1, x-r3-1, y-r3-1);
477 else
479 base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full);
485 //--------------------------------------------------------------------
486 void cross(int x, int y, int r)
488 if(visible(x, y, r))
490 if(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);
495 else
497 base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full);
503 //--------------------------------------------------------------------
504 void xing(int x, int y, int r)
506 if(visible(x, y, r))
508 if(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);
517 ++dy;
519 while(dy < 0);
521 base_type::ren().blend_pixel(x, y, base_type::fill_color(), cover_full);
526 //--------------------------------------------------------------------
527 void dash(int x, int y, int r)
529 if(visible(x, y, 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)
540 if(visible(x, y, 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)
556 switch(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 //--------------------------------------------------------------------
581 template<class T>
582 void markers(int n, const T* x, const T* y, T r, marker_e type)
584 if(n <= 0) return;
585 if(r == 0)
589 base_type::ren().blend_pixel(int(*x), int(*y), base_type::fill_color(), cover_full);
590 ++x;
591 ++y;
593 while(--n);
594 return;
597 switch(type)
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 //--------------------------------------------------------------------
621 template<class T>
622 void markers(int n, const T* x, const T* y, const T* r, marker_e type)
624 if(n <= 0) return;
625 switch(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 //--------------------------------------------------------------------
649 template<class T>
650 void markers(int n, const T* x, const T* y, const T* r, const color_type* fc, marker_e type)
652 if(n <= 0) return;
653 switch(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 //--------------------------------------------------------------------
677 template<class T>
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)
680 if(n <= 0) return;
681 switch(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;
707 #endif