/*+---------------------------------------------------------+
| DROEPPEZ Diagram Version 1.0 |
| (c) 2001 Ulrich Kritzner |
+---------------------------------------------------------+*/
import java.lang.*;
import java.applet.*;
import java.awt.*;
import java.net.*;
public class diagram
extends Applet
{
Dimension dim=null;
Image img=null;
Graphics ig=null;
Color colors[]=null;
Color bgcolor=Color.white;
Color bordercolor=Color.white;
Color fgcolor=Color.black;
double values[]=null;
double maxvalue=0;
double minvalue=0;
double addvalue=0;
int count=0;
int maxcount=0;
/* Info ----------------------------------------------- */
public String getAppletInfo()
/* stellt sich vor */
{
return "DROEPPEZ diagram v1.0 (c) 2001 Ulrich Kritzner";
}
/* Appletsteuerung ------------------------------------ */
public void init()
/* einmalige Initialisierung */
{
dim=getSize();
img=createImage(dim.width,dim.height);
openCanvas();
if (ig!=null)
ig.drawString(getAppletInfo(),5,20);
closeCanvas();
System.out.println(getAppletInfo());
}
public void destroy()
/* Aufraeumen */
{
closeCanvas();
if (img!=null)
img.flush();
img=null;
}
/* Anzeige -------------------------------------------- */
public void paint(Graphics g)
{
if (img!=null)
g.drawImage(img,0,0,this);
}
/* Leinwand ------------------------------------------- */
public void openCanvas()
{
if (img!=null)
if (ig==null)
ig=img.getGraphics();
}
public void closeCanvas()
{
Graphics g;
if (img!=null)
{
if (ig!=null)
ig.dispose();
ig=null;
}
g=getGraphics();
paint(g);
g.dispose();
}
public int canvasWidth()
{
return dim.width;
}
public int canvasHeight()
{
return dim.height;
}
/* Diagramm ------------------------------------------- */
public void diagramInit(int num)
{
count=0;
maxcount=num;
minvalue=0;
maxvalue=0;
addvalue=0;
colors=new Color[num];
values=new double[num];
if ((colors==null)||(values==null))
{
maxcount=0;
colors=null;
values=null;
}
}
public void diagramBGColor(int r,int g,int b)
{
bgcolor=new Color(r,g,b);
}
public void diagramBorderColor(int r,int g,int b)
{
bordercolor=new Color(r,g,b);
}
public void diagramFGColor(int r,int g,int b)
{
fgcolor=new Color(r,g,b);
}
public void diagramAdd(double value,int r,int g,int b)
{
if (count<maxcount)
{
colors[count]=new Color(r,g,b);
values[count]=value;
if (value>maxvalue)
maxvalue=value;
if (value<minvalue)
minvalue=value;
addvalue+=Math.abs(value);
count++;
}
}
public void diagramHorzBars()
{
openCanvas();
if (ig!=null)
{
double xa,xe,ya,ye;
double yf=(double)(dim.width-10)/(maxvalue-minvalue);
double xf=(double)(dim.height-10)/(count);
double y=5-minvalue*yf;
ig.setColor(bgcolor);
ig.fillRect(0,0,dim.width,dim.height);
ig.setColor(fgcolor);
ig.drawLine((int)y,0,(int)y,dim.height);
for (int i=0;i<count;i++)
{
xa=i*xf+6;
xe=(i+1)*xf+5;
ya=y;
ye=y;
if (values[i]<0)
ya=values[i]*yf+y;
if (values[i]>0)
ye=values[i]*yf+y;
ig.setColor(colors[i]);
ig.fillRect((int)ya,(int)xa,(int)ye-(int)ya,(int)xe-(int)xa);
}
}
closeCanvas();
}
public void diagramVertBars()
{
openCanvas();
if (ig!=null)
{
double xa,xe,ya,ye;
double yf=(double)(dim.height-10)/(maxvalue-minvalue);
double xf=(double)(dim.width-10)/(count);
double y=maxvalue*yf+5;
ig.setColor(bgcolor);
ig.fillRect(0,0,dim.width,dim.height);
ig.setColor(fgcolor);
ig.drawLine(0,(int)y,dim.width,(int)y);
for (int i=0;i<count;i++)
{
xa=i*xf+6;
xe=(i+1)*xf+5;
ya=y;
ye=y;
if (values[i]>0)
ya=y-values[i]*yf;
if (values[i]<0)
ye=y-values[i]*yf;
ig.setColor(colors[i]);
ig.fillRect((int)xa,(int)ya,(int)xe-(int)xa,(int)ye-(int)ya);
}
}
closeCanvas();
}
public void diagramCircleBars()
{
openCanvas();
if (ig!=null)
{
double minimum=minvalue+(minvalue-maxvalue)/16;
double x=dim.width/2;
double y=dim.height/2;
double rax=(dim.width-10)/2;
double ray=(dim.height-10)/2;
double rixsqr=0;
double riysqr=0;
rixsqr=(double)(rax*rax)/(1.0-((double)maxvalue/minimum));
riysqr=(double)(ray*ray)/(1.0-((double)maxvalue/minimum));
double rix=Math.sqrt(rixsqr);
double riy=Math.sqrt(riysqr);
double fif=(double)360.0/count;
double rx,ry;
ig.setColor(bordercolor);
ig.fillRect(0,0,dim.width,dim.height);
ig.setColor(bgcolor);
ig.fillOval(0,0,dim.width,dim.height);
for (int i=0;i<count;i++)
{
if (values[i]>0)
{
rx=Math.sqrt(rixsqr*(1-(values[i]/minimum)));
ry=Math.sqrt(riysqr*(1-(values[i]/minimum)));
ig.setColor(colors[i]);
ig.fillArc((int)(x-rx),(int)(y-ry),(int)(rx*2),(int)(ry*2),(int)(i*fif)+1,(int)fif-2);
}
}
ig.setColor(bgcolor);
ig.fillOval((int)(x-rix),(int)(y-riy),(int)(rix*2),(int)(riy*2));
for (int i=0;i<count;i++)
{
if (values[i]<0)
{
rx=Math.sqrt(rixsqr*(1-(values[i]/minimum)));
ry=Math.sqrt(riysqr*(1-(values[i]/minimum)));
ig.setColor(colors[i]);
ig.fillArc((int)(x-rix),(int)(y-riy),(int)(rix*2),(int)(riy*2),(int)(i*fif)+1,(int)fif-2);
ig.setColor(bgcolor);
ig.fillArc((int)(x-rx),(int)(y-ry),(int)(rx*2),(int)(ry*2),(int)(i*fif),(int)fif);
}
}
ig.setColor(fgcolor);
ig.drawOval((int)(x-rix),(int)(y-riy),(int)(rix*2),(int)(riy*2));
rx=Math.sqrt(rixsqr*(1-(minvalue/minimum)))-5;
ry=Math.sqrt(riysqr*(1-(minvalue/minimum)))-5;
ig.setColor(bordercolor);
ig.fillOval((int)(x-rx),(int)(y-ry),(int)(rx*2),(int)(ry*2));
}
closeCanvas();
}
public void diagramHorzAbs()
{
openCanvas();
if (ig!=null)
{
double xf=(double)(dim.width-10)/addvalue;
double x=5,xp;
ig.setColor(bgcolor);
ig.fillRect(0,0,dim.width,dim.height);
for (int i=0;i<count;i++)
{
xp=Math.abs(values[i]*xf);
ig.setColor(colors[i]);
ig.fillRect((int)x,5,dim.width-5-(int)x,dim.height-10);
x+=xp;
}
}
closeCanvas();
}
public void diagramVertAbs()
{
openCanvas();
if (ig!=null)
{
double xf=(double)(dim.height-10)/addvalue;
double x=5,xp;
ig.setColor(bgcolor);
ig.fillRect(0,0,dim.width,dim.height);
for (int i=count-1;i>=0;i--)
{
xp=Math.abs(values[i]*xf);
ig.setColor(colors[i]);
ig.fillRect(5,(int)x,dim.width-10,dim.height-5-(int)x);
x+=xp;
}
}
closeCanvas();
}
public void diagramCircleAbs()
{
openCanvas();
if (ig!=null)
{
double fif=(double)360.0/addvalue;
double fi=0,fia,fig;
ig.setColor(bordercolor);
ig.fillRect(0,0,dim.width,dim.height);
ig.setColor(bgcolor);
ig.fillOval(0,0,dim.width,dim.height);
for (int i=0;i<count;i++)
{
fia=Math.abs(values[i]*fif);
fig=fia+3;
ig.setColor(colors[i]);
ig.fillArc(5,5,dim.width-10,dim.height-10,(int)fi,(int)fig);
fi+=fia;
}
for (int i=0;i<count;i++)
{
fia=Math.abs(values[i]*fif);
ig.setColor(colors[i]);
ig.fillArc(5,5,dim.width-10,dim.height-10,(int)fi,(int)fia);
fi+=fia;
}
ig.setColor(bgcolor);
ig.fillOval(dim.width/4,dim.height/4,dim.width/2,dim.height/2);
ig.setColor(bordercolor);
ig.fillOval(dim.width/4+5,dim.height/4+5,dim.width/2-10,dim.height/2-10);
}
closeCanvas();
}
}
|