|
Shinya Kitaoka |
810553 |
#pragma once
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifndef VECTORSELECTIONTOOL_H
|
|
Toshihiro Shimizu |
890ddd |
#define VECTORSELECTIONTOOL_H
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "selectiontool.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// TnzTools includes
|
|
Toshihiro Shimizu |
890ddd |
#include "tools/strokeselection.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tools/levelselection.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// TnzCore includes
|
|
Toshihiro Shimizu |
890ddd |
#include "tstroke.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tregion.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// Qt includes
|
|
Toshihiro Shimizu |
890ddd |
#include <qset></qset>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// tcg includes
|
|
Toshihiro Shimizu |
890ddd |
#include "tcg/tcg_unique_ptr.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//============================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// Forward declarations
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class VectorSelectionTool;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//============================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// Constants / Defines
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
enum SelectionTarget //! Possible selection targets in a SelectionTool.
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
NORMAL_TYPE_IDX, //!< Normal selection (strokes at current frame).
|
|
Toshihiro Shimizu |
890ddd |
SELECTED_FRAMES_TYPE_IDX, //!< Selection of whole frames.
|
|
Toshihiro Shimizu |
890ddd |
ALL_LEVEL_TYPE_IDX, //!< Selection of an entire level.
|
|
Toshihiro Shimizu |
890ddd |
SAME_STYLE_TYPE_IDX, //!< Selected styles at current frame.
|
|
Toshihiro Shimizu |
890ddd |
STYLE_SELECTED_FRAMES_TYPE_IDX, //!< Selected styles at selected frames.
|
|
Toshihiro Shimizu |
890ddd |
STYLE_LEVEL_TYPE_IDX, //!< Selected styles at current frame on the whole level.
|
|
Toshihiro Shimizu |
890ddd |
BOUNDARY_TYPE_IDX, //!< Boundary strokes on current frame.
|
|
Toshihiro Shimizu |
890ddd |
BOUNDARY_SELECTED_FRAMES_TYPE_IDX, //!< Boundary strokes on selected frames.
|
|
Toshihiro Shimizu |
890ddd |
BOUNDARY_LEVEL_TYPE_IDX, //!< Boundary strokes on the whole level.
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#define NORMAL_TYPE L"Standard"
|
|
Toshihiro Shimizu |
890ddd |
#define SELECTED_FRAMES_TYPE L"Selected Frames"
|
|
Toshihiro Shimizu |
890ddd |
#define ALL_LEVEL_TYPE L"Whole Level"
|
|
Toshihiro Shimizu |
890ddd |
#define SAME_STYLE_TYPE L"Same Style"
|
|
Toshihiro Shimizu |
890ddd |
#define STYLE_SELECTED_FRAMES_TYPE L"Same Style on Selected Frames"
|
|
Toshihiro Shimizu |
890ddd |
#define STYLE_LEVEL_TYPE L"Same Style on Whole Level"
|
|
Toshihiro Shimizu |
890ddd |
#define BOUNDARY_TYPE L"Boundary Strokes"
|
|
Toshihiro Shimizu |
890ddd |
#define BOUNDARY_SELECTED_FRAMES_TYPE L"Boundaries on Selected Frames"
|
|
Toshihiro Shimizu |
890ddd |
#define BOUNDARY_LEVEL_TYPE L"Boundaries on Whole Level"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#define ROUNDC_WSTR L"round_cap"
|
|
Toshihiro Shimizu |
890ddd |
#define BUTT_WSTR L"butt_cap"
|
|
Toshihiro Shimizu |
890ddd |
#define PROJECTING_WSTR L"projecting_cap"
|
|
Toshihiro Shimizu |
890ddd |
#define ROUNDJ_WSTR L"round_join"
|
|
Toshihiro Shimizu |
890ddd |
#define BEVEL_WSTR L"bevel_join"
|
|
Toshihiro Shimizu |
890ddd |
#define MITER_WSTR L"miter_join"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// VectorFreeDeformer
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class VectorFreeDeformer : public FreeDeformer
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
TVectorImageP m_vi;
|
|
Shinya Kitaoka |
2148c8 |
std::set<int> m_strokeIndexes;</int>
|
|
Shinya Kitaoka |
2148c8 |
std::vector<tstroke *=""> m_originalStrokes;</tstroke>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
bool m_preserveThickness, m_computeRegion, m_flip;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TThickPoint deform(TThickPoint point);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
2148c8 |
VectorFreeDeformer(TVectorImageP vi, std::set<int> strokeIndexes);</int>
|
|
Toshihiro Shimizu |
890ddd |
~VectorFreeDeformer();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void setPreserveThickness(bool preserveThickness);
|
|
Toshihiro Shimizu |
890ddd |
void setComputeRegion(bool computeRegion);
|
|
Toshihiro Shimizu |
890ddd |
void setFlip(bool flip);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*! Return \b index point, with index from 0 to 3. */
|
|
Toshihiro Shimizu |
890ddd |
TPointD getPoint(int index) const { return m_newPoints[index]; }
|
|
Toshihiro Shimizu |
890ddd |
/*! Set \b index point to \b p, with index from 0 to 3. */
|
|
Toshihiro Shimizu |
890ddd |
void setPoint(int index, const TPointD &p);
|
|
Toshihiro Shimizu |
890ddd |
/*! Helper function. */
|
|
Toshihiro Shimizu |
890ddd |
void setPoints(const TPointD &p0, const TPointD &p1, const TPointD &p2, const TPointD &p3);
|
|
Toshihiro Shimizu |
890ddd |
/*! Helper function. */
|
|
Toshihiro Shimizu |
890ddd |
TVectorImage *getDeformedImage() const { return m_vi.getPointer(); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void deformRegions();
|
|
Toshihiro Shimizu |
890ddd |
void deformImage();
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// DragSelectionTool
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
namespace DragSelectionTool
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// UndoChangeStrokes
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class UndoChangeStrokes : public ToolUtils::TToolUndo
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
UndoChangeStrokes(TXshSimpleLevel *level, const TFrameId &frameId, VectorSelectionTool *tool,
|
|
Toshihiro Shimizu |
890ddd |
const StrokeSelection &selection);
|
|
Toshihiro Shimizu |
890ddd |
UndoChangeStrokes(TXshSimpleLevel *level, const TFrameId &frameId, VectorSelectionTool *tool,
|
|
Toshihiro Shimizu |
890ddd |
const LevelSelection &selection);
|
|
Toshihiro Shimizu |
890ddd |
~UndoChangeStrokes();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void registerStrokes(bool beforeModify = false);
|
|
Toshihiro Shimizu |
890ddd |
void setFlip(bool value) { m_flip = value; }
|
|
Toshihiro Shimizu |
890ddd |
void transform(const std::vector<tstroke *=""> &strokes, FourPoints bbox, TPointD center, DeformValues deformValue) const;</tstroke>
|
|
Toshihiro Shimizu |
890ddd |
void restoreRegions() const;
|
|
Toshihiro Shimizu |
890ddd |
void undo() const;
|
|
Toshihiro Shimizu |
890ddd |
void redo() const;
|
|
Toshihiro Shimizu |
890ddd |
int getSize() const;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Toshihiro Shimizu |
890ddd |
VectorSelectionTool *m_tool;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
std::vector<tstroke *=""> m_oldStrokes,</tstroke>
|
|
Toshihiro Shimizu |
890ddd |
m_newStrokes;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
std::vector<int> m_indexes; //!< Selected indexes at current frame.</int>
|
|
Toshihiro Shimizu |
890ddd |
std::vector<tfilledregioninf></tfilledregioninf>
|
|
Toshihiro Shimizu |
890ddd |
m_regionsData;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int m_selectionCount;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
FourPoints m_oldBBox,
|
|
Toshihiro Shimizu |
890ddd |
m_newBBox;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TPointD m_oldCenter,
|
|
Toshihiro Shimizu |
890ddd |
m_newCenter;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
DeformValues m_oldDeformValues,
|
|
Toshihiro Shimizu |
890ddd |
m_newDeformValues;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
bool m_flip;
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// VectorDeformTool
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class VectorDeformTool : public DeformTool
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
VectorDeformTool(VectorSelectionTool *tool);
|
|
Toshihiro Shimizu |
890ddd |
~VectorDeformTool();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void applyTransform(FourPoints bbox);
|
|
Toshihiro Shimizu |
890ddd |
void addTransformUndo();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*! Trasform whole level and add undo. */
|
|
Toshihiro Shimizu |
890ddd |
void transformWholeLevel();
|
|
Toshihiro Shimizu |
890ddd |
bool isFlip();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
protected:
|
|
Toshihiro Shimizu |
890ddd |
tcg::unique_ptr<undochangestrokes> m_undo;</undochangestrokes>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
protected:
|
|
Toshihiro Shimizu |
890ddd |
virtual void leftButtonDrag(const TPointD &pos, const TMouseEvent &e) {}
|
|
Toshihiro Shimizu |
890ddd |
virtual void leftButtonUp(const TPointD &pos, const TMouseEvent &e);
|
|
Toshihiro Shimizu |
890ddd |
virtual void draw() {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Toshihiro Shimizu |
890ddd |
struct VFDScopedBlock;
|
|
Toshihiro Shimizu |
890ddd |
tcg::unique_ptr<vfdscopedblock> m_vfdScopedBlock;</vfdscopedblock>
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// VectorRotationTool
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class VectorRotationTool : public VectorDeformTool
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
tcg::unique_ptr<rotation> m_rotation;</rotation>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
VectorRotationTool(VectorSelectionTool *tool);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void transform(TAffine aff, double angle);
|
|
Toshihiro Shimizu |
890ddd |
void leftButtonDrag(const TPointD &pos, const TMouseEvent &e);
|
|
Toshihiro Shimizu |
890ddd |
void draw();
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// VectorFreeDeformTool
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class VectorFreeDeformTool : public VectorDeformTool
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
tcg::unique_ptr<freedeform> m_freeDeform;</freedeform>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
VectorFreeDeformTool(VectorSelectionTool *tool);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void leftButtonDrag(const TPointD &pos, const TMouseEvent &e);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// VectorMoveSelectionTool
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class VectorMoveSelectionTool : public VectorDeformTool
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
tcg::unique_ptr<moveselection> m_moveSelection;</moveselection>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
VectorMoveSelectionTool(VectorSelectionTool *tool);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void transform(TAffine aff);
|
|
Toshihiro Shimizu |
890ddd |
void leftButtonDown(const TPointD &pos, const TMouseEvent &e);
|
|
Toshihiro Shimizu |
890ddd |
void leftButtonDrag(const TPointD &pos, const TMouseEvent &e);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// VectorScaleTool
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class VectorScaleTool : public VectorDeformTool
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
tcg::unique_ptr<scale> m_scale;</scale>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
VectorScaleTool(VectorSelectionTool *tool, int type);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TPointD transform(int index, TPointD newPos); //!< Returns scale value.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void leftButtonDown(const TPointD &pos, const TMouseEvent &e);
|
|
Toshihiro Shimizu |
890ddd |
void leftButtonDrag(const TPointD &pos, const TMouseEvent &e);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// VectorChangeThicknessTool
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class VectorChangeThicknessTool : public DragTool
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
TPointD m_curPos, m_firstPos;
|
|
Shinya Kitaoka |
3bfa54 |
std::map<int, std::vector<double="">> m_strokesThickness;</int,>
|
|
Toshihiro Shimizu |
890ddd |
double m_thicknessChange;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
tcg::unique_ptr<undochangestrokes> m_undo;</undochangestrokes>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
VectorChangeThicknessTool(VectorSelectionTool *tool);
|
|
Toshihiro Shimizu |
890ddd |
~VectorChangeThicknessTool();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void setStrokesThickness(TVectorImage &vi);
|
|
Toshihiro Shimizu |
890ddd |
void setThicknessChange(double value) { m_thicknessChange = value; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void changeImageThickness(TVectorImage &vi, double newThickness);
|
|
Toshihiro Shimizu |
890ddd |
void addUndo();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void leftButtonDown(const TPointD &pos, const TMouseEvent &e);
|
|
Toshihiro Shimizu |
890ddd |
void leftButtonDrag(const TPointD &pos, const TMouseEvent &e);
|
|
Toshihiro Shimizu |
890ddd |
void leftButtonUp(const TPointD &pos, const TMouseEvent &e);
|
|
Toshihiro Shimizu |
890ddd |
void draw() {}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
} //namespace DragSelectionTool
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// VectorSelectionTool
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
\brief Selection tool for Toonz's vector images.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class VectorSelectionTool : public SelectionTool
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
Q_DECLARE_TR_FUNCTIONS(VectorSelectionTool)
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
VectorSelectionTool(int targetType);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void setNewFreeDeformer();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void setCanEnterGroup(bool value) { m_canEnterGroup = value; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
bool isConstantThickness() const { return m_constantThickness.getValue(); }
|
|
Toshihiro Shimizu |
890ddd |
bool isLevelType() const;
|
|
Toshihiro Shimizu |
890ddd |
bool isSelectedFramesType() const;
|
|
Toshihiro Shimizu |
890ddd |
bool isSameStyleType() const;
|
|
Toshihiro Shimizu |
890ddd |
bool isModifiableSelectionType() const;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
const std::set<int> &selectedStyles() const</int>
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
return m_levelSelection.styles();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
std::set<int> &selectedStyles()</int>
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
return m_levelSelection.styles();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int getSelectionCount() const { return m_selectionCount; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void selectionOutlineStyle(int &capStyle, int &joinStyle);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
const StrokeSelection &strokeSelection() const
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
return m_strokeSelection;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
const LevelSelection &levelSelection() const
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
return m_levelSelection;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TSelection *getSelection();
|
|
Toshihiro Shimizu |
890ddd |
bool isSelectionEmpty();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void computeBBox();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TPropertyGroup *getProperties(int targetType);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
protected:
|
|
Toshihiro Shimizu |
890ddd |
void onActivate();
|
|
Toshihiro Shimizu |
890ddd |
void onDeactivate();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void leftButtonDrag(const TPointD &pos, const TMouseEvent &);
|
|
Toshihiro Shimizu |
890ddd |
void leftButtonUp(const TPointD &pos, const TMouseEvent &);
|
|
Toshihiro Shimizu |
890ddd |
void leftButtonDoubleClick(const TPointD &, const TMouseEvent &e);
|
|
Toshihiro Shimizu |
890ddd |
void addContextMenuItems(QMenu *menu);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void draw();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void updateAction(TPointD pos, const TMouseEvent &e);
|
|
Toshihiro Shimizu |
890ddd |
void onSelectedFramesChanged();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
3bfa54 |
bool onPropertyChanged(std::string propertyName);
|
|
Toshihiro Shimizu |
890ddd |
void onImageChanged();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Toshihiro Shimizu |
890ddd |
class AttachedLevelSelection : public LevelSelection
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
StrokeSelection &m_strokeSelection; //!< Selection of strokes to be seen at current frame.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
AttachedLevelSelection(StrokeSelection &strokeSelection)
|
|
Toshihiro Shimizu |
890ddd |
: m_strokeSelection(strokeSelection) {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void selectNone()
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
LevelSelection::selectNone(), m_strokeSelection.selectNone();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Toshihiro Shimizu |
890ddd |
TEnumProperty m_selectionTarget; //!< Selected target content (strokes, whole image, styles...).
|
|
Toshihiro Shimizu |
890ddd |
TBoolProperty m_constantThickness;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
StrokeSelection m_strokeSelection; //!< Standard selection of a set of strokes in current image.
|
|
Toshihiro Shimizu |
890ddd |
AttachedLevelSelection m_levelSelection; //!< Selection across multiple frames and specific styles.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TEnumProperty m_capStyle; //!< Style of stroke caps.
|
|
Toshihiro Shimizu |
890ddd |
TEnumProperty m_joinStyle; //!< Style of stroke joins.
|
|
Toshihiro Shimizu |
890ddd |
TIntProperty m_miterJoinLimit; //!< Stroke joins threshold value.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TPropertyGroup m_outlineProps;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int m_selectionCount; //!< \deprecated This is \a not related to stroke selections;
|
|
Toshihiro Shimizu |
890ddd |
//! but rather to bboxes count - and even that is deprecated.
|
|
Toshihiro Shimizu |
890ddd |
bool m_canEnterGroup; //!< \deprecated Used in Manga and Kids
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Toshihiro Shimizu |
890ddd |
void modifySelectionOnClick(TImageP image, const TPointD &pos, const TMouseEvent &e);
|
|
Toshihiro Shimizu |
890ddd |
bool selectStroke(int index, bool toggle);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void doOnActivate();
|
|
Toshihiro Shimizu |
890ddd |
void doOnDeactivate();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void selectRegionVectorImage();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void updateTranslation();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*! \details The updateSelectionTarget() function reads the selection
|
|
Toshihiro Shimizu |
890ddd |
target (styles, frames, etc) selected by the user, and ensures
|
|
Toshihiro Shimizu |
890ddd |
that the associated internal selection is configured and
|
|
Toshihiro Shimizu |
890ddd |
\a current.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
The selected strokes set is \a may be cleared appropriately
|
|
Toshihiro Shimizu |
890ddd |
as a result of a change in target. */
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void updateSelectionTarget(); //!< Reads widget fields and updates the selection target accordingly.
|
|
Toshihiro Shimizu |
890ddd |
void clearSelectedStrokes(); //!< Clears strokes visible in current selection.
|
|
Toshihiro Shimizu |
890ddd |
void finalizeSelection(); //!< Makes selection consistent, and invokes all related cached data
|
|
Toshihiro Shimizu |
890ddd |
//! updates needed for visualization.
|
|
Toshihiro Shimizu |
890ddd |
void drawInLevelType(const TVectorImage &vi);
|
|
Toshihiro Shimizu |
890ddd |
void drawSelectedStrokes(const TVectorImage &vi);
|
|
Toshihiro Shimizu |
890ddd |
void drawGroup(const TVectorImage &vi);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#endif // VECTORSELECTIONTOOL_H
|