/****************************************************************************** * Predmet: technologie java * Zadanie: zakladne 2D a 3d transformavcie * Dodefinovanie zadania: vytvorte program, ktory bude prezentovat zakladne * 2D a 3D transormacie * Autor: Patrik Bona * 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