From b280f2fb9ebc9d81655f1a543e00e8c7956506f9 Mon Sep 17 00:00:00 2001 From: Roy-043 Date: Sun, 30 Oct 2022 12:49:28 +0100 Subject: [PATCH 1/2] Draft: fix rectangle with face offset bug --- src/Mod/Draft/draftfunctions/offset.py | 9 ++++++--- src/Mod/Draft/draftgeoutils/offsets.py | 3 ++- src/Mod/Draft/draftgeoutils/wires.py | 12 +++++++++--- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/Mod/Draft/draftfunctions/offset.py b/src/Mod/Draft/draftfunctions/offset.py index 5ebed6ce6e..0e2696a47c 100644 --- a/src/Mod/Draft/draftfunctions/offset.py +++ b/src/Mod/Draft/draftfunctions/offset.py @@ -72,9 +72,12 @@ def offset(obj, delta, copy=False, bind=False, sym=False, occ=False): newwire = None delete = None - if utils.get_type(obj).startswith("Part::") or utils.get_type(obj).startswith("Sketcher::"): - copy = True + if (copy is False + and (utils.get_type(obj).startswith("Sketcher::") + or utils.get_type(obj).startswith("Part::") + or utils.get_type(obj).startswith("PartDesign::"))): # For PartDesign_SubShapeBinders which can reference sketches. print("the offset tool is currently unable to offset a non-Draft object directly - Creating a copy") + copy = True def getRect(p,obj): """returns length,height,placement""" @@ -199,7 +202,7 @@ def offset(obj, delta, copy=False, bind=False, sym=False, occ=False): try: if p: newobj = make_wire(p) - newobj.Closed = obj.Shape.isClosed() + newobj.Closed = DraftGeomUtils.isReallyClosed(obj.Shape) except Part.OCCError: pass if (not newobj) and newwire: diff --git a/src/Mod/Draft/draftgeoutils/offsets.py b/src/Mod/Draft/draftgeoutils/offsets.py index b7e5845e7f..dda8daac2c 100644 --- a/src/Mod/Draft/draftgeoutils/offsets.py +++ b/src/Mod/Draft/draftgeoutils/offsets.py @@ -33,6 +33,7 @@ import DraftVecUtils from draftgeoutils.general import geomType, vec from draftgeoutils.geometry import get_normal +from draftgeoutils.wires import isReallyClosed from draftgeoutils.intersections import wiresIntersect, connect # Delay import of module until first use because it is heavy @@ -237,7 +238,7 @@ def offsetWire(wire, dvec, bind=False, occ=False, if norm is None: norm = App.Vector(0, 0, 1) - closed = wire.isClosed() + closed = isReallyClosed(wire) nedges = [] if occ: length = abs(dvec.Length) diff --git a/src/Mod/Draft/draftgeoutils/wires.py b/src/Mod/Draft/draftgeoutils/wires.py index 535a8bb9cb..c60811697f 100644 --- a/src/Mod/Draft/draftgeoutils/wires.py +++ b/src/Mod/Draft/draftgeoutils/wires.py @@ -270,9 +270,15 @@ def isReallyClosed(wire): return False # If more than 1 edge, further test below - v1 = wire.Edges[0].Vertexes[0].Point # v1 = wire.Vertexes[0].Point - v2 = wire.Edges[length-1].Vertexes[1].Point # v2 = wire.Vertexes[-1].Point - if DraftVecUtils.equals(v1, v2): + e1 = wire.Edges[0] + e2 = wire.Edges[length-1] + if DraftVecUtils.equals(e1.Vertexes[0].Point, e2.Vertexes[0].Point): + return True + if DraftVecUtils.equals(e1.Vertexes[0].Point, e2.Vertexes[1].Point): + return True + if DraftVecUtils.equals(e1.Vertexes[1].Point, e2.Vertexes[0].Point): + return True + if DraftVecUtils.equals(e1.Vertexes[1].Point, e2.Vertexes[1].Point): return True return False From 8f833a68e8e2497395c9032a662c690709466321 Mon Sep 17 00:00:00 2001 From: Roy-043 Date: Sun, 30 Oct 2022 16:10:04 +0100 Subject: [PATCH 2/2] Draft: Fix rectangle with face offset bug --- src/Mod/Draft/draftgeoutils/wires.py | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/Mod/Draft/draftgeoutils/wires.py b/src/Mod/Draft/draftgeoutils/wires.py index c60811697f..b2296add13 100644 --- a/src/Mod/Draft/draftgeoutils/wires.py +++ b/src/Mod/Draft/draftgeoutils/wires.py @@ -272,14 +272,30 @@ def isReallyClosed(wire): # If more than 1 edge, further test below e1 = wire.Edges[0] e2 = wire.Edges[length-1] - if DraftVecUtils.equals(e1.Vertexes[0].Point, e2.Vertexes[0].Point): - return True + if DraftVecUtils.equals(e1.Vertexes[0].Point, e2.Vertexes[1].Point): - return True + if length == 2: + return DraftVecUtils.equals(e1.Vertexes[1].Point, e2.Vertexes[0].Point) + else: + return True + if DraftVecUtils.equals(e1.Vertexes[1].Point, e2.Vertexes[0].Point): - return True + if length == 2: + return DraftVecUtils.equals(e1.Vertexes[0].Point, e2.Vertexes[1].Point) + else: + return True + + if DraftVecUtils.equals(e1.Vertexes[0].Point, e2.Vertexes[0].Point): + if length == 2: + return DraftVecUtils.equals(e1.Vertexes[1].Point, e2.Vertexes[1].Point) + else: + return True + if DraftVecUtils.equals(e1.Vertexes[1].Point, e2.Vertexes[1].Point): - return True + if length == 2: + return DraftVecUtils.equals(e1.Vertexes[0].Point, e2.Vertexes[0].Point) + else: + return True return False