Package kartoMNT

Source Code of kartoMNT.JPanelMNT

/**
* @author Jean BRESSON
*
* Programme kartoMNT v2.0
* Copyright (C) 2003  Roland DERHI & Jean BRESSON
*
* Ce programme est libre, vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence
* Publique G�n�rale GNU publi�e par la Free Software Foundation (version 2).
*
* Ce programme est distribu� car potentiellement utile, mais SANS AUCUNE GARANTIE, ni explicite ni implicite,
* y compris les garanties de commercialisation ou d'adaptation dans un but sp�cifique. Reportez-vous � la
* Licence Publique G�n�rale GNU pour plus de d�tails.
*
* Vous devez avoir re�u une copie de la Licence Publique G�n�rale GNU en m�me temps que ce programme ; si
* ce n'est pas le cas, �crivez � la
* Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, �tats-Unis.
*/
package kartoMNT;

import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.geom.*;
import java.util.Vector;
import java.io.*;
import java.util.StringTokenizer;
import kartoMNT.karto.outils.MsgInfo;



/**
* Un dialogue permettant l'ouverture d'un ou plusieurs MNT,
* afin de les fusionner, les redimensionner, les r�echantillonner, ...
* @author Jean Bresson
*/
public class FusionMNTDialog extends JDialog {
 
  // Mode d'�chantillonnage: choix du pas OU du nombre d'�chatillons
  public static final int PAS_ECHANTILLONNAGE = 0;
  public static final int NB_ECHANTILLONS = 1;
  int modeSelect = PAS_ECHANTILLONNAGE;
 
 
  DocumentKartoContainer documentKartoContainer;
     DocumentMNTContainer documentMNTContainer;
     java.awt.Frame parent;
    
  int nbMNT;      // Nobre de MNT charg�s
     Vector vectMNT;    // Vecteur contenant les diff�rents MNT charg�s
     Vector vectListe;  // Vecteur contenant les noms des MNT charg�s
    
     MNTGenerateur mntGen;  // R�alisera la g�n�ration du MNT
    
    
    
    
     // Donn�es du nouveau MNT (celui que l'on souhaite g�n�rer
     float x0 = Float.MAX_VALUE;
     float y0 = Float.MAX_VALUE;
     float xm = Float.MIN_VALUE;
     float ym = Float.MIN_VALUE;
     float pasX, pasY;
     int nbEchX, nbEchY;
 

    
     // Swing components
     JPanel panelHaut;
  JPanel panelBas;
  JPanel panelInfo;
  JPanel panelZoom;
  JPanel panelDroite;
  JPanel panelSelect;
  JPanel panelS1;
  JPanel panelS2;
  JPanel panelS3;
  JPanel panelNew;
  JPanel panelFin;
  JButton boutonAdd;
  JButton boutonRemove;
  JButton boutonOK;
  JButton boutonAnnuler;
  JButton boutonPlus;
  JButton boutonMoins;
  JList listeMNT;
  JScrollPane scrollPane;
  JScrollPane scrollPaneListe;
  JTextArea txtInfo;
  JLabel echXLabel;
  JTextField echXTextField;
  JLabel echYLabel;
  JTextField echYTextField;
  JRadioButton selecPas;
  JRadioButton selecNb;
 
  JLabel xoLabel;
  JTextField xoTextField;
  JLabel yoLabel;
  JTextField yoTextField;
  JLabel xmLabel;
  JTextField xmTextField;
  JLabel ymLabel;
  JTextField ymTextField;
 
  JPanelMNT panelMNT;
  JPanel p1 = new JPanel();
  JPanel p2 = new JPanel();
  JPanel p3 = new JPanel();
 
  JFileChooser chooser;
   
  /**
   * Constructeur
   */
  public FusionMNTDialog(java.awt.Frame _parent, DocumentKartoContainer _documentKartoContainer,
                                   DocumentMNTContainer _documentMNTContainer){
   
    super(_parent,ResourceManager.get("creatMNT"));
    documentKartoContainer=_documentKartoContainer;
        documentMNTContainer=_documentMNTContainer;
        parent = _parent;
        vectMNT = new Vector();
        vectListe = new Vector();
        nbMNT=0;
        
    initComponents();   
   
  }
 
