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:
committed by
Yorik van Havre
parent
c24b9fb68a
commit
bc0dc26b5a
@@ -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())
|
||||
|
||||
@@ -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"]
|
||||
|
||||
Reference in New Issue
Block a user