Skip to content

Commit

Permalink
Added support for manual point input.
Browse files Browse the repository at this point in the history
  • Loading branch information
mlampert committed Jan 11, 2017
1 parent 8f7102e commit 0781cf7
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 39 deletions.
11 changes: 9 additions & 2 deletions src/Mod/Path/Gui/Resources/panels/PointEdit.ui
Expand Up @@ -39,21 +39,28 @@
</item>
<item row="2" column="0">
<widget class="QLabel" name="lValueZ">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Global Z</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="Gui::InputField" name="ifValueZ"/>
<widget class="Gui::InputField" name="ifValueZ">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item alignment="Qt::AlignHCenter">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
<set>QDialogButtonBox::Save</set>
</property>
</widget>
</item>
Expand Down
80 changes: 43 additions & 37 deletions src/Mod/Path/PathScripts/PathDressupHoldingTags.py
Expand Up @@ -792,6 +792,7 @@ def __init__(self, obj, viewProvider, jvoVisibility=None):
self.jvo.hide()
else:
self.jvoVisible = jvoVisibility
self.pt = FreeCAD.Vector(0, 0, 0)

def reject(self):
print("reject")
Expand All @@ -814,10 +815,6 @@ def cleanup(self):
if self.jvoVisible:
self.jvo.show()

def open(self):
self.s = SelObserver(self.viewProvider)
FreeCADGui.Selection.addObserver(self.s)

def getTags(self, includeCurrent):
tags = []
index = self.formTags.lwTags.currentRow()
Expand Down Expand Up @@ -909,14 +906,14 @@ def deleteSelectedTag(self):
self.updateTagsView()

def addNewTagAt(self, point, obj):
if obj == self.obj and obj.Proxy.pointIsOnPath(obj, point):
print("addNewTagAt(%s, %s)" % (point, obj.Name))
if (obj or point != FreeCAD.Vector()) and self.obj.Proxy.pointIsOnPath(self.obj, point):
print("addNewTagAt(%s)" % (point))
tags = self.tags
tags.append((point.x, point.y, True))
self.obj.Proxy.setXyEnabled(tags)
self.updateTagsView()
else:
print("ignore new tag at %s (%s)" % (point, obj))
print("ignore new tag at %s" % (point))
self.formPoint.hide()
self.formTags.show()

Expand Down Expand Up @@ -956,40 +953,41 @@ def removeGlobalCallbacks(self):

def getPoint(self, whenDone, start=None):

def displayPoint(p):
self.formPoint.ifValueX.setText(DraftGui.displayExternal(p.x))
self.formPoint.ifValueY.setText(DraftGui.displayExternal(p.y))
self.formPoint.ifValueZ.setText(DraftGui.displayExternal(p.z))
self.formPoint.ifValueX.setFocus()
self.formPoint.ifValueX.selectAll()

def mouseMove(cb):
event = cb.getEvent()
pos = event.getPosition()
cntrl = event.wasCtrlDown()
shift = event.wasShiftDown()
self.pt = FreeCADGui.Snapper.snap(pos, lastpoint=start, active=cntrl, constrain=shift)
if cntrl:
p = self.pt
else:
plane = FreeCAD.DraftWorkingPlane
p = plane.getLocalCoords(self.pt)
self.formPoint.ifValueX.setText(DraftGui.displayExternal(p.x))
self.formPoint.ifValueY.setText(DraftGui.displayExternal(p.y))
self.formPoint.ifValueZ.setText(DraftGui.displayExternal(p.z))
plane = FreeCAD.DraftWorkingPlane
p = plane.getLocalCoords(self.pt)
displayPoint(p)

def click(cb):
event = cb.getEvent()
if event.getButton() == 1 and event.getState() == coin.SoMouseButtonEvent.DOWN:
accept()

def finish(ok):
self.removeGlobalCallbacks();
obj = FreeCADGui.Snapper.lastSnappedObject
FreeCADGui.Snapper.off()
whenDone(self.pt if ok else None, obj if ok else None)

def accept():
finish(True)
self.pointAccept()

def cancel():
finish(False)
self.pointCancel()

self.pointWhenDone = whenDone
self.formTags.hide()
self.formPoint.show()
if start:
displayPoint(start)
else:
displayPoint(FreeCAD.Vector(0,0,0))

self.view = Draft.get3DView()
self.callbackClick = self.view.addEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(), click)
Expand Down Expand Up @@ -1042,25 +1040,33 @@ def setupUi(self):

self.formTags.pbDelete.clicked.connect(self.deleteSelectedTag)
self.formTags.pbAdd.clicked.connect(self.addNewTag)

self.formPoint.buttonBox.accepted.connect(self.pointAccept)
QtCore.QObject.connect(self.formPoint.ifValueX, QtCore.SIGNAL("valueChanged(double)"), self.changeValueX)
QtCore.QObject.connect(self.formPoint.ifValueY, QtCore.SIGNAL("valueChanged(double)"), self.changeValueY)
QtCore.QObject.connect(self.formPoint.ifValueZ, QtCore.SIGNAL("valueChanged(double)"), self.changeValueZ)

self.viewProvider.turnMarkerDisplayOn(True)

class SelObserver:
def __init__(self, viewProvider):
print("register observer")
FreeCADGui.Selection.addSelectionGate(self)
self.viewProvider = viewProvider
def pointFinish(self, ok):
self.removeGlobalCallbacks();
obj = FreeCADGui.Snapper.lastSnappedObject
FreeCADGui.Snapper.off()
self.pointWhenDone(self.pt if ok else None, obj if ok else None)

def __del__(self):
print("remove observer")
FreeCADGui.Selection.removeSelectionGate()
def pointReject(self):
self.pointFinish(False)

def allow(self, doc, obj, sub):
return self.viewProvider.allowSelection(obj, sub)
def pointAccept(self):
self.pointFinish(True)

def changeValueX(self, double):
self.pt.x = double
def changeValueY(self, double):
self.pt.y = double
def changeValueZ(self, double):
self.pt.z = double

def addSelection(self, doc, obj, sub, pnt):
self.viewProvider.addSelection(doc, obj, sub, pnt)
#FreeCADGui.doCommand('Gui.Selection.addSelection(FreeCAD.ActiveDocument.' + obj + ')')
FreeCADGui.updateGui()

class HoldingTagMarker:
def __init__(self, p):
Expand Down

0 comments on commit 0781cf7

Please sign in to comment.