  /**
   * Cr�ation des composants de l'interface
   */
  public void initComponents(){
    panelHaut = new JPanel();
    panelBas = new JPanel();
    panelInfo = new JPanel();
    panelZoom = new JPanel();
    panelDroite = new JPanel();
    panelSelect = new JPanel();
    panelS1 = new JPanel();
    panelS2 = new JPanel();
    panelFin = new JPanel();
    panelNew = new JPanel();
   
    // PANEL GERNERAL //
    BorderLayout borderLayout = new BorderLayout();
    getContentPane().setLayout(borderLayout);
    getContentPane().add(panelHaut, BorderLayout.CENTER);
    getContentPane().add(panelBas, BorderLayout.SOUTH);
   
    panelBas.setLayout(new BorderLayout());
    panelBas.add(panelSelect, BorderLayout.WEST);
    panelBas.add(panelNew, BorderLayout.CENTER);
    panelBas.add(panelFin, BorderLayout.SOUTH);
   
   
    // SELECTION DES MNT
   
    // Ajout d'un MNT
    boutonAdd = new JButton(ResourceManager.get("add"));
    boutonAdd.addActionListener(new java.awt.event.ActionListener(){
                          public void actionPerformed(java.awt.event.ActionEvent evt){
                                              addMNT();
                                          }
                                      }
                                   );
   
    // Suppression d'un MNT
    boutonRemove = new JButton(ResourceManager.get("suppr"));
    boutonRemove.addActionListener(new java.awt.event.ActionListener(){
                          public void actionPerformed(java.awt.event.ActionEvent evt){
                                              removeMNT();
                                          }
                                        }
                                    );
   
    // Selection d'un MNT dans la liste:
    // le MNT selectionn� est dessin� d'une autre couleur dans panelMNT
    // et ses propri�t�s sont affich�es dans panelInfo
    listeMNT = new JList(vectMNT);
    scrollPaneListe = new JScrollPane(listeMNT);
    scrollPaneListe.setPreferredSize(new Dimension(180, 80));
    listeMNT.addListSelectionListener(new javax.swing.event.ListSelectionListener(){
                           public void valueChanged(javax.swing.event.ListSelectionEvent lse){
                                panelMNT.setSelected(listeMNT.getSelectedIndex());
                        panelMNT.repaint();
                        setInfo(listeMNT.getSelectedIndex());               
                          }
                                        }
                                    );


    panelSelect.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED),ResourceManager.get("selecMNT")));   
    panelSelect.setLayout(new FlowLayout());
    panelSelect.add(panelS1);
    panelSelect.add(panelS2);
    panelS1.setLayout(new BorderLayout());
    panelS1.add(boutonAdd, BorderLayout.NORTH);
    panelS3 = new JPanel();
    panelS1.add(panelS3, BorderLayout.CENTER);
    panelS1.add(boutonRemove, BorderLayout.SOUTH);
    panelS2.add(scrollPaneListe);
   
     
       
    // CARACTERISTIQUES DU NOUVEAU MNT
    panelNew.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED),ResourceManager.get("nouvMNT")));
    panelNew.setLayout(new BorderLayout());
   
    // Choix du pas d'�chantillonnage OU du nombre d'�chantillons (l'un ou l'autre)
    // (Ces deux valeurs sont inversement proportionnelles pour une dimension fix�e)
    echXLabel=new JLabel(ResourceManager.get("pX"));
    echXTextField = new JTextField(4);
    echYLabel=new JLabel(ResourceManager.get("pY"));
    echYTextField = new JTextField(4);
    selecPas = new JRadioButton(ResourceManager.get("pasEch"));
    selecPas.setSelected(true);
    selecNb = new JRadioButton(ResourceManager.get("nbEch"));
    ButtonGroup echantillons = new ButtonGroup();
    echantillons.add(selecPas);
    echantillons.add(selecNb);
   
    selecNb.addActionListener(new java.awt.event.ActionListener(){
                          public void actionPerformed(java.awt.event.ActionEvent evt){
                                              modeSelect = NB_ECHANTILLONS;
                                              echXLabel.setText(ResourceManager.get("nX"));
                                              echYLabel.setText(ResourceManager.get("nY"));
                                              echXTextField.setText(""+nbEchX);
                                              echYTextField.setText(""+nbEchY);
                                            }
                                      }
                                   );
    selecPas.addActionListener(new java.awt.event.ActionListener(){
                          public void actionPerformed(java.awt.event.ActionEvent evt){
                                              modeSelect = PAS_ECHANTILLONNAGE;
                                              echXLabel.setText(ResourceManager.get("pX"));
                                              echYLabel.setText(ResourceManager.get("pY"));
                                              echXTextField.setText(""+pasX);
                                              echYTextField.setText(""+pasY);
                                          }
                                      }
                                   );
   
    MyDocumentListener2 listenerEchantillonnageX=new MyDocumentListener2(){
                                                public void run(){
                                                        updateEchantillonnageX();
                                                }
                                            };
                                           
        MyDocumentListener2 listenerEchantillonnageY=new MyDocumentListener2(){
                                                public void run(){
                                                        updateEchantillonnageY();
                                                }
                                            };
                                           
        echXTextField.getDocument().addDocumentListener(listenerEchantillonnageX);
        echYTextField.getDocument().addDocumentListener(listenerEchantillonnageY);
   
   
    JPanel pp = new JPanel();
    JPanel ppL = new JPanel();
    JPanel ppR = new JPanel();
    JPanel po = new JPanel();
    JPanel pm = new JPanel();
    ppL.setLayout(new BorderLayout());
   
    ppL.add(selecPas,BorderLayout.NORTH);
    ppL.add(selecNb,BorderLayout.SOUTH);
    ppR.add(echXLabel);
    ppR.add(echXTextField);
    ppR.add(echYLabel);
    ppR.add(echYTextField);
    pp.add(ppL);
    pp.add(ppR);
   
    // Choix des dimensions du MNT
    xoLabel=new JLabel("Xo");
    xoTextField = new JTextField(8);
    yoLabel=new JLabel("Yo");
    yoTextField = new JTextField(8);
    xmLabel=new JLabel("Xm");
    xmTextField = new JTextField(8);
    ymLabel=new JLabel("Ym");
    ymTextField = new JTextField(8);
    po.add(xoLabel);
    po.add(xoTextField);
    po.add(yoLabel);
    po.add(yoTextField);
    pm.add(xmLabel);
    pm.add(xmTextField);
    pm.add(ymLabel);
    pm.add(ymTextField);
   
    // Le contour d�fini est dessin� dans panelMNT
    MyDocumentListener2 listenerSize = new MyDocumentListener2(){
                        public void run(){
                                                 updateSize();
                                                }
                                            };
       
        xoTextField.getDocument().addDocumentListener(listenerSize);
        xmTextField.getDocument().addDocumentListener(listenerSize);
        yoTextField.getDocument().addDocumentListener(listenerSize);
        ymTextField.getDocument().addDocumentListener(listenerSize);
   
   
   
   
    panelNew.add(pp,BorderLayout.NORTH);
    panelNew.add(po,BorderLayout.CENTER);
    panelNew.add(pm,BorderLayout.SOUTH);
   
   
    // BAS DU DIALOGUE
    boutonOK = new JButton(ResourceManager.get("genMNT"))
    boutonOK.addActionListener(new java.awt.event.ActionListener(){
                          public void actionPerformed(java.awt.event.ActionEvent evt){
                                              genererMNT();
                                          }
                                      }
                                   );

    boutonAnnuler = new JButton(ResourceManager.get("CancelKey"));
   
    boutonAnnuler.addActionListener(new java.awt.event.ActionListener(){
                          public void actionPerformed(java.awt.event.ActionEvent evt){
                                              annuler();
                                          }
                                        }
                                  );
   
    panelFin.setLayout(new FlowLayout());
    panelFin.add(boutonOK);
    panelFin.add(boutonAnnuler);
       
   
    // HAUT DU DIALOGUE   
   
    // PanelInfo dans lequel sont affich�es les caracteristiques
    // du MNT selectionn�.
    panelInfo.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED),ResourceManager.get("selectedMNT")));     
    txtInfo = new JTextArea();
    txtInfo.setEditable(false);
    txtInfo.setBackground(Color.lightGray);
    panelInfo.setPreferredSize(new Dimension(120,200));
    txtInfo.setText("");
    panelInfo.add(txtInfo);
   
    // PanelZoom contenant les boutons pour le zoom sur panelMNT
    panelZoom.setLayout(new FlowLayout());
    panelZoom.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED),ResourceManager.get("zoom")));     
    boutonPlus = new JButton("+");
    boutonPlus.setPreferredSize(new Dimension(20,20));
    boutonPlus.setMargin(new Insets(0,0,0,0));
    boutonMoins = new JButton("-")
    boutonMoins.setPreferredSize(new Dimension(20,20));
    boutonMoins.setMargin(new Insets(0,0,0,0));
    boutonPlus.addActionListener(new java.awt.event.ActionListener(){
                          public void actionPerformed(java.awt.event.ActionEvent evt){
                                              panelMNT.zoomin();
                                          }
                                        }
                                    );
        boutonMoins.addActionListener(new java.awt.event.ActionListener(){
                           public void actionPerformed(java.awt.event.ActionEvent evt){
                                panelMNT.zoomout();
                            }
                                        }
                                    );
    panelZoom.add(boutonPlus);
    panelZoom.add(boutonMoins);
   
    panelDroite = new JPanel();
    panelDroite.setLayout(new BorderLayout());
    panelDroite.add(panelZoom, BorderLayout.NORTH);
    panelDroite.add(panelInfo, BorderLayout.CENTER);
   
   
   
    // PANEL D'AFFICHAGE RECTANGLES
   
    panelMNT = new JPanelMNT(this);
    scrollPane = new JScrollPane(panelMNT);
    panelHaut.setPreferredSize(new Dimension(200,220));
    panelHaut.setLayout(new BorderLayout());
    panelHaut.add(scrollPane, BorderLayout.CENTER);
   
    panelHaut.add(p1, BorderLayout.NORTH);
    panelHaut.add(p2, BorderLayout.SOUTH);
    panelHaut.add(p3, BorderLayout.WEST);
    panelHaut.add(panelDroite, BorderLayout.EAST);
   
   
    // FILE CHOOSER POUR L'AJOUT DE MNT
    chooser = new JFileChooser(Options.getDirRead());
    /*ExampleFileFilter filterMNT = new ExampleFileFilter();
        filterMNT.addExtension("mnt");
        filterMNT.addExtension("sur");
        filterMNT.setDescription(ResourceManager.get("ModelNT"));
        chooser.addChoosableFileFilter(filterMNT);*/

    GestionnaireMntFormat.initFilter(chooser,MntFormat.IMPORT);
   
    // dimensionne la fen�tre
    pack();
 
 
 
 
  /**
   * Affiche les caracteristiques du MNT ind dans le panelInfo
   * @param ind Numero du MNT dans la liste
   */
  public void setInfo(int ind){
    String info="";
    if(ind!=-1){
      float xo = ((MNT)(vectMNT.elementAt(ind))).getX1();
      float yo = ((MNT)(vectMNT.elementAt(ind))).getY1();
      float xm = ((MNT)(vectMNT.elementAt(ind))).getX2();
      float ym = ((MNT)(vectMNT.elementAt(ind))).getY2();
      float px = ((MNT)(vectMNT.elementAt(ind))).getPasX();
      float py = ((MNT)(vectMNT.elementAt(ind))).getPasY();
      info="Xo: "+xo+"\nYo: "+yo+"\nXm: "+xm+"\nYm: "+ym+"\n"+ResourceManager.get("pX")+": "+px+"\n"+ResourceManager.get("pY")+": "+py+"";
    }
    txtInfo.setText(info)
  }
 
  /**
   * Met � jour les dimensions du MNT � g�n�rer � partir des valeurs
   * des TextFields correspondants
   */
  public void updateSize(){
    float x1,y1,x2,y2;
    try{
          x1=Float.parseFloat(xoTextField.getText());
          y1=Float.parseFloat(yoTextField.getText());
      x2=Float.parseFloat(xmTextField.getText());
          y2=Float.parseFloat(ymTextField.getText());           
   
      panelMNT.setSelectedRegion(x1,y1,x2,y2);
      x0=x1;
      xm=x2;
      y0=y1;
      ym=y2;
      panelMNT.repaint();
      updateEchantillonnageX();
      updateEchantillonnageY();
   
    } catch(NumberFormatException nfe){
     
    }
  }
 
  /**
   * Met � jour les dimensions du MNT avec les dimensions maximales
   * en fonction des MNT charg�s 
   */
  public void updateDimension(){
    MNT currentMNT;
    x0 = Float.MAX_VALUE;
    y0 = Float.MAX_VALUE;
    xm = Float.MIN_VALUE;
    ym = Float.MIN_VALUE;
    for(int i = 0; i< vectMNT.size(); i++){
      currentMNT = (MNT) vectMNT.elementAt(i);
      float x1=currentMNT.getX1();
      float y1=currentMNT.getY1();
      float x2=currentMNT.getX2();
      float y2=currentMNT.getY2();
           
      if(x1<x0) x0=x1;   
      if(y1<y0) y0=y1;   
      if(x2>xm) xm=x2;   
      if(y2>ym) ym=y2;         
    }     
  }
 
  /**
   * Met � jour les donn�es d'�chantillonnage en X � partir du TextField
   * correspondant.
   * Calcule, selon le mode de s�l�ction et si la taille du MNT est valable,
   * le nombre d'�chantillon en fonction du pas, ou l'inverse.
   */
  public void updateEchantillonnageX(){
    if (modeSelect==PAS_ECHANTILLONNAGE){
      try{
            float f=Float.parseFloat(echXTextField.getText());
            if(f>0){
              pasX = f;
              if(x0<xm){
                nbEchX = (int)((xm-x0)/pasX)
              }
            }
          } catch(Exception e){}
      } else {
        try{
            int f=Integer.parseInt(echXTextField.getText());
            if(f>0){
              nbEchX = f;
              if(x0<xm){
                pasX = (xm-x0)/nbEchX; 
              }
            }
          } catch(Exception e){} 
      }
  }
 
  /**
   * Met � jour les donn�es d'�chantillonnage en Y � partir du TextField
   * correspondant.
   * Calcule, selon le mode de s�l�ction et si la taille du MNT est valable,
   * le nombre d'�chantillon en fonction du pas, ou l'inverse.
   */
  public void updateEchantillonnageY(){
    if (modeSelect==PAS_ECHANTILLONNAGE){
      try{
            float f=Float.parseFloat(echYTextField.getText());
            if(f>0){
              pasY = f;
              if(y0<ym){
                nbEchY = (int)((ym-y0)/pasY)
              }
            }
           
          } catch(Exception e){}
      } else {
        try{
            int f=Integer.parseInt(echYTextField.getText());
            if(f>0){
              nbEchY = f;
              if(y0<ym){
                pasY = (ym-y0)/nbEchY; 
              }
            }
          } catch(Exception e){} 
      }
  }
 
  /**
   * Charge un MNT � l'aide d'un FileChooser
   * Utilise GestionnaireFormat pour permettre d'importer tous les formats
   * de MNT support�s
   */
  public void addMNT(){
   
    String fileName;
   
        int returnVal = chooser.showOpenDialog(parent);
   
    if(returnVal == JFileChooser.APPROVE_OPTION) {
      // Charger le MNT   
          fileName = chooser.getSelectedFile().getPath();
        try {
       

        MntFormat format = GestionnaireMntFormat.donneFormat(fileName);
        if (format.support()==MntFormat.EXPORT){
      throw new IOException();
        }
        MNT mnt = format.importMNT(fileName);
       
        // Ajout du nouveau MNT   
              vectMNT.addElement(mnt);
              vectListe.addElement(fileName);
              listeMNT.setListData(vectListe);
              nbMNT++;
              // Mise � jour des dimensions et du graphique des MNT
          updateDimension();
          panelMNT.addRectangle(new Rectangle2D.Float(mnt.getX1(),mnt.getY1(),mnt.getX2()-mnt.getX1(),mnt.getY2()-mnt.getY1()));    
         
            }catch (FileNotFoundException ex){
                    MsgInfo msg=new MsgInfo(parent,MsgInfo.INFO,MsgInfo.OK,"\""+fileName+"\":\n"+ResourceManager.get("fileNotFound"));
            }
            catch (IOException ex){
                    MsgInfo msg=new MsgInfo(parent,MsgInfo.INFO,MsgInfo.OK,"\""+fileName+"\":\n"+ResourceManager.get("readError")+"\n"+ex.getMessage());
            }
       
        }
           
    }
 
  /**
   * Supprime le MNT selectionn� dans la liste
   */
  public void removeMNT(){
    int ind = listeMNT.getSelectedIndex();
    if(ind!=-1){
      vectMNT.remove(ind);
      vectListe.remove(ind);
      panelMNT.removeRectangle(ind);
      listeMNT.setListData(vectListe);
      nbMNT--;
      updateDimension();
    }
  }
 
 
  /**
   * Lance la g�n�ration du nouveau MNT.
   * Dans un premier temps teste toutes les donn�es et:
   * - affecte des valeurs par d�faut quand aucune donn�e n'est pass�e
   * - envoie un message d'erreur quand des donn�es ne sont pas valides.
   */
  public void genererMNT(){
   
    // pour la saisie des pas d'�chantillonnage
    boolean fail=false;
    MNT currentMNT;
   
    if(nbMNT<=0){
      MsgInfo msg=new MsgInfo(parent,MsgInfo.WARN,MsgInfo.OK,ResourceManager.get("selecMNTError"));
    } else {
      // R�cup�ration des valeurs des pas d'�chantillonnage
      // Si le champ est laiss� vide, on laisse le pas � 0 et
      // on lui donnera la valeur du pas du premier MNT
      currentMNT = (MNT) vectMNT.elementAt(0);
      float pasx = currentMNT.getPasX();
      float pasy = currentMNT.getPasY();
     
      try{
        // Gestion des param�tres du MNT:
        // PAR DEFAUT:
        // les pas sont ceux du premier MNT de la liste
        // les dimensions sont les dimensions maximales possibles (actualis�es au furet � mesure)
        // PASX
        if(echXTextField.getText().equals("")){
          // aucune valeur n'a �t� donn�e pour pasX,
          // On donne celle du premier MNT:
          pasX = pasx;
          System.out.println(ResourceManager.get("defPX")+": "+pasX);
        } else {
          if(modeSelect==PAS_ECHANTILLONNAGE){
            pasX=Float.parseFloat(echXTextField.getText());
            if(pasX<=0){
              MsgInfo msg=new MsgInfo(parent,MsgInfo.WARN,MsgInfo.OK,ResourceManager.get("pXErr"));
               fail=true;
            
          } else {
            nbEchX=Integer.parseInt(echXTextField.getText());
            if(nbEchX<=0){
              MsgInfo msg=new MsgInfo(parent,MsgInfo.WARN,MsgInfo.OK,ResourceManager.get("nXErr"));
               fail=true;
             }
           } 
        }
       
        // PASY
        if(echYTextField.getText().equals("")){
          // aucune valeur n'a �t� donn�e pour pasY,
          // On donne celle du premier MNT:
          pasY = pasy;
          System.out.println(ResourceManager.get("defPY")+": "+pasY);
        } else {
          if(modeSelect==PAS_ECHANTILLONNAGE){
            pasY=Float.parseFloat(echYTextField.getText());
            if(pasY<=0){
              MsgInfo msg=new MsgInfo(parent,MsgInfo.WARN,MsgInfo.OK,ResourceManager.get("pXErr"));
               fail=true
            }
          } else {
            nbEchY=Integer.parseInt(echYTextField.getText());
            if(nbEchY<=0){
              MsgInfo msg=new MsgInfo(parent,MsgInfo.WARN,MsgInfo.OK,ResourceManager.get("nXErr"));         fail=true;
             }
           } 
        }
       
        // X0
        if(xoTextField.getText().equals("")){
          // aucune valeur n'a �t� donn�e pour X0,
          System.out.println(ResourceManager.get("defXo")+": "+x0);
        } else {
          x0=Float.parseFloat(xoTextField.getText());
        }
       
        // Y0
        if(yoTextField.getText().equals("")){
          // aucune valeur n'a �t� donn�e pour Y0;
          System.out.println(ResourceManager.get("defYo")+": "+y0);
        } else {
          y0=Float.parseFloat(yoTextField.getText());
        }
       
        // XM
        if(xmTextField.getText().equals("")){
          // aucune valeur n'a �t� donn�e pour Xm,
          System.out.println(ResourceManager.get("defXm")+": "+xm);
        } else {
          xm=Float.parseFloat(xmTextField.getText());
        }
       
        // YM
        if(ymTextField.getText().equals("")){
          // aucune valeur n'a �t� donn�e pour Ym,
          System.out.println(ResourceManager.get("defYm")+": "+ym);
        } else {
          ym=Float.parseFloat(ymTextField.getText());
        }
       
        if(x0>=xm){
          MsgInfo msg=new MsgInfo(parent,MsgInfo.WARN,MsgInfo.OK,ResourceManager.get("xDimErr"));
           fail=true
        }
        if(y0>=ym){
          MsgInfo msg=new MsgInfo(parent,MsgInfo.WARN,MsgInfo.OK,ResourceManager.get("yDimErr"));         fail=true
        }
      } catch (Exception nfe){
          // Erreur(s) dans les valeurs entr�es
          MsgInfo msg=new MsgInfo(parent,MsgInfo.WARN,MsgInfo.OK,ResourceManager.get("dataMNTErr"));
          fail=true;
      }
       
     
      // Tests sur les donn�es:
      if(fail){
        System.out.println(ResourceManager.get("cancelGen"));   
        // annulation des dimensions entr�es
        updateDimension();
      }else {
           
        // Creation du nouveau MNT
        int w,h;
        if(modeSelect==PAS_ECHANTILLONNAGE){
          // Les donn�e d'�chantillonnage sont les pas d'�chantillonnage
          w = (int) ((xm-x0)/pasX);
          h = (int) ((ym-y0)/pasY);
        } else {
          // Les donn�es d'�chantillonnage sont le nombre d'�chantillons
          w = nbEchX;
          h = nbEchY;
          pasX = (xm-x0)/nbEchX;
          pasY = (ym-y0)/nbEchY;
        }
       
        mntGen = new MNTGenerateur(w, h, x0, y0, pasX, pasY, vectMNT);
        MNT newMNT = mntGen.genererMNT();
       
        System.out.println("\n"+ResourceManager.get("nouvMNT")+" : ("+newMNT.getX1()+","+newMNT.getY1()+")->("+newMNT.getX2()+","+newMNT.getY2()+") ["+newMNT.getXMax()+"x"+newMNT.getYMax()+"]  pasX="+newMNT.getPasX()+" pasY="+newMNT.getPasY()+"");
       
        // creation du document
        DocumentMNTContainer cont=documentMNTContainer.nextDocumentMNTContainer();
              DocumentMNT dmnt=new DocumentMNT(cont);
              dmnt.setMNT(newMNT);
              dmnt.setFileName(ResourceManager.get("noTitle"));
              cont.addDocument(dmnt);
       
        setVisible(false);
          dispose();
        }
    }   
  }
 
  /**
   * Action annul�e: sortie du dialogue
   */
  public void annuler(){
    setVisible(false);
        dispose();
  }
   
 
  /**
   * DocumentListener pour �couter les changements dans les TextFields
   */
  protected class MyDocumentListener2 implements DocumentListener{
      public void changedUpdate(DocumentEvent e){
          run();
        }
        public void insertUpdate(DocumentEvent e){
            run();
        }
        public void removeUpdate(DocumentEvent e){
           run();
        }
        public void run(){}
    } 
 
}


