From f3f15b1a9b2866be6f83b66631334a2133314ae3 Mon Sep 17 00:00:00 2001 From: carlopav Date: Wed, 16 Oct 2019 22:35:29 +0200 Subject: [PATCH] [Draft] Edit: preview node with mouseover Preview editing nodes with mouse move. Modified edit trackers to store in self.color the value. Also added a method to it to set color. --- src/Mod/Draft/DraftEdit.py | 29 +++++++++++++++++++++++++++-- src/Mod/Draft/DraftTrackers.py | 14 ++++++++++---- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/src/Mod/Draft/DraftEdit.py b/src/Mod/Draft/DraftEdit.py index afb5c7d4b7ac..53ac0e24af0c 100644 --- a/src/Mod/Draft/DraftEdit.py +++ b/src/Mod/Draft/DraftEdit.py @@ -41,6 +41,20 @@ from PySide import QtCore from PySide.QtCore import QT_TRANSLATE_NOOP from DraftTools import translate + + COLORS = { + "default": FreeCADGui.draftToolBar.getDefaultColor("snap"), + "black": (0., 0., 0.), + "white": (1., 1., 1.), + "grey": (.5, .5, .5), + "red": (1., 0., 0.), + "green": (0., 1., 0.), + "blue": (0., 0., 1.), + "yellow": (1., 1., 0.), + "cyan": (0., 1., 1.), + "magenta":(1., 0., 1.) + } + class Edit(): @@ -49,6 +63,7 @@ class Edit(): def __init__(self): self.running = False self.trackers = {'object':[]} + self.overNode = None # preselected node with mouseover self.obj = None self.editing = None @@ -271,8 +286,18 @@ def mouseMoved(self, event_callback): if self.editing != None: self.updateTrackerAndGhost(event) else: - # TODO add preselection color change for trackers - pass + # look for a node in mouse position and highlight it + pos = event.getPosition() + node = self.getEditNode(pos) + ep = self.getEditNodeIndex(node) + if ep != None: + if self.overNode != None: self.overNode.setColor(COLORS["default"]) + self.trackers[str(node.objectName.getValue())][ep].setColor(COLORS["red"]) + self.overNode = self.trackers[str(node.objectName.getValue())][ep] + else: + if self.overNode != None: + self.overNode.setColor(COLORS["default"]) + self.overNode = None def startEditing(self, event): "start editing selected EditNode" diff --git a/src/Mod/Draft/DraftTrackers.py b/src/Mod/Draft/DraftTrackers.py index 23495ace6e56..e688425773f3 100644 --- a/src/Mod/Draft/DraftTrackers.py +++ b/src/Mod/Draft/DraftTrackers.py @@ -709,11 +709,11 @@ class editTracker(Tracker): """A node edit tracker""" def __init__(self,pos=Vector(0,0,0),name=None,idx=0,objcol=None,\ marker=FreeCADGui.getMarkerIndex("quad", 9),inactive=False): - color = coin.SoBaseColor() + self.color = coin.SoBaseColor() if objcol: - color.rgb = objcol[:3] + self.color.rgb = objcol[:3] else: - color.rgb = FreeCADGui.draftToolBar.getDefaultColor("snap") + self.color.rgb = FreeCADGui.draftToolBar.getDefaultColor("snap") self.marker = coin.SoMarkerSet() # this is the marker symbol self.marker.markerIndex = marker self.coords = coin.SoCoordinate3() # this is the coordinate @@ -729,7 +729,7 @@ def __init__(self,pos=Vector(0,0,0),name=None,idx=0,objcol=None,\ selnode.subElementName.setValue("EditNode"+str(idx)) node = coin.SoAnnotation() selnode.addChild(self.coords) - selnode.addChild(color) + selnode.addChild(self.color) selnode.addChild(self.marker) node.addChild(selnode) ontop = not inactive @@ -746,6 +746,12 @@ def get(self): def move(self,delta): self.set(self.get().add(delta)) + def setColor(self,color): + if color: + self.color.rgb = color + else: + self.color.rgb = FreeCADGui.draftToolBar.getDefaultColor("snap") + class PlaneTracker(Tracker): """A working plane tracker""" def __init__(self):