diff --git a/src/Mod/Part/BasicShapes/Shapes.py b/src/Mod/Part/BasicShapes/Shapes.py new file mode 100644 index 0000000000..986a9ea30d --- /dev/null +++ b/src/Mod/Part/BasicShapes/Shapes.py @@ -0,0 +1,76 @@ +# *************************************************************************** +# * * +# * Copyright (c) 2019 Werner Mayer * +# * * +# * 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. * +# * * +# * This program 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 this program; if not, write to the Free Software * +# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +# * USA * +# * * +# *************************************************************************** + +__title__ = "BasicShapes.Shapes" +__author__ = "Werner Mayer" +__url__ = "http://www.freecadweb.org" +__doc__ = "Basic shapes" + + +import FreeCAD +from FreeCAD import Qt +import FreeCADGui +import Part +import math +import sys + +def makeTube(outerRadius, innerRadius, height): + outer_cylinder = Part.makeCylinder(outerRadius, height) + shape = outer_cylinder + if innerRadius > 0 and innerRadius < outerRadius: + inner_cylinder = Part.makeCylinder(innerRadius, height) + shape = outer_cylinder.cut(inner_cylinder) + return shape + + +class TubeFeature: + def __init__(self, obj): + obj.Proxy = self + obj.addProperty("App::PropertyLength","OuterRadius","Tube","Outer radius").OuterRadius = 5.0 + obj.addProperty("App::PropertyLength","InnerRadius","Tube","Inner radius").InnerRadius = 2.0 + obj.addProperty("App::PropertyLength","Height","Tube", "Height of the tube").Height = 10.0 + + def execute(self, fp): + fp.Shape = makeTube(fp.OuterRadius, fp.InnerRadius, fp.Height) + + +class _CommandMakeTube: + "Make tube command" + def GetResources(self): + return {'MenuText': Qt.QT_TRANSLATE_NOOP("Part_MakeTube","Create tube"), + 'Accel': "", + 'CmdType': "ForEdit", + 'ToolTip': Qt.QT_TRANSLATE_NOOP("Part_MakeTube","Creates a tube")} + + def Activated(self): + FreeCAD.ActiveDocument.openTransaction("Create tube") + tube = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Tube") + TubeFeature(tube) + tube.ViewObject.Proxy = 0 + FreeCAD.ActiveDocument.commitTransaction() + FreeCAD.ActiveDocument.recompute() + + def IsActive(self): + return not FreeCAD.ActiveDocument is None + + +FreeCADGui.addCommand('Part_MakeTube',_CommandMakeTube()) diff --git a/src/Mod/Part/BasicShapes/__init__.py b/src/Mod/Part/BasicShapes/__init__.py new file mode 100644 index 0000000000..630abebf65 --- /dev/null +++ b/src/Mod/Part/BasicShapes/__init__.py @@ -0,0 +1,30 @@ +# *************************************************************************** +# * * +# * Copyright (c) 2019 Werner Mayer * +# * * +# * 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. * +# * * +# * This program 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 this program; if not, write to the Free Software * +# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +# * USA * +# * * +# *************************************************************************** + +__title__ = "BasicShapes package" +__author__ = "Werner Mayer" +__url__ = "http://www.freecadweb.org" +__doc__ = """BasicShapes Package (part of FreeCAD).""" + +## @package BasicShapes +# \ingroup PART +# \brief BasicShapes Package for Part workbench diff --git a/src/Mod/Part/CMakeLists.txt b/src/Mod/Part/CMakeLists.txt index c482107278..ca26dcc3c5 100644 --- a/src/Mod/Part/CMakeLists.txt +++ b/src/Mod/Part/CMakeLists.txt @@ -26,6 +26,11 @@ set(AttachmentEditor_Scripts AttachmentEditor/TaskAttachmentEditor.ui ) +set(BasicShapes_Scripts + BasicShapes/__init__.py + BasicShapes/Shapes.py +) + set(BOPTools_Scripts BOPTools/__init__.py BOPTools/GeneralFuseResult.py @@ -48,6 +53,7 @@ set(CompoundTools_Scripts add_custom_target(PartScripts ALL SOURCES ${Part_Scripts} ${AttachmentEditor_Scripts} + ${BasicShapes_Scripts} ${BOPTools_Scripts} ${CompoundTools_Scripts} ) @@ -57,6 +63,7 @@ fc_target_copy_resource(PartScripts ${CMAKE_BINARY_DIR}/Mod/Part ${Part_Scripts} ${AttachmentEditor_Scripts} + ${BasicShapes_Scripts} ${BOPTools_Scripts} ${CompoundTools_Scripts} ) @@ -75,6 +82,13 @@ INSTALL( Mod/Part/AttachmentEditor ) +INSTALL( + FILES + ${BasicShapes_Scripts} + DESTINATION + Mod/Part/BasicShapes +) + INSTALL( FILES ${BOPTools_Scripts} diff --git a/src/Mod/Part/Gui/Workbench.cpp b/src/Mod/Part/Gui/Workbench.cpp index f879097066..bad5f1f02a 100644 --- a/src/Mod/Part/Gui/Workbench.cpp +++ b/src/Mod/Part/Gui/Workbench.cpp @@ -68,7 +68,9 @@ Gui::MenuItem* Workbench::setupMenuBar() const << "Part_Cylinder" << "Part_Sphere" << "Part_Cone" - << "Part_Torus"; + << "Part_Torus" + << "Separator" + << "Part_MakeTube"; Gui::MenuItem* bop = new Gui::MenuItem; bop->setCommand("Boolean"); diff --git a/src/Mod/Part/InitGui.py b/src/Mod/Part/InitGui.py index c6b8f2a6fc..b427f92be8 100644 --- a/src/Mod/Part/InitGui.py +++ b/src/Mod/Part/InitGui.py @@ -42,6 +42,11 @@ class PartWorkbench ( Workbench ): # load the module import PartGui + try: + import BasicShapes.Shapes + except ImportError as err: + FreeCAD.Console.PrintError("Features from BasicShapes package cannot be loaded. {err}\n".format(err= str(err))) + try: import CompoundTools._CommandCompoundFilter import CompoundTools._CommandExplodeCompound