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