1 // Copyright (C) 2007-2012 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.
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
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"
31 using namespace INTERP_KERNEL;
36 static const double ADMISSIBLE_ERROR = 1.e-14;
38 void QuadraticPlanarInterpTest::setUp()
42 void QuadraticPlanarInterpTest::tearDown()
46 void QuadraticPlanarInterpTest::cleanUp()
50 void QuadraticPlanarInterpTest::ReadWriteInXfigElementary()
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);
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);
69 //Testing bounds calculation For Arc of circle.
73 void QuadraticPlanarInterpTest::ReadWriteInXfigGlobal()
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);
88 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.24375,edge->getRadius(),ADMISSIBLE_ERROR);
89 CPPUNIT_ASSERT_DOUBLES_EQUAL(5.7857653289925404,edge->getAngle(),ADMISSIBLE_ERROR);
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);
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
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);
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);
116 void QuadraticPlanarInterpTest::BasicGeometricTools()
118 Node *n1=new Node(1.,1.);
119 Node *n2=new Node(4.,2.);
120 EdgeLin *e1=new EdgeLin(n1,n2);
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);
126 n1->decrRef(); n2->decrRef();
129 e1=new EdgeLin(n1,n2);
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);
151 n1->decrRef(); n2->decrRef();
154 void QuadraticPlanarInterpTest::IntersectionBasics()
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);
167 e2->decrRef(); e1->decrRef();
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);
179 e3->decrRef(); e4->decrRef();
182 void QuadraticPlanarInterpTest::EdgeLinUnitary()
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);
189 CPPUNIT_ASSERT_DOUBLES_EQUAL(e1->getCharactValue(*n),1.,1e-8);
192 CPPUNIT_ASSERT_DOUBLES_EQUAL(e1->getCharactValue(*n),0.,1e-8);
194 n=new Node(-1.1,-1.3);
195 CPPUNIT_ASSERT_DOUBLES_EQUAL(e1->getCharactValue(*n),-0.5,1e-8);
198 CPPUNIT_ASSERT_DOUBLES_EQUAL(e1->getCharactValue(*n),1.5,1e-8);
199 n->decrRef(); e1->decrRef();
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.
208 void QuadraticPlanarInterpTest::IntersectionEdgeOverlapUnitarySegSeg()
210 ComposedEdge& v1=*(new ComposedEdge);
211 ComposedEdge& v2=*(new ComposedEdge);
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();
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.};
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();
889 ComposedEdge::Delete(&v1);
890 ComposedEdge::Delete(&v2);
894 * Here there is test of cases where between 2 edges intersects only in points not on edge.
896 void QuadraticPlanarInterpTest::IntersectionPointOnlyUnitarySegSeg()
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();
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();
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();
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();
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();
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();
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();
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);