English (UK)

Introduzione a Java3D PART 3

Tratto da programmazione.it, scritto da Dario Guadagno

Una soluzione alternativa per gestire gli eventi può essere ottenuta sfruttando il fatto che la Canvas3D, in quanto Component, è una possibile sorgente di eventi. Da ciò, catturando gli eventi generati dalla Canvas3D, e quindi le interazioni dell'utente con la scena, e sfruttando i metodi offerti dalla classe PickCanvas, che restituisce un riferimento all'oggetto (il nodo dell'albero) su cui l'utente ha cliccato, è possibile simulare una gestione di eventi basata sulle interazioni con gli oggetti 3D della scena.

Per lavorare in tal senso, d'altra parte, è bene ricordare che gli oggetti "interattivi" devono essere pick-reportable, cioè devono poter essere letti dal PickCanvas:

nodo3d.setCapability(TransformGroup.ENABLE_PICK_REPORTING);

Qualora si voglia gestire la possibilità di spostare/rimuovere oggetti dall'albero della scena in seguito a qualche interazione, essi devono anche essere detachable, cioè rimuovibili dallo Scene Graph, oppure devono consentire la lettura e scrittura delle loro proprietà all'interno dell'albero:

nodo3d.setCapability(BranchGroup.ALLOW_DETACH); //rende l'oggetto detachable

/* Lettura e modifica delle trasformazioni */
nodo3d.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
nodo3d.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);

/* Lettura e modifica dei figli nel sottoalbero radicato nel nodo oggetto3d */
nodo3d.setCapability(TransformGroup.ALLOW_CHILDREN_WRITE);
nodo3d.setCapability(TransformGroup.ALLOW_CHILDREN_READ);
nodo3d.setCapability(TransformGroup.ALLOW_CHILDREN_EXTEND);

Una volta definita la scena e le eventuali interazioni, basterà rendere visibile il frame che contiene la Canvas3D per visualizzare la nostra prima scena tridimensionale. Con le prime tre parti di questo articolo sono stati mostrati gli aspetti fondamentali della programmazione in Java 3D.


© 2017 Bruno Tessaro. My life in the web. All right reserved.