[dia] [autorouting] More direction info from caller



commit 77865ab93aca979b8f498b7dbb939be52638f8ed
Author: Hans Breuer <hans breuer org>
Date:   Sun Aug 15 21:04:49 2010 +0200

    [autorouting] More direction info from caller
    
    The built-in algorithm of connpointline_putonaline()
    can not reconstruct detailed information which usually is
    ready available with the caller.
    Provide/use that information to make the direction info
    more specifc.

 lib/connpoint_line.c           |    7 ++++---
 lib/connpoint_line.h           |    2 +-
 objects/GRAFCET/vergent.c      |    8 ++++----
 objects/Istar/other.c          |    8 ++++----
 objects/Jackson/domain.c       |    8 ++++----
 objects/KAOS/goal.c            |    8 ++++----
 objects/KAOS/other.c           |    8 ++++----
 objects/SADT/box.c             |    8 ++++----
 objects/UML/lifeline.c         |    9 +++++----
 objects/chronogram/chronoref.c |    2 +-
 objects/standard/line.c        |    2 +-
 11 files changed, 36 insertions(+), 34 deletions(-)
---
diff --git a/lib/connpoint_line.c b/lib/connpoint_line.c
index 1b8decc..946a466 100644
--- a/lib/connpoint_line.c
+++ b/lib/connpoint_line.c
@@ -200,13 +200,12 @@ void connpointline_update(ConnPointLine *cpl)
 }
 
 void 
-connpointline_putonaline(ConnPointLine *cpl,Point *start,Point *end)
+connpointline_putonaline(ConnPointLine *cpl,Point *start,Point *end, gint dirs)
 {
   Point se_vector;
   real se_len,pseudopoints;
   int i;
   GSList *elem;
-  gint dirs;
 
   point_copy(&se_vector, end);
   point_sub(&se_vector, start);
@@ -219,7 +218,9 @@ connpointline_putonaline(ConnPointLine *cpl,Point *start,Point *end)
   cpl->start = *start;
   cpl->end = *end;
   
-  if (fabs(se_vector.x) > fabs(se_vector.y))
+  if (dirs != DIR_NONE)
+    /* use the oone givne by the caller */;
+  else if (fabs(se_vector.x) > fabs(se_vector.y))
     dirs = DIR_NORTH|DIR_SOUTH;
   else
     dirs = DIR_EAST|DIR_WEST;
diff --git a/lib/connpoint_line.h b/lib/connpoint_line.h
index 8314945..c5a5bab 100644
--- a/lib/connpoint_line.h
+++ b/lib/connpoint_line.h
@@ -48,7 +48,7 @@ ConnPointLine *connpointline_create(DiaObject *parent,
 				    int num_connections);
 void connpointline_destroy(ConnPointLine *cpl);
 void connpointline_update(ConnPointLine *cpl);
-void connpointline_putonaline(ConnPointLine *cpl,Point *start,Point *end);
+void connpointline_putonaline(ConnPointLine *cpl,Point *start,Point *end, gint dirs);
 int connpointline_can_add_point(ConnPointLine *cpl,
 				Point *clicked);
 int connpointline_can_remove_point(ConnPointLine *cpl,
diff --git a/objects/GRAFCET/vergent.c b/objects/GRAFCET/vergent.c
index ef4fdac..c524d5c 100644
--- a/objects/GRAFCET/vergent.c
+++ b/objects/GRAFCET/vergent.c
@@ -302,13 +302,13 @@ vergent_update_data(Vergent *vergent)
 
     /* place the connection point lines */
     connpointline_update(vergent->north);
-    connpointline_putonaline(vergent->north,&p0,&p1);
+    connpointline_putonaline(vergent->north,&p0,&p1,DIR_NORTH);
     vergent->northwest.pos = p0;
     vergent->northwest.directions = DIR_NORTH;
     vergent->northeast.pos = p1;
     vergent->northeast.directions = DIR_NORTH;
     connpointline_update(vergent->south);
-    connpointline_putonaline(vergent->south,&p0,&p1);
+    connpointline_putonaline(vergent->south,&p0,&p1,DIR_SOUTH);
     vergent->southwest.pos = p0;
     vergent->southwest.directions = DIR_SOUTH;
     vergent->southeast.pos = p1;    
@@ -325,14 +325,14 @@ vergent_update_data(Vergent *vergent)
     /* place the connection point lines */
     p0.y = p1.y = p0.y - VERGENT_LINE_WIDTH;
     connpointline_update(vergent->north);
-    connpointline_putonaline(vergent->north,&p0,&p1);
+    connpointline_putonaline(vergent->north,&p0,&p1,DIR_NORTH);
     vergent->northwest.pos = p0;
     vergent->northwest.directions = DIR_NORTH;
     vergent->northeast.pos = p1;
     vergent->northeast.directions = DIR_NORTH;
     p0.y = p1.y = p0.y + 2.0 *VERGENT_LINE_WIDTH;
     connpointline_update(vergent->south);
-    connpointline_putonaline(vergent->south,&p0,&p1);
+    connpointline_putonaline(vergent->south,&p0,&p1,DIR_SOUTH);
     vergent->southwest.pos = p0;
     vergent->southwest.directions = DIR_SOUTH;
     vergent->southeast.pos = p1;
diff --git a/objects/Istar/other.c b/objects/Istar/other.c
index 631bb54..5e2eec2 100644
--- a/objects/Istar/other.c
+++ b/objects/Istar/other.c
@@ -400,13 +400,13 @@ other_update_data(Other *other, AnchorShape horiz, AnchorShape vert)
   sw.x = nw.x;
 
   connpointline_update(other->north);
-  connpointline_putonaline(other->north,&ne,&nw);
+  connpointline_putonaline(other->north,&ne,&nw,DIR_NORTH);
   connpointline_update(other->west);
-  connpointline_putonaline(other->west,&nw,&sw);
+  connpointline_putonaline(other->west,&nw,&sw,DIR_WEST);
   connpointline_update(other->south);
-  connpointline_putonaline(other->south,&sw,&se);
+  connpointline_putonaline(other->south,&sw,&se,DIR_SOUTH);
   connpointline_update(other->east);
-  connpointline_putonaline(other->east,&se,&ne);
+  connpointline_putonaline(other->east,&se,&ne,DIR_EAST);
 }
 
 static ConnPointLine *
diff --git a/objects/Jackson/domain.c b/objects/Jackson/domain.c
index fe9572a..ad49584 100644
--- a/objects/Jackson/domain.c
+++ b/objects/Jackson/domain.c
@@ -461,13 +461,13 @@ jackson_box_update_data(Box *box, AnchorShape horiz, AnchorShape vert)
   sw.x = nw.x;
 
   connpointline_update(box->north);
-  connpointline_putonaline(box->north,&ne,&nw);
+  connpointline_putonaline(box->north,&ne,&nw,DIR_NORTH);
   connpointline_update(box->west);
-  connpointline_putonaline(box->west,&nw,&sw);
+  connpointline_putonaline(box->west,&nw,&sw,DIR_WEST);
   connpointline_update(box->south);
-  connpointline_putonaline(box->south,&sw,&se);
+  connpointline_putonaline(box->south,&sw,&se,DIR_SOUTH);
   connpointline_update(box->east);
-  connpointline_putonaline(box->east,&se,&ne);
+  connpointline_putonaline(box->east,&se,&ne,DIR_EAST);
 }
 
 
