For information about anchor in GEF, see http://xyhsm.javaeye.com/blog/67809.
The principle is based on the target graphics in the source graphics relative position (up and down), and the 45-degree angle for the division, determine the anchor specific in the four-frame specific one of the middle.
Import Org.eclipse.draw2d.AbstractConnectionAnchor;
Import org.eclipse.draw2d.IFigure;
Import Org.eclipse.draw2d.geometry.Point;
Import Org.eclipse.draw2d.geometry.Rectangle;
/** */ /**
* A anchor at border ' s middle for joining connections between figures
* @author wu_07
*/
Public class Bordermiddleanchor extends Abstractconnectionanchor
... {
Private intoffset;
PublicBordermiddleanchor (ifigure source)
...{
Super(source);
}
PublicPoint getLocation (Point Reference)
...{
Rectangle R=GetOwner (). getbounds (). Getcopy () ;
GetOwner (). Translatetoabsolute (R);
intOff_h=R.height/ 2;
intOff_w=R.width/ 2;
DoubleVert=R.y-reference.y;
DoubleHort=r.x-reference.x;
/**//* System.out.println ("reference.x:" +reference.x);
System.out.println ("r.x:" +r.x);
System.out.println ("Reference.y:" +reference.y);
System.out.println ("R.Y:" +r.y);
System.out.println ("vert:" +vert);
System.out.println ("Hort:" +hort); */
if(Hort<0&&(Vert/Hort<1&&Vert/Hort>-1)) //left
returnr.gettopright (). Translate (0, Off_h);
Else if(Vert>0&&(Hort/Vert<1&&Hort/Vert>-1))//Lower Side
returnr.gettopleft (). Translate (Off_w,0);
Else if(Hort>0&&(Vert/Hort<1&&Vert/Hort>-1))//Right Side
returnr.gettopleft (). Translate (-1, Off_h);
Else if(Vert<0&&(Hort/Vert<1&&Hort/Vert>-1))//Upper Side
returnr.getbottomleft (). Translate (Off_w,0);
Else
returnR.getcenter ();
}
}
</