home *** CD-ROM | disk | FTP | other *** search
- /* LEKCJA12.C
- //---------------------------------------------------------------------------
- Temat:
- Wybór wielu elementów
- //---------------------------------------------------------------------------
- Funkcje:
- EXT(222) void EntityLoop(
- EXT(223) void DrawEntities(
- //---------------------------------------------------------------------------
-
- EXT(222) void EntityLoop( //
- ulong filter, // filtr wybierajÑcy zaznaczone elementy
- tCallBack func, // funkcja Callback
- void *para, // wska½nik dla funkcji Callback
- void *edta, // bufor dla danych tymczasowych
- ushort esiz); // wielkoÿå bufora
-
- Opis:
- Funkcja przeszukuje caêÑ list⌐ elementów rysunku.
- Dla ka╛dego elementu, którego bit rozpoznawczy ustawiony jest w filtrze
- jest wywoêywana funkcja 'CallBack' z parametrami 'para'.
- W buforze 'edta' (mo╛e on mieå wartoÿå NULL) znajduje si⌐ miejsce na
- dodatkowe dane elementów o zmiennej dêugoÿci.
- Na pierwszym miejscu definicji struktury danych (na które wskazuje 'para')
- musi zawieraå 't_entity' !
-
- Przykêad definicji:
- struct _data
- {
- t_entity ent;
- . //
- . // inne definicje
- . //
- } data;
-
- Return:
- 0 = kontynuacja funkcji
- 1 = przerwanie funkcji
-
- Przykêady wywoêania:
-
- EntityLoop(filter,SelPid,&ent,edta,sizeof(edta));
- EntityLoop(1<<E_LINE,MojaFunkcja,&data,NULL,0);
- //---------------------------------------------------------------------------
-
- EXT(223) void DrawEntities( //
- ulong *pid, // lista z numerami 'ID'
- ushort num); // liczba elementów
-
- Opis:
- Funkcja rysuje elementy których numer identyfikacyjny 'ID' znajduje si⌐
- na liÿcie.
- Przy u╛yciu funkcji 'Blink' mo╛na uaktywniå optycznie wiele elementów.
-
- Przykêad wywoêania:
- DrawEntities(pids,pidnum);
-
- //---------------------------------------------------------------------------
- */
-
- //---------------------------------------------------------------------------
- #include "std.h"
- #include "megatyp.h"
- #include "megacad.h"
- #define MAXPIDS 500
- //---------------------------------------------------------------------------
- char edta[32000]; // bufor dla zmiennych danych
- ulong pids[MAXPIDS]; // miejsce dla 500 numerów 'ID
- ushort pidnum; // iloÿå numerów 'ID'
- //---------------------------------------------------------------------------
- short SelPid(void *argptr )
- {
- t_entity *ent;
-
- ent = argptr;
- if(ent->attr.col == GREEN) // wybór elementów w kolorze zielonym
- {
- pids[pidnum] = ent->id;
- pidnum++;
- }
- if(pidnum == MAXPIDS) // czy bufor jest peêny ?
- return(BREAK_LOOP);
- else
- return(CONTINUE_LOOP);
- }
- //---------------------------------------------------------------------------
- short DoDraw(void *ptr)
- {
- DrawEntities(pids,pidnum);
- }
- //---------------------------------------------------------------------------
- short main(char *filename, char *args)
- {
- t_entity ent;
- ulong filter;
- char text1[50];
- char text2[50];
-
- pidnum = 0; // ustawienie licznika na '0'
- SetFuncText("migotanie zielonych");
- MouseHelp("przerwanie","przerwanie",HLP_INV(0,0,0));
- filter = 0xffffffff; // wybór wszystkich elementów
- EntityLoop(filter,SelPid,&ent,edta,sizeof(edta));
- Blink(DoDraw,NULL);
-
- sprintf(text1,"znaleziono %d elementów rysunkowych", pidnum);
- sprintf(text2,"w kolorze zielonym (FILTR= %X)", filter);
- Message(text1,text2,NULL,NULL,"ok",3);
-
- return(0);
- }
- //---------------------------------------------------------------------------
-