205 lines
3.1 KiB
C
205 lines
3.1 KiB
C
|
|
||
|
|
||
|
#ifndef STROKEDEFORMATION_IMPL_H
|
||
|
#define STROKEDEFORMATION_IMPL_H
|
||
|
|
||
|
/**
|
||
|
* @author Fabrizio Morciano <fabrizio.morciano@gmail.com>
|
||
|
*/
|
||
|
|
||
|
#include "ext/StrokeDeformation.h"
|
||
|
|
||
|
#undef DVAPI
|
||
|
#undef DVVAR
|
||
|
#ifdef TNZEXT_EXPORTS
|
||
|
#define DVAPI DV_EXPORT_API
|
||
|
#define DVVAR DV_EXPORT_VAR
|
||
|
#else
|
||
|
#define DVAPI DV_IMPORT_API
|
||
|
#define DVVAR DV_IMPORT_VAR
|
||
|
#endif
|
||
|
|
||
|
#include "ExtUtil.h"
|
||
|
|
||
|
#if defined(WIN32) && (_MSC_VER <= 1200)
|
||
|
// to avoid annoying warning
|
||
|
#pragma warning(push)
|
||
|
#pragma warning(disable : 4251)
|
||
|
#endif
|
||
|
|
||
|
namespace ToonzExt
|
||
|
{
|
||
|
class DVAPI
|
||
|
StrokeDeformationImpl
|
||
|
{
|
||
|
private:
|
||
|
bool
|
||
|
init(const ContextStatus *);
|
||
|
|
||
|
bool
|
||
|
computeStroke2Transform(const ContextStatus *s,
|
||
|
TStroke *&stroke2transform,
|
||
|
double &w,
|
||
|
ToonzExt::Interval &extremes);
|
||
|
|
||
|
ToonzExt::Potential
|
||
|
*potential_;
|
||
|
|
||
|
static TStroke *
|
||
|
copyOfLastSelectedStroke_; // deep copy stroke selected previously
|
||
|
|
||
|
int
|
||
|
cursorId_;
|
||
|
|
||
|
protected:
|
||
|
TStroke
|
||
|
*stroke2manipulate_;
|
||
|
|
||
|
static TStroke *&
|
||
|
getLastSelectedStroke();
|
||
|
|
||
|
static void
|
||
|
setLastSelectedStroke(TStroke *);
|
||
|
|
||
|
static int &
|
||
|
getLastSelectedDegree();
|
||
|
|
||
|
static void
|
||
|
setLastSelectedDegree(int degree);
|
||
|
|
||
|
static ToonzExt::Intervals &
|
||
|
getSpiresList();
|
||
|
|
||
|
static ToonzExt::Intervals &
|
||
|
getStraightsList();
|
||
|
|
||
|
ToonzExt::StrokeParametricDeformer
|
||
|
*deformer_;
|
||
|
|
||
|
int
|
||
|
shortcutKey_;
|
||
|
|
||
|
double
|
||
|
old_w0_;
|
||
|
|
||
|
TPointD
|
||
|
old_w0_pos_;
|
||
|
|
||
|
// ref to simplify access
|
||
|
std::vector<TStroke *>
|
||
|
strokes_;
|
||
|
|
||
|
StrokeDeformationImpl();
|
||
|
|
||
|
/**
|
||
|
* Is this the correct deformation?
|
||
|
*/
|
||
|
virtual bool
|
||
|
check_(const ContextStatus *) = 0;
|
||
|
|
||
|
/**
|
||
|
* Retrieve the nearest extremes to point selected.
|
||
|
*/
|
||
|
virtual bool
|
||
|
findExtremes_(const ContextStatus *,
|
||
|
Interval &) = 0;
|
||
|
|
||
|
virtual double
|
||
|
findActionLength() = 0;
|
||
|
|
||
|
public:
|
||
|
virtual ~StrokeDeformationImpl();
|
||
|
|
||
|
ToonzExt::Interval
|
||
|
getExtremes();
|
||
|
|
||
|
static const ContextStatus *&
|
||
|
getImplStatus();
|
||
|
|
||
|
const TStroke *
|
||
|
getStrokeSelected() const
|
||
|
{
|
||
|
if (getImplStatus())
|
||
|
return this->getImplStatus()->stroke2change_;
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
const TStroke *
|
||
|
getCopiedStroke() const
|
||
|
{
|
||
|
return this->getStrokeSelected();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Wrapper for activate.
|
||
|
*/
|
||
|
virtual bool
|
||
|
activate_impl(const ContextStatus *);
|
||
|
|
||
|
/**
|
||
|
* Modify stroke.
|
||
|
*/
|
||
|
virtual void
|
||
|
update_impl(const TPointD &delta);
|
||
|
|
||
|
/**
|
||
|
* Reduce control points and change stroke.
|
||
|
*/
|
||
|
virtual TStroke *
|
||
|
deactivate_impl();
|
||
|
|
||
|
bool
|
||
|
check(const ContextStatus *);
|
||
|
|
||
|
/**
|
||
|
* Restore last good status.
|
||
|
*/
|
||
|
virtual void
|
||
|
reset();
|
||
|
|
||
|
void
|
||
|
setPotential(Potential *);
|
||
|
|
||
|
/**
|
||
|
* Apply a designer on current deformation.
|
||
|
*/
|
||
|
virtual void
|
||
|
draw(Designer *);
|
||
|
|
||
|
TStroke *
|
||
|
getTransformedStroke();
|
||
|
|
||
|
ToonzExt::Potential *
|
||
|
getPotential();
|
||
|
|
||
|
TPointD &
|
||
|
oldW0();
|
||
|
|
||
|
int
|
||
|
getShortcutKey() const
|
||
|
{
|
||
|
return shortcutKey_;
|
||
|
}
|
||
|
|
||
|
int
|
||
|
getCursorId() const
|
||
|
{
|
||
|
return cursorId_;
|
||
|
}
|
||
|
void
|
||
|
setCursorId(int id)
|
||
|
{
|
||
|
cursorId_ = id;
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
|
#if defined(WIN32) && (_MSC_VER <= 1200)
|
||
|
#pragma warning(pop)
|
||
|
#endif
|
||
|
|
||
|
#endif /* STROKEDEFORMATION_IMPL_H */
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// End Of File
|
||
|
//-----------------------------------------------------------------------------
|