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