package plotter;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import java.math.*;
class CMeineCanvas extends JPanel
{
NLogCoordinateSystem notLogSys;
SLogCoordinateSystem simpleLogSys;
DLogCoordinateSystem dualLogSys;
private BufferedImage image;
CMeineCanvas()
{
setBackground(Color.black); // den Hintergrund auf schwarz setzen
setForeground(Color.green); // Vordergrund (=ZeichenFarbe) auf grün setzen
}
public void paintComponent( Graphics g )
{
super.paintComponent( g );
// Das Bild zeichnen wir nur, wenn es existiert
if( image != null )
g.drawImage( image, 0, 0, this );
}
// Die wichtigste Methode: hier wird gezeichnet!
public void paintfunk()
{
//Die Farbe wird aus einem Array genomen, w ist der Zähler
int w = CFunkPlotter2.FP.w;
w++;
if(w>CFunkPlotter2.FP.Farbe.length-1)
{
w=0;
}
if(image==null)
image = new BufferedImage((int) getMinimumSize().getWidth(),
(int) getMinimumSize().getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics(); //Graphics erzeugen
//Über prüfen ob die alte Funktion erhalten werden soll, wenn nicht -> löschen
if(!CFunkPlotter2.FP.cb1.isSelected())
{
g.clearRect(0,0,(int) CFunkPlotter2.FP.di.getWidth(),(int) CFunkPlotter2.FP.di.getHeight());
CFunkPlotter2.FP.werte.setText("");
w=0;
}
//Es wird überprüft welcher Typ von Koordinatensystem verwendet werden soll
switch ( CFunkPlotter2.FP.CoordinateType)
{
case 'n': //n: not (LogarithmikCoordinateSystem)
notLogSys = new NLogCoordinateSystem( CFunkPlotter2.FP, w);
g = notLogSys.paintCoordinateSystem(g);
break;
case 's': //s: simpel (LogarithmikCoordinateSystem)
simpleLogSys = new SLogCoordinateSystem( CFunkPlotter2.FP, w);
g = simpleLogSys.paintCoordinateSystem(g);
break;
case 'd': //d: double (LogarithmikCoordinateSystem)
dualLogSys = new DLogCoordinateSystem( CFunkPlotter2.FP, w);
g = dualLogSys.paintCoordinateSystem(g);
break;
default:
System.out.println("Es scheint das sich hier ein Fehler eingeschlichen hat.\n Bitte informieren sie mich: über [url]http://www.schoenitzer.de\n[/url] Vielen Dank!");
}
// Wenn keine Funktion ausgewählt ist, nichts tun
if( CFunkPlotter2.FP.aktFunktion == 0)
return;
//Parameter abfragen
double[] para = CFunkPlotter2.FP.getParams();
if(para == null)
return;
// Die Funktion generieren
Funk f = new Funk(para);
f.funk = CFunkPlotter2.FP.aktFunktion;
//Eintragen der Beschreibung der Funktion und des Schnittpunktes mit der y-Achse in die Info-box
CFunkPlotter2.FP.werte.append(f.beschreibung()+"\n");
if(!Double.isNaN(f.yWert(0)) && !Double.isInfinite(f.yWert(0)))
CFunkPlotter2.FP.werte.append("Schnittpunkt mit der y-Achse bei y = "+Math.rint(f.yWert(0)*1000)/1000+"\n");
else
CFunkPlotter2.FP.werte.append("Kein Schnittpunkt mit der y-Achse!\n");
//Es wird überprüft welcher Typ von Koordinatensystem verwendet werden soll (siehe oben)
switch ( CFunkPlotter2.FP.CoordinateType)
{
case 'n':
notLogSys.paintFunk(f);
break;
case 's':
simpleLogSys.paintFunk(f);
break;
case 'd':
dualLogSys.paintFunk(f);
break;
default:
System.out.println("Es scheint das sich hier ein Fehler eingeschlichen hat.\n Bitte informieren sie mich: über [url]http://www.schoenitzer.de\n[/url] Vielen Dank!");
}
CFunkPlotter2.FP.w = w;
repaint(); //###Nötig?
}
//Zeichnet einen Wert
void paintValue(int xpos, int ypos, Color paintingC)
{
Graphics gr = image.getGraphics();
gr.setColor(paintingC);
gr.fillOval(xpos,ypos,1,1); //Ein Oval zeichnen
repaint(); //n: not (LogarithmikCoordinateSystem)
}
// Diese Methode liefert die minimale Größe der Canvas
public Dimension getMinimumSize()
{
return CFunkPlotter2.FP.di;
}
// Die Lieblingsgröße setzen wir auf die Minimalgröße
public Dimension getPreferredSize()
{
return getMinimumSize();
//return new Dimension(3*getToolkit().getScreenResolution(),3*getToolkit().getScreenResolution());
}
}//Ende CMeineCanvas