Ettõl kezdve az elõforduló PHIGS függvények rövid leírását megtalálhatjátok még az alfa, beta, gamma, delta szervereken a ~marcsi/phigs/p_f.txt file-ban is.
További területi primitivek
1. A billions.c program alapján végigkísérjük a struktúra feltöltésének lépéseit .
Az említett programban alkalmazott új típus:
Ppoint_list_list
Új függvények:
pset_edgeflag
pfill_area_set
pset_edgetype
A pfill_area_set fv.: élet tartalmazó primitiv kitöltése, melynek csúcspontjait pontlistából álló listával adjuk meg.
Szín specifikálása PHIGS-ben
Két módja van a szín specifikálásának:
Szín specifikálására a Pgcolr struktúrát
használjuk:
typedef struct {type:
Pint type; /* színmodell */
union {
Pint ind;
struct { Pfloat x,y,z;} general; /* komponensek */
}val;
}Pgcolr;
Színmodellek:
Szín beállítása indirekt módon
is lehetséges a workstation színtáblájából
index alapján.
Ekkor a szín csak a megjelenítéskor realizálódik,
hiszen az adott workstation színtáblájától
függ.
Ebben az esetben a Pgcolr struktúrát az alábbiak szerint töltjük ki:
Pgcolr szin;Színattributumok beállítása:szin.type= PINDIRECT;
szin.val.ind= 3; /* 3 a szintabla 3. elemet jelenti */
Alternatív lehetõség az indirekt színattributumok
beállításása:
pset_line_colr_ind(Pint index)
pset_int_colr_ind
pset_edge_colr_ind
pset_text_colt_ind
pset_marker_colr_ind
Ha nem létezõ indexre hivatkozunk, az 1. index színét veszi.
A workstation Color Table-jének beállítása :
Színmodell beállítása:
pset_colr_model
Pl:
pset_colr_model(WORKSATATION_ID,PMODEL_RGB)A színtáblát módosithatjuk:
Az új színt a Pcolr_rep struktúrában írjuk le (lásd. phigs.h).
Pl:
Pcolr_rep sarga;A színtábla 0. eleme a mindenkori background color. A háttérszín átdefiniálása a 0. elem módosításával lehetséges.sarga.rgb.red = 1.0;
sarga.rgb.green = 1.0;
sarga.rgb.blue = 0.0;
pset_colr_rep(WORKSTATION_ID,3,&sarga)
/* a szintabla 3. szine ettol kezdve sarga lesz */
Lekérdezések a WS színtáblájáról:
pinq_colr_facs - az engedélyezett
legnagyobb indexet kérdezi le
pinq_colr_rep - az adott
index színét kérdezi le
2. A colorbil.c
program példa a színek használatára.
Polymarker
Pontahalmaz (2D, 3D)megjelenítésére alkalmas output primitív. A pontot reprezentáló jel (type) lehet *, X, stb.
ppolymarker
ppolymarker3
pset_marker_colr
pset_marker_size
pset_marker_type
3. Nézd meg a polymarker.c programot!
Struktúra szerkesztése
Valahányszor egy primitívet hozunk létre vagy egy attributumot állítunk egy PHIGS függvénnyel, új struktúraelem jön létre. A struktúraelemeket szekvenciálisan tekintjük, jellemzõ tulajdonságuk az elem sorszáma a struktúrán belül ( 1,2,3,...). Ennek fontos szerepe van a struktúra szerkesztésekor.
Struktúrák, struktúraelemek hozzávétele,törlése:
pdel_struct
pdel_struct_net
pdel_all_structs
pdel_elem
pdel_elem_range
Van egy mutató, mely mindig az aktuális struktúraelemre
mutat. Struktúraelem beszúrható ill. helyettesithetõ
az aktuális pointer szerinti helyen. Hogy insert vagy replace szerkesztési
módot használunk a köv. fv.-ben adhatjuk
meg:
pset_edit_mode
Cimke helyezhetõ el a struktúrában, mely önálló
struktúraelem lesz:
plabel
Pointer pozicionálásához fv-k.:
pset_elem_ptr
pset_elem_ptr_label
poffset_elem_ptr
4. sedit.c
program
Feladatok:
5. Írj függvényt, mely megváltoztatja
a háttérszínt:
mybackground(Pfloat
r,g,b)
6. Írj függvényt, mely n csúcsú
zárt poligont rajzol a képernyõre, input az n csúcsot
tartalmazó 3D pontlista:
polygon(Ppoint_list3
csucsok)
7. Írj olyan programot, mely 10 db szabályos kitöltött
5-szögbõl álló sorozatot rajzol a képernyõre,
egyenként a standard inputról kéri be az aktuális
ötszög szinét (r,g,b):
szinsor