53 lines
1.6 KiB
C++
53 lines
1.6 KiB
C++
#ifndef DUST3D_MESH_STROKETIFIER_H
|
|
#define DUST3D_MESH_STROKETIFIER_H
|
|
#include <QObject>
|
|
#include <QVector3D>
|
|
#include <QMatrix4x4>
|
|
#include <vector>
|
|
|
|
class MeshStroketifier : public QObject
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
struct Node
|
|
{
|
|
QVector3D position;
|
|
float radius;
|
|
};
|
|
void setCutRotation(float cutRotation);
|
|
void setDeformThickness(float deformThickness);
|
|
void setDeformWidth(float deformWidth);
|
|
bool prepare(const std::vector<Node> &strokeNodes,
|
|
const std::vector<QVector3D> &vertices);
|
|
void stroketify(std::vector<QVector3D> *vertices);
|
|
void stroketify(std::vector<Node> *nodes);
|
|
private:
|
|
float m_cutRotation = 0.0;
|
|
float m_deformThickness = 1.0;
|
|
float m_deformWidth = 1.0;
|
|
|
|
QVector3D m_modelOrigin;
|
|
float m_modelLength = 0.0;
|
|
float m_scaleAmount = 1.0;
|
|
QVector3D m_modelAlignDirection;
|
|
QVector3D m_modelBaseNormal;
|
|
std::vector<QVector3D> m_modelJointPositions;
|
|
std::vector<QMatrix4x4> m_modelTransforms;
|
|
QMatrix4x4 m_modelRotation;
|
|
|
|
static float calculateStrokeLengths(const std::vector<Node> &strokeNodes,
|
|
std::vector<float> *lengths);
|
|
static void calculateBoundingBox(const std::vector<QVector3D> &vertices,
|
|
float *minX, float *maxX,
|
|
float *minY, float *maxY,
|
|
float *minZ, float *maxZ);
|
|
|
|
void translate(std::vector<QVector3D> *vertices);
|
|
void scale(std::vector<QVector3D> *vertices);
|
|
void transform(std::vector<QVector3D> *vertices);
|
|
void rotate(std::vector<QVector3D> *vertices);
|
|
void deform(std::vector<QVector3D> *vertices);
|
|
};
|
|
|
|
#endif
|