[dia] [autorouting] More direction info from caller
- From: Hans Breuer <hans src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [dia] [autorouting] More direction info from caller
- Date: Sun, 15 Aug 2010 19:07:08 +0000 (UTC)
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]