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

  1. /*                      LEKCJA11.C
  2. //---------------------------------------------------------------------------
  3. Temat:
  4.         Numer identyfikacyjny elementu  
  5.         Wybór pojedynczego elementu i zmiana jego atrybutów
  6. //---------------------------------------------------------------------------
  7. Funkcje:
  8.         EXT(219) short ClickEntity(   
  9.         EXT(220) ulong ExChangeEntity(
  10. //---------------------------------------------------------------------------
  11.  
  12.    Numer ID
  13.    Ka╛demu elementowi rysunku w czasie pracy programu MegaCAD jest przypisany
  14.    numer identyfikacyjny 'ID'. Numer ten jest nadawany podczas tworzenia 
  15.    elementu lub dokonywania zmian. 
  16.    Nie jest on natomiast integralnÑ cz⌐ÿciÑ pliku rysunkowego! 
  17.    To znaczy, ╛e temu samemu elementowi rysunku mo╛e w nast⌐pnym uruchomieniu 
  18.    programu zostaå przypisany inny numer ID.
  19. //---------------------------------------------------------------------------
  20.  
  21. EXT(219) short ClickEntity(   
  22.         ulong       filter,   // filtr definiujÑcy typy elementów
  23.         double      *pnt,     // wskazany punkt (x,y)
  24.         t_entity    *ent,     // dane wybranego elementu
  25.         void        *edta,    // bufor dla danych wirtualnych
  26.         ushort      esiz);    // wielkoÿå bufora
  27.  
  28.     Funkcja pozwala wybraå element poprzez wskazanie go kursorem.
  29.     Dwuczêonowy êaΣcuch '*pnt' przechowuje wspóêrz⌐dne wskazanego punktu.
  30.     Parametr 'filter' definiuje jakie typy elementów mogÑ byå wybrane,
  31.     np. tylko linie: (1<<E_LINE). 
  32.     Jeÿli filtr dopuszcza wybór elementów o zmiennej dêugoÿci nale╛y 
  33.     przygotowaå bufor '*edta' o dostatecznej wielkoÿci 'esiz' dla danych 
  34.     definiujÑcych takie elementy  (tekst, wymiarowanie).
  35.     W przypadku jeÿli nie dopuszcza si⌐ w filtrze typów o zmiennej dêugoÿci
  36.     bufor mo╛e nie byå definiowany - NULL.
  37.  
  38. Return:
  39.     TRUE - po naciÿni⌐ciu lewego klawisze myszy
  40.     FALSE - po naciÿni⌐ciu prawego klawisze myszy
  41.  
  42. Przykêad wywoêania:
  43.     while ( ClickEntity(1<<E_LINE,pnt,&ent,NULL,0))
  44. //---------------------------------------------------------------------------
  45.  
  46. EXT(220) ulong ExChangeEntity(// 
  47.         t_entity    *ent);    // nowe dane dla starego elementu
  48.  
  49.     Funkcja umo╛liwia zmian⌐ danych istniejÑcego elementu.
  50.     W rzeczywistoÿci zostajÑ podmienione dane starego elementu na nowe,
  51.     a stare pozostajÑ w pami⌐ci z zaznaczeniem zmiany, to znaczy mo╛na je 
  52.     przywróciå przy pomocy UNDO.
  53.     Dane definiujÑce element muszÑ byå peêne. W przypadku elementów o 
  54.     zmiennej dêugoÿci bufor nie mo╛e równaå si⌐ NULL.
  55.     
  56. Return:
  57.     ID - nowy numer identyfikacyjny
  58.     0L - jeÿli wystÑpiê bêÑd
  59.  
  60. Przykêad wywoêania:
  61.     ExChangeEntity(&ent);
  62.  
  63. */
  64. //---------------------------------------------------------------------------
  65. #include "std.h"
  66. #include "megatyp.h"
  67. #include "megacad.h"
  68. //---------------------------------------------------------------------------
  69. short main(char *filename, char *args)
  70. {
  71.     t_entity  ent;
  72.     double    pnt[2];     // rezerwacja miejsca dla wybranego punktu
  73.     t_attribs *attr;
  74.     ulong     ID_stary,ID_nowy;
  75.     char      b1[50],b2[50];
  76.  
  77.     SetFuncText("zmiana koloru linii");
  78.     MouseHelp("wybór linii","powrót",HLP_INV(0,0,0));
  79.  
  80.     while ( ClickEntity(1<<E_LINE,pnt,&ent,NULL,0) )
  81.     {
  82.         // zmiana atrybutów wybranego elementu
  83.         attr = &ent.attr;
  84.         ID_stary= ent.id;
  85.         ent.attr.col ^= 0xf;
  86.         ent.attr.col++;
  87.         // zapisanie zmienionego elementu
  88.         ID_nowy= ExChangeEntity(&ent);
  89.         sprintf(b1,"stary ID= %ld",ID_stary);
  90.         sprintf(b2,"nowy  ID= %ld",ID_nowy);
  91.         Message(b1,b2,NULL,NULL,"ok",3);
  92.         savecount();
  93.     }
  94.     return(0);
  95. }
  96. //---------------------------------------------------------------------------
  97.