home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2001 December / pcwk12201b.iso / Reklamy / CAD-Projekt / MegaCAD-4_5 / CC / LEKCJA05.C_ / LEKCJA05.C
C/C++ Source or Header  |  1995-09-01  |  7KB  |  256 lines

  1. /*                      LEKCJA05.C
  2. //---------------------------------------------------------------------------
  3. Tematy:
  4.         Struktura budowy danych.
  5.         Definiowanie elementów: 
  6.                          PUNKT, ODCINEK, OKRñG, ¥UK, ELIPSA, WYCINEK ELIPSY
  7. //---------------------------------------------------------------------------
  8. Funkcje:
  9.         EXT(212) ulong CreateEntity(   
  10.         EXT(210) void savecount (
  11. //---------------------------------------------------------------------------
  12.  
  13.    Elementy rysunku sÑ zapisywane w MegaCADzie w formie struktury 
  14.    zdefiniowanej nast⌐pujÑco:
  15.  
  16. typedef struct _entity
  17. {
  18.     ushort    type;       // typ elementu
  19.     ulong     id;         // numer identyfikacyjny
  20.     t_attribs attr;       // atrybuty elementu
  21.     t_en_data data;       // dane
  22. } t_entity;
  23.  
  24.  
  25. typedef struct _attribs
  26. {
  27.     uchar stl;           // styl linii   (1 -  14)
  28.     uchar pen;           // pisak plotera(0 -  15) u╛ytkownik (1 - 16) !!!
  29.     uchar col;           // kolor        (1 -  15)
  30.     uchar wid;           // gruboÿå linii(1 -   8)
  31.     uchar lay;           // layer        (0 - 255)
  32.     uchar grp;           // grupa        (0 - 255)
  33. } t_attribs;
  34.  
  35. typedef union _en_data
  36. {
  37.     t_text      txt;     // tekst
  38.     t_point     pnt;     // punkt
  39.     t_line      lin;     // linia
  40.     t_circle    cir;     // okrÑg
  41.     t_c_arc     arc;     // êuk
  42.     t_ellipse   elp;     // elipsa
  43.     t_e_arc     ela;     // wycinek elipsy
  44.     t_polyln    pol;     // polilinia-kontur
  45.     t_polygon   spl;     // zbiór punktów
  46.     t_dimension dim;     // wymiarowanie
  47. } t_en_data;
  48. //---------------------------------------------------------------------------
  49.    
  50.    W MegaCAD-zie jest zdefiniowanych 19 podstawowych typów elementów,
  51.    którym nadano wêasne nazwy.
  52.  
  53.     E_POINT    : punkt
  54.     E_LINE     : odcinek
  55.     E_CIRCLE   : okrÑg    
  56.     E_C_ARC    : êuk       
  57.     E_ELLIPS   : elipsa 
  58.     E_E_ARC    : wycinek elipsy
  59.     E_POLYLN   : polilinia (kontur)
  60.     E_SPLINE   : linia êamana
  61.     E_TXTLIN   : linia tekstu
  62.     E_TXTBLK   : blok tekstu
  63.     E_MACRO    : makro
  64.     E_XHATCH   : kreskowanie
  65.     E_H_DIM    : wymiar poziomy         
  66.     E_V_DIM    : wymiar pionowy 
  67.     E_P_DIM    : wymiar ukoÿny 
  68.     E_A_DIM    : wymiar kÑta  
  69.     E_D_DIM    : wymiar ÿrednicy  
  70.     E_R_DIM    : wymiar promienia 
  71.     E_T_DIM    : tolerancja wymiaru 
  72.  
  73. //---------------------------------------------------------------------------
  74.  
  75.     Podstawowe elementy graficzne u╛ywane w MegaCAD-zie sÑ zdefiniowane 
  76.     jako struktury.  Oto ich definicje (znajdujÑ si⌐ one w pliku MEGATYP.H)
  77.     i znaczenie elementów struktur.
  78.  
  79. PUNKT:
  80. typedef struct _point
  81. {
  82.     double x;            // wspóêrz⌐dna X
  83.     double y;            // wspóêrz⌐dna Y    
  84. } t_point;
  85.  
  86.  
  87. ODCINEK czyli LINIA:
  88. typedef struct _line
  89. {
  90.     double x1;           // wspóêrz⌐dna X poczÑtku
  91.     double y1;           // wspóêrz⌐dna Y poczÑtku
  92.     double x2;           // wspóêrz⌐dna X koΣca
  93.     double y2;           // wspóêrz⌐dna Y koΣca  
  94. } t_line;
  95.  
  96.  
  97. OKRñG:
  98. typedef struct _circle
  99. {
  100.     double xm;           // wspóêrz⌐dna X ÿrodka okr⌐gu
  101.     double ym;           // wspóêrz⌐dna Y ÿrodka okr⌐gu  
  102.     double rd;           // promieΣ
  103. } t_circle;
  104.  
  105.  
  106. ¥UK:
  107. typedef struct _c_arc
  108. {
  109.     double xm;           // wspóêrz⌐dna X ÿrodka okr⌐gu  
  110.     double ym;           // wspóêrz⌐dna Y ÿrodka okr⌐gu  
  111.     double rd;           // promieΣ          
  112.     double a1;           // kÑt poczÑtku êuku
  113.     double a2;           // kÑt koΣca êuku    
  114. } t_c_arc;
  115.     
  116.  
  117. ELIPSA: 
  118. typedef struct _ellipse
  119. {
  120.     double xm;           // wspóêrz⌐dna X ÿrodka elipsy
  121.     double ym;           // wspóêrz⌐dna Y ÿrodka elipsy 
  122.     double ra;           // poêowa ÿrednicy 1 osi 
  123.     double rb;           // poêowa ÿrednicy 2 osi
  124.     double an;           // kÑt poêo╛enia osi 1
  125. } t_ellipse;
  126.  
  127.  
  128. WYCINEK ELIPSY:
  129. typedef struct _e_arc
  130. {
  131.     double xm;           // wspóêrz⌐dna X ÿrodka elipsy
  132.     double ym;           // wspóêrz⌐dna Y ÿrodka elipsy 
  133.     double ra;           // poêowa ÿrednicy 1 osi 
  134.     double rb;           // poêowa ÿrednicy 2 osi
  135.     double an;           // kÑt poêo╛enia osi 1
  136.     double a1;           // kÑt poczÑtku wycinka w stosunku do osi 1
  137.     double a2;           // kÑt koΣca wycinka w stosunku do osi 1   
  138. } t_e_arc;
  139.  
  140.  
  141. //---------------------------------------------------------------------------
  142.  
  143. EXT(212) ulong CreateEntity(   // 
  144.              ushort    type,   // typ elementu
  145.              t_attribs *attr,  // atrybuty (albo NULL)
  146.              void      *data); // dane elementu
  147.  
  148. Opis:
  149.     Funkcja tworzy zdefiniowany element i przedstawia go na ekranie.
  150.     Jeÿli parametr 'attr' ma wartoÿå NULL element b⌐dzie tworzony z 
  151.     wartoÿciami aktualnie ustawionymi w programie MegaCAD.
  152.  
  153. Return:
  154.     0L  => w przypadku wystÑpienia bê⌐du
  155.     ID  => numer identyfikacyjny 'ID' stworzonego elementu
  156.  
  157. Przykêad wywoêania:
  158.      CreateEntity(E_POINT,NULL,&punkt);
  159. //---------------------------------------------------------------------------
  160.  
  161. EXT(210) void savecount (void);            
  162.  
  163. Opis:
  164.     Funkcja sêu╛y do zakoΣczenia operacji zapisu stworzonych elementów.
  165.     Wszystkie elementy (stworzone lub zmienione) od ostatniego wywoêania
  166.     funkcji 'savecount' sÑ traktowane przez 'Undo' i 'Redo' jako "jedna 
  167.     caêoÿå".
  168.  
  169. Przykêad wywoêania:
  170.     savecount();    
  171.  
  172.  
  173. */
  174. //---------------------------------------------------------------------------
  175. //Andrzej Setman                                            WiedeΣ 18.08.95
  176. //---------------------------------------------------------------------------
  177. #include "std.h"
  178. #include "megatyp.h"
  179. #include "megacad.h"
  180. //---------------------------------------------------------------------------
  181. short main(char *filename, char *args)                
  182. {
  183.    int             f;
  184.    t_point         punkt;
  185.    t_line          linia;          
  186.    t_circle        okrag;
  187.    t_c_arc         luk;
  188.    t_ellipse       elipsa;
  189.    t_e_arc         wyc_elipsy;
  190.  
  191. // 20 punktów
  192.    for (f=1; f<=20; f++)
  193.    {
  194.       punkt.y= 140+f;
  195.       punkt.x= 8*f;
  196.       CreateEntity(E_POINT,NULL,&punkt);
  197.    }
  198.  
  199. // 20 linii
  200.       linia.x1= 200;
  201.       linia.y1= 150;
  202.       linia.y2= 20;
  203.    for (f=1; f<=20; f++)
  204.    {
  205.       linia.x2= 120+5*f;
  206.       CreateEntity(E_LINE,NULL,&linia);
  207.    }
  208.  
  209. // 20 okr⌐gów
  210.    for (f=1; f<=20; f++)
  211.    {
  212.       okrag.xm= 20+f;
  213.       okrag.ym= 30+f;
  214.       okrag.rd= 5+f;
  215.       CreateEntity(E_CIRCLE,NULL,&okrag);
  216.    }
  217.  
  218. // 20 êuków
  219.       luk.xm= 120;
  220.       luk.ym= 50;
  221.    for (f=1; f<=20; f++)
  222.    {
  223.       luk.rd= 5+2*f;
  224.       luk.a1= DEF_PI/24*f;
  225.       luk.a2= DEF_PI/12*f;
  226.       CreateEntity(E_C_ARC,NULL,&luk);
  227.    }
  228.  
  229. // 20 elips
  230.    for (f=1; f<=20; f++)
  231.    {
  232.       elipsa.xm= 40+f;
  233.       elipsa.ym= 90+f;
  234.       elipsa.ra= f;
  235.       elipsa.rb= 3*f;
  236.       elipsa.an= DEF_PI/36*f;
  237.       CreateEntity(E_ELLIPS,NULL,&elipsa);
  238.    }
  239.  
  240. // 10 wycinków elips
  241.    for (f=1; f<=10; f++)
  242.    {
  243.       wyc_elipsy.xm= 140+f;
  244.       wyc_elipsy.ym= 130+f;
  245.       wyc_elipsy.ra= 1+f;
  246.       wyc_elipsy.rb= 5+3*f;
  247.       wyc_elipsy.an= DEF_PI/18*f;
  248.       wyc_elipsy.a1= DEF_PI/18*f;
  249.       wyc_elipsy.a2= DEF_PI/9*f;
  250.       CreateEntity(E_E_ARC,NULL,&wyc_elipsy);
  251.    }
  252.    savecount();    
  253.    return(0);
  254. }
  255. //----------------------------koniec-----------------------------------------
  256.