#pragma once
#ifndef COLORFXUTILS_H
#define COLORFXUTILS_H
#include "tgeometry.h"
#include "tpixel.h"
#include "trandom.h"
#include "tregionoutline.h"
#include "tcurves.h"
class TRegion;
class TFlash;
class RubberDeform {
std::vector<T3DPointD> *m_pPolyOri;
std::vector<T3DPointD> m_polyLoc;
void deformStep();
double avgLength();
void refinePoly(const double rf = -1.0);
void getBBox(TRectD &bbox);
public:
RubberDeform();
RubberDeform(std::vector<T3DPointD> *pPolyOri, const double rf = -1.0);
void copyLoc2Ori() { *m_pPolyOri = m_polyLoc; };
void copyOri2Loc() { m_polyLoc = *m_pPolyOri; };
virtual ~RubberDeform();
void deform(const double n);
};
class SFlashUtils {
void computeOutline(const TRegion *region,
TRegionOutline::PointVector &polyline) const;
void PointVector2QuadsArray(const std::vector<T3DPointD> &pv,
std::vector<TQuadratic *> &quadArray,
std::vector<TQuadratic *> &toBeDeleted,
const bool isRounded) const;
int nbDiffVerts(const std::vector<TPointD> &pv) const;
void Triangle2Quad(std::vector<TPointD> &p) const;
public:
const TRegion *m_r;
TRegionOutline m_ro;
SFlashUtils(){};
SFlashUtils(const TRegion *r) : m_r(r){};
virtual ~SFlashUtils(){};
void computeRegionOutline();
void drawRegionOutline(TFlash &flash, const bool isRounded = true) const;
void drawGradedPolyline(TFlash &flash, std::vector<TPointD> &pv,
const TPixel32 &c1, const TPixel32 &c2) const;
void drawGradedRegion(TFlash &flash, std::vector<TPointD> &pv,
const TPixel32 &c1, const TPixel32 &c2,
const TRegion &r) const;
};
#endif