Quadrat.java 2.85 KB
Newer Older
Florian Grabowski's avatar
Florian Grabowski committed
1
package de._82grfl1bif.kpiVisualizer.layouts.simpleSquare;
Florian Grabowski's avatar
Florian Grabowski committed
2

Florian Grabowski's avatar
Florian Grabowski committed
3
import de._82grfl1bif.kpiVisualizer.structures.Structure;
Florian Grabowski's avatar
Florian Grabowski committed
4

Florian Grabowski's avatar
Florian Grabowski committed
5
import java.awt.Point;
Florian Grabowski's avatar
Florian Grabowski committed
6
7
import java.util.ArrayList;

Florian Grabowski's avatar
Florian Grabowski committed
8
public class Quadrat extends Shape {
Florian Grabowski's avatar
Florian Grabowski committed
9

Florian Grabowski's avatar
Florian Grabowski committed
10
    private Boolean filled;
Florian Grabowski's avatar
Florian Grabowski committed
11
12
13
14
15
16
17
18
19
20
21

    public Structure getStructure() {
        return structure;
    }

    private Structure structure;

    public Quadrat(Point bottomLeftCorner, Point topRightCorner){
        this.bottomLeftCorner = bottomLeftCorner;
        this.topRightCorner = topRightCorner;
        this.xEdgeLength = topRightCorner.x-bottomLeftCorner.x;
Florian Grabowski's avatar
Florian Grabowski committed
22
        this.filled =false;
Florian Grabowski's avatar
Florian Grabowski committed
23
        if(topRightCorner.y-bottomLeftCorner.y < 3 || topRightCorner.x-bottomLeftCorner.x <3){
Florian Grabowski's avatar
Florian Grabowski committed
24
            throw new IllegalArgumentException("no Quadrate < 3 permitted");
Florian Grabowski's avatar
Florian Grabowski committed
25
26
27
28
29
30
31
        }
    }

    public Quadrat(Point bottomLeftCorner, int xEdgeLength){
        this.xEdgeLength = xEdgeLength;
        this.bottomLeftCorner = bottomLeftCorner;
        this.topRightCorner = new Point(bottomLeftCorner.x+xEdgeLength,bottomLeftCorner.y+xEdgeLength);
Florian Grabowski's avatar
Florian Grabowski committed
32
        this.filled = false;
33
        if(xEdgeLength < 3 || topRightCorner.x-bottomLeftCorner.x <3){
Florian Grabowski's avatar
Florian Grabowski committed
34
            throw new IllegalArgumentException("no Quadrate < 3 permitted " + xEdgeLength);
Florian Grabowski's avatar
Florian Grabowski committed
35
36
37
        }
    }

Florian Grabowski's avatar
Florian Grabowski committed
38
39
    public ArrayList<Quadrat> setFilled(Structure structure) {
        this.filled = true;
Florian Grabowski's avatar
Florian Grabowski committed
40
41
        this.structure = structure;
        ArrayList<Quadrat> result = new ArrayList<>();
42
        if(this.xEdgeLength > structure.getWidth().x+3){//if you can split rest into more quads
43
44
45
46
            int scrapLength = this.xEdgeLength-structure.getWidth().x;
            result.add(new Quadrat(new Point(this.bottomLeftCorner.x+structure.getWidth().x,this.bottomLeftCorner.y),scrapLength));
            result.add(new Quadrat(new Point(this.bottomLeftCorner.x,this.bottomLeftCorner.y+structure.getWidth().x),scrapLength));
            result.add(new Quadrat(new Point(this.bottomLeftCorner.x+structure.getWidth().x,this.bottomLeftCorner.y+structure.getWidth().x),scrapLength));
Florian Grabowski's avatar
Florian Grabowski committed
47
            if(this.xEdgeLength%scrapLength != 0){
48
                Rectangle temp = new Rectangle(scrapLength,this.xEdgeLength-2*scrapLength,new Point(this.bottomLeftCorner.x+scrapLength,this.bottomLeftCorner.y+structure.getWidth().x));
49
                result.addAll(temp.splitToQuads(temp));
50
                temp = new Rectangle(this.xEdgeLength-2*scrapLength,scrapLength,new Point(this.bottomLeftCorner.x+structure.getWidth().x,this.bottomLeftCorner.y+scrapLength));
51
                result.addAll(temp.splitToQuads(temp));
Florian Grabowski's avatar
Florian Grabowski committed
52
53
54
55
56
            }
        }
        return result;
    }

Florian Grabowski's avatar
Florian Grabowski committed
57
58
    public Boolean getFilled() {
        return filled;
Florian Grabowski's avatar
Florian Grabowski committed
59
60
    }

61
62
    public  Point getWidth(){
        return new Point(topRightCorner.x-bottomLeftCorner.x,topRightCorner.y-bottomLeftCorner.y);
Florian Grabowski's avatar
Florian Grabowski committed
63
64
    }

Florian Grabowski's avatar
Florian Grabowski committed
65
    @Deprecated
66
67
    public void applyCoordinates(Point coordinates){
        this.bottomLeftCorner = coordinates;
Florian Grabowski's avatar
Florian Grabowski committed
68
69
    }
}