View Full Version : [java] frecce di resize
pumppkin
06-12-2006, 09:30
Ciao, sto creando un piccolo editor di immagini. Quello che vorrei riuscire a fare è questo: ogni volta che seleziono un oggetto (rettangolo, cerchio...ecc) mi dovrebbero spuntare le frecce, che permettono di ridimensionare l'oggetto ,attorno all'oggetto stesso...come in questo esempio (fatto con inkscape):
http://img244.imageshack.us/img244/1509/rettcc7.th.jpg (http://img244.imageshack.us/my.php?image=rettcc7.jpg)
http://img205.imageshack.us/img205/3691/circkr9.th.jpg (http://img205.imageshack.us/my.php?image=circkr9.jpg)
Le frecce possono essere immagini con lo sfondo trasparente. Quando selezioni una figura applichi (in primo piano) le sei immagini delle frecce usando come punto di riferimento l'area rettangolare che contiene la figura selezionata (shape.getBounds())
Per ridimensionare usando quelle frecce, quando viene premuto il mouse verifichi se il punto di pressione appartiene all'area di una delle frecce presenti sullo schermo. In caso affermativo, determini l'asse o gli assi di trascinamento e la figura a cui applicare la trasformazione verificando quale figura sia collegata a quella freccia.
pumppkin
06-12-2006, 12:23
Le frecce possono essere immagini con lo sfondo trasparente. Quando selezioni una figura applichi (in primo piano) le sei immagini delle frecce usando come punto di riferimento l'area rettangolare che contiene la figura selezionata (shape.getBounds())
quindi dovrei crearmi in dei file separati le frecce con sfondo bianco (quindi sarebbero 8 file visto che ci sono 8 frecce)...solo che non capisco bene come faccio ad inserire in modo corretto le frecce (ad es. la freccia che punta verso sx dovrebbe essere posta al centro della parte destra della shape)...
Probabilmente è meglio usare delle immagini con un bit di trasparenza (alla GIF per intenderci) casomai la freccia dovesse apparire su un sfondo non bianco.
Il posizionamento è una questione di geometria che si risolve con carta e penna.
Supponendo che l'immagine della freccia che punta a sinistra abbia dimensioni (aw, ah) e che la regione che contiene la figura selezionata sia un rettangolo di dimensioni (rw, rh) e posizione (rx, ry), le coordinate del punto in cui disegnare l'immagine della freccia saranno:
ax = (rx - aw);
ay = ((ry + rh) / 2) - (ah / 2);
Per la freccia che punta a nordovest saranno:
ax = (rx - aw);
ay = (ry - ah);
e via dicendo.
pumppkin
06-12-2006, 14:00
scusami se ti disturbo così tanto ma ancora sono un pochino inesperto...come faccio ad applicare l'immagine della freccia alla shape?
Nessun disturbo.
La grafica computerizzata è come la magia: c'è sempre il trucco.
A un certo punto arrivi a disegnare le tue figure sullo schermo cosa che, in Java, significa che hai un Graphics2D col quale invochi le opportune istruzioni di proiezione. Con quel Graphics2D puoi disegnare anche immagini.
Molto semplicemente, dopo aver disegnato le figure geometriche se hai una figura selezionata determini la regione rettangolare in cui la figura è contenuta e usi i dati di quel rettangolo per proiettare le frecce. In pseudo codice:
public void paintComponent(Graphics g) {
...disegna lo sfondo
...disegna le figure
se esiste una selezione
rectangle r = regione che contiene la figura selezionata
disegna le sei frecce lungo i lati di r
La condizione "esiste una selezione" è determinata dall'interfaccia. L'utente clicca in un punto, c'è una figura? Si, allora
1. c'è una selezione
2. la selezione interessa la figura ABC
3. repaint
L'utente compie un'operazione che annulla la selezione (tipicamente clicca su uno strumento diverso dal selettore o seleziona una regione vuota), allora:
1. c'è una selezione = false
2. repaint
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.