summaryrefslogtreecommitdiffhomepage
path: root/pose-widget/pose-widget.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'pose-widget/pose-widget.hpp')
-rw-r--r--pose-widget/pose-widget.hpp92
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;