Draft: Housekeeping and minor improvements for some draftguitools (#10339)

This commit is contained in:
Roy-043
2023-08-25 03:47:39 +02:00
committed by GitHub
parent 097d5d6fee
commit 979d83a22b
3 changed files with 51 additions and 84 deletions

View File

@@ -35,8 +35,6 @@ import draftutils.todo as todo
from draftutils.messages import _msg, _log
__metaclass__ = type # to support Python 2 use of `super()`
class GuiCommandSimplest:
"""Simplest base class for GuiCommands.

View File

@@ -44,16 +44,12 @@ import draftguitools.gui_tool_utils as gui_tool_utils
from draftutils.messages import _msg, _log
__metaclass__ = type # to support Python 2 use of `super()`
class DraftTool:
"""The base class of all Draft Tools.
This is the original class that was defined in `DraftTools.py`
before any re-organization of the code.
It must be preserved exactly like this to keep the original tools
running without problems.
This class is subclassed by `Creator` and `Modifier`
to set up a few additional properties of these two types.
@@ -84,7 +80,7 @@ class DraftTool:
else:
return False
def Activated(self, name="None", noplanesetup=False, is_subtool=False):
def Activated(self, name="None", is_subtool=False):
"""Execute when the command is called.
If an active Gui Command exists, it will call the `finish` method
@@ -100,11 +96,6 @@ class DraftTool:
It defaults to `'None'`.
It is the `featureName` of the object, to know what is being run.
noplanesetup: bool, optional
It defaults to `False`.
If it is `False` it will set up the working plane
by running `App.DraftWorkingPlane.setup()`.
is_subtool: bool, optional
It defaults to `False`.
This is set to `True` when we want to modify an object
@@ -113,8 +104,13 @@ class DraftTool:
That is, first we run `Draft_SubelementHighlight`
then we can use `Draft_Move` while setting `is_subtool` to `True`.
"""
self.doc = App.ActiveDocument
if not self.doc:
return
if App.activeDraftCommand and not is_subtool:
App.activeDraftCommand.finish()
App.activeDraftCommand = self
# The Part module is first initialized when using any Gui Command
# for the first time.
@@ -122,28 +118,22 @@ class DraftTool:
import Part
import DraftGeomUtils
self.ui = None
self.call = None
self.support = None
self.point = None
self.commitList = []
self.doc = App.ActiveDocument
if not self.doc:
self.finish()
return
App.activeDraftCommand = self
self.view = gui_utils.get_3d_view()
self.ui = Gui.draftToolBar
self.featureName = name
self.ui.sourceCmd = self
if not noplanesetup:
App.DraftWorkingPlane.setup()
self.node = []
self.pos = []
self.constrain = None
self.obj = None
self.extendedCopy = False
self.featureName = name
self.node = []
self.obj = None
self.point = None
self.pos = []
self.support = None
self.ui = Gui.draftToolBar
self.ui.sourceCmd = self
self.view = gui_utils.get_3d_view()
App.DraftWorkingPlane.setup()
self.planetrack = None
if utils.get_param("showPlaneTracker", False):
self.planetrack = trackers.PlaneTracker()
@@ -264,18 +254,11 @@ class DraftTool:
class Creator(DraftTool):
"""A generic Creator tool, used by creation tools such as line or arc.
It runs the Activated method from the parent class.
If `noplanesetup` is `False`, it sets the appropriate `support` attribute
and sets the working plane with `gui_tool_utils.get_support`.
It inherits `DraftTool`, which sets up the majority of the behavior
of this class.
"""
def __init__(self):
super(Creator, self).__init__()
def Activated(self, name="None", noplanesetup=False):
def Activated(self, name="None"):
"""Execute when the command is called.
Parameters
@@ -283,15 +266,12 @@ class Creator(DraftTool):
name: str, optional
It defaults to `'None'`.
It is the `featureName` of the object, to know what is being run.
noplanesetup: bool, optional
It defaults to `False`.
If it is `False` it will set up the working plane
by running `App.DraftWorkingPlane.setup()`.
"""
super(Creator, self).Activated(name, noplanesetup)
if not noplanesetup:
self.support = gui_tool_utils.get_support()
super().Activated(name)
# call DraftWorkingPlane.save to sync with
# DraftWorkingPlane.restore called in finish method
App.DraftWorkingPlane.save()
self.support = gui_tool_utils.get_support()
class Modifier(DraftTool):
@@ -305,11 +285,11 @@ class Modifier(DraftTool):
"""
def __init__(self):
super(Modifier, self).__init__()
super().__init__()
self.copymode = False
def Activated(self, name="None", noplanesetup=False, is_subtool=False):
super(Modifier, self).Activated(name, noplanesetup, is_subtool)
def Activated(self, name="None", is_subtool=False):
super().Activated(name, is_subtool)
# call DraftWorkingPlane.save to sync with
# DraftWorkingPlane.restore called in finish method
App.DraftWorkingPlane.save()

View File

@@ -52,7 +52,7 @@ class Line(gui_base_original.Creator):
"""Gui command for the Line tool."""
def __init__(self, wiremode=False):
super(Line, self).__init__()
super().__init__()
self.isWire = wiremode
def GetResources(self):
@@ -63,17 +63,13 @@ class Line(gui_base_original.Creator):
'MenuText': QT_TRANSLATE_NOOP("Draft_Line", "Line"),
'ToolTip': QT_TRANSLATE_NOOP("Draft_Line", "Creates a 2-point line. CTRL to snap, SHIFT to constrain.")}
def Activated(self, name=QT_TRANSLATE_NOOP("draft","Line"), icon="Draft_Line", task_title=None):
def Activated(self, name=QT_TRANSLATE_NOOP("draft", "Line"), icon="Draft_Line", task_title=None):
"""Execute when the command is called."""
super(Line, self).Activated(name)
super().Activated(name)
if task_title is None:
title = translate("draft", name)
else:
title = task_title
if not self.doc:
return
self.obj = None # stores the temp shape
self.oldWP = None # stores the WP if we modify it
if self.isWire:
self.ui.wireUi(title=title, icon=icon)
else:
@@ -139,12 +135,6 @@ class Line(gui_base_original.Creator):
Close the line if `True`.
"""
self.removeTemporaryObject()
if self.oldWP:
App.DraftWorkingPlane.setFromParameters(self.oldWP)
if hasattr(Gui, "Snapper"):
Gui.Snapper.setGrid(tool=True)
Gui.Snapper.restack()
self.oldWP = None
if len(self.node) > 1:
Gui.addModule("Draft")
@@ -191,7 +181,10 @@ class Line(gui_base_original.Creator):
'FreeCAD.ActiveDocument.recompute()']
self.commit(translate("draft", "Create Wire"),
_cmd_list)
super(Line, self).finish()
super().finish()
if hasattr(Gui, "Snapper"):
Gui.Snapper.setGrid(tool=True)
Gui.Snapper.restack()
if cont or (cont is None and self.ui and self.ui.continueMode):
self.Activated()
@@ -259,23 +252,19 @@ class Line(gui_base_original.Creator):
def orientWP(self):
"""Orient the working plane."""
import DraftGeomUtils
if hasattr(App, "DraftWorkingPlane"):
if len(self.node) > 1 and self.obj:
n = DraftGeomUtils.getNormal(self.obj.Shape)
if not n:
n = App.DraftWorkingPlane.axis
p = self.node[-1]
v = self.node[-2].sub(self.node[-1])
v = v.negative()
if not self.oldWP:
self.oldWP = App.DraftWorkingPlane.getParameters()
App.DraftWorkingPlane.alignToPointAndAxis(p, n, upvec=v)
if hasattr(Gui, "Snapper"):
Gui.Snapper.setGrid()
Gui.Snapper.restack()
if self.planetrack:
self.planetrack.set(self.node[-1])
if len(self.node) > 1 and self.obj:
import DraftGeomUtils
n = DraftGeomUtils.getNormal(self.obj.Shape)
if not n:
n = App.DraftWorkingPlane.axis
p = self.node[-1]
v = self.node[-1].sub(self.node[-2])
App.DraftWorkingPlane.alignToPointAndAxis(p, n, upvec=v)
if hasattr(Gui, "Snapper"):
Gui.Snapper.setGrid()
Gui.Snapper.restack()
if self.planetrack:
self.planetrack.set(self.node[-1])
def numericInput(self, numx, numy, numz):
"""Validate the entry fields in the user interface.
@@ -303,7 +292,7 @@ class Wire(Line):
"""
def __init__(self):
super(Wire, self).__init__(wiremode=True)
super().__init__(wiremode=True)
def GetResources(self):
"""Set icon, menu and tooltip."""
@@ -362,9 +351,9 @@ class Wire(Line):
# If there was no selection or the selection was just one object
# then we proceed with the normal line creation functions,
# only this time we will be able to input more than two points
super(Wire, self).Activated(name="Polyline",
icon="Draft_Wire",
task_title=translate("draft","Polyline"))
super().Activated(name="Polyline",
icon="Draft_Wire",
task_title=translate("draft", "Polyline"))
Gui.addCommand('Draft_Wire', Wire())