diff --git a/src/Mod/Draft/CMakeLists.txt b/src/Mod/Draft/CMakeLists.txt index 5a2c8c6878..fe4611298c 100644 --- a/src/Mod/Draft/CMakeLists.txt +++ b/src/Mod/Draft/CMakeLists.txt @@ -89,6 +89,7 @@ SET(Creator_tools draftguitools/gui_beziers.py draftguitools/gui_rectangles.py draftguitools/gui_arcs.py + draftguitools/gui_circles.py ) SET(Draft_GUI_tools diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 4904044811..94d3fee2ee 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -158,20 +158,7 @@ from draftguitools.gui_beziers import BezierGroup from draftguitools.gui_rectangles import Rectangle from draftguitools.gui_arcs import Arc from draftguitools.gui_arcs import Draft_Arc_3Points - - -class Circle(Arc): - """The Draft_Circle FreeCAD command definition""" - - def __init__(self): - self.closedCircle=True - self.featureName = "Circle" - - def GetResources(self): - return {'Pixmap' : 'Draft_Circle', - 'Accel' : "C, I", - 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Circle", "Circle"), - 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_Circle", "Creates a circle. CTRL to snap, ALT to select tangent objects")} +from draftguitools.gui_circles import Circle class Polygon(Creator): @@ -3749,7 +3736,6 @@ from draftguitools.gui_snaps import ShowSnapBar #--------------------------------------------------------------------------- # drawing commands -FreeCADGui.addCommand('Draft_Circle',Circle()) FreeCADGui.addCommand('Draft_Text',Text()) FreeCADGui.addCommand('Draft_Dimension',Dimension()) FreeCADGui.addCommand('Draft_Polygon',Polygon()) diff --git a/src/Mod/Draft/draftguitools/gui_circles.py b/src/Mod/Draft/draftguitools/gui_circles.py new file mode 100644 index 0000000000..3119c3b648 --- /dev/null +++ b/src/Mod/Draft/draftguitools/gui_circles.py @@ -0,0 +1,83 @@ +# *************************************************************************** +# * (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 for creating circles with the Draft Workbench.""" +## @package gui_circles +# \ingroup DRAFT +# \brief Provides tools for creating circlres with the Draft Workbench. + +from PySide.QtCore import QT_TRANSLATE_NOOP + +import FreeCADGui as Gui +import Draft_rc +import draftguitools.gui_arcs as gui_arcs + +# The module is used to prevent complaints from code checkers (flake8) +True if Draft_rc.__name__ else False + + +class Circle(gui_arcs.Arc): + """Gui command for the Circle tool. + + It inherits the entire `Arc` class. + The only difference is that the `closedCircle` attribute + is already set to `True`, and the `featureName` attribute + is `'Circle'`. + + This will result in an arc that describes a complete circumference + so the starting angle and end angle will be the same. + + Internally, both circular arcs and circles are `'Circle'` objects. + + Discussion + ---------- + Both arcs and circles are `'Circle'` objects, but when it comes to the + Gui Commands, the relationships are reversed, and both launch the `Arc` + command. + + Maybe the relationship should be changed: the base Gui Command + should be `Circle`, and an arc would launch the same command, + as both are internally `'Circle'` objects. + + Another possibility is to rename the `'Circle'` object to `'Arc'`. + Then both a circle and an arc would internally be `'Arc'` objects, + and in the Gui Commands they both would use the `Arc` command. + """ + + def __init__(self): + self.closedCircle = True + self.featureName = "Circle" + + def GetResources(self): + """Set icon, menu and tooltip.""" + _tip = ("Creates a circle (full circular arc).\n" + "CTRL to snap, ALT to select tangent objects.") + + return {'Pixmap': 'Draft_Circle', + 'Accel': "C, I", + 'MenuText': QT_TRANSLATE_NOOP("Draft_Circle", "Circle"), + 'ToolTip': QT_TRANSLATE_NOOP("Draft_Circle", _tip)} + + +Gui.addCommand('Draft_Circle', Circle())