3. gyakorlat

A gyakorlaton elõforduló PHIGS függvények prototípusai megtalálhatók    itt.

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:

  • Direkt
  • Indirekt

  •  

    Szín specifikálására a Pgcolr struktúrát használjuk:

        typedef struct {
            Pint type;    /* színmodell */
            union {
                    Pint ind;
                    struct { Pfloat x,y,z;} general;  /* komponensek */
                  }val;
       }Pgcolr;
    type:
        < = 0    implementációfüggõ
        = 1    PINDIRECT
        = 2    PMODEL_RGB
        = 3    PMODEL_CIELUV
        = 4    PMODEL_HSV
        = 5    PMODEL_HLS
     

    Színmodellek:

    Minden worksatation-nek saját színtáblája van, az elemeire indexükkel hivatkozhatunk.
    A színtábla 0. indexû eleme a default background, az 1. eleme a default rajzoló szín.
    A színtábla ezért legalább 2 elembõl áll.

    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;

    szin.type= PINDIRECT;
    szin.val.ind= 3;  /* 3 a szintabla 3. elemet jelenti */

    Színattributumok beállítása:
        pset_line_colr(Pgcolr *szin)
        pset_int_colr
        pset_edge_colr
        pset_text_colr
        pset_marker_colr
        pset_back_int_colr

    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:
        pset_colr_rep

    Az új színt a Pcolr_rep struktúrában írjuk le (lásd. phigs.h).

    Pl:

    Pcolr_rep sarga;

    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  */

    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.

    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


    Dudásné Nagy Marianna, 1999. okt.11.