From 8786432651b5a71062a3fd98f241e4e7e0708463 Mon Sep 17 00:00:00 2001 From: Markus Lampert Date: Wed, 27 Sep 2017 21:39:26 -0700 Subject: [PATCH] Added support for bezier curves for isHorizontal/isVertical. --- src/Mod/Path/PathScripts/PathGeom.py | 9 +++++++-- src/Mod/Path/PathTests/TestPathGeom.py | 21 +++++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/Mod/Path/PathScripts/PathGeom.py b/src/Mod/Path/PathScripts/PathGeom.py index 0b4f120998..448a0dced6 100644 --- a/src/Mod/Path/PathScripts/PathGeom.py +++ b/src/Mod/Path/PathScripts/PathGeom.py @@ -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) diff --git a/src/Mod/Path/PathTests/TestPathGeom.py b/src/Mod/Path/PathTests/TestPathGeom.py index f75207cc90..4dcc804bae 100644 --- a/src/Mod/Path/PathTests/TestPathGeom.py +++ b/src/Mod/Path/PathTests/TestPathGeom.py @@ -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"""