diff --git a/objects/KAOS/goal.c b/objects/KAOS/goal.c
index f9369bf..4758ba4 100644
--- a/objects/KAOS/goal.c
+++ b/objects/KAOS/goal.c
@@ -503,13 +503,13 @@ goal_update_data(Goal *goal, AnchorShape horiz, AnchorShape vert)
   sw.x = nw.x;
 
   connpointline_update(goal->north);
-  connpointline_putonaline(goal->north,&ne,&nw);
+  connpointline_putonaline(goal->north,&ne,&nw,DIR_NORTH);
   connpointline_update(goal->west);
-  connpointline_putonaline(goal->west,&nw,&sw);
+  connpointline_putonaline(goal->west,&nw,&sw,DIR_SOUTH);
   connpointline_update(goal->south);
-  connpointline_putonaline(goal->south,&sw,&se);
+  connpointline_putonaline(goal->south,&sw,&se,DIR_SOUTH);
   connpointline_update(goal->east);
-  connpointline_putonaline(goal->east,&se,&ne);
+  connpointline_putonaline(goal->east,&se,&ne,DIR_EAST);
 }
 
 static ConnPointLine *
diff --git a/objects/KAOS/other.c b/objects/KAOS/other.c
index 8ba0098..623ff8d 100644
--- a/objects/KAOS/other.c
+++ b/objects/KAOS/other.c
@@ -451,13 +451,13 @@ other_update_data(Other *other, AnchorShape horiz, AnchorShape vert)
   sw.x = nw.x;
 
   connpointline_update(other->north);
-  connpointline_putonaline(other->north,&ne,&nw);
+  connpointline_putonaline(other->north,&ne,&nw,DIR_NORTH);
   connpointline_update(other->west);
