Вы находитесь на странице: 1из 6

Graficación

UNIDAD II.- GRAFICACIÓN 2D


___________________________________________________________________
LECCIÓN 2.3.- Transformaciones bidimensionales
___________________________________________________________________
2.3.4.- Ejemplo con Eventos de Ratón

Método para ajustar los puntos de un poligono


package modelos;

public class Poligono extends ArrayList<Punto> implements Dibujable {


public void ajustarPuntos(){
for(int i=0;i<puntos.size();i++){
this.xpoints[i] = puntos.get(i).x;
this.ypoints[i] = puntos.get(i).y;
}
}
}

Rafael Rivera López


1
Graficación

Clase TransformacionesConMovimiento
package transformacionesconmovimiento;

import vistas.VentanaTransformaciones;

public class TransformacionesConMovimiento {

public static void main(String[] args) {


VentanaTransformaciones f = new VentanaTransformaciones();
PuntosTransformaciones trans =
new PuntosTransformaciones();
PanelPuntosTransformaciones panel =
new PanelPuntosTransformaciones(trans);
OyentePuntosTransformaciones oyente
= new OyentePuntosTransformaciones(trans, panel);
f.addEventos(oyente);
panel.addEventos(oyente);
f.setTitle("Transformaciones Bidimensionales con Movimiento");
f.setSize(800, 600);
f.setLocation(50, 50);
f.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
f.add(panel);
f.setVisible(true);
}
}

Rafael Rivera López


2
Graficación

MODELO: PuntosTransformaciones
package transformacionesconmovimiento;

import java.awt.Color;
import modelos.*;

public class PuntosTransformaciones extends Transformaciones {


private Puntos puntos;
private Punto centroSimetria;
private Punto puntoA;
private Punto puntoB;

@Override
public void crearShapeOriginal() {
super.crearShapeOriginal();
//Se necesita para el oyente MoverPuntos
puntos = new Puntos();
for (Punto punto : original.getPuntos()) {
puntos.add(punto);
}
}

public void aplicarSimetriaCentral() {


if (centroSimetria == null) {
centroSimetria = new Punto(300, 300, 5, Color.ORANGE);
puntos.add(centroSimetria);
}
super.aplicarSimetriaCentral(centroSimetria.x, centroSimetria.y);
}

public void aplicarSimetriaAxial() {


if (puntoA == null) {
puntoA = new Punto(50, 500, 5, Color.MAGENTA);
puntoB = new Punto(650, 50, 5, Color.MAGENTA);
puntos.add(puntoA);
puntos.add(puntoB);
}
super.aplicarSimetriaAxial(puntoA.x, puntoA.y, puntoB.x, puntoB.y);
}

public void limpiarValores() {


puntos.remove(puntoA);
puntos.remove(puntoB);
puntos.remove(centroSimetria);
ejeSimetria = null;

Rafael Rivera López


3
Graficación

centroSimetria = null;
puntoA = null;
}

public Puntos getPuntos() {


return puntos;
}

public void setPuntos(Puntos puntos) {


this.puntos = puntos;
}
}
VISTA: PanelPuntosTransformaciones
package transformacionesconmovimiento;

import java.awt.Graphics;
import java.util.ArrayList;
import modelos.*;
import vistas.PanelTransformaciones;

public class PanelPuntosTransformaciones extends PanelTransformaciones {

public PanelPuntosTransformaciones(Transformaciones trans) {


super(trans);
}

public void addEventos(OyentePuntosTransformaciones oyente) {


addMouseListener(oyente);
addMouseMotionListener(oyente);
}

@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
PuntosTransformaciones t = (PuntosTransformaciones) trans;
//Dibuja los puntos en su nueva ubicación
ArrayList<Punto> puntos = t.getPuntos();
if (puntos != null) {
for (Punto pto : puntos) {
pto.dibujar(g);
}
}
}
}

Rafael Rivera López


4
Graficación

CONTROLADOR: OyentePuntosTransformaciones
package transformacionesconmovimiento;

import controladores.OyenteMoverPuntos;
import java.awt.event.*;
import javax.swing.*;

public class OyentePuntosTransformaciones


extends OyenteMoverPuntos implements ActionListener {

private final PuntosTransformaciones trans;


private final JPanel panel;
private String nombre; // Nombre del componente

public OyentePuntosTransformaciones(
PuntosTransformaciones trans, JPanel panel) {
super(trans.getPuntos(), panel);
this.trans = trans;
this.panel = panel;
}

@Override
// Se elimina para no permitir adicionar puntos
public void mouseClicked(MouseEvent e) {
}

@Override
public void mouseDragged(MouseEvent e) {
super.mouseDragged(e);
// Se vuelve a aplicar la transformación cada vez que se mueve
trans.getOriginal().ajustarPuntos();
if (nombre != null) {
hacerTransformacion();
}
}

@Override
public void actionPerformed(ActionEvent e) {
JMenuItem origen = (JMenuItem) e.getSource();
nombre = origen.getName();
trans.limpiarValores();
hacerTransformacion();
}

Rafael Rivera López


5
Graficación

private void hacerTransformacion() {


switch (nombre) {
case "sCentral":
trans.aplicarSimetriaCentral();
break;
case "sAxial":
trans.aplicarSimetriaAxial();
break;
case "translacion":
trans.aplicarTranslacion(200, 150);
break;
case "rotacion":
trans.aplicarRotacion(30);
break;
case "escalado":
trans.aplicarEscalado(2);
break;
case "salir":
System.exit(0);
}
panel.repaint();
}
}

Rafael Rivera López


6

Вам также может понравиться