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
Wrap
C/C++ Source or Header
|
1995-09-01
|
4KB
|
113 lines
/* 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);
}
//---------------------------------------------------------------------------