Skip to content

Part: Add Sketcher_NewSketch to Part toolbar #14318

Merged
chennes merged 3 commits intoFreeCAD:mainfrom
FEA-eng:part_new_sketch
Jun 10, 2024
Merged

Part: Add Sketcher_NewSketch to Part toolbar #14318
chennes merged 3 commits intoFreeCAD:mainfrom
FEA-eng:part_new_sketch

Conversation

@FEA-eng
Copy link
Contributor

@FEA-eng FEA-eng commented May 27, 2024

fixes #14190

adds Sketcher_NewSketch to the Part menu and toolbar (right before Extrude)

sketch 1

sketch 2

@github-actions github-actions bot added the Mod: Part Related to the Part Workbench label May 27, 2024
@wwmayer
Copy link
Contributor

wwmayer commented May 28, 2024

If Part is the default workbench the change will cause this error message:

CommandManager::addTo() try to add an unknown command (Sketcher_NewSketch) to a widget!

@FEA-eng
Copy link
Contributor Author

FEA-eng commented May 28, 2024

If Part is the default workbench the change will cause this error message:

Is there an easy way to avoid this? It was based on the PR where Part CheckGeometry was added to PartDesign toolbar and menu so I didn't expect such issues.

@wwmayer
Copy link
Contributor

wwmayer commented May 28, 2024

It was based on the PR where Part CheckGeometry was added to PartDesign toolbar and menu so I didn't expect such issues.

There it works because PartDesignGui depends on PartGui. And because SketcherGui depends on PartGui too it's not possible to make PartGui depend on SketcherGui.

@FEA-eng
Copy link
Contributor Author

FEA-eng commented May 29, 2024

There it works because PartDesignGui depends on PartGui. And because SketcherGui depends on PartGui too it's not possible to make PartGui depend on SketcherGui.

Ok. And there's no way to fix it with some small workaround? Maybe it should be implemented differently - by adding a default custom toolbar with this button to Part wb. Like what you can do manually via Tools --> Customize --> Toolbars. Could it work this way?

@wwmayer
Copy link
Contributor

wwmayer commented May 30, 2024

You can do that in the InitGui.py file of the Part module:

# ***************************************************************************
# *   Copyright (c) 2002 Juergen Riegel <[email protected]>             *
# *                                                                         *
# *   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 Lesser 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                                                                   *
# *                                                                         *
# ***************************************************************************
"""Initialization of the Part Workbench graphical interface."""

import FreeCAD as App
import FreeCADGui as Gui
import os




class PartWorkbench(Gui.Workbench):
    """Part workbench object."""

    def __init__(self):
        self.__class__.Icon = os.path.join(App.getResourceDir(),
                                           "Mod", "Part",
                                           "Resources", "icons",
                                           "PartWorkbench.svg")
        self.__class__.MenuText = "Part"
        self.__class__.ToolTip = "Part workbench"

    def tryAddManipulator(self):
        try:
            import SketcherGui

            class Manipulator:
                def modifyToolBars(self):
                    return [{"insert" : "Sketcher_NewSketch", "toolItem" : "Part_Extrude"}]
                def modifyMenuBar(self):
                    return [{"insert" : "Sketcher_NewSketch", "menuItem" : "Part_Extrude"}]

            manip = Manipulator()
            Gui.addWorkbenchManipulator(manip)
        except ImportError as err:
            pass

    def Initialize(self):
        # load the module
        import PartGui

        try:
            import BasicShapes.CommandShapes
        except ImportError as err:
            App.Console.PrintError("'BasicShapes' package cannot be loaded. "
                                   "{err}\n".format(err=str(err)))

        try:
            import CompoundTools._CommandCompoundFilter
            import CompoundTools._CommandExplodeCompound
        except ImportError as err:
            App.Console.PrintError("'CompoundTools' package cannot be loaded. "
                                   "{err}\n".format(err=str(err)))

        try:
            bop = __import__("BOPTools")
            bop.importAll()
            bop.addCommands()
            PartGui.BOPTools = bop
        except Exception as err:
            App.Console.PrintError("'BOPTools' package cannot be loaded. "
                                   "{err}\n".format(err=str(err)))

        self.tryAddManipulator()

    def GetClassName(self):
        return "PartGui::Workbench"


Gui.addWorkbench(PartWorkbench())

App.__unit_test__ += ["TestPartGui"]

@FEA-eng
Copy link
Contributor Author

FEA-eng commented Jun 2, 2024

@wwmayer Thank you. It works with this change so I updated the PR. But the Create Sketch button landed at the end of the toolbar for some reason. Previously, it was the first button before Extrude (I positioned it this way in the Workbench.cpp file).

@wwmayer
Copy link
Contributor

wwmayer commented Jun 2, 2024

For me with the modified InitGui.py the sketcher icon is left from the extrude icon.

@chennes chennes merged commit f5486bc into FreeCAD:main Jun 10, 2024
aiksiongkoh pushed a commit to Ondsel-Development/FreeCAD that referenced this pull request Sep 4, 2024
* Update Workbench.cpp

* Part: Update InitGui.py
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Mod: Part Related to the Part Workbench

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Part should have the Create Sketch button

3 participants