/**
* Un panel adapt� permettant d'afficher des rectangles
* correpondant aux MNT charg�s
* Affiche d'une couleur sp�ciale le MNT s�l�ctionn�,
* et d'une autre le rectangle correspondant aux dimensions choisies
*/
class JPanelMNT extends JPanel {
 
  private Vector rectangles;  // Les rectangles correspondant aux MNT
    float w,h;     // taille de l'ensemble des rectangles
    float xm,ym;     // minima des coordonn�es
  JDialog parent; // le Dialogue parent
  double zoom;  // indice de zoom
  int selection;  // indice du MNT selectionn�
  private Rectangle2D.Float selectedRegion;  // la zone correpondant aux dimensions sp�cifi�es
 
  /**
   * Constructeur
   */
  public JPanelMNT(JDialog d){
    super();
    parent = d;
    rectangles = new Vector();
    setBackground(Color.white)// marche pas...
    w=0;
    h=0;
    xm=Integer.MAX_VALUE;
    ym=Integer.MAX_VALUE;
    zoom=1;
    selection=-1;
  }
 
  /**
   * Ajoute un rectangle et remet � jour les dimensions de l'ensemble
   */
  public void addRectangle(Rectangle2D.Float r){
 
    rectangles.addElement(r);
   
    if(r.width+r.x>w)
      w=r.width+r.x;
    if(r.height+r.y>h)
      h=r.height+r.y;
    if(r.x<xm)
      xm=r.x;
    if(r.y<ym)
      ym=r.y;
    //System.out.println("x:"+r.x+" y:"+r.y+" w:"+r.width+" h:"+r.height);
   
    setPreferredSize(new Dimension((int)((w-xm)*zoom)+20, (int)((h-ym)*zoom)+20));
    revalidate();
    repaint();
  }
 
