예제 #1
0
const Pose2d operator-(const Pose2d& p1, const Pose2d& p2)
{
    return Pose2d(p1.x - p2.x, p1.y - p2.y, p1.phi - p2.phi);
}
예제 #2
0
Pose2d GraphicsView::getPosition()
{
    QPointF pos = robot->pos();
    double angle = robot->rotation();
    return Pose2d(pos.x(), pos.y(), angle);
}
예제 #3
0
const Pose2d operator +(const Pose2d& p1, const Pose2d& p2)
{
    return Pose2d(p1.x + p2.x, p1.y + p2.y, p1.phi + p2.phi);
}
QVariant PythonTypeConverter::toVariant(PyObject *input)
{

    if(PyBool_Check(input))
        return QVariant(input == Py_True);
    if(PyLong_Check(input))
        return QVariant((int)PyLong_AsLong(input));
    if(PyFloat_Check(input))
        return QVariant(PyFloat_AsDouble(input));

    QString strVal = toString(input);
    if(!strVal.isNull())
        return strVal;

    if(PyList_Check(input))
    {
        int len = PyList_Size(input);
        QList<QVariant> list;
        for(int i=0; i<len; i++)
            list << toVariant(PyList_GetItem(input, i));
        return bestFittingList(list);
    }
    if(PyTuple_Check(input))
    {
        int len = PyTuple_Size(input);
        QList<QVariant> list;
        for(int i=0; i<len; i++)
            list << toVariant(PyTuple_GetItem(input, i));
        return bestFittingList(list);
    }
    if(PyDict_Check(input))
    {
        QVariantMap map;
        PyObject* key = 0;
        PyObject* value = 0;
        Py_ssize_t i = 0;
        while (PyDict_Next(input, &i, &key, &value))
        {
            map.insert(toVariant(key).toString(), toVariant(value));
        }
        if(map.contains("type"))
        {
            QString type = map["type"].toString();
            if(type == "Point")
                return QPointF(map["x"].toDouble(), map["y"].toDouble());
            if(type == "Size")
                return QSizeF(map["width"].toDouble(), map["height"].toDouble());
            if(type == "Rect")
                return QRectF(map["x"].toDouble(), map["y"].toDouble(),map["width"].toDouble(), map["height"].toDouble());
            if(type == "Vector3D")
                return QVector3D(map["x"].toDouble(), map["y"].toDouble(),map["z"].toDouble());
            if(type == "Vector4D")
                return QVector4D(map["x"].toDouble(), map["y"].toDouble(),map["z"].toDouble(),map["w"].toDouble());
            if(type == "Pose2d")
                return QVariant::fromValue<Pose2d>(Pose2d(map["x"].toDouble(), map["y"].toDouble(),map["phi"].toDouble()));
        }
        return map;

    }
    return QVariant();

}