Added support for bezier curves for isHorizontal/isVertical.

This commit is contained in:
Markus Lampert
2017-09-27 21:39:26 -07:00
parent e03c37ee4b
commit 8786432651
2 changed files with 28 additions and 2 deletions

View File

@@ -154,10 +154,13 @@ class PathGeom:
PathLog.error(translate('PathGeom', "face isVertical(%s) not supported") % type(obj.Surface))
return None
if obj.ShapeType == 'Edge':
if type(obj.Curve) == Part.Line:
if type(obj.Curve) == Part.Line or type(obj.Curve) == Part.LineSegment:
return cls.isVertical(obj.Vertexes[1].Point - obj.Vertexes[0].Point)
if type(obj.Curve) == Part.Circle or type(obj.Curve) == Part.Ellipse:
return cls.isHorizontal(obj.Curve.Axis)
if type(obj.Curve) == Part.BezierCurve:
# the current assumption is that a bezier curve is vertical if its end points are vertical
return cls.isVertical(obj.Curve.EndPoint - obj.Curve.StartPoint)
PathLog.error(translate('PathGeom', "edge isVertical(%s) not supported") % type(obj.Curve))
return None
PathLog.error(translate('PathGeom', "isVertical(%s) not supported") % obj)
@@ -180,10 +183,12 @@ class PathGeom:
PathLog.error(translate('PathGeom', "face isHorizontal(%s) not supported") % type(obj.Surface))
return None
if obj.ShapeType == 'Edge':
if type(obj.Curve) == Part.Line:
if type(obj.Curve) == Part.Line or type(obj.Curve) == Part.LineSegment:
return cls.isHorizontal(obj.Vertexes[1].Point - obj.Vertexes[0].Point)
if type(obj.Curve) == Part.Circle or type(obj.Curve) == Part.Ellipse:
return cls.isVertical(obj.Curve.Axis)
if type(obj.Curve) == Part.BezierCurve:
return cls.isRoughly(obj.BoundBox.ZLength, 0)
PathLog.error(translate('PathGeom', "edge isHorizontal(%s) not supported") % type(obj.Curve))
return None
PathLog.error(translate('PathGeom', "isHorizontal(%s) not supported") % obj)

View File

@@ -119,6 +119,27 @@ class TestPathGeom(PathTestBase):
self.assertFalse(PathGeom.isHorizontal(Part.Edge(Part.makeCircle(4, Vector(), Vector(1, 0, 1)))))
self.assertFalse(PathGeom.isHorizontal(Part.Edge(Part.makeCircle(4, Vector(), Vector(1, 1, 1)))))
# bezier curves
# ml: I know nothing about bezier curves, so this might be bollocks
bezier = Part.BezierCurve()
bezier.setPoles([Vector(), Vector(1,1,0), Vector(2,1,0), Vector(2,2,0)])
self.assertTrue(PathGeom.isHorizontal(Part.Edge(bezier)))
self.assertFalse(PathGeom.isVertical(Part.Edge(bezier)))
bezier.setPoles([Vector(), Vector(1,1,1), Vector(2,1,0), Vector(2,2,0)])
self.assertFalse(PathGeom.isHorizontal(Part.Edge(bezier)))
self.assertFalse(PathGeom.isVertical(Part.Edge(bezier)))
bezier.setPoles([Vector(), Vector(1,1,0), Vector(2,1,1), Vector(2,2,0)])
self.assertFalse(PathGeom.isHorizontal(Part.Edge(bezier)))
self.assertFalse(PathGeom.isVertical(Part.Edge(bezier)))
bezier.setPoles([Vector(), Vector(1,1,0), Vector(2,1,0), Vector(2,2,1)])
self.assertFalse(PathGeom.isHorizontal(Part.Edge(bezier)))
self.assertFalse(PathGeom.isVertical(Part.Edge(bezier)))
bezier.setPoles([Vector(), Vector(1,1,1), Vector(2,2,2), Vector(0,0,3)])
self.assertFalse(PathGeom.isHorizontal(Part.Edge(bezier)))
self.assertTrue(PathGeom.isVertical(Part.Edge(bezier)))
def test04(self):
"""Verify isVertical/isHorizontal for faces"""