From e3e95e3ea57adaefbbfe7027a160b545562f2f54 Mon Sep 17 00:00:00 2001 From: paullee0 Date: Mon, 18 Mar 2019 01:41:57 +0800 Subject: [PATCH] Fix offsetWire() bug - first edge vector should depends on geometry (line or arc) --- src/Mod/Draft/DraftGeomUtils.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) mode change 100755 => 100644 src/Mod/Draft/DraftGeomUtils.py diff --git a/src/Mod/Draft/DraftGeomUtils.py b/src/Mod/Draft/DraftGeomUtils.py old mode 100755 new mode 100644 index d6c36f8c72..b1ee4ad737 --- a/src/Mod/Draft/DraftGeomUtils.py +++ b/src/Mod/Draft/DraftGeomUtils.py @@ -1186,6 +1186,14 @@ def offsetWire(wire,dvec,bind=False,occ=False): return None else: return off + + # vec of first edge depends on its geometry + e = edges[0] + if isinstance(e.Curve,Part.Circle): + firstVec = e.tangentAt(e.FirstParameter) + else: + firstVec = vec(e) + for i in range(len(edges)): curredge = edges[i] delta = dvec @@ -1194,7 +1202,7 @@ def offsetWire(wire,dvec,bind=False,occ=False): v = curredge.tangentAt(curredge.FirstParameter) else: v = vec(curredge) - angle = DraftVecUtils.angle(vec(edges[0]),v,norm) + angle = DraftVecUtils.angle(firstVec,v,norm) # use vec deduced depending on geometry instead of - angle = DraftVecUtils.angle(vec(edges[0]),v,norm) delta = DraftVecUtils.rotate(delta,angle,norm) #print("edge ",i,": ",curredge.Curve," ",curredge.Orientation," parameters:",curredge.ParameterRange," vector:",delta) nedge = offset(curredge,delta,trim=True)