Visual Python


Kaj lahko z objekti počnemo


Dodatni atributi (lastnosti in metode)

Naslednji atributi (lastnosti oziroma metode) veljajo za vse objekte VPython:

visible: Če je ta atribut false (0), bo objekt neviden. Primer 

   krogla.visible = 0

Če hočemo, da bo krogla spet vidna, vpišamo kasneje

   krogla.visible = 1

frame:  Objekt damo v podani frame (glej prejšnjo stran, sestavljanje kompleksnih objektov). Primer uporabe:

   krogla = sphere (frame = f)

display: Ko sprožimo program, tvori Vpython prikazovalno okno z imenom "scene". Če ne navedemo drugale, bodo objekti tvorjeni v tem oknu. Lahko pa zahtevamo, da se objekt postavi v kakšno drugo prikazovalno okno. Na primer tako:

        scena2 = display( title = "Drugo okno" )
        palica = cylinder( display = scena2 )

Na voljo imamo funkcijo display._selected(), ki  vrne referenco na prikazovalno okno, v katerem trenutno tvorimo objekte (če nismo še tvorili nobenega okna, vrne ta funkcija naslov "None").

__class__ : Ime razreda nekega objekta. Tako je na primer  krogla.__class__  enako "sphere", če je krogla objekt tipa "sphere". pred in za besedico "class" imamo  dva podčrtaja. Imamo seznam vidnih objektov, ki ga dobimo z  scene.objects. če je objekt "obj" na tem seznamu, lahko ugotovimo tip (pravzaprav razred) tega objekta z  obj.__class__.

__copy()__ : Tako dobimo kopijo nekega objekta. TPred in za "copy()" imamo dva podčrtaja. Če ne podamo drugih argumentov, bomo tako dobili nov objekt, enak prejšnjemu in na istem položaju, kar verjetno ne želimo. Funkcija  __copy__() uporablja seznam parov "lastnost=vrednost", ki naj veljajo za novi objekt. Tako lahko na primer kopijo objekta prikažemo v drugem oknu:

   nobiObjekt = stariObjekt.__copy__( display=novoOkno)

Omejitev: če je prvotni objekt del sestavljenega objekta (je v frame) in naj bi bil novi objekt v drugem oknu, moramo v tem oknu najprej tvoriti nov "frame" za novi objekt. Še en primer, kako celotno sceno iz enega prikazovalnega okna kloniramo v drugo, prej definirano okno:

def clone_universe( new_display, old_display):
        # Create a dictionary of frames in the old display
        # to the corresponding frames in the new display.
        frames = dict()
        # Initialize the lookup dictionary
        for obj in old_display.objects:
                if obj.__class__ == frame:
                        frames[obj] = obj.__copy__( frame=None, display=new_display)
        # For each old reference frame that was within another reference frame,
        # place the new reference frame within the appropriate frame in the new
        # display. Here old is an object and new is its frame in the new display.
        for old, new in frames.iteritems():
                if old.frame:
                        new.frame = frames[old.frame]
        # Copy over the universe.
        for obj in old_display.objects:
                if obj.__class__ == frame:
                        # Already taken care of above.
                        continue
                if obj.frame:
                        # Then initialize with the corresponding reference frame in the new
                        # display.
                        obj.__copy__( display=new_display, frame=frames[obj.frame])
                else:
                        # Don't need to care about the frame attribute, since it is None.
                        obj.__copy__( display=new_display)

Vrtenje objekta

Objekte cylinder, arrow, cone, pyramid, sphere, ring, box, in ellipsoid  (ne pa curve ali convex) lahko zavrtimo okrog določenega tečaja (origin). Vrtenje se meri v radianih v nasprotni smeri od urinega kazalca okrog črte, ki jo določata "origin" in" origin+axis":

object.rotate(angle=pi/4., axis=axis, origin=pos)


Določanje barv

Uporabljamo barvni sistem RGB in določamo barvo v deležih rdeče. zelene in modre komponente. V tem sistemu je bela barva z največjim deležem rdeče, zelene in modre barve (1, 1, 1). Pri črno so vsi trije deleži enaki 0, torej (0, 0, 0). Popolnoma rdeča barva je (1, 0, 0); torej brez drugih dveh komponent.

Tu je še nekaj primerov RGB barv in kako jih poimenujemo v Vpythonu:

    (1,0,0) color.red (1,1,0) color.yellow (0,0,0) color.black
    (0,1,0) color.green (1,0.5,0) color.orange (1,1,1) color.white
    (0,0,1) color.blue (0,1,1) color.cyan  
     (1,0,1) color.magenta  

Lahko pa tudi sami tvorimo lastne barve. na primer:

(0.5, 0.5, 0.5)  temnosiva barva

(1,0.7,0.2) bakrena barva

Brisanje objekta

Objekta v Vpythonu ne zbrižšemo, pač pa ga naredimo nevidnega

   krogla.visible = 0

Tehnično pojasnilo: Če bi kasneje spet uporabili ime "krogla" za kaj drugega, morda za tvorbo novega objekta, bi Vpython sprostil spomi,, ki ga je zasedala prej narejena krogla. (če tega objekta slučajno ne naslavlja kakšno drugo ime.

Omejitev frekvence animacije

Z ukazom
   rate( frekvenca )

Zaustavimo računanje  za čas 1.0/frekvenca sekund po predhodnem klicu funkcije rate().

Tako bi na primer rate(50) zaustavil rtačunanja tako dolgo, da bi zagotovil pretek najmanj  1.0/50.0 sekunde (če pa je ta čas že potekel, se računanje ne zaustavi).