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