1 // Copyright (C) 2007-2020 CEA/DEN, EDF R&D
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.
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.
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
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 // Author : Anthony Geay (CEA/DEN)
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"
32 using namespace INTERP_KERNEL;
37 static const double ADMISSIBLE_ERROR = 1.e-14;
39 void QuadraticPlanarInterpTest::setUp()
43 void QuadraticPlanarInterpTest::tearDown()
47 void QuadraticPlanarInterpTest::cleanUp()
51 void QuadraticPlanarInterpTest::ReadWriteInXfigElementary()
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);
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);
70 //Testing bounds calculation For Arc of circle.
74 void QuadraticPlanarInterpTest::ReadWriteInXfigGlobal()
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);
89 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.24375,edge->getRadius(),ADMISSIBLE_ERROR);
90 CPPUNIT_ASSERT_DOUBLES_EQUAL(5.7857653289925404,edge->getAngle(),ADMISSIBLE_ERROR);
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);
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
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);
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);
117 void QuadraticPlanarInterpTest::BasicGeometricTools()
119 Node *n1=new Node(1.,1.);
120 Node *n2=new Node(4.,2.);
121 EdgeLin *e1=new EdgeLin(n1,n2);
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);
127 n1->decrRef(); n2->decrRef();
130 e1=new EdgeLin(n1,n2);
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);
152 n1->decrRef(); n2->decrRef();
155 void QuadraticPlanarInterpTest::IntersectionBasics()
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);
168 e2->decrRef(); e1->decrRef();
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);
180 e3->decrRef(); e4->decrRef();
183 void QuadraticPlanarInterpTest::EdgeLinUnitary()
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);
190 CPPUNIT_ASSERT_DOUBLES_EQUAL(e1->getCharactValue(*n),1.,1e-8);
193 CPPUNIT_ASSERT_DOUBLES_EQUAL(e1->getCharactValue(*n),0.,1e-8);
195 n=new Node(-1.1,-1.3);
196 CPPUNIT_ASSERT_DOUBLES_EQUAL(e1->getCharactValue(*n),-0.5,1e-8);
199 CPPUNIT_ASSERT_DOUBLES_EQUAL(e1->getCharactValue(*n),1.5,1e-8);
200 n->decrRef(); e1->decrRef();
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.
209 void QuadraticPlanarInterpTest::IntersectionEdgeOverlapUnitarySegSeg()
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.
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();
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.};
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();
891 ComposedEdge::Delete(&v1);
892 ComposedEdge::Delete(&v2);
896 * Here there is test of cases where between 2 edges intersects only in points not on edge.
898 void QuadraticPlanarInterpTest::IntersectionPointOnlyUnitarySegSeg()
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();
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();
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();
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();
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();
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();
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();
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);