diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 300bf98ddc..a650fbbe72 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -5242,6 +5242,28 @@ class _ViewProviderWire(_ViewProviderDraft): return [self.Object.Base,self.Object.Tool] return [] + def setupContextMenu(self,vobj,menu): + from PySide import QtCore,QtGui + action1 = QtGui.QAction(QtGui.QIcon(":/icons/Draft_Edit.svg"),"Flatten this wire",menu) + QtCore.QObject.connect(action1,QtCore.SIGNAL("triggered()"),self.flatten) + menu.addAction(action1) + + def flatten(self): + if hasattr(self,"Object"): + if len(self.Object.Shape.Wires) == 1: + import DraftGeomUtils + fw = DraftGeomUtils.flattenWire(self.Object.Shape.Wires[0]) + points = [v.Point for v in fw.Vertexes] + if len(points) == len(self.Object.Points): + if points != self.Object.Points: + FreeCAD.ActiveDocument.openTransaction("Flatten wire") + FreeCADGui.doCommand("FreeCAD.ActiveDocument."+self.Object.Name+".Points="+str(points).replace("Vector","FreeCAD.Vector").replace(" ","")) + FreeCAD.ActiveDocument.commitTransaction() + FreeCAD.ActiveDocument.recompute() + else: + from DraftTools import translate + FreeCAD.Console.PrintMessage(translate("Draft","This Wire is already flat")+"\n") + class _Polygon(_DraftObject): "The Polygon object" @@ -6608,8 +6630,6 @@ class ViewProviderWorkingPlaneProxy: vis[o.Name] = str(o.ViewObject.Visibility) self.Object.ViewObject.VisibilityMap = vis - - def attach(self,vobj): from pivy import coin self.clip = None diff --git a/src/Mod/Draft/DraftGeomUtils.py b/src/Mod/Draft/DraftGeomUtils.py index cda7ec7ad4..a687ccef05 100755 --- a/src/Mod/Draft/DraftGeomUtils.py +++ b/src/Mod/Draft/DraftGeomUtils.py @@ -888,7 +888,8 @@ def flattenWire(wire): verts = [o] for v in wire.Vertexes[1:]: verts.append(plane.projectPoint(v.Point)) - verts.append(o) + if wire.isClosed(): + verts.append(o) w = Part.makePolygon(verts) return w