1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
// This is a regression test for a problem where free segments slightly offset
// from effectively fixed segments going through a checkpoint did not get
// aligned.
#include <cmath>
#include "libavoid/libavoid.h"
using namespace Avoid;
int main(void) {
Router *router = new Router(
PolyLineRouting | OrthogonalRouting);
router->setRoutingParameter((RoutingParameter)0, 50);
router->setRoutingParameter((RoutingParameter)1, 0);
router->setRoutingParameter((RoutingParameter)2, 0);
router->setRoutingParameter((RoutingParameter)3, 4000);
router->setRoutingParameter((RoutingParameter)4, 0);
router->setRoutingParameter((RoutingParameter)5, 100);
router->setRoutingParameter((RoutingParameter)6, 0);
router->setRoutingParameter((RoutingParameter)7, 4);
router->setRoutingOption((RoutingOption)0, true);
router->setRoutingOption((RoutingOption)1, true);
router->setRoutingOption((RoutingOption)2, false);
router->setRoutingOption((RoutingOption)3, false);
Polygon poly41(4);
poly41.ps[0] = Point(918.6758458220888, 441.0752314081785);
poly41.ps[1] = Point(918.6758458220888, 503.0752314081785);
poly41.ps[2] = Point(856.6758458220888, 503.0752314081785);
poly41.ps[3] = Point(856.6758458220888, 441.0752314081785);
new ShapeRef(router, poly41, 41);
Polygon poly43(4);
poly43.ps[0] = Point(710.6758458200889, 441.0752314081785);
poly43.ps[1] = Point(710.6758458200889, 461.0752314081785);
poly43.ps[2] = Point(678.6758458200889, 461.0752314081785);
poly43.ps[3] = Point(678.6758458200889, 441.0752314081785);
new ShapeRef(router, poly43, 43);
Polygon poly44(4);
poly44.ps[0] = Point(710.6758458200889, 483.0752314081785);
poly44.ps[1] = Point(710.6758458200889, 503.0752314081785);
poly44.ps[2] = Point(678.6758458200889, 503.0752314081785);
poly44.ps[3] = Point(678.6758458200889, 483.0752314081785);
new ShapeRef(router, poly44, 44);
ConnRef *connRef149 = new ConnRef(router, 149);
ConnEnd srcPt149(Point(709.6758458200889, 451.0752314081785), 8);
connRef149->setSourceEndpoint(srcPt149);
ConnEnd dstPt149(Point(887.6758458220888, 472.0752314081786), 15);
connRef149->setDestEndpoint(dstPt149);
connRef149->setRoutingType((ConnType)2);
std::vector<Checkpoint> checkpoints149(1);
checkpoints149[0] = Checkpoint(Point(732.6758458200889, 472.0752314081785), (ConnDirFlags) 15, (ConnDirFlags) 8);
connRef149->setRoutingCheckpoints(checkpoints149);
ConnRef *connRef150 = new ConnRef(router, 150);
ConnEnd srcPt150(Point(709.6758458200889, 493.0752314081785), 8);
connRef150->setSourceEndpoint(srcPt150);
ConnEnd dstPt150(Point(887.6758458220888, 472.0752314081786), 15);
connRef150->setDestEndpoint(dstPt150);
connRef150->setRoutingType((ConnType)2);
std::vector<Checkpoint> checkpoints150(1);
checkpoints150[0] = Checkpoint(Point(732.6758458200889, 472.0752314081785), (ConnDirFlags) 15, (ConnDirFlags) 8);
connRef150->setRoutingCheckpoints(checkpoints150);
router->processTransaction();
router->outputDiagram("output/checkpoints03");
bool succeeded = true;
Avoid::PolyLine route149 = connRef149->displayRoute();
Avoid::PolyLine route150 = connRef150->displayRoute();
if (route149.size() > 4 || route150.size() > 4)
{
// Five segments weren't merged into three. The segments in the shape
// on right weren't shifted to align with the segments going through
// the checkpoint.
succeeded = false;
}
if (succeeded == true)
{
// The segments were merged by were not centred around the
// checkpoint.
double checkpointY = 472.0752314081785;
if (fabs(route149.ps[route149.size() - 1].y - checkpointY) < 2)
{
succeeded = false;
}
if (fabs(route150.ps[route150.size() - 1].y - checkpointY) < 2)
{
succeeded = false;
}
}
delete router;
return (succeeded) ? 0 : 1;
};
|