tahoma2d/toonz/sources/toonzlib/tobjecthandle.cpp

100 lines
2.8 KiB
C++
Raw Normal View History

2016-03-19 06:57:51 +13:00
#include "toonz/tobjecthandle.h"
#include "toonz/tstageobjectid.h"
#include "toonz/tstageobject.h"
#include "toonz/tstageobjectspline.h"
#include "toonz/txsheet.h"
#include "tvectorimage.h"
#include "tstroke.h"
2016-06-15 18:43:10 +12:00
namespace {
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void clearImage(TVectorImage *img) {
while (img->getStrokeCount()) img->deleteStroke(0);
2016-03-19 06:57:51 +13:00
}
// obj -> image
2016-06-15 18:43:10 +12:00
void getSpline(TVectorImage *dstImg, TStageObjectId objId,
TStageObjectSpline *currentSpline) {
QMutexLocker lock(dstImg->getMutex());
clearImage(dstImg);
if (currentSpline)
dstImg->addStroke(new TStroke(*currentSpline->getStroke()));
2016-03-19 06:57:51 +13:00
}
// image -> obj
2016-06-15 18:43:10 +12:00
void setSpline(TVectorImage *srcImg, TStageObjectId objId,
TStageObjectSpline *currentSpline) {
if (!currentSpline) return;
if (srcImg->getStrokeCount() == 0) {
double d = 30;
std::vector<TThickPoint> points;
points.push_back(TPointD(-d, 0));
points.push_back(TPointD(0, 0));
points.push_back(TPointD(d, 0));
srcImg->addStroke(new TStroke(points), false);
}
TStroke *stroke = srcImg->getStroke(0);
currentSpline->setStroke(new TStroke(*stroke));
2016-03-19 06:57:51 +13:00
}
2016-06-15 18:43:10 +12:00
} // namespace
2016-03-19 06:57:51 +13:00
//=============================================================================
// TXshLevelHandle
//-----------------------------------------------------------------------------
TObjectHandle::TObjectHandle()
2016-06-15 18:43:10 +12:00
: m_objectId(TStageObjectId::NoneId)
, m_isSpline(false)
, m_splineImage(0)
, m_currentSpline(0) {
m_splineImage = new TVectorImage();
m_splineImage->addRef();
2016-03-19 06:57:51 +13:00
}
//-----------------------------------------------------------------------------
2016-06-15 18:43:10 +12:00
TObjectHandle::~TObjectHandle() { m_splineImage->release(); }
2016-03-19 06:57:51 +13:00
//-----------------------------------------------------------------------------
2016-06-15 18:43:10 +12:00
TStageObjectId TObjectHandle::getObjectId() { return m_objectId; }
2016-03-19 06:57:51 +13:00
//-----------------------------------------------------------------------------
2016-06-15 18:43:10 +12:00
void TObjectHandle::setObjectId(TStageObjectId objectId) {
if (m_objectId != objectId) {
m_objectId = objectId;
m_isSpline = false;
clearImage(m_splineImage);
emit objectSwitched();
}
2016-03-19 06:57:51 +13:00
}
//-----------------------------------------------------------------------------
void TObjectHandle::setIsSpline(bool isSpline, bool forceUpdate) {
if (m_isSpline != isSpline || forceUpdate) {
2016-06-15 18:43:10 +12:00
m_isSpline = isSpline;
emit objectSwitched();
}
2016-03-19 06:57:51 +13:00
}
//-----------------------------------------------------------------------------
2016-06-15 18:43:10 +12:00
void TObjectHandle::commitSplineChanges() {
setSpline(m_splineImage, m_objectId, m_currentSpline);
emit splineChanged();
2016-03-19 06:57:51 +13:00
}
//-----------------------------------------------------------------------------
2016-06-15 18:43:10 +12:00
void TObjectHandle::setSplineObject(TStageObjectSpline *splineObject) {
m_currentSpline = splineObject;
if (m_isSpline && m_currentSpline)
getSpline(m_splineImage, m_objectId, m_currentSpline);
2016-03-19 06:57:51 +13:00
}