def test_QPolygon_intersection(self): tri1 = QVectorF([(0,0),(0,1),(1,0)]) tri2 = QVectorF([(1,0),(0,0),(1,1)]) tri3 = QVectorF([(.5,.5),(1,0),(0,0),(.5,.5)]) tri3i = QVector([(1,1),(1,0),(0,0),(1,1)]) sq1 = QVectorF([(0,0),(0,1),(1,1),(1,0)]) # Intersect two triangles p1 = QPolygonF(tri1) p2 = QPolygonF(tri2) p3 = p1.intersected(p2) self.assertTrue( p1 == p1 ) self.assertTrue( p1 == QPolygonF(tri1) ) self.assertTrue( p3 == QPolygonF(tri3) ) # Intersect two integer triangles p1 = QtGui.QPolygon(map(lambda (x,y): QtCore.QPoint(x,y), [(0,0),(0,1),(1,0)])) p2 = QtGui.QPolygon(map(lambda (x,y): QtCore.QPoint(x,y), [(1,0),(0,0),(1,1)])) p3 = p1.intersected(p2) self.assertTrue( p3 == QtGui.QPolygon(tri3i) ) # Test containment/overlapping p1 = QtGui.QPolygonF(sq1) for v1 in sq1: self.assertTrue( p1.contains(v1) ) # vertices are contained self.assertTrue( p1.translated(2,0).intersected(p1).isEmpty() ) self.assertTrue( p1.translated(1,0).intersected(p1).isEmpty() ) # common edges do not overlap self.assertFalse( p1.translated(.5,0).intersected(p1).isEmpty() )