package fem2;  /** NumPDgl 05S, FEM-&Matrix-Algorithmen*/
import java.lang.Math;
import java.awt.*;
import java.awt.Graphics;
import java.awt.event.*;

class Fenster extends Frame implements WindowListener { //Fenster für Graphikausgabe
  Fenster() { //Konstruktor
    super("Finite Elemente");
    setSize(610,660);
    addWindowListener(this);
    setVisible(true);// Fenster ist da&sichtbar
  }
  public void windowClosing(WindowEvent e) { //Bedienknöpfe o.re.: Fenster schließen
    System.exit(0);
  }
  public void windowOpened(WindowEvent e) {
  }
  public void windowClosed(WindowEvent e) {
  }
  public void windowActivated(WindowEvent e) {
  }
  public void windowDeactivated(WindowEvent e) {
  }
  public void windowIconified(WindowEvent e) {
  }
  public void windowDeiconified(WindowEvent e) {
  }

  Image gbild; //Bildpuffer
  public Graphics graus; //dessen Leinwand
    
  public void paint(Graphics g) { //kopiert Puffer graus ins Fenster
    if (gbild==null) { //erzeugt einmalig den Puffer
      gbild = createImage(600,600);
      graus = gbild.getGraphics();
    }
    g.setPaintMode();
    g.drawImage(gbild,10,58,this);
  }
}//Ende Fenster

public class femp 
{
  static double drehw = 0; //Drehwinkel 3D-Graphik
  public static void main(String args[]) { 
    final fem finel = new fem();
    final Fenster fen = new Fenster(); //Ausgabefenster
    ActionListener drehen = new ActionListener() { //Aktion Drehknopf
      public void actionPerformed(ActionEvent e){
        drehw += 0.1;
        finel.zeig_fkt(drehw,fen.graus);
        fen.repaint();
      }
    };

    while (fen.graus==null) //Init. graus abwarten? 
      fen.repaint();
    Button dreh = new Button(" >> "); //Drehknopf erzeugen
    fen.add(dreh); //Knopf in fen einbauen
    dreh.setBounds(540,30,48,24);
    dreh.addActionListener(drehen); //auf Mausclick reagiert "drehen"
  
    if (finel.liesgeom(args[0]+".fej")) { //Lesen erfolgreich:
      System.out.println("Gelesen: "+finel.apkt+" Punkte, "+finel.adrk+" Dreiecke");
      finel.wbereich();
      System.out.println("Gebiet in ["+finel.xmn[0]+","+finel.xmx[0]+"]x[" +finel.xmn[1]+","+finel.xmx[1]+"]");
      finel.zeiggeom(fen.graus);
      finel.femlsg();
    }
    else System.out.println("Dateifehler");
    fen.repaint();
  }//Ende main
}