  /**
   * Supprime un rectangle et remet � jour les dimensions
   */
  public void removeRectangle(int i){
   
    rectangles.remove(i);
   
    w = Integer.MIN_VALUE;
    h = Integer.MIN_VALUE;
    xm = Integer.MAX_VALUE;
    ym = Integer.MAX_VALUE;
    for(int j = 0; j< rectangles.size(); j++){
      Rectangle2D.Float r = (Rectangle2D.Float) rectangles.elementAt(j);
      if(r.width+r.x>w)
        w=r.width+r.x;
      if(r.height+r.y>h)
        h=r.height+r.y;  
      if(r.x<xm)
        xm=r.x;
      if(r.y<ym)
        ym=r.y;       
    }     
   
    repaint();
  }
 
  /**
   * Multiplie par 2 le zoom et redimensionne
   */
  public void zoomin(){
    zoom*=2;
    setPreferredSize(new Dimension((int)((w-xm)*zoom)+20, (int)((h-ym)*zoom)+20));
    revalidate();
    repaint();
  }
 
  /**
   * Divise par 2 le zoom et redimensionne
   */
  public void zoomout(){
    zoom/=2;
    setPreferredSize(new Dimension((int)((w-xm)*zoom)+20, (int)((h-ym)*zoom)+20));
    revalidate();
    repaint();
  }   

