D9

Praktické cvičenie 30.11.2012

import java.util.Arrays;

import sk.upjs.jpaz2.Pane;

public class ZoznamTvarov {
        private Tvar[] tvary;

        public ZoznamTvarov() {
                tvary = new Tvar[0];
        }

        public void pridajTvar(Tvar t) {
                Tvar[] nTvary = new Tvar[tvary.length + 1];
                System.arraycopy(tvary, 0, nTvary, 0, tvary.length);
                nTvary[nTvary.length - 1] = t;
                tvary = nTvary;
        }

        public void nakresliVsetky(Pane plocha) {
                for (int i = 0; i < tvary.length; i++)
                        tvary[i].vykresliSa(plocha);
        }

        public void posun(double dx, double dy) {
                for (int i = 0; i < tvary.length; i++) {
                        tvary[i].setX(tvary[i].getX() + dx);
                        tvary[i].setY(tvary[i].getY() + dy);
                }
        }

        public Tvar bodTvaru(double x, double y) {
                return null;
        }

        public void odstranTvar(Tvar t) {
                Tvar[] NoveTvary = new Tvar[tvary.length - 1];
                int cislo = 0;
                for (int i = 0; i < tvary.length; i++) {
                        if (tvary[i] != t) {
                                NoveTvary[i] = tvary[i + cislo];
                        } else {
                                cislo++;

                        }

                }
                tvary = NoveTvary;
        }

        public void vypisObsahy() {
                for (int i = 0; i < tvary.length; i++) {
                        System.out.println(tvary[i].obsah());
                }
        }

        public void utriedObsahy() {
                double[] pole = new double[tvary.length];
                for (int i = 0; i < tvary.length; i++) {
                        pole[i] = tvary[i].obsah();
                }
                System.out.println(Arrays.toString(pole));
                Arrays.sort(pole);
                System.out.println(Arrays.toString(pole));
        }
}
import java.awt.Color;

import sk.upjs.jpaz2.Pane;

public class Tvar {

        private double x;
        private double y;
        private Color farba;

        public Tvar(double x, double y, Color farba) {
                super();
                this.x = x;
                this.y = y;
                this.farba = farba;
        }

        public double getX() {
                return x;
        }

        public void setX(double x) {
                this.x = x;
        }

        public double getY() {
                return y;
        }

        public void setY(double y) {
                this.y = y;
        }

        public Color getFarba() {
                return farba;
        }

        public void setFarba(Color farba) {
                this.farba = farba;
        }

        public void vykresliSa(Pane plocha) {
                System.err.println("Ja sa neviem vykreslit.");
        }
        public double obsah(){
                return -1;
        }
}
import java.awt.Color;

import sk.upjs.jpaz2.Pane;
import sk.upjs.jpaz2.Turtle;

public class Kruh extends Tvar {

        private double polomer;

        public Kruh(double x, double y, double r, Color f) {
                super(x, y, f);
                setPolomer(r);
        }

        public double getPolomer() {
                return polomer;
        }

        public void setPolomer(double polomer) {
                polomer = Math.abs(polomer);
                this.polomer = polomer;
        }

        public void vykresliSa(Pane plocha) {
                Turtle kreslic = new Turtle();
                plocha.add(kreslic);
                kreslic.setFillColor(getFarba());
                kreslic.setPosition(getX(), getY());
                kreslic.dot(getPolomer());
                plocha.remove(kreslic);
        }
        @Override
        public double obsah() {
                return polomer*polomer*Math.PI;
        }
}
import java.awt.Color;

import sk.upjs.jpaz2.Pane;
import sk.upjs.jpaz2.Turtle;

public class Obdlznik extends Tvar {

        private double sirka;
        private double vyska;

        public Obdlznik(double x, double y, double s, double v, Color f) {
                super(x, y, f);
                sirka = s;
                vyska = v;
        }

        public double getSirka() {
                return sirka;
        }

        public void setSirka(double sirka) {
                this.sirka = sirka;
        }

        public double getVyska() {
                return vyska;
        }

        public void setVyska(double vyska) {
                this.vyska = vyska;
        }

        public void vykresliSa(Pane plocha) {
                Turtle kreslic = new Turtle();
                plocha.add(kreslic);
                kreslic.setFillColor(getFarba());
                kreslic.setPosition(getX() - sirka / 2, getY() - vyska / 2);
                kreslic.setDirection(90);
                kreslic.openPolygon();
                for (int i = 0; i < 2; i++) {
                        kreslic.step(sirka);
                        kreslic.turn(90);
                        kreslic.step(vyska);
                        kreslic.turn(90);
                }
                kreslic.closePolygon();
                plocha.remove(kreslic);
        }

        public double obsah() {
                return sirka*vyska;

        }
}
import java.awt.Color;
import java.awt.event.MouseEvent;

import sk.upjs.jpaz2.WinPane;

public class PlochaTvarov extends WinPane {

        private ZoznamTvarov tvary;

        private double dragX;
        private double dragY;
        private boolean tahanie = false;

        public PlochaTvarov() {
                this.tvary = new ZoznamTvarov();
        }

        @Override
        protected void onMouseClicked(int x, int y, MouseEvent detail) {
                if (detail.getButton() == MouseEvent.BUTTON1) {
                        if (detail.isAltDown()) {
                                this.tvary.pridajTvar(new Kruh(120, 120,50,Color.red));
                        } else {
                                this.tvary.pridajTvar(new Obdlznik(10,10,50,60,Color.gray));
                        }
                }

                if (detail.getButton() == MouseEvent.BUTTON3) {
                        Tvar naOdstranenie = this.tvary.bodTvaru(x, y);
                        if (naOdstranenie != null) {
                                this.tvary.odstranTvar(naOdstranenie);
                        }
                }

                this.clear();
                this.tvary.nakresliVsetky(this);
        }


        @Override
        protected void onMousePressed(int x, int y, MouseEvent detail) {
                if (detail.getButton() == MouseEvent.BUTTON1) {
                        this.tahanie = true;
                        this.dragX = x;
                        this.dragY = y;
                }
        }

        @Override
        protected void onMouseDragged(int x, int y, MouseEvent detail) {
                if (this.tahanie) {
                        tvary.posun(x - this.dragX, y - this.dragY);
                        this.dragX = x;
                        this.dragY = y;
                        this.clear();
                        this.tvary.nakresliVsetky(this);
                }
        }

        @Override
        protected void onMouseReleased(int x, int y, MouseEvent detail) {
                if (detail.getButton() == MouseEvent.BUTTON1) {
                        this.tahanie = false;
                }
        }
}