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

Quick Search    Search Deep

Source code: com/memoire/dja/DjaBezierArrow.java


1   /**
2    * @modification $Date: 2001/12/03 16:28:07 $
3    * @statut       unstable
4    * @file         DjaBezierArrow.java
5    * @version      0.36
6    * @author       Guillaume Desnoix
7    * @email        guillaume@desnoix.com
8    * @license      GNU General Public License 2 (GPL2)
9    * @copyright    1998-2001 Guillaume Desnoix
10   */
11  
12  package com.memoire.dja;
13  
14  import com.memoire.fu.*;
15  import com.memoire.dnd.*;
16  import com.memoire.bu.*;
17  import com.memoire.dja.*;
18  import com.memoire.mst.*;
19  
20  
21  import java.awt.*;
22  import java.awt.event.*;
23  import java.util.*;
24  import javax.swing.*;
25  import javax.swing.border.*;
26  
27  public class DjaBezierArrow
28         extends DjaLink
29  {
30    private int xr0,yr0,xr1,yr1;
31    
32    public DjaBezierArrow(String _text)
33    {
34      super();
35  
36      xr0=xbegin_;
37      yr0=ybegin_;
38      xr1=xend_;
39      yr1=yend_;
40  
41      putProperty("x2",""+(xbegin_+3*deltaX));
42      putProperty("y2",""+ybegin_);
43      putProperty("x3",""+(xend_-3*deltaX));
44      putProperty("y3",""+yend_);
45  
46      if(_text!=null) addText(_text);
47    }
48  
49    public DjaBezierArrow()
50    {
51      this(null);
52    }
53  
54    public void setX(int _x)
55    {
56      int dx=_x-getX();
57  
58      if(begin_==null)
59      {
60        xbegin_+=dx;
61        int x2=Integer.parseInt(getProperty("x2"));
62        putProperty("x2",""+(x2+dx));
63      }
64  
65      if(end_==null)
66      {
67        xend_+=dx;
68        int x3=Integer.parseInt(getProperty("x3"));
69        putProperty("x3",""+(x3+dx));
70      }
71  
72      updateXYO();
73    }
74  
75    public void setY(int _y)
76    {
77      int dy=_y-getY();
78  
79      if(begin_==null)
80      {
81        ybegin_+=dy;
82        int y2=Integer.parseInt(getProperty("y2"));
83        putProperty("y2",""+(y2+dy));
84      }
85  
86      if(end_!=null)
87      {
88        yend_  +=dy;
89        int y3=Integer.parseInt(getProperty("y3"));
90        putProperty("y3",""+(y3+dy));
91      }
92  
93      updateXYO();  
94    }
95  
96    public void setWidth(int _w)
97    {
98      int w=getWidth();
99      if(w!=0)
100     {
101       int x=getX();
102       xbegin_=x+(xbegin_-x)*_w/w;
103       xend_  =x+(xend_  -x)*_w/w;
104 
105       /*
106       int x2=Integer.parseInt(getProperty("x2"));
107       int x3=Integer.parseInt(getProperty("x3"));
108       putProperty("x2",""+(x+(x2-x)*_w/w));
109       putProperty("x3",""+(x+(x3-x)*_w/w));
110       */
111 
112       updateXYO();
113     }
114   }
115 
116   public void setHeight(int _h)
117   {
118     int h=getHeight();
119     if(h!=0)
120     {
121       int y=getY();
122       ybegin_=y+(ybegin_-y)*_h/h;
123       yend_  =y+(yend_  -y)*_h/h;
124 
125       /*
126       int y2=Integer.parseInt(getProperty("y2"));
127       int y3=Integer.parseInt(getProperty("y3"));
128       putProperty("y2",""+(y+(y2-y)*_h/h));
129       putProperty("y3",""+(y+(y3-y)*_h/h));
130       */
131 
132       updateXYO();
133     }
134   }
135 
136   public void setPoints(Vector _v)
137   {
138     super.setPoints(_v);
139 
140     // System.out.println("SET-POINTS: "+_v.size());
141 
142     if(_v.size()!=4) return;
143 
144     Point p2=(Point)_v.elementAt(1);
145     Point p3=(Point)_v.elementAt(2);
146 
147     putProperty("x2",""+p2.x);
148     putProperty("y2",""+p2.y);
149     putProperty("x3",""+p3.x);
150     putProperty("y3",""+p3.y);
151   }
152 
153   private static class PC extends DjaControl
154   {
155       public PC(DjaObject _f,int _p,int _o,int _x,int _y)
156       {
157   super(_f,_p,_o,_x,_y);
158       }
159 
160       public void draggedTo(int _x, int _y)
161       {
162     DjaObject p=getParent();
163     int n=2+getP();
164     p.putProperty("x"+n,""+_x);
165     p.putProperty("y"+n,""+_y);
166       }
167   }
168 
169   public DjaControl[] getControls()
170   {
171     int x2=Integer.parseInt(getProperty("x2"));
172     int y2=Integer.parseInt(getProperty("y2"));
173     int x3=Integer.parseInt(getProperty("x3"));
174     int y3=Integer.parseInt(getProperty("y3"));
175 
176     DjaControl[] r=new DjaControl[2];
177     r[0]=new PC(this,0,BOTH,x2,y2);
178     r[1]=new PC(this,1,BOTH,x3,y3);
179     return r;
180   }
181 
182   public boolean contains(int _x, int _y)
183   {
184     int x2=Integer.parseInt(getProperty("x2"));
185     int y2=Integer.parseInt(getProperty("y2"));
186     int x3=Integer.parseInt(getProperty("x3"));
187     int y3=Integer.parseInt(getProperty("y3"));
188 
189     double c=Math.PI;
190     int vx0=(int)((x2-xr0)*c);
191     int vy0=(int)((y2-yr0)*c);
192     int vx1=(int)((xr1-x3)*c);
193     int vy1=(int)((yr1-y3)*c);
194 
195     Polygon p=DjaMatrixHermite.arc2polyline(xr0,yr0,xr1,yr1,vx0,vy0,vx1,vy1);
196     boolean r=false;
197     for(int i=0; i<p.npoints-1; i++)
198       r|=DjaLib.close(p.xpoints[i],p.ypoints[i],p.xpoints[i+1],p.ypoints[i+1],_x,_y);
199 
200     return r;
201   }
202 
203   public DjaAnchor[] getAnchors()
204   {
205     DjaAnchor[] r=new DjaAnchor[1];
206     Point       m=getMiddle();
207     r[0]=new DjaAnchor(this,0,ANY,m.x,m.y);
208     return r;
209   }
210 
211   public Point getMiddle()
212   {
213     int x2=Integer.parseInt(getProperty("x2"));
214     int y2=Integer.parseInt(getProperty("y2"));
215     int x3=Integer.parseInt(getProperty("x3"));
216     int y3=Integer.parseInt(getProperty("y3"));
217 
218     double c=Math.PI;
219     int vx0=(int)((x2-xr0)*c);
220     int vy0=(int)((y2-yr0)*c);
221     int vx1=(int)((xr1-x3)*c);
222     int vy1=(int)((yr1-y3)*c);
223 
224     Polygon p=DjaMatrixHermite.arc2polyline(xr0,yr0,xr1,yr1,vx0,vy0,vx1,vy1);
225 
226     return new Point(p.xpoints[p.npoints/2],p.ypoints[p.npoints/2]);
227   }
228 
229   public void paintObject(Graphics _g)
230   {
231     updateXYO();
232 
233     int x0=xbegin_;
234     int y0=ybegin_;
235     int o0=obegin_;
236     int x1=xend_;
237     int y1=yend_;
238     int o1=oend_;
239 
240     int x,y;
241 
242     xr0=x0;
243     yr0=y0;
244     xr1=x1;
245     yr1=y1;
246 
247     if(tbegin_!=0)
248     switch(o0)
249     {
250     case EAST:
251       drawBracket(_g,tbegin_,o0,x0,y0-5,x0+10,y0+5);
252       xr0+=11;
253       break;
254     case WEST:
255       drawBracket(_g,tbegin_,o0,x0,y0-5,x0-10,y0+5);
256       xr0-=11;
257       break;
258     case NORTH:
259       drawBracket(_g,tbegin_,o0,x0-5,y0,x0+5,y0-10);
260       yr0-=11;
261       break;
262     case SOUTH:
263       drawBracket(_g,tbegin_,o0,x0-5,y0,x0+5,y0+10);
264       yr0+=11;
265       break;
266     }
267     
268     if(tend_!=0)
269     switch(o1)
270     {
271     case EAST:
272       drawBracket(_g,tend_,o1,x1,y1-5,x1+10,y1+5);
273       xr1+=11;
274       break;
275     case WEST:
276       drawBracket(_g,tend_,o1,x1,y1-5,x1-10,y1+5);
277       xr1-=11;
278       break;
279     case NORTH:
280       drawBracket(_g,tend_,o1,x1-5,y1,x1+5,y1-10);
281       yr1-=11;
282       break;
283     case SOUTH:
284       drawBracket(_g,tend_,o1,x1-5,y1,x1+5,y1+10);
285       yr1+=11;
286       break;
287     }
288 
289     if((tbegin_==1)||(tbegin_==4)) { xr0=xbegin_; yr0=ybegin_; }
290     if((tend_  ==1)||(tend_  ==4)) { xr1=xend_;   yr1=yend_;   }
291 
292     _g.setColor(getForeground());
293     DjaGraphics.BresenhamParams bp=DjaGraphics.getBresenhamParams(this);
294 
295     int x2=Integer.parseInt(getProperty("x2"));
296     int y2=Integer.parseInt(getProperty("y2"));
297     int x3=Integer.parseInt(getProperty("x3"));
298     int y3=Integer.parseInt(getProperty("y3"));
299 
300     double c=Math.PI;
301     int vx0=(int)((x2-xr0)*c);
302     int vy0=(int)((y2-yr0)*c);
303     int vx1=(int)((xr1-x3)*c);
304     int vy1=(int)((yr1-y3)*c);
305 
306     Polygon p=DjaMatrixHermite.arc2polyline(xr0,yr0,xr1,yr1,vx0,vy0,vx1,vy1);
307     DjaGraphics.drawPolyline(_g,p,bp);
308 
309     super.paintObject(_g);
310   }
311 
312   public void paintInteractive(Graphics _g)
313   {
314     super.paintInteractive(_g);
315 
316     if(isSelected())
317     {
318       int x2=Integer.parseInt(getProperty("x2"));
319       int y2=Integer.parseInt(getProperty("y2"));
320       int x3=Integer.parseInt(getProperty("x3"));
321       int y3=Integer.parseInt(getProperty("y3"));
322 
323       _g.setColor(controlsColor);
324       DjaGraphics.BresenhamParams bp=new DjaGraphics.BresenhamParams(2,2);
325       DjaGraphics.drawLine(_g,xbegin_,ybegin_,x2,y2,bp);
326       DjaGraphics.drawLine(_g,x3,y3,xend_,yend_,bp);
327     }
328   }
329 }