diff --git a/cadquery/CQ.py b/cadquery/CQ.py index 4d40949..2495345 100644 --- a/cadquery/CQ.py +++ b/cadquery/CQ.py @@ -1904,7 +1904,7 @@ class Workplane(CQ): else: axisEnd = self.plane.toWorldCoords(axisEnd).toTuple() - r = self._revolve(angleDegrees, axisStart, axisEnd) #returns a Solid ( or a compound if there were multiple ) + r = self._revolve(angleDegrees, axisStart, axisEnd) # returns a Solid ( or a compound if there were multiple ) if combine: return self._combineWithBase(r) else: diff --git a/cadquery/freecad_impl/shapes.py b/cadquery/freecad_impl/shapes.py index 1866d20..b490551 100644 --- a/cadquery/freecad_impl/shapes.py +++ b/cadquery/freecad_impl/shapes.py @@ -772,8 +772,16 @@ class Solid(Shape): f = FreeCADPart.Face(freeCADWires) - result = f.revolve(FreeCAD.Base.Vector(axisStart), - FreeCAD.Base.Vector(axisEnd), angleDegrees) + rotateCenter = FreeCAD.Base.Vector(axisStart) + rotateAxis = FreeCAD.Base.Vector(axisEnd) + + #Convert our axis end vector into to something FreeCAD will understand (an axis specification vector) + rotateAxis[0] = 0.0 if axisStart[0] == axisEnd[0] else axisEnd[0] + rotateAxis[1] = 0.0 if axisStart[1] == axisEnd[1] else axisEnd[1] + rotateAxis[2] = 0.0 if axisStart[2] == axisEnd[2] else axisEnd[2] + + #FreeCAD wants a rotation center and then an axis to rotate around rather than an axis of rotation + result = f.revolve(rotateCenter, rotateAxis, angleDegrees) return Shape.cast(result) diff --git a/examples/FreeCAD/Ex025_Revolution.py b/examples/FreeCAD/Ex025_Revolution.py index 07e5503..c9925c7 100644 --- a/examples/FreeCAD/Ex025_Revolution.py +++ b/examples/FreeCAD/Ex025_Revolution.py @@ -26,16 +26,14 @@ angleDegrees = 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() #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)) - -#I think these two are ok, but I'm having a hard time determining if these are acting properly for sure -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)) #result = cadquery.Workplane("XY").rect(rectangle_width, rectangle_length).revolve(angleDegrees,(-5,-5),(-5,5), False) -#Was expecting this to create a square donut, but it didn't -#result = cadquery.Workplane("XY").center(10,0).rect(rectangle_width, rectangle_length, False).revolve(angleDegrees) +#Revolve a donut with square walls +#result = cadquery.Workplane("XY").rect(rectangle_width, rectangle_length, True).revolve(angleDegrees, (20, 0), (20, 10)) #Get a cadquery solid object solid = result.val()