Author: bobtarling
Date: 2010-01-28 05:48:21-0800
New Revision: 17928

Modified:
   trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigEdgeModelElement.java

Log:
Only use our own edge layout if from one circular fig to another

Modified: 
trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigEdgeModelElement.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigEdgeModelElement.java?view=diff&pathrev=17928&r1=17927&r2=17928
==============================================================================
--- 
trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigEdgeModelElement.java   
    (original)
+++ 
trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigEdgeModelElement.java   
    2010-01-28 05:48:21-0800
@@ -1710,12 +1710,7 @@
      * @see org.tigris.gef.presentation.FigEdgePoly#computeRouteImpl()
      */
     public void computeRouteImpl() {
-        if (!_initiallyLaidOut) {
-            layoutEdge();
-            _initiallyLaidOut = true;
-        }
-        FigPoly p = ((FigPoly) getFig());
-
+        
         Fig sourcePortFig = getSourcePortFig();
         Fig destPortFig = getDestPortFig();
 
@@ -1727,52 +1722,66 @@
             destPortFig = ((FigNodeModelElement) destPortFig).getBigPort();
         }
         
-        Point srcPt = sourcePortFig.getCenter();
-        Point dstPt = destPortFig.getCenter();
-
-        if (_useNearest) {
-            if (p.getNumPoints() == 2) {
-                // ? two iterations of refinement, maybe should be a for-loop
-                srcPt = sourcePortFig.connectionPoint(p.getPoint(1));
-                dstPt = destPortFig.connectionPoint(p
-                        .getPoint(p.getNumPoints() - 2));
-                srcPt = sourcePortFig.connectionPoint(dstPt);
-                dstPt = destPortFig.connectionPoint(srcPt);
-                
-                // If the line angle is less than 3 degrees then snap the line
-                // straight
-                final boolean snapStraight;
-                final int delta = 3;
-                if (sourcePortFig instanceof FigCircle
-                        && destPortFig instanceof FigCircle) {
+        if (!(sourcePortFig instanceof FigCircle)
+                || !(destPortFig instanceof FigCircle)) {
+            // If this is not a circle to circle edge we default to let GEF
+            // calculate edge route.
+            super.computeRouteImpl();
+        } else {
+            // If the edge is from a circle to a circle (e.g. between use
+            // cases) we have our own implementation overriding GEF. Which
+            // attempts to keep the edges perpendicular if the edge is already
+            // close to perpendicular.
+        
+            if (!_initiallyLaidOut) {
+                layoutEdge();
+                _initiallyLaidOut = true;
+            }
+            FigPoly p = ((FigPoly) getFig());
+    
+            
+            
+            Point srcPt = sourcePortFig.getCenter();
+            Point dstPt = destPortFig.getCenter();
+    
+            if (_useNearest) {
+                if (p.getNumPoints() == 2) {
+                    // ? two iterations of refinement, maybe should be a 
for-loop
+                    srcPt = sourcePortFig.connectionPoint(p.getPoint(1));
+                    dstPt = destPortFig.connectionPoint(p
+                            .getPoint(p.getNumPoints() - 2));
+                    srcPt = sourcePortFig.connectionPoint(dstPt);
+                    dstPt = destPortFig.connectionPoint(srcPt);
+                    
+                    // If the line angle is less than 3 degrees then snap the 
line
+                    // straight
+                    final int delta = 3;
                     double angle = Geometry.segmentAngle(srcPt, dstPt);
-                    double mod = (angle % 90);
-                    snapStraight = (mod < delta || mod > 90 - delta);
-                } else {
-                    snapStraight = false;
-                }
-
-                if (snapStraight) {
-                    int newX = (srcPt.x + dstPt.x) / 2;
-                    int newY = (srcPt.y + dstPt.y) / 2;
-                    if (newX < getSourcePortFig().getX() + 
getSourcePortFig().getWidth()
-                            && newX >= getSourcePortFig().getX()) {
-                        srcPt.x = newX;
-                        dstPt.x = newX;
-                    } else if (newY >= getSourcePortFig().getY()
-                            && newY < getSourcePortFig().getY() + 
getSourcePortFig().getHeight()) {
-                        srcPt.y = newY;
-                        dstPt.y = newY;
+                    double mod = angle % 90;
+                    final boolean snapStraight = (mod != 0 && (mod < delta || 
mod > 90 - delta));
+    
+                    if (snapStraight) {
+                        int newX = (srcPt.x + dstPt.x) / 2;
+                        int newY = (srcPt.y + dstPt.y) / 2;
+                        if (newX < getSourcePortFig().getX() + 
getSourcePortFig().getWidth()
+                                && newX >= getSourcePortFig().getX()) {
+                            srcPt.x = newX;
+                            dstPt.x = newX;
+                        } else if (newY >= getSourcePortFig().getY()
+                                && newY < getSourcePortFig().getY() + 
getSourcePortFig().getHeight()) {
+                            srcPt.y = newY;
+                            dstPt.y = newY;
+                        }
                     }
+                } else {
+                    srcPt = sourcePortFig.connectionPoint(p.getPoint(1));
+                    dstPt = destPortFig.connectionPoint(p
+                            .getPoint(p.getNumPoints() - 2));
                 }
-            } else {
-                srcPt = sourcePortFig.connectionPoint(p.getPoint(1));
-                dstPt = destPortFig.connectionPoint(p
-                        .getPoint(p.getNumPoints() - 2));
             }
+    
+            setEndPoints(srcPt, dstPt);
+            calcBounds();
         }
-
-        setEndPoints(srcPt, dstPt);
-        calcBounds();
     } /* end computeRoute */
 }

------------------------------------------------------
http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2442702

To unsubscribe from this discussion, e-mail: 
[[email protected]].

Reply via email to