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
Wrap
C/C++ Source or Header
|
1995-09-01
|
4KB
|
97 lines
/* LEKCJA11.C
//---------------------------------------------------------------------------
Temat:
Numer identyfikacyjny elementu
Wybór pojedynczego elementu i zmiana jego atrybutów
//---------------------------------------------------------------------------
Funkcje:
EXT(219) short ClickEntity(
EXT(220) ulong ExChangeEntity(
//---------------------------------------------------------------------------
Numer ID
Ka╛demu elementowi rysunku w czasie pracy programu MegaCAD jest przypisany
numer identyfikacyjny 'ID'. Numer ten jest nadawany podczas tworzenia
elementu lub dokonywania zmian.
Nie jest on natomiast integralnÑ cz⌐ÿciÑ pliku rysunkowego!
To znaczy, ╛e temu samemu elementowi rysunku mo╛e w nast⌐pnym uruchomieniu
programu zostaå przypisany inny numer ID.
//---------------------------------------------------------------------------
EXT(219) short ClickEntity(
ulong filter, // filtr definiujÑcy typy elementów
double *pnt, // wskazany punkt (x,y)
t_entity *ent, // dane wybranego elementu
void *edta, // bufor dla danych wirtualnych
ushort esiz); // wielkoÿå bufora
Funkcja pozwala wybraå element poprzez wskazanie go kursorem.
Dwuczêonowy êaΣcuch '*pnt' przechowuje wspóêrz⌐dne wskazanego punktu.
Parametr 'filter' definiuje jakie typy elementów mogÑ byå wybrane,
np. tylko linie: (1<<E_LINE).
Jeÿli filtr dopuszcza wybór elementów o zmiennej dêugoÿci nale╛y
przygotowaå bufor '*edta' o dostatecznej wielkoÿci 'esiz' dla danych
definiujÑcych takie elementy (tekst, wymiarowanie).
W przypadku jeÿli nie dopuszcza si⌐ w filtrze typów o zmiennej dêugoÿci
bufor mo╛e nie byå definiowany - NULL.
Return:
TRUE - po naciÿni⌐ciu lewego klawisze myszy
FALSE - po naciÿni⌐ciu prawego klawisze myszy
Przykêad wywoêania:
while ( ClickEntity(1<<E_LINE,pnt,&ent,NULL,0))
//---------------------------------------------------------------------------
EXT(220) ulong ExChangeEntity(//
t_entity *ent); // nowe dane dla starego elementu
Funkcja umo╛liwia zmian⌐ danych istniejÑcego elementu.
W rzeczywistoÿci zostajÑ podmienione dane starego elementu na nowe,
a stare pozostajÑ w pami⌐ci z zaznaczeniem zmiany, to znaczy mo╛na je
przywróciå przy pomocy UNDO.
Dane definiujÑce element muszÑ byå peêne. W przypadku elementów o
zmiennej dêugoÿci bufor nie mo╛e równaå si⌐ NULL.
Return:
ID - nowy numer identyfikacyjny
0L - jeÿli wystÑpiê bêÑd
Przykêad wywoêania:
ExChangeEntity(&ent);
*/
//---------------------------------------------------------------------------
#include "std.h"
#include "megatyp.h"
#include "megacad.h"
//---------------------------------------------------------------------------
short main(char *filename, char *args)
{
t_entity ent;
double pnt[2]; // rezerwacja miejsca dla wybranego punktu
t_attribs *attr;
ulong ID_stary,ID_nowy;
char b1[50],b2[50];
SetFuncText("zmiana koloru linii");
MouseHelp("wybór linii","powrót",HLP_INV(0,0,0));
while ( ClickEntity(1<<E_LINE,pnt,&ent,NULL,0) )
{
// zmiana atrybutów wybranego elementu
attr = &ent.attr;
ID_stary= ent.id;
ent.attr.col ^= 0xf;
ent.attr.col++;
// zapisanie zmienionego elementu
ID_nowy= ExChangeEntity(&ent);
sprintf(b1,"stary ID= %ld",ID_stary);
sprintf(b2,"nowy ID= %ld",ID_nowy);
Message(b1,b2,NULL,NULL,"ok",3);
savecount();
}
return(0);
}
//---------------------------------------------------------------------------