home *** CD-ROM | disk | FTP | other *** search
/ PC World 2002 February / PCWorld_2002-02_cd.bin / Software / Vyzkuste / pdflib / pdflib-4.0.1.sit / pdflib-4.0.1 / bind / cpp / pdfclock.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2001-07-04  |  2.5 KB  |  121 lines  |  [TEXT/CWIE]

  1. // $Id: pdfclock.cpp,v 1.5.2.1 2001/05/16 12:25:50 york Exp $
  2. // A little PDFlib application to draw an analog clock.
  3. //
  4. //
  5.  
  6. #include <stdio.h>
  7. #include <string.h>
  8. #include <stdlib.h>
  9. #include <time.h>
  10.  
  11. #if !defined(WIN32) && !defined(MAC)
  12. #include <unistd.h>
  13. #endif
  14.  
  15. #include "pdflib.hpp"
  16.  
  17. #define READMODE    "rb"
  18. #define RADIUS        200.0
  19. #define MARGIN        20.0
  20. #define BUFSIZE        512
  21.  
  22. #define FILENAME    "pdfclock.pdf"
  23.  
  24. int
  25. main()
  26. {
  27.     PDF        *p;
  28.     float    alpha;
  29.     time_t    timer;
  30.     struct tm    ltime;
  31.     
  32.     /* Create a new PDF object */
  33.     p = new PDF();
  34.  
  35.     /* Open new PDF file */
  36.     if (p->open(FILENAME) == -1) {
  37.     fprintf(stderr, "pdfclock error: cannot open PDF file %s.\n",
  38.         FILENAME);
  39.     }
  40.  
  41.     p->set_info("Creator", "pdfclock.cpp");
  42.     p->set_info("Author", "Thomas Merz");
  43.     p->set_info("Title", "PDF clock (C++)");
  44.  
  45.     p->begin_page((unsigned int) (2 * (RADIUS + MARGIN)),
  46.               (unsigned int) (2 * (RADIUS + MARGIN)));
  47.     
  48.     p->translate(RADIUS + MARGIN, RADIUS + MARGIN);
  49.     p->setcolor("both", "rgb", 0.0, 0.0, 1.0, 0.0);
  50.     p->save();
  51.  
  52.     /* minute strokes */
  53.     p->setlinewidth(2.0);
  54.     for (alpha = 0; alpha < 360; alpha += 6)
  55.     {
  56.     p->rotate(6.0);
  57.     p->moveto(RADIUS, 0.0);
  58.     p->lineto((float) (RADIUS-MARGIN/3), 0.0);
  59.     p->stroke();
  60.     }
  61.  
  62.     p->restore();
  63.     p->save();
  64.  
  65.     /* 5 minute strokes */
  66.     p->setlinewidth(3.0);
  67.     for (alpha = 0; alpha < 360; alpha += 30)
  68.     {
  69.     p->rotate(30.0);
  70.     p->moveto(RADIUS, 0.0);
  71.     p->lineto(RADIUS-MARGIN, 0.0);
  72.     p->stroke();
  73.     }
  74.  
  75.     time(&timer);
  76.     ltime = *localtime(&timer);
  77.  
  78.     /* draw hour hand */
  79.     p->save();
  80.     p->rotate(
  81.         (float)(-((ltime.tm_min/60.0) + ltime.tm_hour - 3.0) * 30.0));
  82.     p->moveto(-RADIUS/10, -RADIUS/20);
  83.     p->lineto(RADIUS/2, 0.0);
  84.     p->lineto(-RADIUS/10, RADIUS/20);
  85.     p->closepath();
  86.     p->fill();
  87.     p->restore();
  88.  
  89.     /* draw minute hand */
  90.     p->save();
  91.     p->rotate((float) (-((ltime.tm_sec/60.0) + ltime.tm_min - 15.0) * 6.0));
  92.     p->moveto(-RADIUS/10, -RADIUS/20);
  93.     p->lineto(RADIUS * 0.8, 0.0);
  94.     p->lineto(-RADIUS/10, RADIUS/20);
  95.     p->closepath();
  96.     p->fill();
  97.     p->restore();
  98.  
  99.     /* draw second hand */
  100.     p->setcolor("both", "rgb", 1.0, 0.0, 0.0, 0.0);
  101.     p->setlinewidth(2);
  102.     p->save();
  103.     p->rotate((float) -((ltime.tm_sec - 15.0) * 6.0));
  104.     p->moveto(-RADIUS/5, 0.0);
  105.     p->lineto(RADIUS, 0.0);
  106.     p->stroke();
  107.     p->restore();
  108.  
  109.     /* draw little circle at center */
  110.     p->circle(0, 0, (float) RADIUS/30);
  111.     p->fill();
  112.  
  113.     p->restore();
  114.  
  115.     p->end_page();
  116.  
  117.     p->close();
  118.  
  119.     return(0);
  120. }
  121.