diff --git a/src/Mod/Draft/CMakeLists.txt b/src/Mod/Draft/CMakeLists.txt index a663a4674c..d7ada4c5ce 100644 --- a/src/Mod/Draft/CMakeLists.txt +++ b/src/Mod/Draft/CMakeLists.txt @@ -101,6 +101,7 @@ SET(Draft_GUI_tools draftguitools/gui_groups.py draftguitools/gui_grid.py draftguitools/gui_heal.py + draftguitools/gui_dimension_ops.py draftguitools/README.md ) diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 13ddf33a38..9ae7836ff2 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -87,6 +87,7 @@ from draftguitools.gui_groups import AddToGroup from draftguitools.gui_groups import SelectGroup from draftguitools.gui_grid import ToggleGrid from draftguitools.gui_heal import Heal +from draftguitools.gui_dimension_ops import Draft_FlipDimension # import DraftFillet import drafttaskpanels.task_shapestring as task_shapestring import drafttaskpanels.task_scale as task_scale @@ -4739,20 +4740,6 @@ class Draft_Facebinder(Creator): FreeCAD.ActiveDocument.recompute() self.finish() -class Draft_FlipDimension(): - def GetResources(self): - return {'Pixmap' : 'Draft_FlipDimension', - 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_FlipDimension", "Flip Dimension"), - 'ToolTip' : QtCore.QT_TRANSLATE_NOOP("Draft_FlipDimension", "Flip the normal direction of a dimension")} - - def Activated(self): - for o in FreeCADGui.Selection.getSelection(): - if Draft.getType(o) in ["Dimension","AngularDimension"]: - FreeCAD.ActiveDocument.openTransaction("Flip dimension") - FreeCADGui.doCommand("FreeCAD.ActiveDocument."+o.Name+".Normal = FreeCAD.ActiveDocument."+o.Name+".Normal.negative()") - FreeCAD.ActiveDocument.commitTransaction() - FreeCAD.ActiveDocument.recompute() - class Mirror(Modifier): """The Draft_Mirror FreeCAD command definition""" @@ -5302,7 +5289,6 @@ FreeCADGui.addCommand('Draft_Stretch',Stretch()) # context commands FreeCADGui.addCommand('Draft_ApplyStyle',ApplyStyle()) FreeCADGui.addCommand('Draft_Shape2DView',Shape2DView()) -FreeCADGui.addCommand('Draft_FlipDimension',Draft_FlipDimension()) FreeCADGui.addCommand('Draft_AutoGroup',SetAutoGroup()) FreeCADGui.addCommand('Draft_AddConstruction',Draft_AddConstruction()) diff --git a/src/Mod/Draft/draftguitools/gui_dimension_ops.py b/src/Mod/Draft/draftguitools/gui_dimension_ops.py new file mode 100644 index 0000000000..3f541e6daf --- /dev/null +++ b/src/Mod/Draft/draftguitools/gui_dimension_ops.py @@ -0,0 +1,82 @@ +# *************************************************************************** +# * (c) 2009, 2010 Yorik van Havre * +# * (c) 2009, 2010 Ken Cline * +# * (c) 2020 Eliud Cabrera Castillo * +# * * +# * This file is part of the FreeCAD CAx development system. * +# * * +# * This program is free software; you can redistribute it and/or modify * +# * it under the terms of the GNU Lesser General Public License (LGPL) * +# * as published by the Free Software Foundation; either version 2 of * +# * the License, or (at your option) any later version. * +# * for detail see the LICENCE text file. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, * +# * but WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +# * GNU Library General Public License for more details. * +# * * +# * You should have received a copy of the GNU Library General Public * +# * License along with FreeCAD; if not, write to the Free Software * +# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +# * USA * +# * * +# *************************************************************************** +"""Provides tools to modify Draft dimensions. + +For example, a tool to flip the direction of the text in the dimension +as the normal is sometimes not correctly calculated automatically. +""" +## @package gui_dimension_ops +# \ingroup DRAFT +# \brief Provides tools to modify Draft dimensions. + +from PySide.QtCore import QT_TRANSLATE_NOOP + +import FreeCADGui as Gui +import draftutils.utils as utils +import draftguitools.gui_base as gui_base +from draftutils.translate import _tr + + +class FlipDimension(gui_base.GuiCommandNeedsSelection): + """The Draft FlipDimension command definition. + + Flip the normal direction of the selected dimensions. + + It inherits `GuiCommandNeedsSelection` to set up the document + and other behavior. See this class for more information. + """ + + def __init__(self): + super().__init__(name=_tr("Flip dimension")) + + def GetResources(self): + """Set icon, menu and tooltip.""" + _tip = ("Flip the normal direction of the selected dimensions " + "(linear, radial, angular).\n" + "If other objects are selected they are ignored.") + + return {'Pixmap': 'Draft_FlipDimension', + 'MenuText': QT_TRANSLATE_NOOP("Draft_FlipDimension", + "Flip dimension"), + 'ToolTip': QT_TRANSLATE_NOOP("Draft_FlipDimension", + _tip)} + + def Activated(self): + """Execute when the command is called.""" + super().Activated() + + for o in Gui.Selection.getSelection(): + if utils.get_type(o) in ("Dimension", "AngularDimension"): + self.doc.openTransaction("Flip dimension") + _cmd = "App.activeDocument()." + o.Name + ".Normal" + _cmd += " = " + _cmd += "App.activeDocument()." + o.Name + ".Normal.negative()" + Gui.doCommand(_cmd) + self.doc.commitTransaction() + self.doc.recompute() + + +Draft_FlipDimension = FlipDimension +Gui.addCommand('Draft_FlipDimension', FlipDimension()) diff --git a/src/Mod/Draft/draftutils/init_tools.py b/src/Mod/Draft/draftutils/init_tools.py index 258b62025f..5ec19ec8d0 100644 --- a/src/Mod/Draft/draftutils/init_tools.py +++ b/src/Mod/Draft/draftutils/init_tools.py @@ -83,6 +83,7 @@ def get_draft_modification_commands(): "Draft_Upgrade", "Draft_Downgrade", "Separator", "Draft_WireToBSpline", "Draft_Draft2Sketch", + "Draft_FlipDimension", "Separator", "Draft_Shape2DView", "Draft_Drawing"] return lst