-  connpointline_putonaline(other->west,&nw,&sw);
+  connpointline_putonaline(other->west,&nw,&sw,DIR_WEST);
   connpointline_update(other->south);
-  connpointline_putonaline(other->south,&sw,&se);
+  connpointline_putonaline(other->south,&sw,&se,DIR_SOUTH);
   connpointline_update(other->east);
-  connpointline_putonaline(other->east,&se,&ne);
+  connpointline_putonaline(other->east,&se,&ne,DIR_EAST);
 
   other->center_cp.pos.x = (nw.x + se.x) / 2;
   other->center_cp.pos.y = (nw.y + se.y) / 2;
diff --git a/objects/SADT/box.c b/objects/SADT/box.c
index ef602e0..3cecb92 100644
--- a/objects/SADT/box.c
+++ b/objects/SADT/box.c
@@ -382,13 +382,13 @@ sadtbox_update_data(Box *box, AnchorShape horiz, AnchorShape vert)
   sw.x = nw.x;
   
   connpointline_update(box->north);
-  connpointline_putonaline(box->north,&ne,&nw);
+  connpointline_putonaline(box->north,&ne,&nw,DIR_NORTH);
   connpointline_update(box->west);
-  connpointline_putonaline(box->west,&nw,&sw);
+  connpointline_putonaline(box->west,&nw,&sw,DIR_WEST);
   connpointline_update(box->south);
-  connpointline_putonaline(box->south,&sw,&se);
+  connpointline_putonaline(box->south,&sw,&se,DIR_SOUTH);
   connpointline_update(box->east);
-  connpointline_putonaline(box->east,&se,&ne);
+  connpointline_putonaline(box->east,&se,&ne,DIR_EAST);
 }
 
 
diff --git a/objects/UML/lifeline.c b/objects/UML/lifeline.c
index ab4a712..ef5c3f4 100644
--- a/objects/UML/lifeline.c
+++ b/objects/UML/lifeline.c
@@ -667,6 +667,7 @@ lifeline_update_data(Lifeline *lifeline)
 
   lifeline->connections[6].pos.x = conn->endpoints[0].x;
   lifeline->connections[6].pos.y = conn->endpoints[0].y + lifeline->rbot;
+  lifeline->connections[6].directions = DIR_SOUTH;
 
   lifeline->connections[0].pos = pnw;
   lifeline->connections[1].pos = pne;
@@ -682,13 +683,13 @@ lifeline_update_data(Lifeline *lifeline)
   lifeline->connections[5].directions = DIR_SOUTH|DIR_EAST;
 
   connpointline_update(lifeline->northwest);
-  connpointline_putonaline(lifeline->northwest,&pnw,&pmw);
+  connpointline_putonaline(lifeline->northwest,&pnw,&pmw, DIR_WEST);
   connpointline_update(lifeline->southwest);
-  connpointline_putonaline(lifeline->southwest,&pmw,&psw);
+  connpointline_putonaline(lifeline->southwest,&pmw,&psw, DIR_WEST);
   connpointline_update(lifeline->northeast);
-  connpointline_putonaline(lifeline->northeast,&pne,&pme);
+  connpointline_putonaline(lifeline->northeast,&pne,&pme, DIR_EAST);
   connpointline_update(lifeline->southeast);
-  connpointline_putonaline(lifeline->southeast,&pme,&pse);
+  connpointline_putonaline(lifeline->southeast,&pme,&pse, DIR_EAST);
 }
 
 static DiaObject *
diff --git a/objects/chronogram/chronoref.c b/objects/chronogram/chronoref.c
index cefc253..2b12323 100644
--- a/objects/chronogram/chronoref.c
+++ b/objects/chronogram/chronoref.c
@@ -410,7 +410,7 @@ chronoref_update_data(Chronoref *chronoref)
   point_copy(&p1,&elem->corner); point_copy(&p2,&ur_corner);
   p1.x -= chronoref->mingrad;
   p2.x += chronoref->mingrad; 
-  connpointline_putonaline(chronoref->scale,&p1,&p2);
+  connpointline_putonaline(chronoref->scale,&p1,&p2, DIR_SOUTH);
 }
 
 static DiaObject *
diff --git a/objects/standard/line.c b/objects/standard/line.c
index 4a65b84..0409eae 100644
--- a/objects/standard/line.c
+++ b/objects/standard/line.c
@@ -517,7 +517,7 @@ line_update_data(Line *line)
   obj->position = conn->endpoints[0];
 
   connpointline_update(line->cpl);
-  connpointline_putonaline(line->cpl, &start, &end);
+  connpointline_putonaline(line->cpl, &start, &end, DIR_ALL);
   
   connection_update_handles(conn);
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]