  /**
   * Sp�cifie le rectangle selectionn�
   * @param s l'indice du rectangle ,selectionn�
   */
  public void setSelected(int s){
    selection=s; 
  }
 
  /**
   * Sp�cifie la zone selectionn�e pour la g�n�ration
   * @param x1 la coordonn�e x du coin superieur gauche
   * @param y1 la coordonn�e y du coin superieur gauche
   * @param x2 la coordonn�e x du coin inferieur droit
   * @param y2 la coordonn�e y du coin inferieur droit
   */
  public void setSelectedRegion(float x1,float y1,float x2,float y2){  
    selectedRegion = new Rectangle2D.Float(x1,y1,x2-x1,y2-y1);
  }
 
 
  /**
   * Redessine le panel
   * Les rectangles sont trac�s en noir
   * Le rectangle selectionn� est trac� en rouge
   * La zone selectionn�e est trac�e en vert
   */
  public void paint(Graphics g){
    int w=0;
    int h=0;
    g.clearRect(0,0,getWidth(),getHeight());
    g.setColor(Color.black);
   
    // Les rectangles
    Rectangle2D.Float r;
    for(int i = 0; i < rectangles.size(); i++){
      r = (Rectangle2D.Float) rectangles.elementAt(i);
      if(i!=selection){
        //g.drawRect((int)((r.x-xm)*zoom)+10,(int)((r.y-ym)*zoom)+10,(int)(r.width*zoom),(int)(r.height*zoom)); 
        g.drawRect((int)((r.x-xm)*zoom)+10,(int)(getHeight()+(-( r.y-ym) - r.height)*zoom-10),(int)(r.width*zoom),(int)(r.height*zoom))
      }
    }
   
    // Le rectangle selectionn�
    if(selection!=-1){
      r = (Rectangle2D.Float) rectangles.elementAt(selection);
      g.setColor(new Color(210,80,15));
      //g.drawRect((int)((r.x-xm)*zoom)+10,(int)((r.y-ym)*zoom)+10,(int)(r.width*zoom),(int)(r.height*zoom)); 
      g.drawRect((int)((r.x-xm)*zoom)+10,(int)(getHeight()+(-(r.y-ym)-r.height)*zoom-10),(int)(r.width*zoom),(int)(r.height*zoom))
    }
   
    // La zone selectionn�e
    if (selectedRegion!=null){
      g.setColor(new Color(50,170,120));
      //g.drawRect((int)((selectedRegion.x-xm)*zoom)+10,(int)((selectedRegion.y-ym)*zoom)+10,(int)(selectedRegion.width*zoom),(int)(selectedRegion.height*zoom)); 
      g.drawRect((int)((selectedRegion.x-xm)*zoom)+10,(int)(getHeight()+( -(selectedRegion.y-ym)-selectedRegion.height)*zoom-10),(int)(selectedRegion.width*zoom),(int)(selectedRegion.height*zoom))
   
    }
  }
 
 
 
 
 
TOP

Related Classes of kartoMNT.JPanelMNT

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.