home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2001 December / pcwk12201b.iso / Reklamy / CAD-Projekt / MegaCAD-4_5 / CC / LEKCJA09.C_ / LEKCJA09.C
C/C++ Source or Header  |  1996-07-21  |  4KB  |  120 lines

  1. /*                      LEKCJA09.C
  2. //---------------------------------------------------------------------------
  3. Temat:
  4.         Element wielokrotny - wywoêanie funkcji wirtualnej
  5. //---------------------------------------------------------------------------
  6. Funkcje:
  7.         EXT(209) short GetPnt(         
  8.         EXT(201) short GetPntInv(      
  9.         EXT(205) void StoreMultiple(  
  10. //---------------------------------------------------------------------------
  11.  
  12. EXT(209) short GetPnt(         // 
  13.              double *pkt,      // wartoÿci wspóêrz⌐dnych (x,y)
  14.              short  setinc);   // ukêad odniesienia 
  15.              
  16. Opis:
  17.     Funkcja wczytuje wartoÿci wskazanego punktu zgodnie z ustawionÑ opcjÑ 
  18.     wychwytu.
  19.     Dla wartoÿci absolutnych setinc=0 dla êaΣcuchowych setinc=1
  20.  
  21. Return:
  22.     TRUE  => po naciÿni⌐ciu lewego klawisza myszy
  23.     FALSE => po naciÿni⌐ciu prawego klawisza myszy 
  24.  
  25. Przykêad wywoêania:
  26.     a=GetPnt(&pkt,1);
  27. //---------------------------------------------------------------------------
  28.  
  29. EXT(201) short GetPntInv(      // 
  30.              double    *pkt,   // wartoÿci absolutne lub êaΣcuchowe
  31.              short     setinc, // Inkrementalpunkt miführen ?
  32.              tCallBack func,   // wywoêywana funkcja 
  33.              void      *para); // wska½nik wywoêywanej funkcji
  34.  
  35. Opis:
  36.     Funkcja wczytuje wartoÿci wskazanego punktu zgodnie z ustawionÑ opcjÑ 
  37.     wychwytu.
  38.     Ka╛de poruszenie myszy powoduje wywoêanie funkcji 'tCallBack' w której
  39.     mogÑ byå dokonywane obliczenia i wizualizacja. Jej wartoÿå 'return'
  40.     nie jest brana pod uwag⌐.
  41.     Dla wartoÿci absolutnych setinc=0 dla êaΣcuchowych setinc=1
  42.  
  43. Return:
  44.     TRUE  => po naciÿni⌐ciu lewego klawisza myszy
  45.     FALSE => po naciÿni⌐ciu prawego klawisza myszy 
  46.  
  47. Przykêad wywoêania:
  48.     if ( GetPntInv(&c1.xm,0,MrkCir,&c1))
  49. //---------------------------------------------------------------------------
  50.  
  51. EXT(205) void StoreMultiple(  // 
  52.         double      *data,    // dane elementu
  53.         ushort      type);    // typ z parametrem DO_SAVCNT
  54.  
  55. Opis:
  56.     Funkcja tworzy element wielokrotny (o ile sterujÑca ikona zostaêa
  57.     uaktywniona). 
  58.     W przypadku linii, okr⌐gu, êuku, elipsy oraz wycinka elipsy, mo╛na 
  59.     uaktywniå klawisz 'element wielokrotny', wtedy b⌐dzie rysowanych kilka 
  60.     "równolegêych" elementów. 
  61.     Typ nale╛y podanå wraz z DO_SAVCNT - automatycznie uruchomiona b⌐dzie po
  62.     stworzeniu elementu funkcja dopisania go do listy 'savecount'.
  63.  
  64. Przykêad wywoêania:
  65.     StoreMultiple(&c1.xm,E_CIRCLE | DO_SAVCNT);
  66.  
  67. */
  68. //---------------------------------------------------------------------------
  69. #include "std.h"
  70. #include "megatyp.h"
  71. #include "megacad.h"
  72. //---------------------------------------------------------------------------
  73. short MrkCir(
  74.         void *argptr )
  75. {
  76.     t_circle *p;
  77.  
  78.     p = argptr;
  79.     // der Kreis wird in weiß gezeichnet
  80.     DrawInv(E_CIRCLE,p,LMODE(0,PIX_XOR,BRIGHT_WHITE,0),E_CIRCLE);
  81.     return(0);
  82. }
  83. //---------------------------------------------------------------------------
  84. short main(char *filename, char *args)
  85. {
  86.    t_circle c1;
  87.    t_dlgdta dlg;
  88.    char tekst[50];
  89.  
  90.    c1.rd = 5.0;
  91.  
  92.    strcpy(dlg.text,"promieΣ=");
  93.    dlg.type = DLG_LEN;
  94.    dlg.val = &c1.rd;
  95.  
  96.    while ( DlgInput(1,"Kreis",&dlg) )
  97.    {
  98.       for ( ; ; )
  99.       {
  100.          SetFuncText("okr⌐gi wspóêÿrodkowe");
  101.          MouseHelp("postaw","powrót",HLP_INV(RED,WHITE,0));
  102.                                 // okrÑg jest 'przyklejony do kursora
  103.          if ( GetPntInv(&c1.xm,0,MrkCir,&c1) )
  104.          {
  105.                                 // zapami⌐tanie okr⌐gu
  106.             StoreMultiple(&c1.xm,E_CIRCLE | DO_SAVCNT);
  107.          }
  108.          else
  109.          {
  110.             sprintf(tekst,"x=%f  y=%f", c1.xm, c1.ym);
  111.             Message("wspóêrz⌐dne ostatniego okr⌐gu:",
  112.                    tekst,NULL,NULL,"ok",3);
  113.             break;
  114.          }
  115.       }
  116.    }
  117.    return(0);
  118. }
  119. //---------------------------------------------------------------------------
  120.