Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: org/fudaa/fudaa/reflux/Symbole.java


1   package org.fudaa.fudaa.reflux;
2   
3   import java.awt.*;
4   import java.awt.geom.*;
5   import javax.swing.*;
6   
7   /**
8    * Un symbole.
9    * <p>
10   * Un symbole possède une ancre (point du symbole en correspondance avec la
11   * position de tracé du symbole) et une rotation en degrés suivant Z.
12   * <p>
13   * <ul>
14   *   <li>Le symbole est défini dans un repère xOy, X étant orienté
15   *       horizontalement vers la gauche, Y verticalement vers le bas, et limité
16   *       à l'intervalle [0,1] suivant X et Y.</li>
17   *   <li>Les coordonnées de l'ancre sont définies dans ce même repère limité.</li>
18   *   <li>La rotation Z est orientée dans le sens trigonométrique, une rotation
19   *       d'angle 0 correspondant à un vecteur (1,0) dans le repère de définition
20   *       du symbole.</li>
21   * </ul>
22   *
23   * @version      $Revision: 1.1 $ $Date: 2002/12/23 11:34:17 $ by $Author: marchand $
24   * @author       Bertrand Marchand
25   */
26  public final class Symbole {
27  
28    /** Symbole carré */
29    public static final int CARRE            =0;
30    /** Symbole cercle */
31    public static final int CERCLE           =1;
32    /** Symbole losange */
33    public static final int LOSANGE          =2;
34    /** Symbole flèche */
35    public static final int FLECHE           =3;
36    /** Symbole flèche liée */
37    public static final int FLECHE_LIEE      =4;
38    /** Symbole flèche diffractée */
39    public static final int FLECHE_DIFFRACTEE=5;
40    /** Symbole triangle */
41    public static final int TRIANGLE         =6;
42    /** Symbole carré plein */
43    public static final int CARRE_PLEIN      =7;
44    /** Symbole cercle plein */
45    public static final int CERCLE_PLEIN     =8;
46    /** Symbole losange plein */
47    public static final int LOSANGE_PLEIN    =9;
48    /** Symbole traingle plein */
49    public static final int TRIANGLE_PLEIN   =10;
50  
51    /** Rotation suivant Z. 0 par défaut. */
52    public double    rotationZ=0;
53    /** Trace du symbole. Carré par défaut */
54    public Shape     trace=null;
55    /** Coordonnée suivant X de l'ancre du symbole. */
56    public double    xAncre=0;
57    /** Coordonnée suivant Y de l'ancre du symbole. */
58    public double    yAncre=0;
59    /** Symbole plein ou non */
60    public boolean   plein=false;
61  
62    /**
63     * Création d'un symbole par défaut
64     */
65    public Symbole() {
66      this(CARRE,0.);
67    }
68  
69    /**
70     * Création d'un symbole suivant un trace utilisateur
71     */
72    public Symbole(Shape _trace, double _xAncre, double _yAncre, double _rotZ)  {
73      init(_trace, _xAncre, _yAncre, _rotZ);
74    }
75  
76    /**
77     * Création d'un symbole suivant un type prédéfini.
78     * @param _type     Type de symbole (CARRE, CERCLE, LOSANGE, etc.).
79     * @param _position Point 3D d'affichage du symbole.
80     * @param _rotZ     Rotation en degrés du symbole par rapport à l'axe Z.
81     */
82    public Symbole(int _type, double _rotZ) {
83      Shape  trace;
84      double xAncre;
85      double yAncre;
86  
87      if (_type==CARRE || _type==CARRE_PLEIN) {
88        Rectangle2D r=new Rectangle2D.Double(0.146,0.146,0.707,0.707);
89        xAncre=0.5;
90        yAncre=0.5;
91        trace=r;
92  
93        plein=_type==CARRE_PLEIN;
94      }
95  
96      else if (_type==CERCLE || _type==CERCLE_PLEIN) {
97        Ellipse2D e=new Ellipse2D.Double(0.,0.,1.,1.);
98        xAncre=0.5;
99        yAncre=0.5;
100       trace=e;
101 
102       plein=_type==CERCLE_PLEIN;
103     }
104 
105     else if (_type==LOSANGE || _type==LOSANGE_PLEIN) {
106       GeneralPath gp=new GeneralPath();
107       gp.moveTo(0.5f,0.0f);
108       gp.lineTo(1.0f,0.5f);
109       gp.lineTo(0.5f,1.0f);
110       gp.lineTo(0.0f,0.5f);
111       gp.closePath();
112       xAncre=0.5;
113       yAncre=0.5;
114       trace=gp;
115 
116       plein=_type==LOSANGE_PLEIN;
117     }
118 
119     else if (_type==FLECHE) {
120       GeneralPath gp=new GeneralPath();
121       gp.moveTo((float)(7.5/15.),(float)(2.0/15.));
122       gp.lineTo((float)(7.5/15.),(float)(15.0/15.));
123       gp.moveTo((float)(3.5/15.),(float)(11.0/15.));
124       gp.lineTo((float)(7.5/15.),(float)(15.0/15.));
125       gp.lineTo((float)(11.5/15.),(float)(11.0/15.));
126       xAncre=7.5/15.;
127       yAncre=2./15.;
128       trace=gp;
129     }
130 
131     else if (_type==FLECHE_LIEE) {
132       GeneralPath gp=new GeneralPath();
133       gp.moveTo((float)(5.5/15.),(float)(0.0/15.));
134       gp.lineTo((float)(9.5/15.),(float)(0.0/15.));
135       gp.lineTo((float)(9.5/15.),(float)(4.0/15.));
136       gp.lineTo((float)(5.5/15.),(float)(4.0/15.));
137       gp.closePath();
138       gp.moveTo((float)(7.5/15.),(float)(4.0/15.));
139       gp.lineTo((float)(7.5/15.),(float)(15.0/15.));
140       gp.moveTo((float)(3.5/15.),(float)(11.0/15.));
141       gp.lineTo((float)(7.5/15.),(float)(15.0/15.));
142       gp.lineTo((float)(11.5/15.),(float)(11.0/15.));
143       xAncre=7.5/15.;
144       yAncre=2./15.;
145       trace=gp;
146     }
147 
148     else if (_type==FLECHE_DIFFRACTEE) {
149       GeneralPath gp=new GeneralPath();
150       gp.moveTo((float)(7.5/15.),(float)(2.0/15.));
151       gp.lineTo((float)(7.5/15.),(float)(15.0/15.));
152       gp.moveTo((float)(3.5/15.),(float)(11.0/15.));
153       gp.lineTo((float)(7.5/15.),(float)(15.0/15.));
154       gp.lineTo((float)(11.5/15.),(float)(11.0/15.));
155       gp.moveTo((float)(3.5/15.),(float)(5.0/15.));
156       gp.lineTo((float)(5.5/15.),(float)(7.0/15.));
157       gp.lineTo((float)(9.5/15.),(float)(7.0/15.));
158       gp.lineTo((float)(11.5/15.),(float)(5.0/15.));
159       gp.moveTo((float)(5.5/15.),(float)(4.0/15.));
160       gp.lineTo((float)(6.5/15.),(float)(5.0/15.));
161       gp.lineTo((float)(8.5/15.),(float)(5.0/15.));
162       gp.lineTo((float)(9.5/15.),(float)(4.0/15.));
163       xAncre=7.5/15.;
164       yAncre=2./15.;
165       trace=gp;
166     }
167 
168     else {
169       GeneralPath gp=new GeneralPath();
170       gp.moveTo(0.0667f,0.25f);
171       gp.lineTo(0.933f,0.25f);
172       gp.lineTo(0.5f,1.f);
173       gp.closePath();
174       xAncre=0.5;
175       yAncre=0.5;
176       trace=gp;
177 
178       plein=_type==TRIANGLE_PLEIN;
179     }
180 
181     init(trace, xAncre, yAncre, _rotZ);
182   }
183 
184   private final void init(Shape _trace, double _xAncre, double _yAncre, double _rotZ) {
185     trace        =_trace;
186     xAncre       =_xAncre;
187     yAncre       =_yAncre;
188     rotationZ    =_rotZ;
189   }
190 }
191