draw.c
上传用户:gzelex
上传日期:2007-01-07
资源大小:707k
文件大小:2k
开发平台:

MultiPlatform

  1. #include <LEDA/plane.h>
  2. #include <LEDA/window.h>
  3. enum { POINT=0, SEGMENT=1, LINE=2, CIRCLE=3, POLY=4 };
  4. main()
  5. {
  6.   window W;
  7.   line_style lstyle = solid;
  8.   int        lwidth = 1;
  9.   color      col    = black;
  10.   bool       fill   = false;
  11.   int        shape =  POINT;
  12.   panel P("DRAW");
  13.   P.bool_item  ("fill",fill);
  14.   P.color_item ("color",col);
  15.   P.lstyle_item("lstyle",lstyle);
  16.   P.int_item   ("lwidth",lwidth,1,10);
  17.   P.choice_item("shape",shape,"point","segment","line","circle","poly");
  18.   P.button("clear");
  19.   P.button("quit");
  20.   P.display(0,0);
  21.   for(;;)
  22.   { 
  23.     window* wp;
  24.     double x;
  25.     double y;
  26.     read_mouse(wp,x,y);
  27.     if (wp == &W || wp == (window*)&P) put_back_event();
  28.     if (wp == &P)
  29.       { int k = P.read();
  30.         W.set_line_width(lwidth);
  31.         W.set_line_style(lstyle);
  32.   
  33.         if (k == 0) W.clear();
  34.         if (k == 1) break;
  35.        }
  36.     else
  37.       switch(shape) {
  38.   
  39.         case POINT: 
  40.               { point p;
  41.                 W >> p;  
  42.                 W.draw_point(p,col);
  43.                 break;
  44.                }
  45.   
  46.         case SEGMENT: 
  47.               { segment s;
  48.                 W >> s;
  49.                 W.draw_segment(s,col);
  50.                 break;
  51.                }
  52.   
  53.         case LINE: 
  54.               { line l;
  55.                 W >> l;  W.draw_line(l,col);
  56.                 break;
  57.                }
  58.   
  59.         case CIRCLE: 
  60.               { circle c;
  61.                 W >> c;  
  62.                 if (fill) 
  63.                    W.draw_disc(c,col);
  64.                 else
  65.                    W.draw_circle(c,col);
  66.                 break;
  67.                }
  68.   
  69.         case POLY: 
  70.               { polygon P;
  71.                 W >> P;  
  72.                 if (fill) 
  73.                    W.draw_filled_polygon(P,col);
  74.                 else 
  75.                    W.draw_polygon(P,col);
  76.                 break;
  77.                }
  78.       }
  79.   }
  80.   return 0;
  81. }