import java.lang.reflect.Array;
import java.awt.*;
import java.util.ArrayList;
class Balkendiagramm3d extends Canvas
{
int werte[];
Rectangle rects[]; // Rechtecke, die Balken repräsentieren
int balkenbreite;
int xOffset;
int Balkentiefe = 10;
boolean Konturenzeichnen = false;
ArrayList Farbwerte = new ArrayList();
public Balkendiagramm3d(int werte[], int balkenbreite, int xOffset)
{
this.werte = werte;
this.balkenbreite = balkenbreite;
this.xOffset = xOffset;
this.update(werte);
}
public Balkendiagramm3d(int werte[], int balkenbreite, int xOffset, int _Balkentiefe)
{
this.werte = werte;
this.balkenbreite = balkenbreite;
this.Balkentiefe = _Balkentiefe;
this.xOffset = xOffset;
this.update(werte);
}
public Balkendiagramm3d(int werte[], int balkenbreite, int xOffset, int _Balkentiefe, boolean _Konturenzeichnen)
{
this.werte = werte;
this.balkenbreite = balkenbreite;
this.Balkentiefe = _Balkentiefe;
this.xOffset = xOffset;
this.update(werte);
this.Konturenzeichnen = _Konturenzeichnen;
}
public void update(int werte[])
{
this.werte = werte;
int anzWerte = Array.getLength(this.werte);
this.rects = new Rectangle[anzWerte];
int minWert = 10000;
int maxWert = -10000;
for (int ii = 0; ii < anzWerte; ii++)
{
minWert = Math.min(minWert, this.werte[ii]);
maxWert = Math.max(maxWert, this.werte[ii]);
}
int yOffset = 0;
if (minWert <= 0)
{
yOffset = Math.abs(minWert) + 3;
}
for (int ii = 0; ii < anzWerte; ii++)
{
rects[ii] = new Rectangle();
rects[ii].x = this.balkenbreite * ii + this.xOffset;
rects[ii].width = this.balkenbreite;
if (minWert == 0 && maxWert == 0)
{
rects[ii].height = 3;
}
else
{
rects[ii].height = (int)((double)(this.werte[ii] + yOffset) / (maxWert + yOffset) * 220);
}
rects[ii].y = 240 - rects[ii].height;
}
}
public void paint(Graphics g)
{
generateColors();
Graphics2D g2 = (Graphics2D) g;
g2.setPaint(Color.decode("#DDFFD2"));
g2.fillRect(0, 0, 300, 250);
for (int ii = 0; ii < Array.getLength(werte); ii++)
{
//vorne
int punkt_1_x = rects[ii].x;
int punkt_1_y = rects[ii].y;
int punkt_2_x = rects[ii].x;
int punkt_2_y = rects[ii].y + rects[ii].height;
int punkt_3_x = rects[ii].x + rects[ii].width;
int punkt_3_y = rects[ii].y + rects[ii].height;
int punkt_4_x = rects[ii].x + rects[ii].width;
int punkt_4_y = rects[ii].y;
//seite
int punkt_5_x = rects[ii].x + rects[ii].width + this.Balkentiefe;
int punkt_5_y = rects[ii].y - this.Balkentiefe;
int punkt_6_x = rects[ii].x + rects[ii].width + this.Balkentiefe;
int punkt_6_y = rects[ii].y + rects[ii].height - this.Balkentiefe;
int punkt_7_x = rects[ii].x + rects[ii].width;
int punkt_7_y = rects[ii].y + rects[ii].height;
int punkt_8_x = rects[ii].x + rects[ii].width;
int punkt_8_y = rects[ii].y;
//oben
int punkt_9_x = rects[ii].x + rects[ii].width + this.Balkentiefe;
int punkt_9_y = rects[ii].y - this.Balkentiefe;
int punkt_10_x = rects[ii].x + this.Balkentiefe;
int punkt_10_y = rects[ii].y - this.Balkentiefe;
int punkt_11_x = rects[ii].x;
int punkt_11_y = rects[ii].y;
int punkt_12_x = rects[ii].x + rects[ii].width;
int punkt_12_y = rects[ii].y;
//ecke oben links
int punkt_13_x = rects[ii].x + this.Balkentiefe;
int punkt_13_y = rects[ii].y;
int punkt_14_x = rects[ii].x;
int punkt_14_y = rects[ii].y;
int punkt_15_x = rects[ii].x + this.Balkentiefe;
int punkt_15_y = rects[ii].y - this.Balkentiefe;
//vorne links überlagert
int punkt_16_x = punkt_13_x;
int punkt_16_y = punkt_13_y;
int punkt_17_x = punkt_1_x;
int punkt_17_y = punkt_1_y;
int punkt_18_x = punkt_2_x;
int punkt_18_y = punkt_2_y;
int punkt_19_x = punkt_18_x + this.Balkentiefe;
int punkt_19_y = punkt_18_y - this.Balkentiefe;
//unten links überlagert
int punkt_20_x = punkt_19_x;
int punkt_20_y = punkt_19_y;
int punkt_21_x = punkt_18_x;
int punkt_21_y = punkt_18_y;
int punkt_22_x = punkt_3_x;
int punkt_22_y = punkt_3_y;
int punkt_23_x = punkt_3_x;
int punkt_23_y = punkt_3_y - this.Balkentiefe;
Polygon vorne = new Polygon();
Polygon seite = new Polygon();
Polygon oben = new Polygon();
Polygon oben_links = new Polygon();
Polygon vorne_links = new Polygon();
Polygon unten_links = new Polygon();
vorne.addPoint(punkt_1_x, punkt_1_y);
vorne.addPoint(punkt_2_x, punkt_2_y);
vorne.addPoint(punkt_3_x, punkt_3_y);
vorne.addPoint(punkt_4_x, punkt_4_y);
g2.setPaint(Color.decode(((BalkenBean)this.Farbwerte.get(ii)).getFarbe_vorne()));
g2.fillPolygon(vorne);
if(this.Konturenzeichnen)
{
g2.setPaint(Color.decode("#000000"));
g2.drawPolygon(vorne);
}
seite.addPoint(punkt_5_x, punkt_5_y);
seite.addPoint(punkt_6_x, punkt_6_y);
seite.addPoint(punkt_7_x, punkt_7_y);
seite.addPoint(punkt_8_x, punkt_8_y);
g2.setPaint(Color.decode(((BalkenBean)this.Farbwerte.get(ii)).getFarbe_seite()));
g2.fillPolygon(seite);
if(this.Konturenzeichnen)
{
g2.setPaint(Color.decode("#000000"));
g2.drawPolygon(seite);
}
oben.addPoint(punkt_9_x, punkt_9_y);
oben.addPoint(punkt_10_x, punkt_10_y);
oben.addPoint(punkt_11_x, punkt_11_y);
oben.addPoint(punkt_12_x, punkt_12_y);
g2.setPaint(Color.decode(((BalkenBean)this.Farbwerte.get(ii)).getFarbe_oben()));
g2.fillPolygon(oben);
if(this.Konturenzeichnen)
{
g2.setPaint(Color.decode("#000000"));
g2.drawPolygon(oben);
}
if(rects[ii].height > 4)
{
oben_links.addPoint(punkt_13_x, punkt_13_y);
oben_links.addPoint(punkt_14_x, punkt_14_y);
oben_links.addPoint(punkt_15_x, punkt_15_y);
g2.setPaint(Color.decode(((BalkenBean)this.Farbwerte.get(ii)).getFarbe_1()));
g2.fillPolygon(oben_links);
if(this.Konturenzeichnen)
{
g2.setPaint(Color.decode("#000000"));
g2.drawPolygon(oben_links);
}
vorne_links.addPoint(punkt_16_x, punkt_16_y);
vorne_links.addPoint(punkt_17_x, punkt_17_y);
vorne_links.addPoint(punkt_18_x, punkt_18_y);
vorne_links.addPoint(punkt_19_x, punkt_19_y);
g2.setPaint(Color.decode(((BalkenBean)this.Farbwerte.get(ii)).getFarbe_2()));
g2.fillPolygon(vorne_links);
if(this.Konturenzeichnen)
{
g2.setPaint(Color.decode("#000000"));
g2.drawPolygon(vorne_links);
}
unten_links.addPoint(punkt_20_x, punkt_20_y);
unten_links.addPoint(punkt_21_x, punkt_21_y);
unten_links.addPoint(punkt_22_x, punkt_22_y);
unten_links.addPoint(punkt_23_x, punkt_23_y);
g2.setPaint(Color.decode(((BalkenBean)this.Farbwerte.get(ii)).getFarbe_3()));
g2.fillPolygon(unten_links);
if(this.Konturenzeichnen)
{
g2.setPaint(Color.decode("#000000"));
g2.drawPolygon(unten_links);
}
}
}
for (int ii = 0; ii < Array.getLength(werte); ii++)
{
if(rects[ii].height > 4)
{
//unten rechts überlagert
int punkt_24_x = rects[ii].x + rects[ii].width;
int punkt_24_y = rects[ii].y + rects[ii].height - this.Balkentiefe;
int punkt_25_x = rects[ii].x + rects[ii].width + this.Balkentiefe;
int punkt_25_y = rects[ii].y + rects[ii].height - this.Balkentiefe;
int punkt_26_x = rects[ii].x + rects[ii].width;
int punkt_26_y = rects[ii].y + rects[ii].height;
Polygon unten_rechts = new Polygon();
unten_rechts.addPoint(punkt_24_x, punkt_24_y);
unten_rechts.addPoint(punkt_25_x, punkt_25_y);
unten_rechts.addPoint(punkt_26_x, punkt_26_y);
//g2.setPaint(Color.decode("#000000"));
//g2.fillPolygon(oben_links);
if(this.Konturenzeichnen)
{
g2.setPaint(Color.decode("#000000"));
g2.drawPolygon(unten_rechts);
}
} //if
} //for
g2.setPaint(Color.decode("#000000"));
g2.drawLine(0, 15, 5, 15);
g2.drawLine(0, 125, 5, 125);
g2.drawLine(0, 238, 5, 238);
}
private void generateColors()
{
BalkenBean Balken_0 = new BalkenBean();
Balken_0.setFarbe_oben("#EEEE29");
Balken_0.setFarbe_seite("#DEDE41");
Balken_0.setFarbe_vorne("#FFFF41");
Balken_0.setFarbe_1("#DEDE41");
Balken_0.setFarbe_2("#DEDE41");
Balken_0.setFarbe_3("#DEDE41");
this.Farbwerte.add(0, Balken_0);
BalkenBean Balken_1 = new BalkenBean();
Balken_1.setFarbe_oben("#73264D");
Balken_1.setFarbe_seite("#4D1A33");
Balken_1.setFarbe_vorne("#993366");
Balken_1.setFarbe_1("#DEDE41");
Balken_1.setFarbe_2("#DEDE41");
Balken_1.setFarbe_3("#DEDE41");
this.Farbwerte.add(1, Balken_1);
BalkenBean Balken_2 = new BalkenBean();
Balken_2.setFarbe_oben("#BFBF99");
Balken_2.setFarbe_seite("#808066");
Balken_2.setFarbe_vorne("#FFFFCC");
Balken_2.setFarbe_1("#DEDE41");
Balken_2.setFarbe_2("#DEDE41");
Balken_2.setFarbe_3("#DEDE41");
this.Farbwerte.add(1, Balken_2);
BalkenBean Balken_3 = new BalkenBean();
Balken_3.setFarbe_oben("#99BFBF");
Balken_3.setFarbe_seite("#668080");
Balken_3.setFarbe_vorne("#CCFFFF");
Balken_3.setFarbe_1("#DEDE41");
Balken_3.setFarbe_2("#DEDE41");
Balken_3.setFarbe_3("#DEDE41");
this.Farbwerte.add(3, Balken_3);
BalkenBean Balken_4 = new BalkenBean();
Balken_4.setFarbe_oben("#4D004D");
Balken_4.setFarbe_seite("#330033");
Balken_4.setFarbe_vorne("#660066");
Balken_4.setFarbe_1("#DEDE41");
Balken_4.setFarbe_2("#DEDE41");
Balken_4.setFarbe_3("#DEDE41");
this.Farbwerte.add(4, Balken_4);
BalkenBean Balken_5 = new BalkenBean();
Balken_5.setFarbe_oben("#BF6060");
Balken_5.setFarbe_seite("#804040");
Balken_5.setFarbe_vorne("#FF8080");
Balken_5.setFarbe_1("#DEDE41");
Balken_5.setFarbe_2("#DEDE41");
Balken_5.setFarbe_3("#DEDE41");
this.Farbwerte.add(5, Balken_5);
BalkenBean Balken_6 = new BalkenBean();
Balken_6.setFarbe_oben("#004D99");
Balken_6.setFarbe_seite("#003366");
Balken_6.setFarbe_vorne("#0066CC");
Balken_6.setFarbe_1("#DEDE41");
Balken_6.setFarbe_2("#DEDE41");
Balken_6.setFarbe_3("#DEDE41");
this.Farbwerte.add(6, Balken_6);
BalkenBean Balken_7 = new BalkenBean();
Balken_7.setFarbe_oben("#9999BF");
Balken_7.setFarbe_seite("#666680");
Balken_7.setFarbe_vorne("#CCCCFF");
Balken_7.setFarbe_1("#DEDE41");
Balken_7.setFarbe_2("#DEDE41");
Balken_7.setFarbe_3("#DEDE41");
this.Farbwerte.add(7, Balken_7);
BalkenBean Balken_8 = new BalkenBean();
Balken_8.setFarbe_oben("#000060");
Balken_8.setFarbe_seite("#000040");
Balken_8.setFarbe_vorne("#000080");
Balken_8.setFarbe_1("#DEDE41");
Balken_8.setFarbe_2("#DEDE41");
Balken_8.setFarbe_3("#DEDE41");
this.Farbwerte.add(8, Balken_8);
BalkenBean Balken_9 = new BalkenBean();
Balken_9.setFarbe_oben("#BF00BF");
Balken_9.setFarbe_seite("#800080");
Balken_9.setFarbe_vorne("#FF00FF");
Balken_9.setFarbe_1("#DEDE41");
Balken_9.setFarbe_2("#DEDE41");
Balken_9.setFarbe_3("#DEDE41");
this.Farbwerte.add(9, Balken_9);
}
}