# HG changeset patch
# User alpar
# Date 1106050989 0
# Node ID d496d1d5a5e748f548e5b85a8ec27320eb7b2ce5
# Parent  caa13d29152820c0d2b504b322f7f13073d6d1d7
Correct bad arrow enpoint when parallel edges are enabled.

diff -r caa13d291528 -r d496d1d5a5e7 src/lemon/graph_to_eps.h
--- a/src/lemon/graph_to_eps.h	Tue Jan 18 12:02:27 2005 +0000
+++ b/src/lemon/graph_to_eps.h	Tue Jan 18 12:23:09 2005 +0000
@@ -153,6 +153,8 @@
   typedef typename Graph::InEdgeIt InEdgeIt;
   typedef typename Graph::OutEdgeIt OutEdgeIt;
 
+  static const int INTERPOL_PREC=20;
+
   bool dontPrint;
 
   enum NodeShapes { CIRCLE=0, SQUARE=1 };
@@ -517,21 +519,20 @@
 	    xy<double> mm=m+rot(d)*sw/.75;
 	    if(_drawArrows) {
 	      int node_shape;
-	      const int INERPOL_PREC=20;
 	      xy<double> s=_coords[g.source(*e)];
 	      xy<double> t=_coords[g.target(*e)];
 	      double rn=_nodeSizes[g.target(*e)]*_nodeScale;
 	      node_shape=_nodeShapes[g.target(*e)];
 	      Bezier3 bez(s,mm,mm,t);
 	      double t1=0,t2=1;
-	      for(int i=0;i<INERPOL_PREC;++i)
+	      for(int i=0;i<INTERPOL_PREC;++i)
 		if(isInsideNode(bez((t1+t2)/2)-t,rn,node_shape)) t2=(t1+t2)/2;
 		else t1=(t1+t2)/2;
 	      xy<double> apoint=bez((t1+t2)/2);
 	      rn = _arrowLength+_edgeWidths[*e]*_edgeWidthScale;
 	      rn*=rn;
 	      t2=(t1+t2)/2;t1=0;
-	      for(int i=0;i<INERPOL_PREC;++i)
+	      for(int i=0;i<INTERPOL_PREC;++i)
 		if((bez((t1+t2)/2)-apoint).normSquare()>rn) t1=(t1+t2)/2;
 		else t2=(t1+t2)/2;
 	      xy<double> linend=bez((t1+t2)/2);	      
@@ -539,7 +540,7 @@
 // 	      rn=_nodeSizes[g.source(*e)]*_nodeScale;
 // 	      node_shape=_nodeShapes[g.source(*e)];
 // 	      t1=0;t2=1;
-// 	      for(int i=0;i<INERPOL_PREC;++i)
+// 	      for(int i=0;i<INTERPOL_PREC;++i)
 // 		if(isInsideNode(bez((t1+t2)/2)-t,rn,node_shape)) t1=(t1+t2)/2;
 // 		else t2=(t1+t2)/2;
 // 	      bez=bez.after((t1+t2)/2);
@@ -577,15 +578,20 @@
 	if(!_undir||g.source(e)<g.target(e))
 	  if(_drawArrows) {
 	    xy<double> d(_coords[g.target(e)]-_coords[g.source(e)]);
+	    double rn=_nodeSizes[g.target(e)]*_nodeScale;
+	    int node_shape=_nodeShapes[g.target(e)];
+	    double t1=0,t2=1;
+	    for(int i=0;i<INTERPOL_PREC;++i)
+	      if(isInsideNode((-(t1+t2)/2)*d,rn,node_shape)) t1=(t1+t2)/2;
+	      else t2=(t1+t2)/2;
 	    double l=sqrt(d.normSquare());
 	    d/=l;
-	    xy<double> x1(d*_nodeScale*_nodeSizes[g.source(e)]+
-			  _coords[g.source(e)]);
-	    os << l-(_nodeSizes[g.source(e)]+
-		     _nodeSizes[g.target(e)])*_nodeScale << ' '
+	    
+	    os << l*(1-(t1+t2)/2) << ' '
 	       << _edgeWidths[e]*_edgeWidthScale << ' '
 	       << d.x << ' ' << d.y << ' '
-	       << x1.x << ' ' << x1.y << ' '
+	       << _coords[g.source(e)].x << ' '
+	       << _coords[g.source(e)].y << ' '
 	       << _edgeColors[e].getR() << ' '
 	       << _edgeColors[e].getG() << ' '
 	       << _edgeColors[e].getB() << " arr\n";