/******************************************************************************
* Predmet: technologie java
* Zadanie: zakladne 2D a 3d transformavcie
* Dodefinovanie zadania: vytvorte program, ktory bude prezentovat zakladne
* 2D a 3D transormacie
* Autor: Patrik Bona <bona@intrak.sk>
* Kosice dna 12.12.2001
* poznamka: dany applet (aplikacia) reprezenruje 2D transformacie
******************************************************************************/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.net.URL;
public class Graph extends JApplet implements ActionListener {
// deklaracie potrebnych objektov (tlacitak, toolbar...)
private AnimPanel animPanel;
private JRadioButton xButton, yButton;
private JButton otocButton, zvacsButton, zmensButton, skosButton, spatneSkosenieButton, vlavoButton, vpravoButton, zrkadlenieButton;
private JToolBar toolBar;
private JLabel text;
private ImageIcon img;
private ButtonGroup group;
private JPanel panel;
static boolean isApplet = true;
private boolean rozmer3d = false;
private boolean osX = true, osY = false;
protected Transform2D transform = new Transform2D(); // trieda obsahujuca transformacie
double[][] matvrch = {{10,10}, // suradnice vrcholov pre 2D
{10,50},
{50,10},
{50,50},};
int[][] matsusednych = {{0,1}, // susedne vrcholy pre 2D
{0,2},
{1,3},
{2,3},
{0,3},
{2,1},};
public void init() {
setContentPane(vytvorFormu());
}
public void start() {
}
public void stop() {
}
private Container vytvorFormu() { // vytvorime vzhlad appletu (aplikacie)
// definicie tlacitok
img = new ImageIcon(getURL("pics/sipkavlavo.png"));
vlavoButton = new JButton(img);
vlavoButton.setToolTipText("zmensi polohu vzhladom na vybranu os");
vlavoButton.setActionCommand("POSUNMINUS");
vlavoButton.addActionListener(this);
img = new ImageIcon(getURL("pics/sipkavpravo.png"));
vpravoButton = new JButton(img);
vpravoButton.setToolTipText("zvacsi polohu vzhladom na vybranu os");
vpravoButton.setActionCommand("POSUNPLUS");
vpravoButton.addActionListener(this);
img = new ImageIcon(getURL("pics/otocenie.png"));
otocButton = new JButton(img);
otocButton.setToolTipText("otoc objekt vzhladom na pociatok suradnicovej sustavy (uhol = 10 st.)");
otocButton.setActionCommand("OTOC");
otocButton.addActionListener(this);
img = new ImageIcon(getURL("pics/zvacs.png"));
zvacsButton = new JButton(img);
zvacsButton.setToolTipText("zvacsi objekt (M=1.1)");
zvacsButton.setActionCommand("ZVACS");
zvacsButton.addActionListener(this);
img = new ImageIcon(getURL("pics/zmensi.png"));
zmensButton = new JButton(img);
zmensButton.setToolTipText("zmensi objekt (M=0.9)");
zmensButton.setActionCommand("ZMENS");
zmensButton.addActionListener(this);
img = new ImageIcon(getURL("pics/skosenie.png"));
skosButton = new JButton(img);
skosButton.setToolTipText("skos objekt vzhladom na vybranu os (S=1)");
skosButton.setActionCommand("SKOS");
skosButton.addActionListener(this);
img = new ImageIcon(getURL("pics/spatneskosenie.png"));
spatneSkosenieButton = new JButton(img);
spatneSkosenieButton.setToolTipText("skos objekt vzhladom na vybranu os (S=-1)");
spatneSkosenieButton.setActionCommand("SKOSSPATNE");
spatneSkosenieButton.addActionListener(this);
img = new ImageIcon(getURL("pics/zrkadlenie.png"));
zrkadlenieButton = new JButton(img);
zrkadlenieButton.setToolTipText("odzrkadli objekt vzhladom na vybranu os");
zrkadlenieButton.setActionCommand("ZRKADLENIE");
zrkadlenieButton.addActionListener(this);
text = new JLabel(" Vyber si os: ");
xButton = new JRadioButton("x");
xButton.setSelected(true);
xButton.setToolTipText("vyber os x");
xButton.setActionCommand("OSX");
xButton.addActionListener(this);
yButton = new JRadioButton("y");
yButton.setToolTipText("vyber os y");
yButton.setActionCommand("OSY");
yButton.addActionListener(this);
// zoskupenie radio buttonov
group = new ButtonGroup();
group.add(xButton);
group.add(yButton);
// toolbar s tlacitkami
toolBar = new JToolBar();
toolBar.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createTitledBorder(" 2D tools "), BorderFactory.createEmptyBorder(5,5,5,5)));
toolBar.add(vlavoButton);
toolBar.add(vpravoButton);
toolBar.add(otocButton);
toolBar.add(zvacsButton);
toolBar.add(zmensButton);
toolBar.add(skosButton);
toolBar.add(spatneSkosenieButton);
toolBar.add(zrkadlenieButton);
toolBar.add(text);
toolBar.add(xButton);
toolBar.add(yButton);
// panel kam sa vykresluje
animPanel = new AnimPanel();
animPanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createTitledBorder(" 2D draw panel "), BorderFactory.createEmptyBorder(5,5,5,5)));
// celkovy panel kam secko nahadzeme
panel = new JPanel(new BorderLayout());
panel.add(toolBar,BorderLayout.NORTH);
panel.add(animPanel,BorderLayout.CENTER);
return panel;
}
// tu pocuvame udalosti (pre stlacanie tlacitok)
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("OTOC")) {
transform.otoc(10,matvrch);
}
if(e.getActionCommand().equals("ZVACS")) {
transform.zmenMierku(1.1,matvrch);
}
if(e.getActionCommand().equals("ZMENS")) {
transform.zmenMierku(0.9,matvrch);
}
if(e.getActionCommand().equals("SKOS")) {
int pom = osX ? 0 : 1;
transform.skos(1, pom, matvrch);
}
if(e.getActionCommand().equals("SKOSSPATNE")) {
int pom = osX ? 0 : 1;
transform.skos(-1, pom, matvrch);
}
if(e.getActionCommand().equals("OSX")) {
xButton.setSelected(true);
osX = true;
osY = false;
}
if(e.getActionCommand().equals("OSY")) {
yButton.setSelected(true);
osY = true;
osX = false;
}
if(e.getActionCommand().equals("POSUNMINUS")) {
int pom = osX ? 0 : 1;
transform.posun(-10, pom, matvrch);
}
if(e.getActionCommand().equals("POSUNPLUS")) {
int pom = osX ? 0 : 1;
transform.posun(10, pom, matvrch);
}
if(e.getActionCommand().equals("ZRKADLENIE")) {
int pom = osY ? 0 : 1;
transform.odraz(pom, matvrch);
}
animPanel.repaint();
}
// na AnimPanel sa vykresluje dany objekt ...
private class AnimPanel extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
int width = size().width, height = size().height;
// vymaz plochu
g.clearRect(0,0,width,height);
// nakresli suradnicovy system
g.drawLine(width/2, 20, width/2, height-10);
g.drawLine(10, height/2, width -10, height/2);
g.drawString("X", width - 15, height/2 - 5);
g.drawString("Y", width/2 + 5, 30);
// vykresli objekt
for(int i=0;i<matsusednych.length;i++) {
g.drawLine(width/2 + (int)matvrch[matsusednych[i][0]][0], height/2 - (int)matvrch[matsusednych[i][0]][1], width/2 + (int)matvrch[matsusednych[i][1]][0], height/2 - (int)matvrch[matsusednych[i][1]][1]);
}
}
}
// tato metoda je kvoli stahovaniu obrazkov v pripade appletu
protected URL getURL(String filename) {
URL url = null;
if(isApplet){
URL codeBase = getCodeBase();
try {
url = new URL(codeBase, filename);
} catch (java.net.MalformedURLException e) {
System.out.println("Couldn't create image: badly specified URL");
return null;
}
}
else{
url=getClass().getResource(filename);
}
return url;
}
// pre aplikaciu tu mame main() :-))
public static void main (String args[]) {
JFrame f=new JFrame("Java");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Graph app=new Graph();
isApplet=false;
f.getContentPane().add(app);
app.init();
f.setSize(500,380);
f.show();
}
}