diff options
Diffstat (limited to 'pose-widget/pose-widget.hpp')
| -rw-r--r-- | pose-widget/pose-widget.hpp | 92 |
1 files changed, 19 insertions, 73 deletions
diff --git a/pose-widget/pose-widget.hpp b/pose-widget/pose-widget.hpp index 3e98624c..9152e960 100644 --- a/pose-widget/pose-widget.hpp +++ b/pose-widget/pose-widget.hpp @@ -7,92 +7,38 @@ #pragma once -#include <QtGlobal> -#include <QWidget> -#include <QThread> -#include <QPixmap> #include "api/plugin-api.hpp" #include "compat/euler.hpp" -#include <mutex> -#include <atomic> +#include "export.hpp" -#ifdef BUILD_POSE_WIDGET -# define POSE_WIDGET_EXPORT Q_DECL_EXPORT -#else -# define POSE_WIDGET_EXPORT Q_DECL_IMPORT -#endif +#include <QWidget> +#include <QImage> +#include <QCheckBox> +//#define TEST namespace pose_widget_impl { -using num = float; -using vec3 = Mat<num, 3, 1>; -using vec2 = Mat<num, 2, 1>; - -using rmat = Mat<num, 3, 3>; - using namespace euler; -using lock_guard = std::unique_lock<std::mutex>; - -using cv_status = std::cv_status; - -class pose_widget; - -class pose_transform final : private QThread -{ - pose_transform(QWidget* dst); - ~pose_transform(); - - friend class pose_widget; - - void rotate_async(double xAngle, double yAngle, double zAngle, double x, double y, double z); - void rotate_sync(double xAngle, double yAngle, double zAngle, double x, double y, double z); - - template<typename F> - void with_rotate(F&& fun, double xAngle, double yAngle, double zAngle, double x, double y, double z); - - void run() override; - - vec2 project(const vec3& point); - vec3 project2(const vec3& point); - void project_quad_texture(); - - template<typename F> - inline void with_image_lock(F&& fun); - - static vec3 normal(const vec3& p1, const vec3& p2, const vec3& p3); - - rmat rotation, rotation_; - vec3 translation, translation_; - - std::mutex mtx, mtx2; - - QWidget* dst; - - QImage front, back; - QImage image, image2; - - int width, height; - - std::atomic<bool> fresh; - - static constexpr int w = 320, h = 240; -}; - -class POSE_WIDGET_EXPORT pose_widget final : public QWidget +struct OTR_POSE_WIDGET_EXPORT pose_widget final : QWidget { public: - pose_widget(QWidget *parent = nullptr); - ~pose_widget(); - void rotate_async(double xAngle, double yAngle, double zAngle, double x, double y, double z); - void rotate_sync(double xAngle, double yAngle, double zAngle, double x, double y, double z); - + explicit pose_widget(QWidget *parent = nullptr); + void present(double xAngle, double yAngle, double zAngle, double x, double y, double z); + QCheckBox mirror{"Mirror", this}; private: - pose_transform xform; - void paintEvent(QPaintEvent *event) override; + void resizeEvent(QResizeEvent *event) override; + void paintEvent(QPaintEvent*) override; + + Pose_ R, T; + QImage front{QImage{":/images/side1.png"}.convertToFormat(QImage::Format_ARGB32)}; + QImage back {QImage{":/images/side6.png"}.convertToFormat(QImage::Format_ARGB32) + .mirrored(true,false)}; + QImage shine {QImage{front.width(), front.height(), QImage::Format_ARGB32}}; + QImage shadow{QImage{front.width(), front.height(), QImage::Format_ARGB32}}; }; } -using pose_widget_impl::pose_widget; +using pose_widget = pose_widget_impl::pose_widget; |
