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

  1. /*                      LEKCJA12.C
  2. //---------------------------------------------------------------------------
  3. Temat:
  4.         Wybór wielu elementów 
  5. //---------------------------------------------------------------------------
  6. Funkcje:
  7.         EXT(222) void EntityLoop(      
  8.         EXT(223) void DrawEntities(    
  9. //---------------------------------------------------------------------------
  10.  
  11. EXT(222) void EntityLoop(      // 
  12.              ulong     filter, // filtr wybierajÑcy zaznaczone elementy
  13.              tCallBack func,   // funkcja Callback 
  14.              void      *para,  // wska½nik dla funkcji Callback 
  15.              void      *edta,  // bufor dla danych tymczasowych
  16.              ushort    esiz);  // wielkoÿå bufora
  17.  
  18. Opis:
  19.     Funkcja przeszukuje caêÑ list⌐ elementów rysunku.
  20.     Dla ka╛dego elementu, którego bit rozpoznawczy ustawiony jest w filtrze
  21.     jest wywoêywana funkcja 'CallBack' z parametrami 'para'.
  22.     W buforze 'edta' (mo╛e on mieå wartoÿå NULL) znajduje si⌐ miejsce na 
  23.     dodatkowe dane elementów o zmiennej dêugoÿci.
  24.     Na pierwszym miejscu definicji struktury danych (na które wskazuje 'para') 
  25.     musi zawieraå 't_entity' !
  26.  
  27. Przykêad definicji:
  28.         struct _data
  29.         {
  30.             t_entity ent;
  31.             .              //
  32.             .              // inne definicje
  33.             .              //
  34.         } data;
  35.  
  36. Return:
  37.     0  = kontynuacja funkcji
  38.     1  = przerwanie funkcji
  39.  
  40. Przykêady wywoêania:
  41.  
  42.     EntityLoop(filter,SelPid,&ent,edta,sizeof(edta));
  43.     EntityLoop(1<<E_LINE,MojaFunkcja,&data,NULL,0);
  44. //---------------------------------------------------------------------------
  45.  
  46. EXT(223) void DrawEntities(    // 
  47.              ulong  *pid,      // lista z numerami 'ID'
  48.              ushort num);      // liczba elementów
  49.  
  50. Opis:
  51.     Funkcja rysuje elementy których numer identyfikacyjny 'ID' znajduje si⌐
  52.     na liÿcie.
  53.     Przy u╛yciu funkcji 'Blink' mo╛na uaktywniå optycznie wiele elementów.
  54.  
  55. Przykêad wywoêania:
  56.     DrawEntities(pids,pidnum);
  57.  
  58. //---------------------------------------------------------------------------
  59. */
  60.  
  61. //---------------------------------------------------------------------------
  62. #include "std.h"
  63. #include "megatyp.h"
  64. #include "megacad.h"
  65. #define MAXPIDS 500
  66. //---------------------------------------------------------------------------
  67. char edta[32000];               // bufor dla zmiennych danych
  68. ulong pids[MAXPIDS];            // miejsce dla 500 numerów 'ID
  69. ushort pidnum;                  // iloÿå numerów 'ID'
  70. //---------------------------------------------------------------------------
  71. short SelPid(void *argptr )
  72. {
  73.     t_entity  *ent;
  74.  
  75.     ent = argptr;
  76.     if(ent->attr.col == GREEN)          // wybór elementów w kolorze zielonym
  77.     {
  78.         pids[pidnum] = ent->id;
  79.         pidnum++;
  80.     }
  81.     if(pidnum == MAXPIDS)               // czy bufor jest peêny ?
  82.         return(BREAK_LOOP);
  83.     else
  84.         return(CONTINUE_LOOP);
  85. }
  86. //---------------------------------------------------------------------------
  87. short DoDraw(void *ptr)
  88. {
  89.     DrawEntities(pids,pidnum);
  90. }
  91. //---------------------------------------------------------------------------
  92. short main(char *filename, char *args)
  93. {
  94.     t_entity ent;
  95.     ulong filter;
  96.     char text1[50];
  97.     char text2[50];
  98.  
  99.     pidnum = 0;                         // ustawienie licznika na '0'
  100.     SetFuncText("migotanie zielonych");
  101.     MouseHelp("przerwanie","przerwanie",HLP_INV(0,0,0));
  102.     filter = 0xffffffff;                // wybór wszystkich elementów
  103.     EntityLoop(filter,SelPid,&ent,edta,sizeof(edta));
  104.     Blink(DoDraw,NULL);
  105.  
  106.     sprintf(text1,"znaleziono  %d  elementów rysunkowych", pidnum);
  107.     sprintf(text2,"w kolorze zielonym  (FILTR=  %X)", filter);
  108.     Message(text1,text2,NULL,NULL,"ok",3);
  109.  
  110.     return(0);
  111. }
  112. //---------------------------------------------------------------------------
  113.