mirror of https://github.com/CGAL/cgal
Add missing files
This commit is contained in:
parent
28318aee7b
commit
0ff59ea105
|
|
@ -0,0 +1,48 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>Parameterization</class>
|
||||||
|
<widget class="QDockWidget" name="Parameterization">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>400</width>
|
||||||
|
<height>300</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>UVMapping</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="dockWidgetContents">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QGraphicsView" name="graphicsView">
|
||||||
|
<property name="mouseTracking">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="verticalScrollBarPolicy">
|
||||||
|
<enum>Qt::ScrollBarAlwaysOff</enum>
|
||||||
|
</property>
|
||||||
|
<property name="horizontalScrollBarPolicy">
|
||||||
|
<enum>Qt::ScrollBarAlwaysOff</enum>
|
||||||
|
</property>
|
||||||
|
<property name="interactive">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="renderHints">
|
||||||
|
<set>QPainter::Antialiasing</set>
|
||||||
|
</property>
|
||||||
|
<property name="dragMode">
|
||||||
|
<enum>QGraphicsView::NoDrag</enum>
|
||||||
|
</property>
|
||||||
|
<property name="transformationAnchor">
|
||||||
|
<enum>QGraphicsView::NoAnchor</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
||||||
|
|
@ -0,0 +1,139 @@
|
||||||
|
#include <QDebug>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
#include <QObject>
|
||||||
|
#include <QPainter>
|
||||||
|
|
||||||
|
#include <QMouseEvent>
|
||||||
|
#include <QEvent>
|
||||||
|
|
||||||
|
#include <QPoint>
|
||||||
|
#include <QMatrix3x3>
|
||||||
|
#include <QVector2D>
|
||||||
|
#include <QVector3D>
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
|
struct State{
|
||||||
|
bool is_left_pressed;
|
||||||
|
bool is_right_pressed;
|
||||||
|
};
|
||||||
|
|
||||||
|
class UVProjector:public QWidget
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
UVProjector(QWidget* parent = 0, Qt::WindowFlags flags =0)
|
||||||
|
:QWidget(parent,flags)
|
||||||
|
{
|
||||||
|
setMouseTracking(true);
|
||||||
|
state = {false,false};
|
||||||
|
translation = QVector3D(0,0,1);
|
||||||
|
rotation = 0;
|
||||||
|
prev_pos = QPoint(0,0);
|
||||||
|
rot_center = QPoint(width()/2, height()/2);
|
||||||
|
|
||||||
|
}
|
||||||
|
void setPoints(const std::vector<QPointF>& p){points = p;}
|
||||||
|
protected:
|
||||||
|
void paintEvent(QPaintEvent*)
|
||||||
|
{
|
||||||
|
QPainter painter(this);
|
||||||
|
QFont font;
|
||||||
|
font.setPointSize(10);
|
||||||
|
painter.setFont(font);
|
||||||
|
painter.setBrush(QBrush(Qt::white));
|
||||||
|
painter.setPen(Qt::white);
|
||||||
|
painter.drawRect(QRect(QPoint(0,0), QPoint(this->width(),this->height())));
|
||||||
|
|
||||||
|
painter.setPen(QPen(Qt::black));
|
||||||
|
Q_FOREACH(QPointF p, points)
|
||||||
|
{
|
||||||
|
/*Translation(-w/2, -h/2) to recenter the scene, then
|
||||||
|
* Scaling then Rotation and finaly the Translation
|
||||||
|
* + Translation(w/2+h/2) to put it back. */
|
||||||
|
//scaled values
|
||||||
|
qreal sx(translation.z()* (p.x()-width() /2.0)), sy(translation.z()* (p.y()-height()/2.0)) ;
|
||||||
|
|
||||||
|
painter.drawPoint(
|
||||||
|
translation.x() + width() /2.0 + cos(rotation)*sx + sin(rotation)*sy,
|
||||||
|
translation.y() + height()/2.0 + -sin(rotation)*sx + cos(rotation)*sy
|
||||||
|
);
|
||||||
|
}
|
||||||
|
painter.end();
|
||||||
|
}
|
||||||
|
void mouseMoveEvent(QMouseEvent* me)
|
||||||
|
{
|
||||||
|
if(state.is_left_pressed)
|
||||||
|
{
|
||||||
|
QVector2D prev_dir(prev_pos.x() - width()/2,
|
||||||
|
prev_pos.y() - height()/2);
|
||||||
|
QVector2D dir(me->pos().x() - width()/2,
|
||||||
|
me->pos().y() - height()/2);
|
||||||
|
prev_dir.normalize();
|
||||||
|
dir.normalize();
|
||||||
|
qreal a = acos(QVector2D::dotProduct(dir,prev_dir)/(dir.length()*prev_dir.length()));
|
||||||
|
qreal det = dir.x()*prev_dir.y()-prev_dir.x()*dir.y();
|
||||||
|
if(det > 0)
|
||||||
|
rotation += a;
|
||||||
|
else
|
||||||
|
rotation -= a;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
else if(state.is_right_pressed)
|
||||||
|
{
|
||||||
|
QVector2D dir(me->pos().x() - prev_pos.x(),
|
||||||
|
me->pos().y() - prev_pos.y());
|
||||||
|
|
||||||
|
translation[0] += dir.x();
|
||||||
|
translation[1] += dir.y();
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
prev_pos = me->pos();
|
||||||
|
}
|
||||||
|
|
||||||
|
void mousePressEvent(QMouseEvent* me)
|
||||||
|
{
|
||||||
|
if(me->button() == Qt::LeftButton)
|
||||||
|
state.is_left_pressed = true;
|
||||||
|
else if (me->button() == Qt::RightButton)
|
||||||
|
state.is_right_pressed = true;
|
||||||
|
}
|
||||||
|
void mouseReleaseEvent(QMouseEvent* me)
|
||||||
|
{
|
||||||
|
if(me->button() == Qt::LeftButton)
|
||||||
|
state.is_left_pressed = false;
|
||||||
|
else if (me->button() == Qt::RightButton)
|
||||||
|
state.is_right_pressed = false;
|
||||||
|
}
|
||||||
|
void wheelEvent(QWheelEvent *event)
|
||||||
|
{
|
||||||
|
if(event->delta() >0)
|
||||||
|
translation[2] *= 1.2;
|
||||||
|
else
|
||||||
|
translation[2] /= 1.2;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void mouseDoubleClickEvent(QMouseEvent * me)
|
||||||
|
{
|
||||||
|
if(state.is_right_pressed)
|
||||||
|
{
|
||||||
|
rot_center = me->pos();
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
translation = QVector3D(0,0,1);
|
||||||
|
rotation = 0;
|
||||||
|
rot_center = QPoint(width()/2, height()/2);
|
||||||
|
}
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
QPoint prev_pos;
|
||||||
|
QPoint rot_center;
|
||||||
|
std::vector<QPointF> points;
|
||||||
|
qreal rotation;
|
||||||
|
QVector3D translation;
|
||||||
|
State state;
|
||||||
|
|
||||||
|
};
|
||||||
Loading…
Reference in New Issue