1   package fi.jyu.mit.graphics;
2   
3   import java.awt.*;
4   
5   /**
6    * Rajapinta kaikille piirtokuvioille
7    * @author Markus Kivioja
8    *
9    */
10  public interface Drawable extends Transformable {
11      
12      /**
13       * Piirtää kuvion annetulla Graphics-oliolla ja muunnosmatriisilla
14       * @param g Graphics-olio
15       * @param A muunnosmatriisi
16       */
17      void draw(Graphics g, Matrix A);
18      
19      /**
20       * Asettaa kuvion värin annetuilla punaisen, vihreän ja sinisen arvoilla
21       * ja palauttaa kuvion itsensä
22       * @param r värin punaisen arvo
23       * @param g värin vihreän arvo
24       * @param b värin sinisen arvo
25       * @return kuvio
26       */
27      Drawable setColor(int r, int g, int b);
28      
29      /**
30       * Asettaa kuvion värin annetuksi Color-olioksi ja paluttaa kuvion itsensä
31       * @param c väri Color-oliona
32       * @return kuvio
33       */
34      Drawable setColor(Color c);
35      
36      /**
37       * Palautetaan väri jota käyteään piirtämiseen
38       * @return kuvion väri
39       */
40      public Color getColor();
41  
42      /**
43       * Asettaa kuvion vanhemmat
44       * @param parent joukko kuvion vanhemmista
45       */
46      void setParent(BasicDrawableCollection parent);
47      
48      /**
49       * Piirtää kuvion uudelleen
50       *
51       */
52      void redraw();
53      
54      /**
55       * Muuntaa kuvion muunosmatriisilla m
56       * @param m matriisi jolla olion nykyinen muunnosmatrisi kerrotaan
57       * @return muutettu matriisi
58       */
59      @Override
60      Drawable transform(Matrix m);
61      
62      /**
63       * Asettaa kuvion uudeksi muunnosmatriisiksi annetun matriisin
64       * @param m uusi muunnosmatriisi
65       * @return palauttaa muunnetun olion
66       */
67      Drawable setTransform(Matrix m);
68  
69      /**
70       * Vaihtaa kuvion muunnosmatriisin annetuksi matriisiksi
71       * @param m uusi muunnosmatriisi
72       */
73      @Override
74      void changeTransform(Matrix m);
75  
76      /**
77       * Skaalaa kuvion annettujen kertoimien mukaan
78       * <pre>
79       *      shape.scale(2, 1, 1); venyttää kuviota kaksinkertaiseksi x-suunnassa
80       * </pre>
81       * @param dx kuvion x-suuntainen kerroin
82       * @param dy kuvion y-suuntainen kerroin
83       * @param dz kuvion z-suuntainen kerroin
84       * @return palauttaa muunnetun olion
85       */
86      Drawable scale(double dx, double dy, double dz);
87  
88      /**
89       * Liikuttaa kuviota, esimerkiksi:
90       * <pre>
91       *     shape.move(0, 1.5, -15);
92       * </pre>
93       * @param sx liikutettava matka x-akselin suunnassa
94       * @param sy liikutettava matka y-akselin suunnassa
95       * @param sz liikutettava matka z-akselin suunnassa
96       * @return palauttaa muunnetun olion
97       */
98      Drawable move(double sx, double sy, double sz);
99  
100     /**
101      * Kiertää kuviota annetun akselin ympäri, esimerkiksi:
102      * <pre>
103      *     shape.rotate(Axis.X, 45.2);
104      * </pre>
105      * @param axis akseli jonka ympäri pyöritetään (Axis.X/Axis.Y/Axis.Z)
106      * @param deg kierrettävän kulman suuruus asteina
107      * @return palauttaa muunnetun olion
108      */
109     Drawable rotate(int axis, double deg);
110 
111 }
112