1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/firemiles-SimpleRobot

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

SimpleRobot

Разработка платформы:

  • Qt5.4;
  • OpenGL ES 2.0;
  • Mac OS 10.10 (также работает на Windows).

Целевая платформа: поскольку разработка ведётся на Qt, то программа может быть скомпилирована и запущена на различных платформах:

  • Windows;
  • Linux;
  • Mac OS;
  • версии Android после 4.2.

Основные API: подробная документация доступна по ссылке: doc/html/index.html.

API веб-страница

// Перемещение главного плеча на заданный угол
// angle: угол
// speed: скорость от 1 до 100, -1 означает продолжение предыдущего установленного значения движения
// immediate: если true, то сразу достигается указанное положение, speed не действует
bool RotateMasterAbs(float angle, float speed = -1, bool immediate = false);
// Перемещение главного плеча на указанный размер угла
// angle: угол
// speed: скорость от 1 до 100, -1 означает продолжение предыдущего установленного значения движения
// immediate: если true, то сразу достигается указанное положение, speed не действует
bool RotateMaster(float angle, float speed = -1, bool immediate = false);
bool RotateAssistantAbs(float angle, float speed = -1, bool immediate = false);
bool RotateAssistant(float angle, float speed = -1, bool immediate = false);
bool RotateBarAbs(float angle, float speed = -1, bool immediate = false);
bool RotateBar(float angle, float speed = -1, bool immediate = false);
bool MoveBarAbs(float down, float speed = -1, bool immediate = false);
bool MoveBar(float down, float speed = -1, bool immediate = false);
// Указание контролируемой 3D модели данных
void setModel(Model *model);
// Указание контролируемого 3D представления
void setView(View *view);
// Отправка сигнала при завершении действия, обратите внимание, что в режиме немедленного достижения сигнал никогда не отправляется
void setFinishedSignal(bool open);

Простой пример: mainwindow.cpp

include "mainwindow.h"
#include "ui_mainwindow.h"
#include "robot.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    robot = new Robot(); // Получение экземпляра робота
    view = robot->getView(); // Получение 3D-представления
    control = robot->getControl(); // Получение контроллера робота
    this->setCentralWidget(view); // Установка 3D-представления в качестве текущего окна главного вида

    connect(control, SIGNAL(actionFinished()),
            this, SLOT(onReached())); // Подключение сигнала завершения действия
    control->setFinishedSignal(true); // Открытие сигнала завершения действия
}

MainWindow::~MainWindow()
{
    delete ui;
}

// Функция обработки нажатия клавиш
void MainWindow::keyPressEvent(QKeyEvent *event)
{
    bool immediate = false;
    // Если нажата клавиша Shift, то действие выполняется немедленно
    if (event->modifiers() == Qt::ShiftModifier) immediate = true;
    switch (event->key()) {
    case Qt::Key_Left:
        view->rotateView(0, -10, 0);
        break;
    case Qt::Key_Down:
        view->rotateView(10, 0, 0);
        break;
    case Qt::Key_Up:
        view->rotateView(-10, 0, 0);
        break;
    case Qt::Key_Right:
        view->rotateView(0, 10, 0);
        break;
    case Qt::Key_Q:
        control->RotateMaster(-40, 100, immediate);
        break;
    case Qt::Key_A:
        control->RotateMaster(40, 100, immediate);
        break;
    case Qt::Key_W:
        control->RotateAssistant(-40, 100, immediate);
        break;
    case Qt::Key_S:
        control->RotateAssistant(40, 100, immediate);
        break;
    case Qt::Key_E:
        control->RotateBar(-40, 100, immediate);
        break;
    case Qt::Key_D:
        control->RotateBar(40, 100, immediate);
        break;
    case Qt::Key_R:
        control->MoveBar(-40, 100, immediate);
        break;
    case Qt::Key_F:
        control->MoveBar(40, 100, immediate);
        break;
    case Qt::Key_U:
        control->RotateMasterAbs(-90, 50, immediate);
        break;
    case Qt::Key_J:
        control->RotateMasterAbs(90, 50, immediate);
        break;
    case Qt::Key_I:
        control->RotateAssistantAbs(-90, 50, immediate);
        break;
    case Qt::Key_K:
        control::RotateAssistantAbs(90, 50, immediate);
        break;
    case Qt::Key_O:
        control->RotateBarAbs(-90, 50, immediate);
        break;
    case Qt::Key_L:
        control->RotateBarAbs(90, 50, immediate);
        break;
    case Qt::Key_P:
        control->MoveBarAbs(40, 50, immediate);
        break;
    case Qt::Key_Semicolon:
        control->MoveBarAbs(0, 50, immediate);
        break;
    default:
        QMainWindow::keyPressEvent(event);
        break;
    }
}

// Слот для завершения действия
void MainWindow::onReached()
{
    qDebug() << "Reached!";
}

Пример использования: после успешной компиляции в QTCreator запустите программу.

  • Клавиши направления вращают вид.
  • Q и A вращают главное плечо, W и S вращают вспомогательное плечо, E и D вращают инструмент, R и F выдвигают инструмент.
  • U, J вращают основное плечо в указанное положение, I, K вращают вспомогательное плечо в указанное положение, O, L вращают инструмент в указанное положение, ;, P выдвигают инструмент в указанное положение. При удержании shift и нажатии указанных клавиш, заданная часть перестаёт двигаться, в то время как остальные части продолжают нормальное движение.
  • Пробел останавливает движение.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Это трёхмерная анимация четырёхкоординатного робота. Предоставляется простой в использовании API. Приглашаем всех оставлять отзывы. Развернуть Свернуть
GPL-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/firemiles-SimpleRobot.git
git@api.gitlife.ru:oschina-mirror/firemiles-SimpleRobot.git
oschina-mirror
firemiles-SimpleRobot
firemiles-SimpleRobot
master