33 from python_qt_binding.QtCore
import Qt
34 from python_qt_binding.QtGui
import QBrush, QPainter, QPen
35 from python_qt_binding.QtWidgets
import QWidget
37 from .util
import scale
41 """This widget displays the velocities for each trajectory in the evaluation.""" 43 def __init__(self, parent, selection_callback):
44 QWidget.__init__(self, parent)
66 for i, twist
in enumerate(self.
evaluation.twists):
67 v = twist.traj.velocity.x, twist.traj.velocity.theta
71 self.
scores[v] = twist.total
73 if self.
x_min is None:
93 w, h = rect.width(), rect.height()
99 horizontal_size = self.
width / self.
n_x 101 diameter = max(5, min(horizontal_size, vertical_size))
102 radius = diameter / 2
106 self.
qp.setBrush(QBrush(Qt.white))
115 self.
qp.drawText(self.
left, 0, self.
width, self.
top, Qt.AlignCenter,
'x')
116 self.
qp.drawText(0, 0, self.
left * 2, self.
top, Qt.AlignCenter,
'%.2f' % self.
x_min)
117 self.
qp.drawText(w - self.
left, 0, self.
left, self.
top, Qt.AlignCenter,
'%.2f' % self.
x_max)
119 right_center = Qt.AlignVCenter | Qt.AlignRight
120 self.
qp.drawText(0, self.
top, self.
left - radius, self.
height, right_center,
'theta')
121 self.
qp.drawText(0, 0, self.
left - radius, self.
top * 2, right_center,
'%.2f' % self.
t_max)
122 self.
qp.drawText(0, h - self.
top, self.
left - radius, self.
top, right_center,
'%.2f' % self.
t_min)
124 for (x, theta), index
in self.
vel_space.iteritems():
127 self.
qp.setBrush(QBrush(self.
selected[index]))
129 self.
qp.setBrush(QBrush())
131 if self.
scores[x, theta] < 0.0:
132 self.
qp.setPen(QPen(Qt.red))
134 self.
qp.setPen(QPen(Qt.black))
135 self.
qp.drawEllipse(dx - radius, dy - radius, diameter, diameter)
138 self.
qp.setBrush(QBrush())
140 self.
qp.drawEllipse(dx - diameter, dy - diameter, diameter * 2, diameter * 2)
156 for (x, theta), index
in self.
vel_space.iteritems():
157 d = abs(x - xv) + abs(theta - tv)
158 if best_d
is None or d < best_d:
170 new_selected.remove(selection)
173 new_selected.append(selection)
def scale(v, minval, maxval, dest_size=1.0, offset=0.0)