Add new edit tool icon, shortcut, and basic modes.

* It allows you to select multiple objects to edit instead of just one.
 * It highlights the object lines and the points in red.
 * It stays in the mode and allows you to run other modifiers.
 * A very hackish hook into the move modifier is added as a proof of concept.
This commit is contained in:
Dion Moult
2019-02-17 22:55:57 +11:00
committed by Yorik van Havre
parent c24b9fb68a
commit bc0dc26b5a
2 changed files with 83 additions and 2 deletions

View File

@@ -2563,7 +2563,16 @@ class Move(Modifier):
def Activated(self):
self.name = translate("draft","Move", utf8_decode=True)
Modifier.Activated(self,self.name)
if not isinstance(FreeCAD.activeDraftCommand, EditImproved):
Modifier.Activated(self,self.name)
else:
self.ui = FreeCADGui.draftToolBar
self.view = Draft.get3DView()
self.call = None
self.node = []
self.extendedCopy = False
self.featureName = "Edit_Improved"
self.planetrack = None
self.ghost = None
if self.ui:
if not FreeCADGui.Selection.getSelection():
@@ -4209,6 +4218,77 @@ class ToggleDisplayMode():
if "Flat Lines" in obj.ViewObject.listDisplayModes():
obj.ViewObject.DisplayMode = "Flat Lines"
class EditImproved(Modifier):
"The Draft_Edit_Improved FreeCAD command definition"
def __init__(self):
self.is_running = False
self.editable_objects = []
self.original_view_settings = {}
def GetResources(self):
return {'Pixmap' : 'Draft_Edit',
'Accel' : "D, E",
'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Edit_Improved", "Edit Improved"),
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_Edit_Improved", "Edits the selected objects")}
def Activated(self):
if self.is_running:
return self.finish()
self.is_running = True
Modifier.Activated(self,"Edit_Improved")
self.get_selection()
def proceed(self):
self.remove_view_callback()
self.get_editable_objects_from_selection()
if not self.editable_objects:
return self.finish()
self.call = self.view.addEventCallback("SoEvent", self.action)
self.highlight_editable_objects()
def finish(self):
Modifier.finish(self)
self.remove_view_callback()
self.restore_editable_objects_graphics()
self.__init__()
def action(self, event):
if event["Type"] == "SoKeyboardEvent" and event["Key"] == "ESCAPE":
self.finish()
def get_selection(self):
if not FreeCADGui.Selection.getSelection() and self.ui:
msg(translate("Draft_Edit_Improved", "Select an object to edit")+"\n")
self.call = self.view.addEventCallback("SoEvent", selectObject)
else:
self.proceed()
def remove_view_callback(self):
if self.call:
self.view.removeEventCallback("SoEvent",self.call)
def get_editable_objects_from_selection(self):
for object in FreeCADGui.Selection.getSelection():
if object.isDerivedFrom("Part::Part2DObject"):
self.editable_objects.append(object)
def highlight_editable_objects(self):
for object in self.editable_objects:
self.original_view_settings[object.Name] = {
'PointSize': object.ViewObject.PointSize,
'PointColor': object.ViewObject.PointColor,
'LineColor': object.ViewObject.LineColor
}
object.ViewObject.PointSize = 10
object.ViewObject.PointColor = (1., 0., 0.)
object.ViewObject.LineColor = (1., 0., 0.)
def restore_editable_objects_graphics(self):
for object in self.editable_objects:
for attribute, value in self.original_view_settings[object.Name].items():
setattr(object.ViewObject, attribute, value)
class Edit(Modifier):
"The Draft_Edit FreeCAD command definition"
@@ -6414,6 +6494,7 @@ FreeCADGui.addCommand('Draft_Trimex',Trimex())
FreeCADGui.addCommand('Draft_Scale',Scale())
FreeCADGui.addCommand('Draft_Drawing',Drawing())
FreeCADGui.addCommand('Draft_Edit',Edit())
FreeCADGui.addCommand('Draft_Edit_Improved',EditImproved())
FreeCADGui.addCommand('Draft_AddPoint',AddPoint())
FreeCADGui.addCommand('Draft_DelPoint',DelPoint())
FreeCADGui.addCommand('Draft_WireToBSpline',WireToBSpline())

View File

@@ -74,7 +74,7 @@ class DraftWorkbench (Workbench):
"Draft_ShapeString","Draft_Facebinder","Draft_BezierTools","Draft_Label"]
self.modList = ["Draft_Move","Draft_Rotate","Draft_Offset",
"Draft_Trimex", "Draft_Join", "Draft_Split", "Draft_Upgrade", "Draft_Downgrade", "Draft_Scale",
"Draft_Edit","Draft_WireToBSpline","Draft_AddPoint",
"Draft_Edit","Draft_Edit_Improved","Draft_WireToBSpline","Draft_AddPoint",
"Draft_DelPoint","Draft_Shape2DView","Draft_Draft2Sketch","Draft_Array",
"Draft_PathArray", "Draft_PointArray","Draft_Clone",
"Draft_Drawing","Draft_Mirror","Draft_Stretch"]