Package ds.moteur.route

Source Code of ds.moteur.route.Section

package ds.moteur.route;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import ds.io.Sauvegardable;
import ds.moteur.geometrie.Angle3D;
import ds.moteur.geometrie.Point;
import ds.moteur.geometrie.Polygone;
import ds.moteur.route.cc.CourbeConduite;
import ds.moteur.route.cc.PointEntree;
import ds.moteur.route.cc.PointSortie;

/**Cette classe repr�sente une section de route.
*
* @author Yannick BISIAUX
*
*/
public class Section implements Sauvegardable{

  private boolean absolu;
  private Point positionAbsolue;
  private Angle3D angle;
  private List<CourbeConduite> courbesConduites;
  private List<PointEntree> entrees;
  private List<PointSortie> sorties;
  private List<Section> connexions;
  private Polygone frontiere;
 
  public Section(){
    this(new Point(), new Angle3D());
  }
 
  public Section(Point position, Angle3D angle){
    this.positionAbsolue = position;
    this.angle = angle;
    this.courbesConduites = new ArrayList<CourbeConduite>();
    this.entrees = new ArrayList<PointEntree>();
    this.sorties = new ArrayList<PointSortie>();
    this.connexions = new ArrayList<Section>();
    //this.frontiere = new ArrayList<Point>();
    absolu = false;
  }
 
  public Point getPositionAbsolue() { return positionAbsolue;  }
 
  public Angle3D getAngle(){ return this.angle; }

  protected void addCourbeConduite(CourbeConduite courbe){ this.courbesConduites.add(courbe)}
 
  public List<CourbeConduite> getCourbesConduites(){ return this.courbesConduites; }
 
  protected void addEntree(PointEntree entree){ this.entrees.add(entree)}

  public List<PointEntree> getEntrees() { return entrees;  }
 
  protected void addSortie(PointSortie sortie){ this.sorties.add(sortie)}

  public List<PointSortie> getSorties() { return sorties; }
 
  public void addConnexion(Section connexion){ this.connexions.add(connexion); }

  public List<Section> getConnexions() { return connexions; }
 
  protected void creerFrontiere(List<Point> sommets){
    this.frontiere = Polygone.createPolygone(sommets);
  }
 
  //protected void addPointFrontiere(Point point){ this.frontiere.add(point); }

  public Polygone getFrontiere() { return frontiere; }
 
  /**Translate les �l�ments dans leur position absolue si n�cessaire.
   *
   */
  public void rendreAbsolu(){
    if (!absolu){
      for (PointEntree entree : entrees){
        entree.transformer(positionAbsolue, angle.theta);
      }
      for (PointSortie sortie : sorties){
        sortie.transformer(positionAbsolue, angle.theta);
      }
      for (Point point : frontiere.getSommets()){
        point.transformer(positionAbsolue, angle.theta);
      }
      for (CourbeConduite cc : courbesConduites){
        cc.rendreAbsoluPI();
      }
    }
    absolu = true;
  }
 
  public boolean isInside(Point p){
    return false;
  }

  public void load(DataInputStream dis) throws IOException {
    //Reconstitution de la position et de l'orientation
    positionAbsolue.load(dis);
    angle.load(dis);
   
    //Reconstitution des points d'entr�e
    int nEntree = dis.readShort();
    for(int i=0; i<nEntree; i++){
      PointEntree entree = new PointEntree();
      entree.load(dis);
      this.addEntree(entree);
    }
   
    //Reconstitution des points de sorties
    int nSortie = dis.readShort();
    for(int i=0; i<nSortie; i++){
      PointSortie sortie = new PointSortie();
      sortie.load(dis);
      this.addSortie(sortie);
    }
   
    //Reconstitution des CC
    int nCC = dis.readShort();
    for(int i=0; i<nCC; i++){
      int indexEntree = dis.readShort();
      int indexSortie = dis.readShort();
      CourbeConduite cc = new CourbeConduite(this, entrees.get(indexEntree), sorties.get(indexSortie));
      cc.load(dis);
      this.addCourbeConduite(cc);
    }
   
    //Reconstitution de la frontiere
    //TODO passer le code dans Polygone
    int nFrontiere = dis.readShort();
    List<Point> sommets = new ArrayList<Point>();
    for(int i=0; i<nFrontiere; i++){
      Point point = new Point();
      point.load(dis);
      sommets.add(point);
    }
    frontiere = Polygone.createPolygone(sommets);
  }

  public void save(DataOutputStream dos) throws IOException {
    //Sauvegarde de la position et de l'orientation
    positionAbsolue.save(dos);
    angle.save(dos);
   
    //Sauvegarde des points d'entr�e
    dos.writeShort(entrees.size());
    for (PointEntree point : entrees){
      point.save(dos);
    }
   
    //Sauvegarde des points de sorties
    dos.writeShort(sorties.size());
    for (PointSortie point : sorties){
      point.save(dos);
    }
   
    //Sauvegarde des CC
    dos.writeShort(courbesConduites.size());
    for (CourbeConduite cc : courbesConduites){
      int indexEntree = entrees.indexOf(cc.getEntree());
      dos.writeShort(indexEntree);
      int indexSortie = sorties.indexOf(cc.getSortie());
      dos.writeShort(indexSortie);
      cc.save(dos);
    }
   
    //Sauvegarde de la frontiere
    //TODO passer le code dans Polygone
    dos.writeShort(frontiere.getSommets().size());
    for (Point point : frontiere.getSommets()){
      point.save(dos);
    }
  }
}
TOP

Related Classes of ds.moteur.route.Section

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.