Use PathGetPoint for Tags.

This commit is contained in:
Markus Lampert
2017-10-30 10:03:31 -07:00
committed by Yorik van Havre
parent 6bcbb68cbc
commit 606786eeb9
2 changed files with 42 additions and 162 deletions

View File

@@ -34,7 +34,7 @@
<x>0</x>
<y>0</y>
<width>381</width>
<height>528</height>
<height>533</height>
</rect>
</property>
<attribute name="label">
@@ -126,7 +126,7 @@
</widget>
</item>
<item>
<widget class="QWidget" name="widget" native="true">
<widget class="QWidget" name="removeEditAddGroup" native="true">
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0">
<widget class="QPushButton" name="pbDelete">

View File

@@ -27,6 +27,7 @@ import FreeCADGui
import Path
import PathScripts
#import PathScripts.PathDressupTag as PathDressupTag
import PathScripts.PathGetPoint as PathGetPoint
import PathScripts.PathDressupHoldingTags as PathDressupTag
import PathScripts.PathLog as PathLog
import PathScripts.PathUtils as PathUtils
@@ -56,18 +57,8 @@ class PathDressupTagTaskPanel:
self.obj = obj
self.obj.Proxy.obj = obj
self.viewProvider = viewProvider
self.form = QtGui.QWidget()
self.formTags = FreeCADGui.PySideUic.loadUi(":/panels/HoldingTagsEdit.ui")
self.formPoint = FreeCADGui.PySideUic.loadUi(":/panels/PointEdit.ui")
self.layout = QtGui.QVBoxLayout(self.form)
#self.form.setGeometry(self.formTags.geometry())
self.form.setWindowTitle(self.formTags.windowTitle())
self.form.setSizePolicy(self.formTags.sizePolicy())
self.formTags.setParent(self.form)
self.formPoint.setParent(self.form)
self.layout.addWidget(self.formTags)
self.layout.addWidget(self.formPoint)
self.formPoint.hide()
self.form = FreeCADGui.PySideUic.loadUi(":/panels/HoldingTagsEdit.ui")
self.getPoint = PathGetPoint.TaskPanel(self.form.removeEditAddGroup)
self.jvo = PathUtils.findParentJob(obj).ViewObject
if jvoVisibility is None:
FreeCAD.ActiveDocument.openTransaction(translate("PathDressup_HoldingTags", "Edit HoldingTags Dress-up"))
@@ -78,9 +69,6 @@ class PathDressupTagTaskPanel:
self.jvoVisible = jvoVisibility
self.pt = FreeCAD.Vector(0, 0, 0)
closeButton = self.formPoint.buttonBox.button(QtGui.QDialogButtonBox.StandardButton.Close)
closeButton.setText(translate("PathDressup_HoldingTags", "Done"))
self.isDirty = True
def getStandardButtons(self):
@@ -92,22 +80,9 @@ class PathDressupTagTaskPanel:
self.obj.Proxy.execute(self.obj)
self.isDirty = False
def addEscapeShortcut(self):
# The only way I could get to intercept the escape key, or really any key was
# by creating an action with a shortcut .....
self.escape = QtGui.QAction(self.formPoint)
self.escape.setText('Done')
self.escape.setShortcut(QtGui.QKeySequence.fromString('Esc'))
QtCore.QObject.connect(self.escape, QtCore.SIGNAL('triggered()'), self.pointDone)
self.formPoint.addAction(self.escape)
def removeEscapeShortcut(self):
if self.escape:
self.formPoint.removeAction(self.escape)
self.escape = None
def modifyStandardButtons(self, buttonBox):
self.buttonBox = buttonBox
self.getPoint.buttonBox = buttonBox
def abort(self):
FreeCAD.ActiveDocument.abortTransaction()
@@ -136,9 +111,9 @@ class PathDressupTagTaskPanel:
def getTags(self, includeCurrent):
tags = []
index = self.formTags.lwTags.currentRow()
for i in range(0, self.formTags.lwTags.count()):
item = self.formTags.lwTags.item(i)
index = self.form.lwTags.currentRow()
for i in range(0, self.form.lwTags.count()):
item = self.form.lwTags.item(i)
enabled = item.checkState() == QtCore.Qt.CheckState.Checked
x = item.data(self.DataX)
y = item.data(self.DataY)
@@ -148,10 +123,10 @@ class PathDressupTagTaskPanel:
return tags
def getFields(self):
width = FreeCAD.Units.Quantity(self.formTags.ifWidth.text()).Value
height = FreeCAD.Units.Quantity(self.formTags.ifHeight.text()).Value
angle = self.formTags.dsbAngle.value()
radius = FreeCAD.Units.Quantity(self.formTags.ifRadius.text()).Value
width = FreeCAD.Units.Quantity(self.form.ifWidth.text()).Value
height = FreeCAD.Units.Quantity(self.form.ifHeight.text()).Value
angle = self.form.dsbAngle.value()
radius = FreeCAD.Units.Quantity(self.form.ifRadius.text()).Value
tags = self.getTags(True)
positions = []
@@ -183,8 +158,8 @@ class PathDressupTagTaskPanel:
def updateTagsView(self):
PathLog.track()
self.formTags.lwTags.blockSignals(True)
self.formTags.lwTags.clear()
self.form.lwTags.blockSignals(True)
self.form.lwTags.clear()
for i, pos in enumerate(self.Positions):
lbl = "%d: (%.2f, %.2f)" % (i, pos.x, pos.y)
item = QtGui.QListWidgetItem(lbl)
@@ -200,41 +175,36 @@ class PathDressupTagTaskPanel:
flags |= QtCore.Qt.ItemFlag.ItemIsEnabled
flags |= QtCore.Qt.ItemFlag.ItemIsUserCheckable
item.setFlags(flags)
self.formTags.lwTags.addItem(item)
self.formTags.lwTags.blockSignals(False)
self.form.lwTags.addItem(item)
self.form.lwTags.blockSignals(False)
self.whenTagSelectionChanged()
self.viewProvider.updatePositions(self.Positions, self.Disabled)
def generateNewTags(self):
count = self.formTags.sbCount.value()
count = self.form.sbCount.value()
if not self.obj.Proxy.generateTags(self.obj, count):
self.obj.Proxy.execute(self.obj)
self.updateTagsView()
#if PathLog.getLevel(LOG_MODULE) == PathLog.Level.DEBUG:
# # this causes a big of an echo and a double click on the spin buttons, don't know why though
# FreeCAD.ActiveDocument.recompute()
def updateModel(self):
self.getFields()
self.updateTagsView()
self.isDirty = True
#FreeCAD.ActiveDocument.recompute()
def whenCountChanged(self):
count = self.formTags.sbCount.value()
self.formTags.pbGenerate.setEnabled(count)
count = self.form.sbCount.value()
self.form.pbGenerate.setEnabled(count)
def selectTagWithId(self, index):
PathLog.track(index)
self.formTags.lwTags.setCurrentRow(index)
self.form.lwTags.setCurrentRow(index)
def whenTagSelectionChanged(self):
index = self.formTags.lwTags.currentRow()
count = self.formTags.lwTags.count()
self.formTags.pbDelete.setEnabled(index != -1 and count > 2)
self.formTags.pbEdit.setEnabled(index != -1)
index = self.form.lwTags.currentRow()
count = self.form.lwTags.count()
self.form.pbDelete.setEnabled(index != -1 and count > 2)
self.form.pbEdit.setEnabled(index != -1)
self.viewProvider.selectTag(index)
def whenTagsViewChanged(self):
@@ -259,7 +229,7 @@ class PathDressupTagTaskPanel:
def addNewTag(self):
self.tags = self.getTags(True)
self.getPoint(self.addNewTagAt)
self.getPoint.getPoint(self.addNewTagAt)
def editTagAt(self, point, obj):
if point and obj and (obj or point != FreeCAD.Vector()) and self.obj.Proxy.pointIsOnPath(self.obj, point):
@@ -278,10 +248,10 @@ class PathDressupTagTaskPanel:
x = item.data(self.DataX)
y = item.data(self.DataY)
z = item.data(self.DataZ)
self.getPoint(self.editTagAt, FreeCAD.Vector(x, y, z))
self.getPoint.getPoint(self.editTagAt, FreeCAD.Vector(x, y, z))
def editSelectedTag(self):
self.editTag(self.formTags.lwTags.currentItem())
self.editTag(self.form.lwTags.currentItem())
def removeGlobalCallbacks(self):
if hasattr(self, 'view') and self.view:
@@ -293,56 +263,6 @@ class PathDressupTagTaskPanel:
self.pointCbMove = None
self.view = None
def getPoint(self, whenDone, start=None):
def displayPoint(p):
self.formPoint.ifValueX.setText(FreeCAD.Units.Quantity(p.x, FreeCAD.Units.Length).UserString)
self.formPoint.ifValueY.setText(FreeCAD.Units.Quantity(p.y, FreeCAD.Units.Length).UserString)
self.formPoint.ifValueZ.setText(FreeCAD.Units.Quantity(p.z, FreeCAD.Units.Length).UserString)
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)
plane = FreeCAD.DraftWorkingPlane
p = plane.getLocalCoords(self.pt)
v = pos.getValue()
PathLog.info("mouseMove(%s, %s, %s)" % (self.view.getPoint(v[0], v[1]), self.pt, p))
displayPoint(p)
def click(cb):
event = cb.getEvent()
if event.getButton() == 1 and event.getState() == coin.SoMouseButtonEvent.DOWN:
accept()
def accept():
if start:
self.pointAccept()
else:
self.pointAcceptAndContinue()
def cancel():
self.pointReject()
self.pointWhenDone = whenDone
self.formTags.hide()
self.formPoint.show()
self.addEscapeShortcut()
if start:
displayPoint(start)
else:
displayPoint(FreeCAD.Vector(0,0,0))
self.view = Draft.get3DView()
self.pointCbClick = self.view.addEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(), click)
self.pointCbMove = self.view.addEventCallbackPivy(coin.SoLocation2Event.getClassTypeId(), mouseMove)
self.buttonBox.setEnabled(False)
def setupSpinBox(self, widget, val, decimals = 2):
if decimals:
widget.setDecimals(decimals)
@@ -350,11 +270,11 @@ class PathDressupTagTaskPanel:
def setFields(self):
self.updateTagsView()
self.formTags.sbCount.setValue(len(self.Positions))
self.formTags.ifHeight.setText(FreeCAD.Units.Quantity(self.obj.Height, FreeCAD.Units.Length).UserString)
self.formTags.ifWidth.setText(FreeCAD.Units.Quantity(self.obj.Width, FreeCAD.Units.Length).UserString)
self.formTags.dsbAngle.setValue(self.obj.Angle)
self.formTags.ifRadius.setText(FreeCAD.Units.Quantity(self.obj.Radius, FreeCAD.Units.Length).UserString)
self.form.sbCount.setValue(len(self.Positions))
self.form.ifHeight.setText(FreeCAD.Units.Quantity(self.obj.Height, FreeCAD.Units.Length).UserString)
self.form.ifWidth.setText(FreeCAD.Units.Quantity(self.obj.Width, FreeCAD.Units.Length).UserString)
self.form.dsbAngle.setValue(self.obj.Angle)
self.form.ifRadius.setText(FreeCAD.Units.Quantity(self.obj.Radius, FreeCAD.Units.Length).UserString)
def setupUi(self):
self.Positions = self.obj.Positions
@@ -364,62 +284,22 @@ class PathDressupTagTaskPanel:
self.whenCountChanged()
if self.obj.Proxy.supportsTagGeneration(self.obj):
self.formTags.sbCount.valueChanged.connect(self.whenCountChanged)
self.formTags.pbGenerate.clicked.connect(self.generateNewTags)
self.form.sbCount.valueChanged.connect(self.whenCountChanged)
self.form.pbGenerate.clicked.connect(self.generateNewTags)
else:
self.formTags.cbTagGeneration.setEnabled(False)
self.form.cbTagGeneration.setEnabled(False)
self.formTags.lwTags.itemChanged.connect(self.whenTagsViewChanged)
self.formTags.lwTags.itemSelectionChanged.connect(self.whenTagSelectionChanged)
self.formTags.lwTags.itemActivated.connect(self.editTag)
self.form.lwTags.itemChanged.connect(self.whenTagsViewChanged)
self.form.lwTags.itemSelectionChanged.connect(self.whenTagSelectionChanged)
self.form.lwTags.itemActivated.connect(self.editTag)
self.formTags.pbDelete.clicked.connect(self.deleteSelectedTag)
self.formTags.pbEdit.clicked.connect(self.editSelectedTag)
self.formTags.pbAdd.clicked.connect(self.addNewTag)
self.formPoint.buttonBox.accepted.connect(self.pointAccept)
self.formPoint.buttonBox.rejected.connect(self.pointReject)
self.formPoint.ifValueX.editingFinished.connect(self.updatePoint)
self.formPoint.ifValueY.editingFinished.connect(self.updatePoint)
self.formPoint.ifValueZ.editingFinished.connect(self.updatePoint)
self.form.pbDelete.clicked.connect(self.deleteSelectedTag)
self.form.pbEdit.clicked.connect(self.editSelectedTag)
self.form.pbAdd.clicked.connect(self.addNewTag)
self.viewProvider.turnMarkerDisplayOn(True)
def pointFinish(self, ok, cleanup = True):
obj = FreeCADGui.Snapper.lastSnappedObject
if cleanup:
self.removeGlobalCallbacks();
FreeCADGui.Snapper.off()
self.buttonBox.setEnabled(True)
self.removeEscapeShortcut()
self.formPoint.hide()
self.formTags.show()
self.formTags.setFocus()
if ok:
self.pointWhenDone(self.pt, obj)
else:
self.pointWhenDone(None, None)
def pointDone(self):
self.pointFinish(False)
def pointReject(self):
self.pointFinish(False)
def pointAccept(self):
self.pointFinish(True)
def pointAcceptAndContinue(self):
self.pointFinish(True, False)
def updatePoint(self):
x = FreeCAD.Units.Quantity(self.formPoint.ifValueX.text()).Value
y = FreeCAD.Units.Quantity(self.formPoint.ifValueY.text()).Value
z = FreeCAD.Units.Quantity(self.formPoint.ifValueZ.text()).Value
self.pt = FreeCAD.Vector(x, y, z)
class HoldingTagMarker:
def __init__(self, point, colors):