All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.fudaa.ebli.graphe.Repartition Maven / Gradle / Ivy

The newest version!
/*
 * @creation     1999-12-22
 * @modification $Date: 2006-09-19 14:55:45 $
 * @license      GNU General Public License 2
 * @copyright    (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne
 * @mail         [email protected]
 */
package org.fudaa.ebli.graphe;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.util.Vector;

/**
 * Repartition.
 *
 * @version $Revision: 1.11 $ $Date: 2006-09-19 14:55:45 $ by $Author: deniger $
 * @author Axel von Arnim
 */
public class Repartition implements GrapheComponent {
  public String titre_;
  public String type_;
  public String trace_;
  public boolean marqueurs_;
  public Aspect aspect_;
  public Vector valeurs_;
  public boolean visible_;

  public Repartition() {
    titre_ = "";
    type_ = "courbe";
    trace_ = "lineaire";
    marqueurs_ = true;
    aspect_ = new Aspect();
    aspect_.contour_ = Color.red;
    valeurs_ = new Vector(0, 1);
    visible_ = true;
  }

  public static Repartition parse(final Lecteur _lin) {
    final Repartition r = new Repartition();
    String t = _lin.get();
    if (t.equals("repartition")) {
      t = _lin.get();
    }
    if (!t.equals("{")) {
      System.err.println("Erreur de syntaxe: " + t);
    }
    t = _lin.get();
    while (!t.equals("") && !t.equals("}")) {
      if (t.equals("titre")) {
        r.titre_ = _lin.get();
      } else if (t.equals("type")) {
        r.type_ = _lin.get();
      } else if (t.equals("trace")) {
        r.trace_ = _lin.get();
      } else if (t.equals("marqueurs")) {
        r.marqueurs_ = _lin.get().equals("oui");
      } else if (t.equals("aspect")) {
        r.aspect_ = Aspect.parse(_lin);
      } else if (t.equals("valeurs")) {
        r.valeurs_ = Valeur.parse(_lin);
      } else if (t.equals("visible")) {
        r.visible_ = _lin.get().equals("oui");
      } else {
        System.err.println("Erreur de syntaxe: " + t);
      }
      t = _lin.get();
    }
    return r;
  }

  @Override
  public void dessine(final Graphics2D _g, final int _x, final int _y, final int _w, final int _h, final Axe _ax, final Axe _ay, final boolean _b) {
    if (!visible_) {
      return;
    }
    double angleP = 0;
    final Rectangle rect = new Rectangle(_x, _y, Math.min(_w, _h), Math.min(_w, _h));
    _g.setColor(_b ? aspect_.contour_ : Color.gray);
    double total = 0.;
    for (int i = 0; i < valeurs_.size(); i++) {
      total += ((Valeur) valeurs_.get(i)).s_;
    }
    for (int i = 0; i < valeurs_.size(); i++) {
      final Valeur o = (Valeur) valeurs_.get(i);
      if (type_.equals("camembert")) {
        final Aspect a = o.aspect_;
        final double angleE = o.s_ / total * 360;
        System.err.println((int) angleP + " -> " + ((int) angleE + (int) angleP));
        if ((a != null) && (a.surface_ != null)) {
          _g.setColor(a.surface_);
          _g.fillArc(rect.x, rect.y, rect.width, rect.height, (int) angleP, (int) angleE + 1);
        } else if (aspect_.surface_ != null) {
          _g.setColor(aspect_.surface_);
          _g.fillArc(rect.x, rect.y, rect.width, rect.height, (int) angleP, (int) angleE + 1);
        }
        _g.setColor(_b ? (a != null ? a.contour_ : aspect_.contour_) : Color.gray);
        _g.drawArc(rect.x, rect.y, rect.width, rect.height, (int) angleP, (int) angleE + 1);
        angleP += angleE;
      }
    }
  }

  /**
   *
   */
  @Override
  public Color getAspectContour() {
    return aspect_.contour_;
  }

  /**
   *
   */
  @Override
  public Color getAspectSurface() {
    return aspect_.surface_;
  }

  /**
   *
   */
  @Override
  public Color getAspectTexte() {
    return aspect_.texte_;
  }

  /**
   *
   */
  @Override
  public String getTitre() {
    return titre_;
  }

  /**
   *
   */
  @Override
  public boolean isVisible() {
    return visible_;
  }

  public final boolean isCourbe() {
    return false;
  }

  /**
   *
   */
  @Override
  public int getAxeId() {
    return -1;
  }

  /**
   *
   */
  @Override
  public final boolean isLegendAvailable() {
    return true;
  }

  @Override
  public boolean setVisible(final boolean _r) {
    if (visible_ != _r) {
      visible_ = _r;
      return true;
    }
    return false;
  }

  @Override
  public boolean setAspectContour(final Color _c) {
    if (_c == null) {
      return false;
    }
    final Color init = aspect_.contour_;
    if ((init == _c) || (_c.equals(init))) {
      return false;
    }
    aspect_.contour_ = _c;
    return true;
  }

  @Override
  public boolean getMinMax(final double[] _r) {
    final int n = valeurs_.size() - 1;
    if (n < 0) {
      return false;
    }
    Valeur v = (Valeur) valeurs_.get(n);
    _r[0] = v.s_;
    _r[1] = v.s_;
    _r[2] = v.v_;
    _r[3] = v.v_;
    for (int i = n - 1; i >= 0; i--) {
      v = (Valeur) valeurs_.get(i);
      if (v.s_ < _r[0]) {
        _r[0] = v.s_;
      }
      if (v.s_ > _r[1]) {
        _r[1] = v.s_;
      }
      if (v.v_ < _r[2]) {
        _r[2] = v.v_;
      }
      if (v.v_ > _r[3]) {
        _r[3] = v.v_;
      }
    }
    return true;
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy