def testValidateCircle(self): c1 = ShapeFactory.build("circle", Point(0, 0), Point(2, 0), Point(0, 2)) Circle.validateCircle(c1, "Circle unexpectedly invalid") self.assertRaises(ShapeException, Circle.validateCircle, "(0, 0, 2, 0, 0, 2)", "String \'(0, 0, 2, 0, 0, 2)\' is not a valid circle") self.assertRaises(ShapeException, Circle.validateCircle, Point(1, 1), "Point is not a valid circle")
def testMove(self): t1 = ShapeFactory.build("triangle", Point(1, 2), Point(5, 1), Point(3, 3)) t1.move(3, 4) self.assertEqual(4, t1.point1.x) self.assertEqual(6, t1.point1.y) self.assertEqual(8, t1.point2.x) self.assertEqual(5, t1.point2.y) self.assertEqual(6, t1.point3.x) self.assertEqual(7, t1.point3.y) t1.move(.4321, .7654) self.assertEqual(4.4321, t1.point1.x) self.assertEqual(6.7654, t1.point1.y) self.assertEqual(8.4321, t1.point2.x) self.assertEqual(5.7654, t1.point2.y) self.assertEqual(6.4321, t1.point3.x) self.assertEqual(7.7654, t1.point3.y) t1.move(-.4321, -.7654) self.assertEqual(4, t1.point1.x) self.assertEqual(6, t1.point1.y) self.assertEqual(8, t1.point2.x) self.assertEqual(5, t1.point2.y) self.assertEqual(6, t1.point3.x) self.assertEqual(7, t1.point3.y)
def testValidConstruction(self): p1 = Point(1, 3) p2 = Point(5, 3) p3 = Point(5, 1) p4 = Point(1, 1) r1 = Rectangle(p1, p2, p3, p4) self.assertEqual(p1, r1.point1) self.assertEqual(p2, r1.point2) self.assertEqual(p3, r1.point3) self.assertEqual(p4, r1.point4) l1 = Line(-3, 1, 1, 1) l2 = Line(1, 1, 1, -5) l3 = Line(1, -5, -3, -5) l4 = Line(-3, -5, -3, 1) r2 = Rectangle(l1, l2, l3, l4) self.assertEqual(l1, r2.line1) self.assertEqual(l2, r2.line2) self.assertEqual(l3, r2.line3) self.assertEqual(l4, r2.line4) r3 = Rectangle(-.8, .4, 0, 2, .8, 1.6, 0, 0) self.assertEqual(-.8, r3.point1.x) self.assertEqual(.4, r3.point1.y) self.assertEqual(0, r3.point2.x) self.assertEqual(2, r3.point2.y) self.assertEqual(.8, r3.point3.x) self.assertEqual(1.6, r3.point3.y) self.assertEqual(0, r3.point4.x) self.assertEqual(0, r3.point4.y)
def testValidConstruction(self): p1 = Point(1, 2) p2 = Point(1, 1) p3 = Point(2, 1) t1 = Triangle(p1, p2, p3) self.assertEqual(p1, t1.point1) self.assertEqual(p2, t1.point2) self.assertEqual(p3, t1.point3) l1 = Line(4.33, 8, -4, 3.67) l2 = Line(-4, 3.67, 2.19, -5) l3 = Line(2.19, -5, 4.33, 8) t2 = Triangle(l1, l2, l3) self.assertEqual(l1, t2.line1) self.assertEqual(l2, t2.line2) self.assertEqual(l3, t2.line3) t3 = Triangle(1, 2, 5, 1, 3, 3) self.assertEqual(1, t3.point1.x) self.assertEqual(2, t3.point1.y) self.assertEqual(5, t3.point2.x) self.assertEqual(1, t3.point2.y) self.assertEqual(3, t3.point3.x) self.assertEqual(3, t3.point3.y)
def testValidateTriangle(self): t1 = ShapeFactory.build("triangle", Point(1, 1), Point(-1, -5), Point(-3, -2)) Triangle.validateTriangle(t1, "Triangle unexpectedly invalid") self.assertRaises(ShapeException, Triangle.validateTriangle, "(1, 1, -1, -5, -3, -2)", "String \'(1, 1, -1, -5, -3, -2)\' is not a valid triangle") self.assertRaises(ShapeException, Triangle.validateTriangle, Point(1, 1), "Point is not a valid triangle")
def testMove(self): r1 = ShapeFactory.build("rectangle", Point(-.8, .4), Point(0, 2), Point(.8, 1.6), Point(0, 0)) r1.move(3, 4) self.assertAlmostEqual(2.2, r1.point1.x) self.assertAlmostEqual(4.4, r1.point1.y) self.assertAlmostEqual(3, r1.point2.x) self.assertAlmostEqual(6, r1.point2.y) self.assertAlmostEqual(3.8, r1.point3.x) self.assertAlmostEqual(5.6, r1.point3.y) self.assertAlmostEqual(3, r1.point4.x) self.assertAlmostEqual(4, r1.point4.y) r1.move(-.234, -1.987) self.assertAlmostEqual(1.966, r1.point1.x) self.assertAlmostEqual(2.413, r1.point1.y) self.assertAlmostEqual(2.766, r1.point2.x) self.assertAlmostEqual(4.013, r1.point2.y) self.assertAlmostEqual(3.566, r1.point3.x) self.assertAlmostEqual(3.613, r1.point3.y) self.assertAlmostEqual(2.766, r1.point4.x) self.assertAlmostEqual(2.013, r1.point4.y) r1.move(.234, 1.987) self.assertAlmostEqual(2.2, r1.point1.x) self.assertAlmostEqual(4.4, r1.point1.y) self.assertAlmostEqual(3, r1.point2.x) self.assertAlmostEqual(6, r1.point2.y) self.assertAlmostEqual(3.8, r1.point3.x) self.assertAlmostEqual(5.6, r1.point3.y) self.assertAlmostEqual(3, r1.point4.x) self.assertAlmostEqual(4, r1.point4.y)
def drawCircle(graphics): p1 = Point(0, 0) p2 = Point(2, 0) p3 = Point(0, 2) c1 = ShapeFactory.build("circle", p1, p2, p3) c1.draw(graphics) graphics.show()
def testValidateLine(self): l1 = ShapeFactory.build("line", Point(1, 1), Point(-1, -5)) Line.validateLine(l1, "Line unexpectedly invalid") self.assertRaises(ShapeException, Line.validateLine, "(1, 1, -1, -5)", "String \'(1, 1, -1, -5)\' is not a valid line") self.assertRaises(ShapeException, Line.validateLine, Point(1, 1), "Point is not a valid line")
def testSaveToString(self): r1 = ShapeFactory.build("rectangle", Point(1, 1), Point(4, 1), Point(4, 3), Point(1, 3)) expected = r1.toString() testShapeIO = ShapeIO() actual = testShapeIO.saveShape(r1) self.assertEqual(expected, actual)
def testValidConstruction(self): p1 = Point(0, 0) p2 = Point(2, 0) p3 = Point(0, 2) p4 = Point(3, 0) p5 = Point(0, 3) c1 = Circle(p1, p2, p3, p4, p5) self.assertEqual(p1, c1.center) self.assertEqual(p2, c1.focus1) self.assertEqual(p3, c1.focus2) self.assertEqual(p4, c1.edge1) self.assertEqual(p5, c1.edge2) c2 = Circle(1, 1, 4, 4, -2, 4, 6, 6, -4, 6) self.assertEqual(1, c2.center.x) self.assertEqual(1, c2.center.y) self.assertEqual(4, c2.focus1.x) self.assertEqual(4, c2.focus1.y) self.assertEqual(-2, c2.focus2.x) self.assertEqual(4, c2.focus2.y) self.assertEqual(6, c2.edge1.x) self.assertEqual(6, c2.edge1.y) self.assertEqual(-4, c2.edge2.x) self.assertEqual(6, c2.edge2.y)
def testValidConstruction(self): p1 = Point(0, 0) p2 = Point(2, 0) p3 = Point(0, 1) p4 = Point(3, 0) p5 = Point(0, 2) e1 = Ellipse(p1, p2, p3, p4, p5) self.assertEqual(p1, e1.center) self.assertEqual(p2, e1.focus1) self.assertEqual(p3, e1.focus2) self.assertEqual(p4, e1.edge1) self.assertEqual(p5, e1.edge2) e2 = Ellipse(1, 1, 4, 4, -2, 4, 6, 6, -2, 4) self.assertEqual(1, e2.center.x) self.assertEqual(1, e2.center.y) self.assertEqual(4, e2.focus1.x) self.assertEqual(4, e2.focus1.y) self.assertEqual(-2, e2.focus2.x) self.assertEqual(4, e2.focus2.y) self.assertEqual(6, e2.edge1.x) self.assertEqual(6, e2.edge1.y) self.assertEqual(-2, e2.edge2.x) self.assertEqual(4, e2.edge2.y)
def testMove(self): e1 = ShapeFactory.build("ellipse", Point(1, 1), Point(6, 6), Point(-2, 4)) e1.move(3, 4) self.assertAlmostEqual(4, e1.center.x) self.assertAlmostEqual(5, e1.center.y) self.assertAlmostEqual(9, e1.point1.x) self.assertAlmostEqual(10, e1.point1.y) self.assertAlmostEqual(1, e1.point2.x) self.assertAlmostEqual(8, e1.point2.y) e1.move(-.234, -1.987) self.assertAlmostEqual(3.766, e1.center.x) self.assertAlmostEqual(3.013, e1.center.y) self.assertAlmostEqual(8.766, e1.point1.x) self.assertAlmostEqual(8.013, e1.point1.y) self.assertAlmostEqual(.766, e1.point2.x) self.assertAlmostEqual(6.013, e1.point2.y) e1.move(.234, 1.987) self.assertAlmostEqual(4, e1.center.x) self.assertAlmostEqual(5, e1.center.y) self.assertAlmostEqual(9, e1.point1.x) self.assertAlmostEqual(10, e1.point1.y) self.assertAlmostEqual(1, e1.point2.x) self.assertAlmostEqual(8, e1.point2.y)
def testValidateImage(self): i1 = ShapeFactory.build("image", Point(1, 1), Point(4, 1), Point(4, 3), Point(1, 3), "images/red_eyed_tree_frog.png") Image.validateImage(i1, "Image unexpectedly invalid") self.assertRaises(ShapeException, Image.validateImage, "(1, 1, 4, 1, 4, 3, 1, 3, images/red_eyed_tree_frog.png)", "String \'(1, 1, 4, 1, 4, 3, 1, 3, images/red_eyed_tree_frog.png)\' is not a valid embedded image") self.assertRaises(ShapeException, Image.validateImage, Point(1, 1), "Point is not a valid embedded image")
def drawTriangle(graphics): p1 = Point(1, -2) p2 = Point(2, -1) p3 = Point(0, 0) t1 = ShapeFactory.build("triangle", p1, p2, p3) t1.draw(graphics) graphics.show()
def drawEllipse(graphics): p1 = Point(0, 0) p2 = Point(3, 0) p3 = Point(0, 2) e1 = ShapeFactory.build("ellipse", p1, p2, p3) e1.draw(graphics) graphics.show()
def importFile(self, path): self.display_file.wipeOut() #print("{}".format(path)) vertices = dict() vertice_counter = 0 name = "" self.file = open(path, "r+") # read and write for line in self.file: if (line[0] == "v"): # store vertices in a dictionary vertice_counter += 1 vertices[vertice_counter] = line elif (line[0] == "o" ): # store temporarily the name of the object to come match = re.findall(r"\S+", line) name = match[1] elif (line[0] == "p"): # TODO: FINISH THIS match = re.findall(r"\S+", line) vertice_for_point = vertices[float(match[1])] match = re.findall(r"\S+", vertice_for_point) coord = {"x": float(match[1]), "y": float(match[2])} p1 = Point(name) p1.addCoords(coord["x"], coord["y"]) self.display_file.addObject(p1) elif (line[0] == "l"): match = re.findall(r"\S+", line) if (len(match) == 3): # line l = Line(name) else: # polygon l = None if (match[1] == match[-1]): l = Polygon(name) else: l = Curve(name) for item in match: if ( item != "l" ): # ignore the first character, only compute coordinates vertice_for_point = vertices[float(item)] match_vertice = re.findall(r"\S+", vertice_for_point) coord = { "x": float(match_vertice[1]), "y": float(match_vertice[2]) } l.addCoords(coord["x"], coord["y"]) if (match[1] == match[-1] ): # if polygon (last coords == first coords) l.popCoords() # remove repeated coords self.display_file.addObject(l)
def testInvalidConstruction(self): center = Point(0, 0) r1 = ShapeFactory.build("rectangle", Point(1, 1), Point(4, 1), Point(4, 3), Point(1, 3)) self.assertRaises(AttributeError, ShapeFactory.build, "composite", center, r1.toString()) self.assertRaises(AttributeError, ShapeFactory.build, "composite", r1, r1.toString())
def testSaveImage(self): s1 = "images/red_eyed_tree_frog.png" i1 = ShapeFactory.build("image", Point(1, 3), Point(5, 3), Point(5, 1), Point(1, 1), s1) expected = i1.toString() testShapeIO = ShapeIO() actual = testShapeIO.saveShape(i1) self.assertEqual(expected, actual)
def testValidConstruction(self): p1 = Point(1, 2) self.assertEqual(1, p1.x) self.assertEqual(2, p1.y) p2 = Point(1.111, 2.222) self.assertEqual(1.111, p2.x) self.assertEqual(2.222, p2.y)
def testLoadSource(self): p1 = Point(1, 3) p2 = Point(5, 3) p3 = Point(5, 1) p4 = Point(1, 1) s1 = "images/red_eyed_tree_frog.png" i1 = ShapeFactory.build("image", p1, p2, p3, p4, s1) i1._loadSource()
def __constructWithCoords(self, x1, y1, x2, y2): try: self.__point1 = Point(x1, y1) self.__point2 = Point(x2, y2) Validator.validateLine(value=self, errorMessage="Line invalid") return True except ShapeException: return False
def drawSquare(graphics): p1 = Point(1, 3) p2 = Point(5, 3) p3 = Point(5, -1) p4 = Point(1, -1) s1 = ShapeFactory.build("square", p1, p2, p3, p4) s1.draw(graphics) graphics.show()
def drawRectangle(graphics): p1 = Point(1, 3) p2 = Point(5, 3) p3 = Point(5, 1) p4 = Point(1, 1) r1 = ShapeFactory.build("rectangle", p1, p2, p3, p4) r1.draw(graphics) graphics.show()
def testClone(self): p1 = Point(-123.45, -23.45) self.assertEqual(-123.45, p1.x) self.assertEqual(-23.45, p1.y) p2 = p1.copy() self.assertFalse(p1 is p2) self.assertEqual(p1.x, p2.x) self.assertEqual(p1.y, p2.y)
def onAddPoint(self, button): self.printToLog("onAddPoint") name_entry = self.builder.get_object("PointNameEntry") x_entry = self.builder.get_object("PointXEntry") y_entry = self.builder.get_object("PointYEntry") p1 = Point(name_entry.get_text()) p1.addCoords(float(x_entry.get_text()), float(y_entry.get_text())) self.display_file.addObject(p1) self.add_object_window.hide()
def validateShape(value, errorMessage): if not isinstance(value, Shape): raise ShapeException(errorMessage) Point.validatePoint( value.center, "Center <{}> is not a valid point.".format(value.center)) for point in value.points: Point.validatePoint( point, "Point <{}> is not a valid point.".format(point))
def testValidateSquare(self): s1 = ShapeFactory.build("square", Point(1, 1), Point(3, 1), Point(3, 3), Point(1, 3)) Square.validateSquare(s1, "Square unexpectedly invalid") self.assertRaises( ShapeException, Square.validateSquare, "(1, 1, 3, 1, 3, 3, 1, 3)", "String \'(1, 1, 3, 1, 3, 3, 3, 3)\' is not a valid square") self.assertRaises(ShapeException, Square.validateSquare, Point(1, 1), "Point is not a valid square")
def testValidateEllipse(self): e1 = ShapeFactory.build("ellipse", Point(0, 0), Point(3, 0), Point(0, 2)) Ellipse.validateEllipse(e1, "Ellipse unexpectedly invalid") self.assertRaises( ShapeException, Ellipse.validateEllipse, "(0, 0, 3, 0, 0, 2)", "String \'(0, 0, 3, 0, 0, 2)\' is not a valid ellipse") self.assertRaises(ShapeException, Ellipse.validateEllipse, Point(1, 1), "Point is not a valid ellipse")
def __init__(self, *args, **kwargs): if len(list(args)) == 3: center = Point.getCenterPoint( Point.getCenterPoint(args[0], args[1]), args[2]) super().__init__(center, *args, **kwargs) else: super().__init__(*args, **kwargs) self.lines.append(Line(self.point1, self.point2)) self.lines.append(Line(self.point2, self.point3)) self.lines.append(Line(self.point3, self.point1)) Triangle.validateTriangle(self, "Triangle is invalid")
def testComputeRadius(self): p1 = Point(0, 0) p2 = Point(1, 0) p3 = Point(0, 1) p4 = Point(2, 0) p5 = Point(0, 2) c1 = Circle(p1, p2, p3, p4, p5) self.assertAlmostEqual(2, c1.computeRadius(), places=3) c2 = Circle(1, 1, 4, 4, -2, 4, 6, 6, -4, 6) self.assertAlmostEqual(7.071, c2.computeRadius(), places=3)