From 3bf871b0ea3291c7bee0886fc9299256f1e71ddd Mon Sep 17 00:00:00 2001 From: Jeremy Wright Date: Mon, 20 Oct 2014 17:41:53 -0400 Subject: [PATCH] Added cylinder and donut tests for the revolve operation and started on the cone test. --- cadquery/freecad_impl/shapes.py | 2 +- examples/FreeCAD/Ex025_Revolution.py | 12 ++--- tests/TestCadQuery.py | 80 ++++++++++++++++++++++++++++ 3 files changed, 87 insertions(+), 7 deletions(-) diff --git a/cadquery/freecad_impl/shapes.py b/cadquery/freecad_impl/shapes.py index a3f13bb..b0a268e 100644 --- a/cadquery/freecad_impl/shapes.py +++ b/cadquery/freecad_impl/shapes.py @@ -782,7 +782,7 @@ class Solid(Shape): #Convert our axis end vector into to something FreeCAD will understand (an axis specification vector) rotateAxis = rotateCenter.sub(rotateAxis) - + #FreeCAD wants a rotation center and then an axis to rotate around rather than an axis of rotation result = f.revolve(rotateCenter, rotateAxis, angleDegrees) diff --git a/examples/FreeCAD/Ex025_Revolution.py b/examples/FreeCAD/Ex025_Revolution.py index c9925c7..7b17422 100644 --- a/examples/FreeCAD/Ex025_Revolution.py +++ b/examples/FreeCAD/Ex025_Revolution.py @@ -22,18 +22,18 @@ import Part #The dimensions of the model. These can be modified rather than changing the shape's code directly. rectangle_width = 10.0 rectangle_length = 10.0 -angleDegrees = 360.0 +angle_degrees = 360.0 #Revolve a cylinder from a rectangle #Switch comments around in this section to try the revolve operation with different parameters result = cadquery.Workplane("XY").rect(rectangle_width, rectangle_length, False).revolve() -#result = cadquery.Workplane("XY").rect(rectangle_width, rectangle_length, False).revolve(angleDegrees) -#result = cadquery.Workplane("XY").rect(rectangle_width, rectangle_length).revolve(angleDegrees,(-5,-5)) -#result = cadquery.Workplane("XY").rect(rectangle_width, rectangle_length).revolve(angleDegrees,(-5, -5),(-5, 5)) -#result = cadquery.Workplane("XY").rect(rectangle_width, rectangle_length).revolve(angleDegrees,(-5,-5),(-5,5), False) +#result = cadquery.Workplane("XY").rect(rectangle_width, rectangle_length, False).revolve(angle_degrees) +#result = cadquery.Workplane("XY").rect(rectangle_width, rectangle_length).revolve(angle_degrees,(-5,-5)) +#result = cadquery.Workplane("XY").rect(rectangle_width, rectangle_length).revolve(angle_degrees,(-5, -5),(-5, 5)) +#result = cadquery.Workplane("XY").rect(rectangle_width, rectangle_length).revolve(angle_degrees,(-5,-5),(-5,5), False) #Revolve a donut with square walls -#result = cadquery.Workplane("XY").rect(rectangle_width, rectangle_length, True).revolve(angleDegrees, (20, 0), (20, 10)) +#result = cadquery.Workplane("XY").rect(rectangle_width, rectangle_length, True).revolve(angle_degrees, (20, 0), (20, 10)) #Get a cadquery solid object solid = result.val() diff --git a/tests/TestCadQuery.py b/tests/TestCadQuery.py index 4f70e2a..8dad429 100644 --- a/tests/TestCadQuery.py +++ b/tests/TestCadQuery.py @@ -219,6 +219,86 @@ class TestCadQuery(BaseTest): #self.assertEqual(1,s.solids().size() ) #self.assertEqual(8,s.faces().size() ) + def testRevolveCylinder(self): + """ + Test creating a solid using the revolve operation. + :return: + """ + #The dimensions of the model. These can be modified rather than changing the shape's code directly. + rectangle_width = 10.0 + rectangle_length = 10.0 + angle_degrees = 360.0 + + #Test revolve without any options for making a cylinder + result = Workplane("XY").rect(rectangle_width, rectangle_length, False).revolve() + self.assertEqual(3, result.faces().size()) + self.assertEqual(2, result.vertices().size()) + self.assertEqual(3, result.edges().size()) + + #Test revolve when only setting the angle to revolve through + result = Workplane("XY").rect(rectangle_width, rectangle_length, False).revolve(angle_degrees) + self.assertEqual(3, result.faces().size()) + self.assertEqual(2, result.vertices().size()) + self.assertEqual(3, result.edges().size()) + result = Workplane("XY").rect(rectangle_width, rectangle_length, False).revolve(270.0) + self.assertEqual(5, result.faces().size()) + self.assertEqual(6, result.vertices().size()) + self.assertEqual(9, result.edges().size()) + + #Test when passing revolve the angle and the axis of revolution's start point + result = Workplane("XY").rect(rectangle_width, rectangle_length).revolve(angle_degrees,(-5,-5)) + self.assertEqual(3, result.faces().size()) + self.assertEqual(2, result.vertices().size()) + self.assertEqual(3, result.edges().size()) + result = Workplane("XY").rect(rectangle_width, rectangle_length).revolve(270.0,(-5,-5)) + self.assertEqual(5, result.faces().size()) + self.assertEqual(6, result.vertices().size()) + self.assertEqual(9, result.edges().size()) + + #Test when passing revolve the angle and both the start and ends of the axis of revolution + result = Workplane("XY").rect(rectangle_width, rectangle_length).revolve(angle_degrees,(-5, -5),(-5, 5)) + self.assertEqual(3, result.faces().size()) + self.assertEqual(2, result.vertices().size()) + self.assertEqual(3, result.edges().size()) + result = Workplane("XY").rect(rectangle_width, rectangle_length).revolve(270.0,(-5, -5),(-5, 5)) + self.assertEqual(5, result.faces().size()) + self.assertEqual(6, result.vertices().size()) + self.assertEqual(9, result.edges().size()) + + #Testing all of the above without combine + result = Workplane("XY").rect(rectangle_width, rectangle_length).revolve(angle_degrees,(-5,-5),(-5,5), False) + self.assertEqual(3, result.faces().size()) + self.assertEqual(2, result.vertices().size()) + self.assertEqual(3, result.edges().size()) + result = Workplane("XY").rect(rectangle_width, rectangle_length).revolve(270.0,(-5,-5),(-5,5), False) + self.assertEqual(5, result.faces().size()) + self.assertEqual(6, result.vertices().size()) + self.assertEqual(9, result.edges().size()) + + def testRevolveDonut(self): + """ + Test creating a solid donut shape with square walls + :return: + """ + #The dimensions of the model. These can be modified rather than changing the shape's code directly. + rectangle_width = 10.0 + rectangle_length = 10.0 + angle_degrees = 360.0 + + result = Workplane("XY").rect(rectangle_width, rectangle_length, True).revolve(angle_degrees, (20, 0), (20, 10)) + self.assertEqual(4, result.faces().size()) + self.assertEqual(4, result.vertices().size()) + self.assertEqual(6, result.edges().size()) + + def testRevolveCone(self): + """ + Test creating a solid from a revolved triangle + :return: + """ + triangle_1st = (0,0) + triangle_2nd = (0,10) + triangle_3rd = (10,0) + def testRectArray(self): NUMX=3 NUMY=3