Salome HOME
Update copyrights
[tools/medcoupling.git] / src / INTERP_KERNELTest / QuadraticPlanarInterpTest.cxx
1 // Copyright (C) 2007-2019  CEA/DEN, EDF R&D
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19 // Author : Anthony Geay (CEA/DEN)
20
21 #include "QuadraticPlanarInterpTest.hxx"
22 #include "InterpKernelGeo2DQuadraticPolygon.hxx"
23 #include "InterpKernelGeo2DEdgeArcCircle.hxx"
24 #include "InterpKernelGeo2DElementaryEdge.hxx"
25 #include "InterpKernelGeo2DComposedEdge.hxx"
26 #include "InterpKernelGeo2DEdgeLin.hxx"
27 #include "TestInterpKernelUtils.hxx"
28
29 #include <sstream>
30 #include <iostream>
31
32 using namespace INTERP_KERNEL;
33
34 namespace INTERP_TEST
35 {
36
37 static const double ADMISSIBLE_ERROR = 1.e-14;
38
39 void QuadraticPlanarInterpTest::setUp()
40 {
41 }
42
43 void QuadraticPlanarInterpTest::tearDown()
44 {
45 }
46
47 void QuadraticPlanarInterpTest::cleanUp()
48 {
49 }
50
51 void QuadraticPlanarInterpTest::ReadWriteInXfigElementary()
52 {
53   //Testing bounds calculation. For Seg2
54   std::istringstream stream("2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2\n3200 3400 4500 4700");
55   EdgeLin *e1=new EdgeLin(stream);
56   Bounds bound=e1->getBounds();
57   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.32,bound[0],ADMISSIBLE_ERROR);
58   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.45,bound[1],ADMISSIBLE_ERROR);
59   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.34,bound[2],ADMISSIBLE_ERROR);
60   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.47,bound[3],ADMISSIBLE_ERROR);
61   e1->decrRef();
62   std::istringstream stream2("2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2\n4500 4700 3200 3400");
63   e1=new EdgeLin(stream2);
64   bound=e1->getBounds();
65   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.32,bound[0],ADMISSIBLE_ERROR);
66   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.45,bound[1],ADMISSIBLE_ERROR);
67   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.34,bound[2],ADMISSIBLE_ERROR);
68   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.47,bound[3],ADMISSIBLE_ERROR);
69   e1->decrRef();
70   //Testing bounds calculation For Arc of circle.
71   
72 }
73
74 void QuadraticPlanarInterpTest::ReadWriteInXfigGlobal()
75 {
76   QuadraticPolygon pol1(INTERP_TEST::getResourceFile("Pol1.fig").c_str());
77   pol1.dumpInXfigFile("Pol1_gen.fig");
78   QuadraticPolygon pol2(INTERP_TEST::getResourceFile("Pol2.fig").c_str());
79   pol2.dumpInXfigFile("Pol2_gen.fig");
80   QuadraticPolygon pol3(INTERP_TEST::getResourceFile("Pol3.fig").c_str());
81   pol3.dumpInXfigFile("Pol3_gen.fig");
82   QuadraticPolygon pol4(INTERP_TEST::getResourceFile("Pol4.fig").c_str());
83   CPPUNIT_ASSERT_EQUAL(1,pol4.size());
84   ElementaryEdge *edge1=dynamic_cast<ElementaryEdge *>(pol4[0]);
85   CPPUNIT_ASSERT(edge1);
86   Edge *edge2=edge1->getPtr();
87   EdgeArcCircle *edge=dynamic_cast<EdgeArcCircle *>(edge2);
88   CPPUNIT_ASSERT(edge);
89   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.24375,edge->getRadius(),ADMISSIBLE_ERROR);
90   CPPUNIT_ASSERT_DOUBLES_EQUAL(5.7857653289925404,edge->getAngle(),ADMISSIBLE_ERROR);
91   double center[2];
92   edge->getCenter(center);
93   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.48,center[0],ADMISSIBLE_ERROR);
94   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.48375,center[1],ADMISSIBLE_ERROR);
95   const double *start=*edge->getStartNode();
96   Node *n1=new Node(start[0]+2*(center[0]-start[0]),start[1]+2*(center[1]-start[1]));
97   edge->changeMiddle(n1);
98   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.24375,edge->getRadius(),ADMISSIBLE_ERROR);
99   CPPUNIT_ASSERT_DOUBLES_EQUAL(5.7857653289925404,edge->getAngle(),ADMISSIBLE_ERROR);
100   n1->decrRef();
101   n1=new Node(center[0],center[1]+0.24375);
102   edge->changeMiddle(n1);
103   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.24375,edge->getRadius(),ADMISSIBLE_ERROR);
104   CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.49741997818704586,edge->getAngle(),ADMISSIBLE_ERROR);//5.7857653289925404 + 2*PI
105   n1->decrRef();
106   //A half circle.
107   EdgeArcCircle *e=new EdgeArcCircle(0.84,0.54,0.78,0.6,0.84,0.66);
108   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.06,e->getRadius(),ADMISSIBLE_ERROR);
109   CPPUNIT_ASSERT_DOUBLES_EQUAL(-3.1415925921507317,e->getAngle(),1e-5);
110   e->decrRef();
111   e=new EdgeArcCircle(0.84,0.54,0.9,0.6,0.84,0.66);
112   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.06,e->getRadius(),ADMISSIBLE_ERROR);
113   CPPUNIT_ASSERT_DOUBLES_EQUAL(3.1415925921507317,e->getAngle(),1e-5);
114   e->decrRef();
115 }
116
117 void QuadraticPlanarInterpTest::BasicGeometricTools()
118 {
119   Node *n1=new Node(1.,1.);
120   Node *n2=new Node(4.,2.);
121   EdgeLin *e1=new EdgeLin(n1,n2);
122   double tmp[2];
123   e1->getNormalVector(tmp);
124   CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.94868329805051377,tmp[1],ADMISSIBLE_ERROR);
125   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.31622776601683794,tmp[0],ADMISSIBLE_ERROR);
126   e1->decrRef();
127   n1->decrRef(); n2->decrRef();
128   n1=new Node(1.,1.);
129   n2=new Node(0.,4.);
130   e1=new EdgeLin(n1,n2);
131   double tmp2[2];
132   e1->getNormalVector(tmp2);
133   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,Node::dot(tmp,tmp2),1e-10);
134   tmp[0]=0.5; tmp[1]=2.5;
135   CPPUNIT_ASSERT(e1->isNodeLyingOn(tmp));
136   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,e1->getDistanceToPoint(tmp),1e-12);
137   tmp[1]=2.55; CPPUNIT_ASSERT(!e1->isNodeLyingOn(tmp));
138   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0158113883008418,e1->getDistanceToPoint(tmp),1e-12);
139   tmp[0]=0.; tmp[1]=5.;
140   CPPUNIT_ASSERT_DOUBLES_EQUAL(1.,e1->getDistanceToPoint(tmp),1e-12);
141   EdgeArcCircle *e=new EdgeArcCircle(4.,3.,0.,5.,-5.,0.);
142   tmp[0]=-4.; tmp[1]=3.;
143   CPPUNIT_ASSERT(e->isNodeLyingOn(tmp));
144   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,e->getDistanceToPoint(tmp),1e-12);
145   tmp[1]=3.1; CPPUNIT_ASSERT(!e->isNodeLyingOn(tmp));
146   CPPUNIT_ASSERT_DOUBLES_EQUAL(6.0632371551998077e-2,e->getDistanceToPoint(tmp),1e-12);
147   tmp[0]=-4.; tmp[1]=-3.;
148   CPPUNIT_ASSERT(!e->isNodeLyingOn(tmp));
149   CPPUNIT_ASSERT_DOUBLES_EQUAL(3.1622776601683795,e->getDistanceToPoint(tmp),1e-12);
150   e->decrRef();
151   e1->decrRef();
152   n1->decrRef(); n2->decrRef();
153 }
154
155 void QuadraticPlanarInterpTest::IntersectionBasics()
156 {
157   //Testing intersection of Bounds.
158   std::istringstream stream1("2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2\n3200 3400 4500 4800");
159   EdgeLin *e1=new EdgeLin(stream1);
160   std::istringstream stream2("2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2\n3200 3400 4500 4800");
161   EdgeLin *e2=new EdgeLin(stream2);
162   Bounds *bound=e1->getBounds().amIIntersectingWith(e2->getBounds()); CPPUNIT_ASSERT(bound);
163   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.32,(*bound)[0],ADMISSIBLE_ERROR);
164   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.45,(*bound)[1],ADMISSIBLE_ERROR);
165   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.34,(*bound)[2],ADMISSIBLE_ERROR);
166   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.48,(*bound)[3],ADMISSIBLE_ERROR);
167   delete bound;
168   e2->decrRef(); e1->decrRef();
169   //
170   std::istringstream stream3("2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2\n3000 7200 6000 3700");
171   EdgeLin *e3=new EdgeLin(stream3);
172   std::istringstream stream4("2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2\n4800 6600 7200 4200");
173   EdgeLin *e4=new EdgeLin(stream4);
174   bound=e3->getBounds().amIIntersectingWith(e4->getBounds()); CPPUNIT_ASSERT(bound);
175   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.48,(*bound)[0],ADMISSIBLE_ERROR);
176   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.6,(*bound)[1],ADMISSIBLE_ERROR);
177   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.42,(*bound)[2],ADMISSIBLE_ERROR);
178   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.66,(*bound)[3],ADMISSIBLE_ERROR);
179   delete bound;
180   e3->decrRef(); e4->decrRef();
181 }
182
183 void QuadraticPlanarInterpTest::EdgeLinUnitary()
184 {
185   EdgeLin *e1=new EdgeLin(0.5,0.5,3.7,4.1);
186   Node *n=new Node(2.1,2.3);
187   CPPUNIT_ASSERT_DOUBLES_EQUAL(e1->getCharactValue(*n),0.5,1e-8);
188   n->decrRef();
189   n=new Node(3.7,4.1);
190   CPPUNIT_ASSERT_DOUBLES_EQUAL(e1->getCharactValue(*n),1.,1e-8);
191   n->decrRef();
192   n=new Node(0.5,0.5);
193   CPPUNIT_ASSERT_DOUBLES_EQUAL(e1->getCharactValue(*n),0.,1e-8);
194   n->decrRef();
195   n=new Node(-1.1,-1.3);
196   CPPUNIT_ASSERT_DOUBLES_EQUAL(e1->getCharactValue(*n),-0.5,1e-8);
197   n->decrRef();
198   n=new Node(5.3,5.9);
199   CPPUNIT_ASSERT_DOUBLES_EQUAL(e1->getCharactValue(*n),1.5,1e-8);
200   n->decrRef(); e1->decrRef();
201 }
202
203 /*!
204  * Here two things are tested. 
205  * 1 ) One the overlapping calculation capability of edge/edge intersector.
206  * 2 ) Then the capability to handle the case where 2 segs (whatever their type) are overlapped.
207  * All the configuration of full or part overlapping have been tested.
208  */
209 void QuadraticPlanarInterpTest::IntersectionEdgeOverlapUnitarySegSeg()
210 {
211   ComposedEdge& v1=*(new ComposedEdge);
212   ComposedEdge& v2=*(new ComposedEdge);
213   QuadraticPlanarPrecision::setPrecision(5.0e-14); // [ABN] man, those tests are really close to epsilon! I need to relax this a bit.
214   MergePoints v3;
215   //Testing merge of geometric equals seg2.
216   Edge *e1=new EdgeLin(0.5,0.5,1.,1.); Edge *e2=new EdgeLin(0.5,0.5,1.,1.);
217   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
218   CPPUNIT_ASSERT_EQUAL(2,(int)v3.getNumberOfAssociations());
219   CPPUNIT_ASSERT_EQUAL(1,(int)v1.size()); CPPUNIT_ASSERT_EQUAL(1,(int)v2.size());
220   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(e1) && v1[0]->getDirection()); CPPUNIT_ASSERT(v2[0]->intresincEqCoarse(e1) && v2[0]->getDirection());
221   v1.clear(); v2.clear(); v3.clear();
222   //  - testing by adding some noise
223   e1->decrRef(); e1=new EdgeLin(0.5+5.e-15,0.5-5.e-15,1.,1.+7.e-15);
224   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
225   CPPUNIT_ASSERT_EQUAL(2,(int)v3.getNumberOfAssociations());
226   CPPUNIT_ASSERT_EQUAL(1,(int)v1.size()); CPPUNIT_ASSERT_EQUAL(1,(int)v2.size());
227   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(e1) && v1[0]->getDirection()); CPPUNIT_ASSERT(v2[0]->intresincEqCoarse(e1) && v2[0]->getDirection());
228   e2->decrRef(); e1->decrRef();
229   v1.clear(); v2.clear(); v3.clear();
230   //Testing merge of geometric equals seg2 but now with opposite direction
231   e1=new EdgeLin(0.5,0.5,0.7,0.7); e2=new EdgeLin(0.7+6.e-15,0.7-2.e-15,0.5+3.e-15,0.5-4.e-15);
232   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
233   CPPUNIT_ASSERT_EQUAL(2,(int)v3.getNumberOfAssociations());
234   CPPUNIT_ASSERT_EQUAL(1,(int)v1.size()); CPPUNIT_ASSERT_EQUAL(1,(int)v2.size());
235   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(e1) && v1[0]->getDirection()); CPPUNIT_ASSERT(v2[0]->intresincEqCoarse(e1) && !v2[0]->getDirection());//compared 8 lines above !v2[0]->getDirection()
236   e2->decrRef(); e1->decrRef();
237   v1.clear(); v2.clear(); v3.clear();
238   //Test 0
239   //Test 1 - OUT_AFTER - OUT_AFTER | same dir. - 0deg
240   e1=new EdgeLin(0.,0.,1.,0.); e2=new EdgeLin(1.5,0.,2.,0.);
241   CPPUNIT_ASSERT(!e1->intersectWith(e2,v3,v1,v2));
242   CPPUNIT_ASSERT_EQUAL(0,(int)v3.getNumberOfAssociations());
243   CPPUNIT_ASSERT_EQUAL(0,(int)v1.size());
244   CPPUNIT_ASSERT_EQUAL(0,(int)v2.size());
245   e2->decrRef(); e1->decrRef();
246   v1.clear(); v2.clear(); v3.clear();
247   //Test 2 - INSIDE - OUT_AFTER | same dir. - 0deg
248   e1=new EdgeLin(0.,0.,1.,0.); e2=new EdgeLin(0.5,0.,1.5,0.);
249   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
250   CPPUNIT_ASSERT_EQUAL(0,(int)v3.getNumberOfAssociations());
251   CPPUNIT_ASSERT_EQUAL(2,(int)v1.size());
252   CPPUNIT_ASSERT_EQUAL(2,(int)v2.size());
253   CPPUNIT_ASSERT(v1[1]->intresicEqualDirSensitive(v2[0]));
254   CPPUNIT_ASSERT(v1[0]->getEndNode()==v1[1]->getStartNode()); CPPUNIT_ASSERT(e1->getStartNode()==v1[0]->getStartNode()); CPPUNIT_ASSERT(e1->getEndNode()==v1[1]->getEndNode());
255   CPPUNIT_ASSERT(v2[0]->getEndNode()==v2[1]->getStartNode()); CPPUNIT_ASSERT(e2->getStartNode()==v2[0]->getStartNode()); CPPUNIT_ASSERT(e2->getEndNode()==v2[1]->getEndNode());
256   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
257   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
258   e2->decrRef(); e1->decrRef();
259   v1.clear(); v2.clear(); v3.clear();
260   //Test 2 - INSIDE - OUT_AFTER | same dir. - 90deg
261   e1=new EdgeLin(0.,0.,0.,1.); e2=new EdgeLin(0.,0.5,0.,1.5);
262   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
263   CPPUNIT_ASSERT_EQUAL(0,(int)v3.getNumberOfAssociations());
264   CPPUNIT_ASSERT_EQUAL(2,(int)v1.size());
265   CPPUNIT_ASSERT_EQUAL(2,(int)v2.size());
266   CPPUNIT_ASSERT(v1[1]->intresicEqualDirSensitive(v2[0]));
267   CPPUNIT_ASSERT(v1[0]->getEndNode()==v1[1]->getStartNode()); CPPUNIT_ASSERT(e1->getStartNode()==v1[0]->getStartNode()); CPPUNIT_ASSERT(e1->getEndNode()==v1[1]->getEndNode());
268   CPPUNIT_ASSERT(v2[0]->getEndNode()==v2[1]->getStartNode()); CPPUNIT_ASSERT(e2->getStartNode()==v2[0]->getStartNode()); CPPUNIT_ASSERT(e2->getEndNode()==v2[1]->getEndNode());
269   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
270   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
271   e2->decrRef(); e1->decrRef();
272   v1.clear(); v2.clear(); v3.clear();
273   //Test 2 - INSIDE - OUT_AFTER | same dir. - 45deg
274   e1=new EdgeLin(0.,0.,1.,1.); e2=new EdgeLin(0.5,0.5,1.5,1.5);
275   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
276   CPPUNIT_ASSERT_EQUAL(0,(int)v3.getNumberOfAssociations());
277   CPPUNIT_ASSERT_EQUAL(2,(int)v1.size());
278   CPPUNIT_ASSERT_EQUAL(2,(int)v2.size());
279   CPPUNIT_ASSERT(v1[1]->intresicEqualDirSensitive(v2[0]));
280   CPPUNIT_ASSERT(v1[0]->getEndNode()==v1[1]->getStartNode()); CPPUNIT_ASSERT(e1->getStartNode()==v1[0]->getStartNode()); CPPUNIT_ASSERT(e1->getEndNode()==v1[1]->getEndNode());
281   CPPUNIT_ASSERT(v2[0]->getEndNode()==v2[1]->getStartNode()); CPPUNIT_ASSERT(e2->getStartNode()==v2[0]->getStartNode()); CPPUNIT_ASSERT(e2->getEndNode()==v2[1]->getEndNode());
282   e2->decrRef(); e1->decrRef();
283   v1.clear(); v2.clear(); v3.clear();
284   //Test 2 - INSIDE - OUT_AFTER | opp. dir. - 45deg
285   e1=new EdgeLin(0.,0.,1.,1.); e2=new EdgeLin(1.5,1.5,0.5,0.5);
286   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
287   CPPUNIT_ASSERT_EQUAL(0,(int)v3.getNumberOfAssociations());
288   CPPUNIT_ASSERT_EQUAL(2,(int)v1.size());
289   CPPUNIT_ASSERT_EQUAL(2,(int)v2.size());
290   CPPUNIT_ASSERT(!v1[1]->intresicEqualDirSensitive(v2[1]) && v1[1]->intresicEqual(v2[1]));
291   CPPUNIT_ASSERT(v1[0]->getEndNode()==v1[1]->getStartNode()); CPPUNIT_ASSERT(e1->getStartNode()==v1[0]->getStartNode()); CPPUNIT_ASSERT(e1->getEndNode()==v1[1]->getEndNode());
292   CPPUNIT_ASSERT(v2[0]->getEndNode()==v2[1]->getStartNode()); CPPUNIT_ASSERT(e2->getStartNode()==v2[0]->getStartNode()); CPPUNIT_ASSERT(e2->getEndNode()==v2[1]->getEndNode());
293   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
294   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
295   e2->decrRef(); e1->decrRef();
296   v1.clear(); v2.clear(); v3.clear();
297   //Test 3 - INSIDE - INSIDE | same dir. - 0deg
298   e1=new EdgeLin(0.,0.,1.,0.); e2=new EdgeLin(0.25,0.,0.75,0.);
299   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
300   CPPUNIT_ASSERT_EQUAL(0,(int)v3.getNumberOfAssociations());
301   CPPUNIT_ASSERT_EQUAL(3,(int)v1.size());
302   CPPUNIT_ASSERT_EQUAL(1,(int)v2.size());
303   CPPUNIT_ASSERT(v1[1]->intresincEqCoarse(e2) && v1[1]->getDirection());
304   CPPUNIT_ASSERT(v1[0]->getEndNode()==v1[1]->getStartNode()); CPPUNIT_ASSERT(v1[1]->getEndNode()==v1[2]->getStartNode());
305   CPPUNIT_ASSERT(v1[0]->getStartNode()== e1->getStartNode()); CPPUNIT_ASSERT(v1[2]->getEndNode()== e1->getEndNode());
306   CPPUNIT_ASSERT(v1[0]->getEndNode()==e2->getStartNode()); CPPUNIT_ASSERT(v1[1]->getEndNode()==e2->getEndNode());
307   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
308   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
309   e2->decrRef(); e1->decrRef();
310   v1.clear(); v2.clear(); v3.clear();
311   //Test 3 - INSIDE - INSIDE | same dir. - 90deg
312   e1=new EdgeLin(0.,0.,0.,1.); e2=new EdgeLin(0.,0.25,0.,0.75);
313   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
314   CPPUNIT_ASSERT_EQUAL(0,(int)v3.getNumberOfAssociations());
315   CPPUNIT_ASSERT_EQUAL(3,(int)v1.size());
316   CPPUNIT_ASSERT_EQUAL(1,(int)v2.size());
317   CPPUNIT_ASSERT(v1[1]->intresincEqCoarse(e2) && v1[1]->getDirection());
318   CPPUNIT_ASSERT(v1[0]->getEndNode()==v1[1]->getStartNode()); CPPUNIT_ASSERT(v1[1]->getEndNode()==v1[2]->getStartNode());
319   CPPUNIT_ASSERT(v1[0]->getStartNode()== e1->getStartNode()); CPPUNIT_ASSERT(v1[2]->getEndNode()== e1->getEndNode());
320   CPPUNIT_ASSERT(v1[0]->getEndNode()==e2->getStartNode()); CPPUNIT_ASSERT(v1[1]->getEndNode()==e2->getEndNode());
321   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
322   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
323   e2->decrRef(); e1->decrRef();
324   v1.clear(); v2.clear(); v3.clear();
325   //Test 3 - INSIDE - INSIDE | same dir. - 45deg
326   e1=new EdgeLin(0.,0.,1.,1.); e2=new EdgeLin(0.25,0.25,0.75,0.75);
327   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
328   CPPUNIT_ASSERT_EQUAL(0,(int)v3.getNumberOfAssociations());
329   CPPUNIT_ASSERT_EQUAL(3,(int)v1.size());
330   CPPUNIT_ASSERT_EQUAL(1,(int)v2.size());
331   CPPUNIT_ASSERT(v1[1]->intresincEqCoarse(e2) && v1[1]->getDirection());
332   CPPUNIT_ASSERT(v1[0]->getEndNode()==v1[1]->getStartNode()); CPPUNIT_ASSERT(v1[1]->getEndNode()==v1[2]->getStartNode());
333   CPPUNIT_ASSERT(v1[0]->getStartNode()== e1->getStartNode()); CPPUNIT_ASSERT(v1[2]->getEndNode()== e1->getEndNode());
334   CPPUNIT_ASSERT(v1[0]->getEndNode()==e2->getStartNode()); CPPUNIT_ASSERT(v1[1]->getEndNode()==e2->getEndNode());
335   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
336   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
337   e2->decrRef(); e1->decrRef();
338   v1.clear(); v2.clear(); v3.clear();
339   //Test 3 - INSIDE - INSIDE | opp dir. - 45deg
340   e1=new EdgeLin(0.,0.,1.,1.); e2=new EdgeLin(0.75,0.75,0.25,0.25);
341   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
342   CPPUNIT_ASSERT_EQUAL(0,(int)v3.getNumberOfAssociations());
343   CPPUNIT_ASSERT_EQUAL(3,(int)v1.size());
344   CPPUNIT_ASSERT_EQUAL(1,(int)v2.size());
345   CPPUNIT_ASSERT(v1[1]->intresincEqCoarse(e2) && !v1[1]->getDirection());
346   CPPUNIT_ASSERT(v1[0]->getEndNode()==v1[1]->getStartNode()); CPPUNIT_ASSERT(v1[1]->getEndNode()==v1[2]->getStartNode());
347   CPPUNIT_ASSERT(v1[0]->getStartNode()== e1->getStartNode()); CPPUNIT_ASSERT(v1[2]->getEndNode()== e1->getEndNode());
348   CPPUNIT_ASSERT(v1[0]->getEndNode()==e2->getEndNode()); CPPUNIT_ASSERT(v1[1]->getEndNode()==e2->getStartNode());
349   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
350   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
351   e2->decrRef(); e1->decrRef();
352   v1.clear(); v2.clear(); v3.clear();
353   //Test 3bis - INSIDE - INSIDE - Bis | opp dir.
354   double center[2]={0.,0.};
355   double radius=1.;
356   e1=buildArcOfCircle(center,radius,-M_PI,0); e2=buildArcOfCircle(center,radius,-2*M_PI/3.+2*M_PI,-M_PI/3.);
357   CPPUNIT_ASSERT_DOUBLES_EQUAL(M_PI,e1->getCurveLength(),1e-12); CPPUNIT_ASSERT_DOUBLES_EQUAL(5.*M_PI/3.,e2->getCurveLength(),1e-12);// To check that in the previous line +2.M_PI has done its job.
358   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
359   CPPUNIT_ASSERT_EQUAL(0,(int)v3.getNumberOfAssociations());
360   CPPUNIT_ASSERT_EQUAL(3,(int)v1.size());
361   CPPUNIT_ASSERT_EQUAL(3,(int)v2.size());
362   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(v2[0]->getPtr())); CPPUNIT_ASSERT(v1[0]->getDirection()); CPPUNIT_ASSERT(!v2[0]->getDirection());
363   CPPUNIT_ASSERT(v1[2]->intresincEqCoarse(v2[2]->getPtr())); CPPUNIT_ASSERT(v1[2]->getDirection()); CPPUNIT_ASSERT(!v2[2]->getDirection());
364   CPPUNIT_ASSERT_DOUBLES_EQUAL(M_PI,v2[1]->getCurveLength(),1.e-12);
365   CPPUNIT_ASSERT_DOUBLES_EQUAL(M_PI/3.,v1[1]->getCurveLength(),1.e-12);
366   CPPUNIT_ASSERT(v2[1]->getStartNode()==e1->getStartNode());
367   CPPUNIT_ASSERT(v2[1]->getEndNode()==e1->getEndNode());
368   CPPUNIT_ASSERT(v1[0]->getStartNode()==e1->getStartNode());
369   CPPUNIT_ASSERT(v1[0]->getEndNode()==e2->getStartNode());
370   CPPUNIT_ASSERT(v1[1]->getStartNode()==e2->getStartNode());
371   CPPUNIT_ASSERT(v1[1]->getEndNode()==e2->getEndNode());
372   e2->decrRef(); e1->decrRef();
373   v1.clear(); v2.clear(); v3.clear();
374   //Test 3bis - INSIDE - INSIDE - Bis | same dir.
375   e1=buildArcOfCircle(center,radius,-M_PI,0); e2=buildArcOfCircle(center,radius,-M_PI/3.,-2*M_PI/3.+2*M_PI);
376   CPPUNIT_ASSERT_DOUBLES_EQUAL(M_PI,e1->getCurveLength(),1e-12); CPPUNIT_ASSERT_DOUBLES_EQUAL(5.*M_PI/3.,e2->getCurveLength(),1e-12);// To check that in the previous line +2.M_PI has done its job.
377   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
378   CPPUNIT_ASSERT_EQUAL(0,(int)v3.getNumberOfAssociations());
379   CPPUNIT_ASSERT_EQUAL(3,(int)v1.size());
380   CPPUNIT_ASSERT_EQUAL(3,(int)v2.size());
381   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(v2[2]->getPtr())); CPPUNIT_ASSERT(v1[0]->getDirection()); CPPUNIT_ASSERT(v2[2]->getDirection());
382   CPPUNIT_ASSERT(v1[2]->intresincEqCoarse(v2[0]->getPtr())); CPPUNIT_ASSERT(v1[2]->getDirection()); CPPUNIT_ASSERT(v2[0]->getDirection());
383   CPPUNIT_ASSERT_DOUBLES_EQUAL(M_PI,v2[1]->getCurveLength(),1.e-12);
384   CPPUNIT_ASSERT_DOUBLES_EQUAL(M_PI/3.,v1[1]->getCurveLength(),1.e-12);
385   CPPUNIT_ASSERT(v2[1]->getStartNode()==e1->getEndNode());
386   CPPUNIT_ASSERT(v2[1]->getEndNode()==e1->getStartNode());
387   CPPUNIT_ASSERT(v1[0]->getStartNode()==e1->getStartNode());
388   CPPUNIT_ASSERT(v1[0]->getEndNode()==e2->getEndNode());
389   CPPUNIT_ASSERT(v1[1]->getStartNode()==e2->getEndNode());
390   CPPUNIT_ASSERT(v1[1]->getEndNode()==e2->getStartNode());
391   e2->decrRef(); e1->decrRef();
392   v1.clear(); v2.clear(); v3.clear();
393   //Test 3bis - INSIDE - INSIDE - Bis | opp dir. | e1<->e2 to test symetry
394   e1=buildArcOfCircle(center,radius,-M_PI,0); e2=buildArcOfCircle(center,radius,-2*M_PI/3.+2*M_PI,-M_PI/3.);
395   CPPUNIT_ASSERT_DOUBLES_EQUAL(M_PI,e1->getCurveLength(),1e-12); CPPUNIT_ASSERT_DOUBLES_EQUAL(5.*M_PI/3.,e2->getCurveLength(),1e-12);// To check that in the previous line +2.M_PI has done its job.
396   CPPUNIT_ASSERT(e2->intersectWith(e1,v3,v2,v1));
397   CPPUNIT_ASSERT_EQUAL(0,(int)v3.getNumberOfAssociations());
398   CPPUNIT_ASSERT_EQUAL(3,(int)v1.size());
399   CPPUNIT_ASSERT_EQUAL(3,(int)v2.size());
400   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(v2[0]->getPtr())); CPPUNIT_ASSERT(!v1[0]->getDirection()); CPPUNIT_ASSERT(v2[0]->getDirection());
401   CPPUNIT_ASSERT(v1[2]->intresincEqCoarse(v2[2]->getPtr())); CPPUNIT_ASSERT(!v1[2]->getDirection()); CPPUNIT_ASSERT(v2[2]->getDirection());
402   CPPUNIT_ASSERT_DOUBLES_EQUAL(M_PI,v2[1]->getCurveLength(),1.e-5); // << not maximal precision because node switching 
403   CPPUNIT_ASSERT_DOUBLES_EQUAL(M_PI/3.,v1[1]->getCurveLength(),1.e-12);
404   CPPUNIT_ASSERT(v2[1]->getStartNode()==e1->getStartNode());
405   CPPUNIT_ASSERT(v2[1]->getEndNode()==e1->getEndNode());
406   CPPUNIT_ASSERT(v1[0]->getStartNode()==e1->getStartNode());
407   CPPUNIT_ASSERT(v1[0]->getEndNode()==e2->getStartNode());
408   CPPUNIT_ASSERT(v1[1]->getStartNode()==e2->getStartNode());
409   CPPUNIT_ASSERT(v1[1]->getEndNode()==e2->getEndNode());
410   e2->decrRef(); e1->decrRef();
411   v1.clear(); v2.clear(); v3.clear();
412   //Test 3bis - INSIDE - INSIDE - Bis | same dir. | e1<->e2 to test symetry
413   e1=buildArcOfCircle(center,radius,-M_PI,0); e2=buildArcOfCircle(center,radius,-M_PI/3.,-2*M_PI/3.+2*M_PI);
414   CPPUNIT_ASSERT_DOUBLES_EQUAL(M_PI,e1->getCurveLength(),1e-12); CPPUNIT_ASSERT_DOUBLES_EQUAL(5.*M_PI/3.,e2->getCurveLength(),1e-12);// To check that in the previous line +2.M_PI has done its job.
415   CPPUNIT_ASSERT(e2->intersectWith(e1,v3,v2,v1));
416   CPPUNIT_ASSERT_EQUAL(0,(int)v3.getNumberOfAssociations());
417   CPPUNIT_ASSERT_EQUAL(3,(int)v1.size());
418   CPPUNIT_ASSERT_EQUAL(3,(int)v2.size());
419   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(v2[2]->getPtr())); CPPUNIT_ASSERT(v1[0]->getDirection()); CPPUNIT_ASSERT(v2[2]->getDirection());
420   CPPUNIT_ASSERT(v1[2]->intresincEqCoarse(v2[0]->getPtr())); CPPUNIT_ASSERT(v1[2]->getDirection()); CPPUNIT_ASSERT(v2[0]->getDirection());
421   CPPUNIT_ASSERT_DOUBLES_EQUAL(M_PI,v2[1]->getCurveLength(),1.e-5); // << not maximal precision because node switching 
422   CPPUNIT_ASSERT_DOUBLES_EQUAL(M_PI/3.,v1[1]->getCurveLength(),1.e-12);
423   CPPUNIT_ASSERT(v2[1]->getStartNode()==e1->getEndNode());
424   CPPUNIT_ASSERT(v2[1]->getEndNode()==e1->getStartNode());
425   CPPUNIT_ASSERT(v1[0]->getStartNode()==e1->getStartNode());
426   CPPUNIT_ASSERT(v1[0]->getEndNode()==e2->getEndNode());
427   CPPUNIT_ASSERT(v1[1]->getStartNode()==e2->getEndNode());
428   CPPUNIT_ASSERT(v1[1]->getEndNode()==e2->getStartNode());
429   e2->decrRef(); e1->decrRef();
430   v1.clear(); v2.clear(); v3.clear();
431   //Test 4 - OUT_BEFORE - OUT_BEFORE | same dir. - 0 deg
432   e1=new EdgeLin(0.,0.,1.,0.); e2=new EdgeLin(-1.,0.,-0.5,0.);
433   CPPUNIT_ASSERT(!e1->intersectWith(e2,v3,v1,v2));
434   CPPUNIT_ASSERT_EQUAL(0,(int)v3.getNumberOfAssociations());
435   CPPUNIT_ASSERT_EQUAL(0,(int)v1.size());
436   CPPUNIT_ASSERT_EQUAL(0,(int)v2.size());
437   e2->decrRef(); e1->decrRef();
438   v1.clear(); v2.clear(); v3.clear();
439   //Test 5 - OUT_BEFORE - INSIDE | same dir. - 0deg
440   e1=new EdgeLin(0.,0.,1.,0.); e2=new EdgeLin(-0.5,0.,0.5,0.);
441   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
442   CPPUNIT_ASSERT_EQUAL(0,(int)v3.getNumberOfAssociations());
443   CPPUNIT_ASSERT_EQUAL(2,(int)v1.size());
444   CPPUNIT_ASSERT_EQUAL(2,(int)v2.size());
445   CPPUNIT_ASSERT(v1[0]->intresicEqualDirSensitive(v2[1]));
446   CPPUNIT_ASSERT(v1[0]->getEndNode()==v1[1]->getStartNode()); CPPUNIT_ASSERT(v2[0]->getEndNode()==v2[1]->getStartNode());
447   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
448   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
449   e2->decrRef(); e1->decrRef();
450   v1.clear(); v2.clear(); v3.clear();
451   //Test 5 - OUT_BEFORE - INSIDE | same dir. - 90deg
452   e1=new EdgeLin(0.,0.,0.,1.); e2=new EdgeLin(0,-0.5,0.,0.5);
453   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
454   CPPUNIT_ASSERT_EQUAL(0,(int)v3.getNumberOfAssociations());
455   CPPUNIT_ASSERT_EQUAL(2,(int)v1.size());
456   CPPUNIT_ASSERT_EQUAL(2,(int)v2.size());
457   CPPUNIT_ASSERT(v1[0]->intresicEqualDirSensitive(v2[1]));
458   CPPUNIT_ASSERT(v1[0]->getEndNode()==v1[1]->getStartNode()); CPPUNIT_ASSERT(v2[0]->getEndNode()==v2[1]->getStartNode());
459   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
460   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
461   e2->decrRef(); e1->decrRef();
462   v1.clear(); v2.clear(); v3.clear();
463   //Test 5 - OUT_BEFORE - INSIDE | same dir. - 45deg
464   e1=new EdgeLin(0.,0.,1.,1.); e2=new EdgeLin(-0.5,-0.5,0.5,0.5);
465   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
466   CPPUNIT_ASSERT_EQUAL(0,(int)v3.getNumberOfAssociations());
467   CPPUNIT_ASSERT_EQUAL(2,(int)v1.size());
468   CPPUNIT_ASSERT_EQUAL(2,(int)v2.size());
469   CPPUNIT_ASSERT(v1[0]->intresicEqualDirSensitive(v2[1]));
470   CPPUNIT_ASSERT(v1[0]->getEndNode()==v1[1]->getStartNode()); CPPUNIT_ASSERT(v2[0]->getEndNode()==v2[1]->getStartNode());
471   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
472   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
473   e2->decrRef(); e1->decrRef();
474   v1.clear(); v2.clear(); v3.clear();
475   //Test 5 - OUT_BEFORE - INSIDE | opp dir. - 45deg
476   e1=new EdgeLin(0.,0.,1.,1.); e2=new EdgeLin(0.5,0.5,-0.5,-0.5);
477   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
478   CPPUNIT_ASSERT_EQUAL(0,(int)v3.getNumberOfAssociations());
479   CPPUNIT_ASSERT_EQUAL(2,(int)v1.size());
480   CPPUNIT_ASSERT_EQUAL(2,(int)v2.size());
481   CPPUNIT_ASSERT(!v1[0]->intresicEqualDirSensitive(v2[0]) && v1[0]->intresicEqual(v2[0]) );
482   CPPUNIT_ASSERT(v1[0]->getEndNode()==v1[1]->getStartNode()); CPPUNIT_ASSERT(v2[0]->getEndNode()==v2[1]->getStartNode());
483   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
484   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
485   e2->decrRef(); e1->decrRef();
486   v1.clear(); v2.clear(); v3.clear();
487   //Test 6 - OUT_BEFORE - OUT_AFTER | same dir. - 0deg
488   e1=new EdgeLin(0.,0.,1.,0.); e2=new EdgeLin(-0.5,0.,1.5,0.);
489   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
490   CPPUNIT_ASSERT_EQUAL(0,(int)v3.getNumberOfAssociations());
491   CPPUNIT_ASSERT_EQUAL(1,(int)v1.size());
492   CPPUNIT_ASSERT_EQUAL(3,(int)v2.size());
493   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(e1) && v1[0]->getDirection());
494   CPPUNIT_ASSERT(v2[1]->intresincEqCoarse(e1) && v2[1]->getDirection());
495   CPPUNIT_ASSERT(v2[0]->getEndNode()==v2[1]->getStartNode() && v2[1]->getEndNode()==v2[2]->getStartNode());
496   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
497   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
498   e2->decrRef(); e1->decrRef();
499   v1.clear(); v2.clear(); v3.clear();
500   //Test 6 - OUT_BEFORE - OUT_AFTER | same dir. - 90deg
501   e1=new EdgeLin(0.,0.,0.,1.); e2=new EdgeLin(0.,-0.5,0.,1.5);
502   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
503   CPPUNIT_ASSERT_EQUAL(0,(int)v3.getNumberOfAssociations());
504   CPPUNIT_ASSERT_EQUAL(1,(int)v1.size());
505   CPPUNIT_ASSERT_EQUAL(3,(int)v2.size());
506   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(e1) && v1[0]->getDirection());
507   CPPUNIT_ASSERT(v2[1]->intresincEqCoarse(e1) && v2[1]->getDirection());
508   CPPUNIT_ASSERT(v2[0]->getEndNode()==v2[1]->getStartNode() && v2[1]->getEndNode()==v2[2]->getStartNode());
509   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
510   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
511   e2->decrRef(); e1->decrRef();
512   v1.clear(); v2.clear(); v3.clear();
513   //Test 6 - OUT_BEFORE - OUT_AFTER | same dir. - 45deg
514   e1=new EdgeLin(0.,0.,1.,1.); e2=new EdgeLin(-0.5,-0.5,1.5,1.5);
515   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
516   CPPUNIT_ASSERT_EQUAL(0,(int)v3.getNumberOfAssociations());
517   CPPUNIT_ASSERT_EQUAL(1,(int)v1.size());
518   CPPUNIT_ASSERT_EQUAL(3,(int)v2.size());
519   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(e1) && v1[0]->getDirection());
520   CPPUNIT_ASSERT(v2[1]->intresincEqCoarse(e1) && v2[1]->getDirection());
521   CPPUNIT_ASSERT(v2[0]->getEndNode()==v2[1]->getStartNode() && v2[1]->getEndNode()==v2[2]->getStartNode());
522   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
523   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
524   e2->decrRef(); e1->decrRef();
525   v1.clear(); v2.clear(); v3.clear();
526   //Test 6 - OUT_BEFORE - OUT_AFTER | opp dir. - 45deg
527   e1=new EdgeLin(0.,0.,1.,1.); e2=new EdgeLin(1.5,1.5,-0.5,-0.5);
528   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
529   CPPUNIT_ASSERT_EQUAL(0,(int)v3.getNumberOfAssociations());
530   CPPUNIT_ASSERT_EQUAL(1,(int)v1.size());
531   CPPUNIT_ASSERT_EQUAL(3,(int)v2.size());
532   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(e1) && v1[0]->getDirection());
533   CPPUNIT_ASSERT(v2[1]->intresincEqCoarse(e1) && !v2[1]->getDirection());
534   CPPUNIT_ASSERT(v2[0]->getEndNode()==v2[1]->getStartNode() && v2[1]->getEndNode()==v2[2]->getStartNode());
535   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
536   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
537   e2->decrRef(); e1->decrRef();
538   v1.clear(); v2.clear(); v3.clear();
539   //Test 7 - END - OUT_AFTER | same dir. - 0deg
540   e1=new EdgeLin(0.,0.,1.,0.); e2=new EdgeLin(1.,0.,1.5,0.);
541   CPPUNIT_ASSERT(!e1->intersectWith(e2,v3,v1,v2));
542   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
543   CPPUNIT_ASSERT_EQUAL(0,(int)v1.size());
544   CPPUNIT_ASSERT_EQUAL(0,(int)v2.size());
545   e2->decrRef(); e1->decrRef();
546   v1.clear(); v2.clear(); v3.clear();
547   //Test 7 - END - OUT_AFTER | opp dir. - 0deg
548   e1=new EdgeLin(0.,0.,1.,0.); e2=new EdgeLin(1.5,0.,1.,0.);
549   CPPUNIT_ASSERT(!e1->intersectWith(e2,v3,v1,v2));
550   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
551   CPPUNIT_ASSERT_EQUAL(0,(int)v1.size());
552   CPPUNIT_ASSERT_EQUAL(0,(int)v2.size());
553   CPPUNIT_ASSERT(e1->getEndNode()==e2->getEndNode());
554   e2->decrRef(); e1->decrRef();
555   v1.clear(); v2.clear(); v3.clear();
556   //Test 8 - START - END | same dir. - 0deg
557   e1=new EdgeLin(0.,0.,0.7,0.); e2=new EdgeLin(0.,0.,0.7,0.);
558   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
559   CPPUNIT_ASSERT_EQUAL(2,(int)v3.getNumberOfAssociations());
560   CPPUNIT_ASSERT_EQUAL(1,(int)v1.size());
561   CPPUNIT_ASSERT_EQUAL(1,(int)v2.size());
562   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(e1) && v1[0]->getDirection()); CPPUNIT_ASSERT(v2[0]->intresincEqCoarse(e1) && v2[0]->getDirection());
563   CPPUNIT_ASSERT(e1->getStartNode()==e2->getStartNode()); CPPUNIT_ASSERT(e1->getEndNode()==e2->getEndNode());
564   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
565   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
566   e2->decrRef(); e1->decrRef();
567   v1.clear(); v2.clear(); v3.clear();
568   //Test 8 - START - END | same dir. - 90deg
569   e1=new EdgeLin(0.,0.,0.,0.7); e2=new EdgeLin(0.,0.,0.,0.7);
570   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
571   CPPUNIT_ASSERT_EQUAL(2,(int)v3.getNumberOfAssociations());
572   CPPUNIT_ASSERT_EQUAL(1,(int)v1.size());
573   CPPUNIT_ASSERT_EQUAL(1,(int)v2.size());
574   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(e1) && v1[0]->getDirection()); CPPUNIT_ASSERT(v2[0]->intresincEqCoarse(e1) && v2[0]->getDirection());
575   CPPUNIT_ASSERT(e1->getStartNode()==e2->getStartNode()); CPPUNIT_ASSERT(e1->getEndNode()==e2->getEndNode());
576   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
577   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
578   e2->decrRef(); e1->decrRef();
579   v1.clear(); v2.clear(); v3.clear();
580   //Test 8 - START - END | same dir. - 45deg
581   e1=new EdgeLin(0.,0.,0.7,0.7); e2=new EdgeLin(0.,0.,0.7,0.7);
582   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
583   CPPUNIT_ASSERT_EQUAL(2,(int)v3.getNumberOfAssociations());
584   CPPUNIT_ASSERT_EQUAL(1,(int)v1.size());
585   CPPUNIT_ASSERT_EQUAL(1,(int)v2.size());
586   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(e1) && v1[0]->getDirection()); CPPUNIT_ASSERT(v2[0]->intresincEqCoarse(e1) && v2[0]->getDirection());
587   CPPUNIT_ASSERT(e1->getStartNode()==e2->getStartNode()); CPPUNIT_ASSERT(e1->getEndNode()==e2->getEndNode());
588   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
589   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
590   e2->decrRef(); e1->decrRef();
591   v1.clear(); v2.clear(); v3.clear();
592   //Test 8 - START - END | opp. dir. - 45deg
593   e1=new EdgeLin(0.,0.,0.7,0.7); e2=new EdgeLin(0.7,0.7,0.,0.);
594   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
595   CPPUNIT_ASSERT_EQUAL(2,(int)v3.getNumberOfAssociations());
596   CPPUNIT_ASSERT_EQUAL(1,(int)v1.size());
597   CPPUNIT_ASSERT_EQUAL(1,(int)v2.size());
598   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(e1) && v1[0]->getDirection()); CPPUNIT_ASSERT(v2[0]->intresincEqCoarse(e1) && !v2[0]->getDirection());
599   CPPUNIT_ASSERT(e1->getStartNode()==e2->getEndNode()); CPPUNIT_ASSERT(e1->getEndNode()==e2->getStartNode());
600   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
601   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
602   e2->decrRef(); e1->decrRef();
603   v1.clear(); v2.clear(); v3.clear();
604   //Test 9 - OUT_BEFORE - START | same dir.
605   e1=new EdgeLin(0.,0.,1.,0.); e2=new EdgeLin(-0.5,0.,0.,0.);
606   CPPUNIT_ASSERT(!e1->intersectWith(e2,v3,v1,v2));
607   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
608   CPPUNIT_ASSERT_EQUAL(0,(int)v1.size());
609   CPPUNIT_ASSERT_EQUAL(0,(int)v2.size());
610   CPPUNIT_ASSERT(e2->getEndNode()==e1->getStartNode());
611   e2->decrRef(); e1->decrRef();
612   v1.clear(); v2.clear(); v3.clear();
613   //Test 10 - START - OUT_AFTER | same dir. - 0deg
614   e1=new EdgeLin(0.,0.,0.7,0.); e2=new EdgeLin(0.,0.,1.,0.);
615   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
616   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
617   CPPUNIT_ASSERT_EQUAL(1,(int)v1.size());
618   CPPUNIT_ASSERT_EQUAL(2,(int)v2.size());
619   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(e1) && v1[0]->getDirection()); CPPUNIT_ASSERT(v2[0]->intresincEqCoarse(e1) && v2[0]->getDirection()); 
620   CPPUNIT_ASSERT(e1->getStartNode()==v1[0]->getStartNode()); CPPUNIT_ASSERT(e1->getStartNode()==e2->getStartNode()); CPPUNIT_ASSERT(v2[1]->getEndNode()==e2->getEndNode());
621   CPPUNIT_ASSERT(v2[0]->getEndNode()==v2[1]->getStartNode());
622   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
623   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
624   e2->decrRef(); e1->decrRef();
625   v1.clear(); v2.clear(); v3.clear();
626   //Test 10 - START - OUT_AFTER | same dir. - 90deg
627   e1=new EdgeLin(0.,0.,0.,0.7); e2=new EdgeLin(0.,0.,0.,1.);
628   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
629   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
630   CPPUNIT_ASSERT_EQUAL(1,(int)v1.size());
631   CPPUNIT_ASSERT_EQUAL(2,(int)v2.size());
632   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(e1) && v1[0]->getDirection()); CPPUNIT_ASSERT(v2[0]->intresincEqCoarse(e1) && v2[0]->getDirection()); 
633   CPPUNIT_ASSERT(e1->getStartNode()==v1[0]->getStartNode()); CPPUNIT_ASSERT(e1->getStartNode()==e2->getStartNode()); CPPUNIT_ASSERT(v2[1]->getEndNode()==e2->getEndNode());
634   CPPUNIT_ASSERT(v2[0]->getEndNode()==v2[1]->getStartNode());
635   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
636   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
637   e2->decrRef(); e1->decrRef();
638   v1.clear(); v2.clear(); v3.clear();
639   //Test 10 - START - OUT_AFTER | same dir. - 45deg
640   e1=new EdgeLin(0.,0.,0.7,0.7); e2=new EdgeLin(0.,0.,1.,1.);
641   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
642   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
643   CPPUNIT_ASSERT_EQUAL(1,(int)v1.size());
644   CPPUNIT_ASSERT_EQUAL(2,(int)v2.size());
645   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(e1) && v1[0]->getDirection()); CPPUNIT_ASSERT(v2[0]->intresincEqCoarse(e1) && v2[0]->getDirection()); 
646   CPPUNIT_ASSERT(e1->getStartNode()==v1[0]->getStartNode()); CPPUNIT_ASSERT(e1->getStartNode()==e2->getStartNode()); CPPUNIT_ASSERT(v2[1]->getEndNode()==e2->getEndNode());
647   CPPUNIT_ASSERT(v2[0]->getEndNode()==v2[1]->getStartNode());
648   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
649   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
650   e2->decrRef(); e1->decrRef();
651   v1.clear(); v2.clear(); v3.clear();
652   //Test 10 - START - OUT_AFTER | opp dir. - 45deg
653   e1=new EdgeLin(0.,0.,0.7,0.7); e2=new EdgeLin(1.,1.,0.,0.);
654   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
655   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
656   CPPUNIT_ASSERT_EQUAL(1,(int)v1.size());
657   CPPUNIT_ASSERT_EQUAL(2,(int)v2.size());
658   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(e1) && v1[0]->getDirection()); CPPUNIT_ASSERT(v2[1]->intresincEqCoarse(e1) && !v2[1]->getDirection()); 
659   CPPUNIT_ASSERT(e1->getStartNode()==v1[0]->getStartNode()); CPPUNIT_ASSERT(e1->getStartNode()==e2->getEndNode()); CPPUNIT_ASSERT(v2[1]->getEndNode()==e2->getEndNode());
660   CPPUNIT_ASSERT(v2[0]->getEndNode()==v2[1]->getStartNode());
661   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
662   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
663   e2->decrRef(); e1->decrRef();
664   v1.clear(); v2.clear(); v3.clear();
665   //Test 11 - INSIDE - END | same dir. - 0deg
666   e1=new EdgeLin(0.,0.,1.,0.); e2=new EdgeLin(0.7,0.,1.,0.);
667   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
668   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
669   CPPUNIT_ASSERT_EQUAL(2,(int)v1.size());
670   CPPUNIT_ASSERT_EQUAL(1,(int)v2.size());
671   CPPUNIT_ASSERT(v1[1]->intresincEqCoarse(e2) && v1[1]->getDirection()); CPPUNIT_ASSERT(v2[0]->intresincEqCoarse(e2) && v2[0]->getDirection()); 
672   CPPUNIT_ASSERT(e1->getStartNode()==v1[0]->getStartNode()); CPPUNIT_ASSERT(e1->getEndNode()==v1[1]->getEndNode()); CPPUNIT_ASSERT(e1->getEndNode()==e2->getEndNode());
673   CPPUNIT_ASSERT(v1[0]->getEndNode()==v1[1]->getStartNode());
674   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
675   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
676   e2->decrRef(); e1->decrRef();
677   v1.clear(); v2.clear(); v3.clear();
678   //Test 11 - INSIDE - END | same dir. - 90deg
679   e1=new EdgeLin(0.,0.,0.,1.); e2=new EdgeLin(0.,0.7,0.,1.);
680   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
681   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
682   CPPUNIT_ASSERT_EQUAL(2,(int)v1.size());
683   CPPUNIT_ASSERT_EQUAL(1,(int)v2.size());
684   CPPUNIT_ASSERT(v1[1]->intresincEqCoarse(e2) && v1[1]->getDirection()); CPPUNIT_ASSERT(v2[0]->intresincEqCoarse(e2) && v2[0]->getDirection()); 
685   CPPUNIT_ASSERT(e1->getStartNode()==v1[0]->getStartNode()); CPPUNIT_ASSERT(e1->getEndNode()==v1[1]->getEndNode()); CPPUNIT_ASSERT(e1->getEndNode()==e2->getEndNode());
686   CPPUNIT_ASSERT(v1[0]->getEndNode()==v1[1]->getStartNode());
687   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
688   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
689   e2->decrRef(); e1->decrRef();
690   v1.clear(); v2.clear(); v3.clear();
691   //Test 11 - INSIDE - END | same dir. - 45deg
692   e1=new EdgeLin(0.,0.,1.,1.); e2=new EdgeLin(0.7,0.7,1.,1.);
693   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
694   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
695   CPPUNIT_ASSERT_EQUAL(2,(int)v1.size());
696   CPPUNIT_ASSERT_EQUAL(1,(int)v2.size());
697   CPPUNIT_ASSERT(v1[1]->intresincEqCoarse(e2) && v1[1]->getDirection()); CPPUNIT_ASSERT(v2[0]->intresincEqCoarse(e2) && v2[0]->getDirection()); 
698   CPPUNIT_ASSERT(e1->getStartNode()==v1[0]->getStartNode()); CPPUNIT_ASSERT(e1->getEndNode()==v1[1]->getEndNode()); CPPUNIT_ASSERT(e1->getEndNode()==e2->getEndNode());
699   CPPUNIT_ASSERT(v1[0]->getEndNode()==v1[1]->getStartNode());
700   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
701   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
702   e2->decrRef(); e1->decrRef();
703   v1.clear(); v2.clear(); v3.clear();
704   //Test 11 - INSIDE - END | opp dir. - 45deg
705   e1=new EdgeLin(0.,0.,1.,1.); e2=new EdgeLin(1.,1.,0.7,0.7);
706   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
707   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
708   CPPUNIT_ASSERT_EQUAL(2,(int)v1.size());
709   CPPUNIT_ASSERT_EQUAL(1,(int)v2.size());
710   CPPUNIT_ASSERT(e1->getStartNode()==v1[0]->getStartNode()); CPPUNIT_ASSERT(e1->getEndNode()==v1[1]->getEndNode()); CPPUNIT_ASSERT(e1->getEndNode()==e2->getStartNode());
711   CPPUNIT_ASSERT(v1[1]->intresincEqCoarse(e2) && !v1[1]->getDirection()); CPPUNIT_ASSERT(v2[0]->intresincEqCoarse(e2) && v2[0]->getDirection()); 
712   CPPUNIT_ASSERT(v1[0]->getEndNode()==v1[1]->getStartNode());
713   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
714   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
715   e2->decrRef(); e1->decrRef();
716   v1.clear(); v2.clear(); v3.clear();
717   //Test 12 - OUT_BEFORE - END | same dir. - 0deg
718   e1=new EdgeLin(0.,0.,1.,0.); e2=new EdgeLin(-0.5,0.,1.,0.);
719   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
720   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
721   CPPUNIT_ASSERT_EQUAL(1,(int)v1.size());
722   CPPUNIT_ASSERT_EQUAL(2,(int)v2.size());
723   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(e1) && v1[0]->getDirection()); CPPUNIT_ASSERT(v2[1]->intresincEqCoarse(e1) && v2[1]->getDirection());
724   CPPUNIT_ASSERT(e2->getStartNode()==v2[0]->getStartNode()); CPPUNIT_ASSERT(e1->getEndNode()==e2->getEndNode()); CPPUNIT_ASSERT(e2->getEndNode()==v2[1]->getEndNode());
725   CPPUNIT_ASSERT(v2[0]->getEndNode()==v2[1]->getStartNode());
726   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
727   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
728   e2->decrRef(); e1->decrRef();
729   v1.clear(); v2.clear(); v3.clear();
730   //Test 12 - OUT_BEFORE - END | same dir. - 90deg
731   e1=new EdgeLin(0.,0.,0.,1.); e2=new EdgeLin(0.,-0.5,0.,1.);
732   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
733   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
734   CPPUNIT_ASSERT_EQUAL(1,(int)v1.size());
735   CPPUNIT_ASSERT_EQUAL(2,(int)v2.size());
736   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(e1) && v1[0]->getDirection()); CPPUNIT_ASSERT(v2[1]->intresincEqCoarse(e1) && v2[1]->getDirection());
737   CPPUNIT_ASSERT(e2->getStartNode()==v2[0]->getStartNode()); CPPUNIT_ASSERT(e1->getEndNode()==e2->getEndNode()); CPPUNIT_ASSERT(e2->getEndNode()==v2[1]->getEndNode());
738   CPPUNIT_ASSERT(v2[0]->getEndNode()==v2[1]->getStartNode());
739   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
740   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
741   e2->decrRef(); e1->decrRef();
742   v1.clear(); v2.clear(); v3.clear();
743   //Test 12 - OUT_BEFORE - END | same dir. - 45deg
744   e1=new EdgeLin(0.,0.,1.,1.); e2=new EdgeLin(-0.5,-0.5,1.,1.);
745   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
746   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
747   CPPUNIT_ASSERT_EQUAL(1,(int)v1.size());
748   CPPUNIT_ASSERT_EQUAL(2,(int)v2.size());
749   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(e1) && v1[0]->getDirection()); CPPUNIT_ASSERT(v2[1]->intresincEqCoarse(e1) && v2[1]->getDirection());
750   CPPUNIT_ASSERT(e2->getStartNode()==v2[0]->getStartNode()); CPPUNIT_ASSERT(e1->getEndNode()==e2->getEndNode()); CPPUNIT_ASSERT(e2->getEndNode()==v2[1]->getEndNode());
751   CPPUNIT_ASSERT(v2[0]->getEndNode()==v2[1]->getStartNode());
752   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
753   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
754   e2->decrRef(); e1->decrRef();
755   v1.clear(); v2.clear(); v3.clear();
756   //Test 12 - OUT_BEFORE - END | opp dir. - 45deg
757   e1=new EdgeLin(0.,0.,1.,1.); e2=new EdgeLin(1.,1.,-0.5,-0.5);
758   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
759   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
760   CPPUNIT_ASSERT_EQUAL(1,(int)v1.size());
761   CPPUNIT_ASSERT_EQUAL(2,(int)v2.size());
762   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(e1) && v1[0]->getDirection()); CPPUNIT_ASSERT(v2[0]->intresincEqCoarse(e1) && !v2[0]->getDirection());
763   CPPUNIT_ASSERT(e2->getStartNode()==v2[0]->getStartNode()); CPPUNIT_ASSERT(e1->getEndNode()==e2->getStartNode()); CPPUNIT_ASSERT(e2->getEndNode()==v2[1]->getEndNode());
764   CPPUNIT_ASSERT(v2[0]->getEndNode()==v2[1]->getStartNode());
765   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
766   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
767   e2->decrRef(); e1->decrRef();
768   v1.clear(); v2.clear(); v3.clear();
769   //Test 13 - START - INSIDE | same dir. - 0deg
770   e1=new EdgeLin(0.,0.,1.,0.); e2=new EdgeLin(0.,0.,0.5,0.);
771   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
772   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
773   CPPUNIT_ASSERT_EQUAL(2,(int)v1.size());
774   CPPUNIT_ASSERT_EQUAL(1,(int)v2.size());
775   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(e2) && v1[0]->getDirection()); CPPUNIT_ASSERT(v2[0]->intresincEqCoarse(e2) && v2[0]->getDirection());
776   CPPUNIT_ASSERT(e2->getStartNode()==v1[0]->getStartNode()); CPPUNIT_ASSERT(e1->getStartNode()==e2->getStartNode()); CPPUNIT_ASSERT(e1->getEndNode()==v1[1]->getEndNode());
777   CPPUNIT_ASSERT(v1[0]->getEndNode()==v1[1]->getStartNode());
778   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
779   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
780   e2->decrRef(); e1->decrRef();
781   v1.clear(); v2.clear(); v3.clear();
782   //Test 13 - START - INSIDE | same dir. - 90deg
783   e1=new EdgeLin(0.,0.,0.,1.); e2=new EdgeLin(0.,0.,0.,0.5);
784   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
785   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
786   CPPUNIT_ASSERT_EQUAL(2,(int)v1.size());
787   CPPUNIT_ASSERT_EQUAL(1,(int)v2.size());
788   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(e2) && v1[0]->getDirection()); CPPUNIT_ASSERT(v2[0]->intresincEqCoarse(e2) && v2[0]->getDirection());
789   CPPUNIT_ASSERT(e2->getStartNode()==v1[0]->getStartNode()); CPPUNIT_ASSERT(e1->getStartNode()==e2->getStartNode()); CPPUNIT_ASSERT(e1->getEndNode()==v1[1]->getEndNode());
790   CPPUNIT_ASSERT(v1[0]->getEndNode()==v1[1]->getStartNode());
791   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
792   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
793   e2->decrRef(); e1->decrRef();
794   v1.clear(); v2.clear(); v3.clear();
795   //Test 13 - START - INSIDE | same dir. - 45deg
796   e1=new EdgeLin(0.,0.,1.,1.); e2=new EdgeLin(0.,0.,0.5,0.5);
797   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
798   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
799   CPPUNIT_ASSERT_EQUAL(2,(int)v1.size());
800   CPPUNIT_ASSERT_EQUAL(1,(int)v2.size());
801   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(e2) && v1[0]->getDirection()); CPPUNIT_ASSERT(v2[0]->intresincEqCoarse(e2) && v2[0]->getDirection());
802   CPPUNIT_ASSERT(e2->getStartNode()==v1[0]->getStartNode()); CPPUNIT_ASSERT(e1->getStartNode()==e2->getStartNode()); CPPUNIT_ASSERT(e1->getEndNode()==v1[1]->getEndNode());
803   CPPUNIT_ASSERT(v1[0]->getEndNode()==v1[1]->getStartNode());
804   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
805   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
806   e2->decrRef(); e1->decrRef();
807   v1.clear(); v2.clear(); v3.clear();
808   //Test 13 - START - INSIDE | opp dir. - 45deg
809   e1=new EdgeLin(0.,0.,1.,1.); e2=new EdgeLin(0.5,0.5,0.,0.);
810   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
811   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
812   CPPUNIT_ASSERT_EQUAL(2,(int)v1.size());
813   CPPUNIT_ASSERT_EQUAL(1,(int)v2.size());
814   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(e2) && !v1[0]->getDirection()); CPPUNIT_ASSERT(v2[0]->intresincEqCoarse(e2) && v2[0]->getDirection());
815   CPPUNIT_ASSERT(e2->getEndNode()==v1[0]->getStartNode()); CPPUNIT_ASSERT(e1->getStartNode()==e2->getEndNode()); CPPUNIT_ASSERT(e1->getEndNode()==v1[1]->getEndNode());
816   CPPUNIT_ASSERT(v1[0]->getEndNode()==v1[1]->getStartNode());
817   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
818   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
819   e2->decrRef(); e1->decrRef();
820   v1.clear(); v2.clear(); v3.clear();
821   //Test 14 - INSIDE - START | same dir.
822   e1=buildArcOfCircle(center,radius,-M_PI,2.*M_PI); e2=buildArcOfCircle(center,radius,M_PI/3.,-M_PI);
823   CPPUNIT_ASSERT_DOUBLES_EQUAL(M_PI,e1->getCurveLength(),1e-12); CPPUNIT_ASSERT_DOUBLES_EQUAL(4.*M_PI/3.,e2->getCurveLength(),1e-12);
824   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
825   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
826   CPPUNIT_ASSERT_EQUAL(2,(int)v1.size());
827   CPPUNIT_ASSERT_EQUAL(2,(int)v2.size());
828   CPPUNIT_ASSERT(v1[1]->intresicEqual(v2[0]));
829   CPPUNIT_ASSERT(v2[1]->getEndNode()==e1->getStartNode());
830   CPPUNIT_ASSERT(v1[0]->getStartNode()==e1->getStartNode());
831   CPPUNIT_ASSERT(v1[1]->getEndNode()==e1->getEndNode());
832   CPPUNIT_ASSERT(v2[1]->getStartNode()==e1->getEndNode());
833   CPPUNIT_ASSERT_DOUBLES_EQUAL(2*M_PI/3.,v1[0]->getCurveLength(),1.e-12);
834   CPPUNIT_ASSERT_DOUBLES_EQUAL(M_PI/3.,v2[0]->getCurveLength(),1.e-12);
835   CPPUNIT_ASSERT_DOUBLES_EQUAL(M_PI,v2[1]->getCurveLength(),1.e-12);
836   e2->decrRef(); e1->decrRef();
837   v1.clear(); v2.clear(); v3.clear();
838   //Test 14 - INSIDE - START | opp dir.
839   e1=buildArcOfCircle(center,radius,-M_PI,2.*M_PI); e2=buildArcOfCircle(center,radius,-M_PI,M_PI/3.);
840   CPPUNIT_ASSERT_DOUBLES_EQUAL(M_PI,e1->getCurveLength(),1e-12); CPPUNIT_ASSERT_DOUBLES_EQUAL(4.*M_PI/3.,e2->getCurveLength(),1e-12);
841   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
842   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
843   CPPUNIT_ASSERT_EQUAL(2,(int)v1.size());
844   CPPUNIT_ASSERT_EQUAL(2,(int)v2.size());
845   CPPUNIT_ASSERT(v1[1]->intresincEqCoarse(v2[1]->getPtr()) && !v2[1]->getDirection() && v1[1]->getDirection());
846   CPPUNIT_ASSERT(v2[0]->getStartNode()==e1->getStartNode());
847   CPPUNIT_ASSERT(v1[0]->getStartNode()==e1->getStartNode());
848   CPPUNIT_ASSERT(v1[1]->getEndNode()==e1->getEndNode());
849   CPPUNIT_ASSERT(v2[1]->getStartNode()==e1->getEndNode());
850   CPPUNIT_ASSERT(v2[0]->getEndNode()==e1->getEndNode());
851   CPPUNIT_ASSERT_DOUBLES_EQUAL(2*M_PI/3.,v1[0]->getCurveLength(),1.e-12);
852   CPPUNIT_ASSERT_DOUBLES_EQUAL(M_PI/3.,v2[1]->getCurveLength(),1.e-12);
853   CPPUNIT_ASSERT_DOUBLES_EQUAL(M_PI,v2[0]->getCurveLength(),1.e-12);
854   e2->decrRef(); e1->decrRef();
855   v1.clear(); v2.clear(); v3.clear();
856   //Test 15 - END - INSIDE | same dir.
857   e1=buildArcOfCircle(center,radius,-M_PI,2.*M_PI); e2=buildArcOfCircle(center,radius,0.,-4.*M_PI/3);
858   CPPUNIT_ASSERT_DOUBLES_EQUAL(M_PI,e1->getCurveLength(),1e-12); CPPUNIT_ASSERT_DOUBLES_EQUAL(4.*M_PI/3.,e2->getCurveLength(),1e-12);
859   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
860   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
861   CPPUNIT_ASSERT_EQUAL(2,(int)v1.size());
862   CPPUNIT_ASSERT_EQUAL(2,(int)v2.size());
863   CPPUNIT_ASSERT(v1[0]->intresicEqual(v2[1]));
864   CPPUNIT_ASSERT(v2[0]->getEndNode()==e1->getStartNode());
865   CPPUNIT_ASSERT(v1[0]->getStartNode()==e1->getStartNode());
866   CPPUNIT_ASSERT(v1[1]->getEndNode()==e1->getEndNode());
867   CPPUNIT_ASSERT(v2[0]->getStartNode()==e1->getEndNode());
868   CPPUNIT_ASSERT_DOUBLES_EQUAL(M_PI/3.,v1[0]->getCurveLength(),1.e-12);
869   CPPUNIT_ASSERT_DOUBLES_EQUAL(M_PI,v2[0]->getCurveLength(),1.e-12);
870   CPPUNIT_ASSERT_DOUBLES_EQUAL(2.*M_PI/3.,v1[1]->getCurveLength(),1.e-12);
871   e2->decrRef(); e1->decrRef();
872   v1.clear(); v2.clear(); v3.clear();
873   //Test 15 - END - INSIDE | opp dir.
874   e1=buildArcOfCircle(center,radius,-M_PI,2.*M_PI); e2=buildArcOfCircle(center,radius,-4.*M_PI/3,0.);
875   CPPUNIT_ASSERT_DOUBLES_EQUAL(M_PI,e1->getCurveLength(),1e-12); CPPUNIT_ASSERT_DOUBLES_EQUAL(4.*M_PI/3.,e2->getCurveLength(),1e-12);
876   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
877   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
878   CPPUNIT_ASSERT_EQUAL(2,(int)v1.size());
879   CPPUNIT_ASSERT_EQUAL(2,(int)v2.size());
880   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(v2[0]->getPtr()) && !v2[0]->getDirection() && v1[0]->getDirection());
881   CPPUNIT_ASSERT(v2[0]->getEndNode()==e1->getStartNode());
882   CPPUNIT_ASSERT(v1[0]->getStartNode()==e1->getStartNode());
883   CPPUNIT_ASSERT(v1[1]->getEndNode()==e1->getEndNode());
884   CPPUNIT_ASSERT(v2[1]->getEndNode()==e1->getEndNode());
885   CPPUNIT_ASSERT_DOUBLES_EQUAL(M_PI/3.,v1[0]->getCurveLength(),1.e-12);
886   CPPUNIT_ASSERT_DOUBLES_EQUAL(M_PI,v2[1]->getCurveLength(),1.e-12);
887   CPPUNIT_ASSERT_DOUBLES_EQUAL(2.*M_PI/3.,v1[1]->getCurveLength(),1.e-12);
888   e2->decrRef(); e1->decrRef();
889   v1.clear(); v2.clear(); v3.clear();
890   //
891   ComposedEdge::Delete(&v1);
892   ComposedEdge::Delete(&v2);
893 }
894
895 /*!
896  * Here there is test of cases where between 2 edges intersects only in points not on edge.
897  */
898 void QuadraticPlanarInterpTest::IntersectionPointOnlyUnitarySegSeg()
899 {
900   // 0deg - classical
901   EdgeLin *e1=new EdgeLin(0.,0.,1.,0.);
902   EdgeLin *e2=new EdgeLin(0.3,0.3,0.5,-0.3);
903   ComposedEdge& v1=*(new ComposedEdge);
904   ComposedEdge& v2=*(new ComposedEdge); MergePoints v3;
905   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
906   CPPUNIT_ASSERT_EQUAL(0,(int)v3.getNumberOfAssociations());
907   CPPUNIT_ASSERT_EQUAL(2,(int)v1.size());
908   CPPUNIT_ASSERT_EQUAL(2,(int)v2.size());
909   CPPUNIT_ASSERT(v1[0]->getEndNode()==v1[1]->getStartNode()); CPPUNIT_ASSERT(v2[0]->getEndNode()==v2[1]->getStartNode());
910   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
911   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
912   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.4,(*v1[0]->getEndNode())[0],ADMISSIBLE_ERROR);
913   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,(*v1[0]->getEndNode())[1],ADMISSIBLE_ERROR);
914   e2->decrRef(); e1->decrRef();
915   v1.clear(); v2.clear(); v3.clear();
916   // 90deg - classical
917   e1=new EdgeLin(0.,0.,0.,1.);
918   e2=new EdgeLin(-0.3,0.3,0.3,0.5);
919   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
920   CPPUNIT_ASSERT_EQUAL(0,(int)v3.getNumberOfAssociations());
921   CPPUNIT_ASSERT_EQUAL(2,(int)v1.size());
922   CPPUNIT_ASSERT_EQUAL(2,(int)v2.size());
923   CPPUNIT_ASSERT(v1[0]->getEndNode()==v1[1]->getStartNode()); CPPUNIT_ASSERT(v2[0]->getEndNode()==v2[1]->getStartNode());
924   CPPUNIT_ASSERT(e1->getStartNode()==v1.front()->getStartNode() && e1->getEndNode()==v1.back()->getEndNode());
925   CPPUNIT_ASSERT(e2->getStartNode()==v2.front()->getStartNode() && e2->getEndNode()==v2.back()->getEndNode());
926   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,(*v1[0]->getEndNode())[0],ADMISSIBLE_ERROR);
927   CPPUNIT_ASSERT_DOUBLES_EQUAL(0.4,(*v1[0]->getEndNode())[1],ADMISSIBLE_ERROR);
928   e2->decrRef(); e1->decrRef();
929   v1.clear(); v2.clear(); v3.clear();
930   //Test 1 - 0deg
931   e1=new EdgeLin(0.,0.,1.,0.); e2=new EdgeLin(0.,0.,0.,1.);
932   CPPUNIT_ASSERT(!e1->intersectWith(e2,v3,v1,v2));
933   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
934   CPPUNIT_ASSERT(v3.isStart1(0)); CPPUNIT_ASSERT(v3.isStart2(0));
935   e2->decrRef(); e1->decrRef();
936   v1.clear(); v2.clear(); v3.clear();
937   //Test 1 - 90deg
938   e1=new EdgeLin(0.,0.,0.,1.); e2=new EdgeLin(0.,0.,1.,0.);
939   CPPUNIT_ASSERT(!e1->intersectWith(e2,v3,v1,v2));
940   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
941   CPPUNIT_ASSERT(v3.isStart1(0)); CPPUNIT_ASSERT(v3.isStart2(0));
942   e2->decrRef(); e1->decrRef();
943   v1.clear(); v2.clear(); v3.clear();
944   //Test 1 - 45deg
945   e1=new EdgeLin(0.,0.,1.,1.); e2=new EdgeLin(0.,0.,1.,-1.);
946   CPPUNIT_ASSERT(!e1->intersectWith(e2,v3,v1,v2));
947   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
948   CPPUNIT_ASSERT(v3.isStart1(0)); CPPUNIT_ASSERT(v3.isStart2(0));
949   e2->decrRef(); e1->decrRef();
950   v1.clear(); v2.clear(); v3.clear();
951   //Test 2
952   e1=new EdgeLin(0.,0.,1.,0.); e2=new EdgeLin(1.,1.,1.,0.);
953   CPPUNIT_ASSERT(!e1->intersectWith(e2,v3,v1,v2));
954   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
955   CPPUNIT_ASSERT(v3.isEnd1(0)); CPPUNIT_ASSERT(v3.isEnd2(0));
956   e2->decrRef(); e1->decrRef();
957   v1.clear(); v2.clear(); v3.clear();
958   //Test 3
959   e1=new EdgeLin(0.,0.,1.,0.); e2=new EdgeLin(1.,0.,1.,1.);
960   CPPUNIT_ASSERT(!e1->intersectWith(e2,v3,v1,v2));
961   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
962   CPPUNIT_ASSERT(v3.isEnd1(0)); CPPUNIT_ASSERT(v3.isStart2(0));
963   e2->decrRef(); e1->decrRef();
964   v1.clear(); v2.clear(); v3.clear();
965   //Test 4
966   e1=new EdgeLin(0.,0.,1.,1.); e2=new EdgeLin(1.,-1.,0.,0.);
967   CPPUNIT_ASSERT(!e1->intersectWith(e2,v3,v1,v2));
968   CPPUNIT_ASSERT_EQUAL(1,(int)v3.getNumberOfAssociations());
969   CPPUNIT_ASSERT(v3.isStart1(0)); CPPUNIT_ASSERT(v3.isEnd2(0));
970   e2->decrRef(); e1->decrRef();
971   v1.clear(); v2.clear(); v3.clear();
972   //Intersection extremity of one edge and inside of other edge. 2 End.
973   e1=new EdgeLin(0.,0.,1.,0.);
974   e2=new EdgeLin(0.5,1.,0.5,0.);
975   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
976   CPPUNIT_ASSERT_EQUAL(2,(int)v1.size());
977   CPPUNIT_ASSERT_EQUAL(1,(int)v2.size());
978   CPPUNIT_ASSERT_EQUAL(0,(int)v3.getNumberOfAssociations());
979   CPPUNIT_ASSERT(v2[0]->intresincEqCoarse(e2) && v2[0]->getDirection());
980   CPPUNIT_ASSERT(v1[0]->getStartNode()==e1->getStartNode() && v1[0]->getEndNode()==e2->getEndNode() && v1[1]->getStartNode()==e2->getEndNode() && v1[1]->getEndNode()==e1->getEndNode());
981   CPPUNIT_ASSERT(v1[0]->getDirection() && v1[1]->getDirection());
982   e2->decrRef(); e1->decrRef();
983   v1.clear(); v2.clear(); v3.clear();
984   //Intersection extremity of one edge and inside of other edge. 2 Start.
985   e1=new EdgeLin(0.,0.,1.,0.);
986   e2=new EdgeLin(0.5,0.,0.5,1.);
987   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
988   CPPUNIT_ASSERT_EQUAL(2,(int)v1.size());
989   CPPUNIT_ASSERT_EQUAL(1,(int)v2.size());
990   CPPUNIT_ASSERT_EQUAL(0,(int)v3.getNumberOfAssociations());
991   CPPUNIT_ASSERT(v2[0]->intresincEqCoarse(e2) && v2[0]->getDirection());
992   CPPUNIT_ASSERT(v1[0]->getStartNode()==e1->getStartNode() && v1[0]->getEndNode()==e2->getStartNode() && v1[1]->getStartNode()==e2->getStartNode() && v1[1]->getEndNode()==e1->getEndNode());
993   CPPUNIT_ASSERT(v1[0]->getDirection() && v1[1]->getDirection());
994   e2->decrRef(); e1->decrRef();
995   v1.clear(); v2.clear(); v3.clear();
996   //Intersection extremity of one edge and inside of other edge. 1 Start.
997   e1=new EdgeLin(0.5,0.,0.5,1.);
998   e2=new EdgeLin(0.,0.,1.,0.);
999   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
1000   CPPUNIT_ASSERT_EQUAL(1,(int)v1.size());
1001   CPPUNIT_ASSERT_EQUAL(2,(int)v2.size());
1002   CPPUNIT_ASSERT_EQUAL(0,(int)v3.getNumberOfAssociations());
1003   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(e1) && v1[0]->getDirection());
1004   CPPUNIT_ASSERT(v2[0]->getStartNode()==e2->getStartNode() && v2[0]->getEndNode()==e1->getStartNode() && v2[1]->getStartNode()==e1->getStartNode() && v2[1]->getEndNode()==e2->getEndNode());
1005   CPPUNIT_ASSERT(v2[0]->getDirection() && v2[1]->getDirection());
1006   e2->decrRef(); e1->decrRef();
1007   v1.clear(); v2.clear(); v3.clear();
1008   //Intersection extremity of one edge and inside of other edge. 1 End.
1009   e1=new EdgeLin(0.5,1.,0.5,0.);
1010   e2=new EdgeLin(0.,0.,1.,0.);
1011   CPPUNIT_ASSERT(e1->intersectWith(e2,v3,v1,v2));
1012   CPPUNIT_ASSERT_EQUAL(1,(int)v1.size());
1013   CPPUNIT_ASSERT_EQUAL(2,(int)v2.size());
1014   CPPUNIT_ASSERT_EQUAL(0,(int)v3.getNumberOfAssociations());
1015   CPPUNIT_ASSERT(v1[0]->intresincEqCoarse(e1) && v1[0]->getDirection());
1016   CPPUNIT_ASSERT(v2[0]->getStartNode()==e2->getStartNode() && v2[0]->getEndNode()==e1->getEndNode() && v2[1]->getStartNode()==e1->getEndNode() && v2[1]->getEndNode()==e2->getEndNode());
1017   CPPUNIT_ASSERT(v2[0]->getDirection() && v2[1]->getDirection());
1018   e2->decrRef(); e1->decrRef();
1019   v1.clear(); v2.clear(); v3.clear();
1020   ComposedEdge::Delete(&v2);
1021   ComposedEdge::Delete(&v1);
1022 }
1023
1024 }