|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/tstageobjecttree.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/tstageobjectspline.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/tstageobject.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tgrammar.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "ttokenizer.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tconvert.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tunit.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tstream.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/txsheet.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/txshcell.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/txsheetexpr.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
using namespace TSyntax;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Shinya Kitaoka |
120a6e |
//! The struct TStageObjectTree::TStageObjectTreeImp contains all element
|
|
Shinya Kitaoka |
120a6e |
//! necessary to define a pegbar tree.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
struct TStageObjectTree::TStageObjectTreeImp {
|
|
Shinya Kitaoka |
120a6e |
enum DagGridDimension { eLarge = 0, eSmall = 1 };
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
//! The map contains generic pegbar of pegbar tree.
|
|
Shinya Kitaoka |
120a6e |
std::map<tstageobjectid, *="" tstageobject=""> m_pegbarTable;</tstageobjectid,>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
//! Define pegbar tree current camera .
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId m_currentCameraId;
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId m_currentPreviewCameraId;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
//! Allows to manager pegbar handle.
|
|
Shinya Kitaoka |
120a6e |
HandleManager *m_handleManager;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
//! The vector contains all spline \b TStageObjectSpline of pegbar tree.
|
|
Shinya Kitaoka |
120a6e |
std::map<int, *="" tstageobjectspline=""> m_splines;</int,>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int m_cameraCount;
|
|
Shinya Kitaoka |
120a6e |
int m_groupIdCount;
|
|
Shinya Kitaoka |
120a6e |
int m_splineCount;
|
|
Shinya Kitaoka |
120a6e |
int m_dagGridDimension;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
Grammar *m_grammar;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*!
|
|
Shinya Kitaoka |
120a6e |
Constructs a TStageObjectTreeImp with default value.
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTreeImp();
|
|
Shinya Kitaoka |
120a6e |
/*!
|
|
Shinya Kitaoka |
120a6e |
Destroys the TStageObjectTreeImp object.
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Shinya Kitaoka |
120a6e |
~TStageObjectTreeImp();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// not implemented
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTreeImp(const TStageObjectTreeImp &);
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTreeImp &operator=(const TStageObjectTreeImp &);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TStageObjectTree::TStageObjectTreeImp::TStageObjectTreeImp()
|
|
Shinya Kitaoka |
120a6e |
: m_currentCameraId(TStageObjectId::CameraId(0))
|
|
Shinya Kitaoka |
120a6e |
, m_currentPreviewCameraId(TStageObjectId::CameraId(0))
|
|
Shinya Kitaoka |
120a6e |
, m_handleManager(0)
|
|
Shinya Kitaoka |
120a6e |
, m_cameraCount(0)
|
|
Shinya Kitaoka |
120a6e |
, m_groupIdCount(0)
|
|
Shinya Kitaoka |
120a6e |
, m_splineCount(0)
|
|
Shinya Kitaoka |
120a6e |
, m_grammar(0)
|
|
Shinya Kitaoka |
120a6e |
, m_dagGridDimension(eSmall) {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree::TStageObjectTreeImp::~TStageObjectTreeImp() {
|
|
Shinya Kitaoka |
120a6e |
std::map<tstageobjectid, *="" tstageobject="">::iterator i;</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
for (i = m_pegbarTable.begin(); i != m_pegbarTable.end(); ++i)
|
|
Shinya Kitaoka |
120a6e |
i->second->release();
|
|
Shinya Kitaoka |
120a6e |
std::map<int, *="" tstageobjectspline="">::iterator it;</int,>
|
|
Shinya Kitaoka |
120a6e |
for (it = m_splines.begin(); it != m_splines.end(); it++)
|
|
Shinya Kitaoka |
120a6e |
it->second->release();
|
|
Shinya Kitaoka |
120a6e |
delete m_grammar;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// TStageObjectTree
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree::TStageObjectTree() : m_imp(new TStageObjectTreeImp) {
|
|
Shinya Kitaoka |
120a6e |
getStageObject(TStageObjectId::CameraId(0), true);
|
|
Shinya Kitaoka |
120a6e |
getStageObject(TStageObjectId::TableId, true);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*
|
|
Toshihiro Shimizu |
890ddd |
static bool firstTime = true;
|
|
Toshihiro Shimizu |
890ddd |
if(firstTime)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
firstTime = false;
|
|
Toshihiro Shimizu |
890ddd |
Grammar*grammar = ExprGrammar::instance();
|
|
Toshihiro Shimizu |
890ddd |
grammar->addPattern("leaf", new ParamReferencePattern());
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
#ifndef NDEBUG
|
|
Shinya Kitaoka |
120a6e |
checkIntegrity();
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree::~TStageObjectTree() {}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//-----------------------------------------------------------------------------
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectTree::checkIntegrity() {
|
|
Shinya Kitaoka |
120a6e |
std::map<tstageobjectid, *="" tstageobject=""> &pegbars = m_imp->m_pegbarTable;</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
std::map<tstageobjectid, *="" tstageobject="">::iterator it = pegbars.begin();</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
int minColumnIndex = 0;
|
|
Shinya Kitaoka |
120a6e |
int maxColumnIndex = -1;
|
|
Shinya Kitaoka |
120a6e |
std::set<int> columnIndexTable;</int>
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
int cameraCount = 0;
|
|
Shinya Kitaoka |
120a6e |
for (; it != pegbars.end(); ++it) {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId id = it->first;
|
|
Shinya Kitaoka |
120a6e |
TStageObject *imp = it->second;
|
|
Shinya Kitaoka |
120a6e |
assert(imp->getId() == id);
|
|
Shinya Kitaoka |
120a6e |
if (id.isColumn()) {
|
|
Shinya Kitaoka |
120a6e |
int index = id.getIndex();
|
|
Shinya Kitaoka |
120a6e |
if (minColumnIndex > maxColumnIndex)
|
|
Shinya Kitaoka |
120a6e |
minColumnIndex = maxColumnIndex = index;
|
|
Shinya Kitaoka |
120a6e |
else {
|
|
Shinya Kitaoka |
120a6e |
if (index < minColumnIndex) minColumnIndex = index;
|
|
Shinya Kitaoka |
120a6e |
if (index > maxColumnIndex) maxColumnIndex = index;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
assert(columnIndexTable.find(index) == columnIndexTable.end());
|
|
Shinya Kitaoka |
120a6e |
columnIndexTable.insert(index);
|
|
Shinya Kitaoka |
120a6e |
} else if (id.isPegbar()) {
|
|
Shinya Kitaoka |
120a6e |
assert(imp->getParent() != TStageObjectId());
|
|
Shinya Kitaoka |
120a6e |
assert(imp->getParent().isPegbar() || imp->getParent().isTable());
|
|
Shinya Kitaoka |
120a6e |
} else if (id.isTable())
|
|
Shinya Kitaoka |
120a6e |
assert(imp->getParent() == TStageObjectId());
|
|
Shinya Kitaoka |
120a6e |
else if (id.isCamera()) // la camera puo' essere attaccata dovunque
|
|
Shinya Kitaoka |
120a6e |
cameraCount++;
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
assert(0);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (minColumnIndex > maxColumnIndex) {
|
|
Shinya Kitaoka |
120a6e |
assert(columnIndexTable.size() == 0);
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
assert(minColumnIndex == 0);
|
|
Shinya Kitaoka |
120a6e |
int count = maxColumnIndex - minColumnIndex + 1;
|
|
Shinya Kitaoka |
120a6e |
int m = columnIndexTable.size();
|
|
Shinya Kitaoka |
120a6e |
assert(m == count);
|
|
Shinya Kitaoka |
120a6e |
int k = minColumnIndex;
|
|
Shinya Kitaoka |
120a6e |
for (std::set<int>::iterator it = columnIndexTable.begin();</int>
|
|
Shinya Kitaoka |
120a6e |
it != columnIndexTable.end(); ++it) {
|
|
Shinya Kitaoka |
120a6e |
assert(*it == k);
|
|
Shinya Kitaoka |
120a6e |
k++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
assert(m_imp->m_cameraCount == cameraCount);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//-----------------------------------------------------------------------------
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TStageObject *TStageObjectTree::getStageObject(const TStageObjectId &id,
|
|
Shinya Kitaoka |
120a6e |
bool create) {
|
|
Shinya Kitaoka |
120a6e |
std::map<tstageobjectid, *="" tstageobject=""> &pegbars = m_imp->m_pegbarTable;</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
std::map<tstageobjectid, *="" tstageobject="">::iterator it = pegbars.find(id);</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
if (it != pegbars.end()) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *pegbar = it->second;
|
|
Shinya Kitaoka |
120a6e |
return pegbar;
|
|
Shinya Kitaoka |
120a6e |
} else if (create) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *pegbar = new TStageObject(this, id);
|
|
Shinya Kitaoka |
120a6e |
if (id.isColumn()) {
|
|
Shinya Kitaoka |
120a6e |
int index = id.getIndex();
|
|
Shinya Kitaoka |
120a6e |
// mi assicuro che esistano tutte le colonne con indici inferiori
|
|
Shinya Kitaoka |
120a6e |
if (index > 0) getStageObject(TStageObjectId::ColumnId(index - 1));
|
|
Shinya Kitaoka |
120a6e |
// assegno il parent (per una colonna dev'essere la table)
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId parentId = TStageObjectId::TableId;
|
|
Shinya Kitaoka |
120a6e |
pegbar->setParent(parentId);
|
|
Shinya Kitaoka |
120a6e |
// mi assicuro che il padre esista
|
|
Shinya Kitaoka |
120a6e |
getStageObject(parentId);
|
|
Shinya Kitaoka |
120a6e |
} else if (id.isPegbar()) {
|
|
Shinya Kitaoka |
120a6e |
pegbar->setParent(TStageObjectId::TableId);
|
|
Shinya Kitaoka |
120a6e |
} else if (id.isCamera())
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_cameraCount++;
|
|
Shinya Kitaoka |
120a6e |
pegbars[id] = pegbar;
|
|
Shinya Kitaoka |
120a6e |
pegbar->addRef();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifndef NDEBUG
|
|
Shinya Kitaoka |
120a6e |
checkIntegrity();
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
return pegbar;
|
|
Shinya Kitaoka |
120a6e |
} else
|
|
Shinya Kitaoka |
120a6e |
return 0L;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectTree::insertColumn(int index) {
|
|
Shinya Kitaoka |
120a6e |
assert(0 <= index);
|
|
Toshihiro Shimizu |
890ddd |
#ifndef NDEBUG
|
|
Shinya Kitaoka |
120a6e |
checkIntegrity();
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId id = TStageObjectId::ColumnId(index);
|
|
Shinya Kitaoka |
120a6e |
TStageObject *pegbar = new TStageObject(this, id);
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId parentId = TStageObjectId::TableId;
|
|
Shinya Kitaoka |
120a6e |
pegbar->setParent(parentId);
|
|
Shinya Kitaoka |
120a6e |
// mi assicuro che il padre esista
|
|
Shinya Kitaoka |
120a6e |
getStageObject(parentId);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// mi assicuro che esistano tutte le colonne di indice inferiore
|
|
Shinya Kitaoka |
120a6e |
for (int k = 0; k < index; k++) getStageObject(TStageObjectId::ColumnId(k));
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
std::map<tstageobjectid, *="" tstageobject=""> &pegbars = m_imp->m_pegbarTable;</tstageobjectid,>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
std::vector<std::pair<tstageobjectid, *="" tstageobject="">> tmp(pegbars.begin(),</std::pair<tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
pegbars.end());
|
|
Shinya Kitaoka |
120a6e |
std::vector<std::pair<tstageobjectid, *="" tstageobject="">>::iterator it;</std::pair<tstageobjectid,>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
for (it = tmp.begin(); it != tmp.end(); ++it) {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId j = it->first;
|
|
Shinya Kitaoka |
120a6e |
if (j.isColumn() && j.getIndex() >= index) {
|
|
Shinya Kitaoka |
120a6e |
it->first = TStageObjectId::ColumnId(j.getIndex() + 1);
|
|
Shinya Kitaoka |
120a6e |
it->second->setId(it->first);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
pegbars.clear();
|
|
Shinya Kitaoka |
120a6e |
pegbars.insert(tmp.begin(), tmp.end());
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
pegbars[id] = pegbar;
|
|
Shinya Kitaoka |
120a6e |
pegbar->addRef();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifndef NDEBUG
|
|
Shinya Kitaoka |
120a6e |
checkIntegrity();
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectTree::removeColumn(int index) {
|
|
Shinya Kitaoka |
120a6e |
assert(0 <= index);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId id = TStageObjectId::ColumnId(index);
|
|
Shinya Kitaoka |
120a6e |
std::map<tstageobjectid, *="" tstageobject=""> &pegbars = m_imp->m_pegbarTable;</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
std::map<tstageobjectid, *="" tstageobject="">::iterator pit;</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
pit = pegbars.find(id);
|
|
Shinya Kitaoka |
120a6e |
TStageObject *imp = 0;
|
|
Shinya Kitaoka |
120a6e |
if (pit != pegbars.end()) imp = pit->second;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (imp) {
|
|
Shinya Kitaoka |
120a6e |
// i figli della colonna rimossa si attaccano al "nonno"
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId parentId = imp->getParent();
|
|
Shinya Kitaoka |
120a6e |
imp->detachFromParent();
|
|
Shinya Kitaoka |
120a6e |
/* while(! m_children.empty())
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
TStageObject*son = *imp->m_children.begin();
|
|
Shinya Kitaoka |
120a6e |
son->setParent(parentId);
|
|
Shinya Kitaoka |
120a6e |
}*/
|
|
Shinya Kitaoka |
120a6e |
imp->attachChildrenToParent(parentId);
|
|
Shinya Kitaoka |
120a6e |
imp->release();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
imp = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
pegbars.erase(id);
|
|
Shinya Kitaoka |
120a6e |
std::vector<std::pair<tstageobjectid, *="" tstageobject="">> tmp(pegbars.begin(),</std::pair<tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
pegbars.end());
|
|
Shinya Kitaoka |
120a6e |
std::vector<std::pair<tstageobjectid, *="" tstageobject="">>::iterator it;</std::pair<tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
for (it = tmp.begin(); it != tmp.end(); ++it) {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId j = it->first;
|
|
Shinya Kitaoka |
120a6e |
if (j.isColumn() && j.getIndex() > index) {
|
|
Shinya Kitaoka |
120a6e |
it->first = TStageObjectId::ColumnId(j.getIndex() - 1);
|
|
Shinya Kitaoka |
120a6e |
it->second->setId(it->first);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
pegbars.clear();
|
|
Shinya Kitaoka |
120a6e |
pegbars.insert(tmp.begin(), tmp.end());
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifndef NDEBUG
|
|
Shinya Kitaoka |
120a6e |
checkIntegrity();
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectTree::removeStageObject(const TStageObjectId &id) {
|
|
Shinya Kitaoka |
120a6e |
std::map<tstageobjectid, *="" tstageobject=""> &pegbars = m_imp->m_pegbarTable;</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
assert(pegbars.count(id) > 0);
|
|
Shinya Kitaoka |
120a6e |
TStageObject *obj = pegbars[id];
|
|
Shinya Kitaoka |
120a6e |
obj->attachChildrenToParent(obj->getParent());
|
|
Shinya Kitaoka |
120a6e |
obj->detachFromParent();
|
|
Shinya Kitaoka |
120a6e |
obj->release();
|
|
Shinya Kitaoka |
120a6e |
pegbars.erase(id);
|
|
Shinya Kitaoka |
120a6e |
if (id.isCamera()) m_imp->m_cameraCount--;
|
|
Toshihiro Shimizu |
890ddd |
#ifndef NDEBUG
|
|
Shinya Kitaoka |
120a6e |
checkIntegrity();
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectTree::insertStageObject(TStageObject *pegbar) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *imp = dynamic_cast<tstageobject *="">(pegbar);</tstageobject>
|
|
Shinya Kitaoka |
120a6e |
assert(imp);
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId id = imp->getId();
|
|
Shinya Kitaoka |
120a6e |
std::map<tstageobjectid, *="" tstageobject=""> &pegbars = m_imp->m_pegbarTable;</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
assert(pegbars.count(id) == 0);
|
|
Shinya Kitaoka |
120a6e |
pegbars[id] = imp;
|
|
Shinya Kitaoka |
120a6e |
imp->addRef();
|
|
Shinya Kitaoka |
120a6e |
imp->setParent(imp->getParent());
|
|
Shinya Kitaoka |
120a6e |
if (id.isCamera()) m_imp->m_cameraCount++;
|
|
Toshihiro Shimizu |
890ddd |
#ifndef NDEBUG
|
|
Shinya Kitaoka |
120a6e |
checkIntegrity();
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Shinya Kitaoka |
120a6e |
namespace { // Utility Function
|
|
Shinya Kitaoka |
120a6e |
//-----------------------------------------------------------------------------
|
|
Shinya Kitaoka |
120a6e |
bool checkId(TStageObjectTree *tree, const TStageObjectId &id) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *pegbar = tree->getStageObject(id, false);
|
|
Shinya Kitaoka |
120a6e |
return !pegbar || pegbar->getId() == id;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
//-----------------------------------------------------------------------------
|
|
Shinya Kitaoka |
120a6e |
} // namespace
|
|
Shinya Kitaoka |
120a6e |
//-----------------------------------------------------------------------------
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectTree::swapColumns(int i, int j) {
|
|
Shinya Kitaoka |
120a6e |
if (i == j) return;
|
|
Shinya Kitaoka |
120a6e |
if (i > j) tswap(i, j);
|
|
Shinya Kitaoka |
120a6e |
std::map<tstageobjectid, *="" tstageobject=""> &pegbars = m_imp->m_pegbarTable;</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
std::map<tstageobjectid, *="" tstageobject="">::iterator iti, itj;</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
std::map<tstageobjectid, *="" tstageobject="">::const_iterator end = pegbars.end();</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId idi = TStageObjectId::ColumnId(i);
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId idj = TStageObjectId::ColumnId(j);
|
|
Shinya Kitaoka |
120a6e |
assert(checkId(this, idi));
|
|
Shinya Kitaoka |
120a6e |
assert(checkId(this, idj));
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
iti = pegbars.find(idi);
|
|
Shinya Kitaoka |
120a6e |
itj = pegbars.find(idj);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (iti == end && itj == end) {
|
|
Shinya Kitaoka |
120a6e |
} else if (iti != end && itj != end) {
|
|
Shinya Kitaoka |
120a6e |
assert(iti->second);
|
|
Shinya Kitaoka |
120a6e |
assert(itj->second);
|
|
Shinya Kitaoka |
120a6e |
tswap(iti->second, itj->second);
|
|
Shinya Kitaoka |
120a6e |
iti->second->setId(iti->first);
|
|
Shinya Kitaoka |
120a6e |
itj->second->setId(itj->first);
|
|
Shinya Kitaoka |
120a6e |
} else if (iti == end) {
|
|
Shinya Kitaoka |
120a6e |
// iti e' il minore. Se manca iti deve mancare anche itj
|
|
Shinya Kitaoka |
120a6e |
assert(0);
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
// manca itj, ma iti c'e'. Devo crearne uno per evitare i buchi
|
|
Shinya Kitaoka |
120a6e |
assert(iti != end);
|
|
Shinya Kitaoka |
120a6e |
assert(iti->second);
|
|
Shinya Kitaoka |
120a6e |
assert(itj == end);
|
|
Shinya Kitaoka |
120a6e |
pegbars[idj] = iti->second;
|
|
Shinya Kitaoka |
120a6e |
iti->second->setId(idj);
|
|
Shinya Kitaoka |
120a6e |
pegbars.erase(iti);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// creo
|
|
Shinya Kitaoka |
120a6e |
getStageObject(idi, true);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
assert(checkId(this, idi));
|
|
Shinya Kitaoka |
120a6e |
assert(checkId(this, idj));
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifndef NDEBUG
|
|
Shinya Kitaoka |
120a6e |
checkIntegrity();
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectTree::loadData(TIStream &is) {
|
|
Shinya Kitaoka |
120a6e |
std::string tagName;
|
|
Shinya Kitaoka |
120a6e |
while (is.matchTag(tagName)) {
|
|
Shinya Kitaoka |
120a6e |
if (tagName == "splines") {
|
|
Shinya Kitaoka |
120a6e |
while (!is.eos()) {
|
|
Shinya Kitaoka |
120a6e |
TPersist *p = 0;
|
|
Shinya Kitaoka |
120a6e |
is >> p;
|
|
Shinya Kitaoka |
120a6e |
TStageObjectSpline *spline = dynamic_cast<tstageobjectspline *="">(p);</tstageobjectspline>
|
|
Shinya Kitaoka |
120a6e |
insertSpline(spline);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
is.matchEndTag();
|
|
Shinya Kitaoka |
120a6e |
} else if (tagName == "pegbar") {
|
|
Shinya Kitaoka |
120a6e |
std::string idStr = is.getTagAttribute("id");
|
|
Shinya Kitaoka |
120a6e |
if (idStr == "") // vecchio formato
|
|
Shinya Kitaoka |
120a6e |
{
|
|
Shinya Kitaoka |
120a6e |
is >> idStr;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId id = toStageObjectId(idStr);
|
|
Shinya Kitaoka |
120a6e |
if (id.isCamera() && is.getTagAttribute("active") == "yes")
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_currentCameraId = id;
|
|
Shinya Kitaoka |
120a6e |
else if (id.isCamera() && is.getTagAttribute("activepreview") == "yes")
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_currentPreviewCameraId = id;
|
|
Shinya Kitaoka |
120a6e |
else if (id.isCamera() && is.getTagAttribute("activeboth") == "yes")
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_currentPreviewCameraId = m_imp->m_currentCameraId = id;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TStageObject *pegbar =
|
|
Shinya Kitaoka |
120a6e |
dynamic_cast<tstageobject *="">(getStageObject(id, true));</tstageobject>
|
|
Shinya Kitaoka |
120a6e |
if (!pegbar)
|
|
Shinya Kitaoka |
120a6e |
throw TException("TStageObjectTree::loadData. can't create the pegbar");
|
|
Shinya Kitaoka |
120a6e |
pegbar->loadData(is);
|
|
Shinya Kitaoka |
120a6e |
if (pegbar->isGrouped() && m_imp->m_groupIdCount < pegbar->getGroupId())
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_groupIdCount = pegbar->getGroupId();
|
|
Shinya Kitaoka |
120a6e |
is.matchEndTag();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
std::string name = pegbar->getName();
|
|
Shinya Kitaoka |
120a6e |
} else if (tagName == "grid_dimension") {
|
|
Shinya Kitaoka |
120a6e |
is >> m_imp->m_dagGridDimension;
|
|
Shinya Kitaoka |
120a6e |
is.matchEndTag();
|
|
Shinya Kitaoka |
120a6e |
} else
|
|
Shinya Kitaoka |
120a6e |
throw TException("pegbartree: unexpected tag : " + tagName);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifndef NDEBUG
|
|
Shinya Kitaoka |
120a6e |
checkIntegrity();
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectTree::saveData(TOStream &os, int occupiedColumnCount) {
|
|
Shinya Kitaoka |
120a6e |
std::map<tstageobjectid, *="" tstageobject="">::iterator it;</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
std::map<tstageobjectid, *="" tstageobject=""> &pegbars = m_imp->m_pegbarTable;</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
if (!m_imp->m_splines.empty()) {
|
|
Shinya Kitaoka |
120a6e |
os.openChild("splines");
|
|
Shinya Kitaoka |
120a6e |
std::map<int, *="" tstageobjectspline="">::iterator it;</int,>
|
|
Shinya Kitaoka |
120a6e |
for (it = m_imp->m_splines.begin(); it != m_imp->m_splines.end(); it++) {
|
|
Shinya Kitaoka |
120a6e |
os << it->second;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
os.closeChild();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
for (it = pegbars.begin(); it != pegbars.end(); ++it) {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId objectId = it->first;
|
|
Shinya Kitaoka |
120a6e |
TStageObject *pegbar = it->second;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (objectId.isColumn() && objectId.getIndex() >= occupiedColumnCount)
|
|
Shinya Kitaoka |
120a6e |
continue;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
std::map<std::string, std::string=""> attr;</std::string,>
|
|
Shinya Kitaoka |
120a6e |
attr["id"] = objectId.toString();
|
|
Shinya Kitaoka |
120a6e |
if (objectId == m_imp->m_currentCameraId &&
|
|
Shinya Kitaoka |
120a6e |
objectId == m_imp->m_currentPreviewCameraId)
|
|
Shinya Kitaoka |
120a6e |
attr["activeboth"] = "yes";
|
|
Shinya Kitaoka |
120a6e |
else if (objectId == m_imp->m_currentCameraId)
|
|
Shinya Kitaoka |
120a6e |
attr["active"] = "yes";
|
|
Shinya Kitaoka |
120a6e |
else if (objectId == m_imp->m_currentPreviewCameraId)
|
|
Shinya Kitaoka |
120a6e |
attr["activepreview"] = "yes";
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
os.openChild("pegbar", attr);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
pegbar->saveData(os);
|
|
Shinya Kitaoka |
120a6e |
os.closeChild();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
os.child("grid_dimension") << (int)m_imp->m_dagGridDimension;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int TStageObjectTree::getStageObjectCount() const {
|
|
Shinya Kitaoka |
120a6e |
return m_imp->m_pegbarTable.size();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int TStageObjectTree::getCameraCount() const { return m_imp->m_cameraCount; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int TStageObjectTree::getNewGroupId() { return ++m_imp->m_groupIdCount; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TStageObject *TStageObjectTree::getStageObject(int index) const {
|
|
Shinya Kitaoka |
120a6e |
assert(0 <= index && index < getStageObjectCount());
|
|
Shinya Kitaoka |
120a6e |
std::map<tstageobjectid, *="" tstageobject="">::const_iterator it;</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
int i = 0;
|
|
Shinya Kitaoka |
120a6e |
for (it = m_imp->m_pegbarTable.begin();
|
|
Shinya Kitaoka |
120a6e |
it != m_imp->m_pegbarTable.end() && i < index; ++it, ++i) {
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
assert(it != m_imp->m_pegbarTable.end());
|
|
Shinya Kitaoka |
120a6e |
return it->second;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId TStageObjectTree::getCurrentCameraId() const {
|
|
Shinya Kitaoka |
120a6e |
return m_imp->m_currentCameraId;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId TStageObjectTree::getCurrentPreviewCameraId() const {
|
|
Shinya Kitaoka |
120a6e |
return m_imp->m_currentPreviewCameraId;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectTree::setCurrentCameraId(const TStageObjectId &id) {
|
|
Shinya Kitaoka |
120a6e |
assert(id.isCamera());
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_currentCameraId = id;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectTree::setCurrentPreviewCameraId(const TStageObjectId &id) {
|
|
Shinya Kitaoka |
120a6e |
assert(id.isCamera());
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_currentPreviewCameraId = id;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectTree::invalidateAll() {
|
|
Shinya Kitaoka |
120a6e |
std::map<tstageobjectid, *="" tstageobject="">::iterator it;</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
for (it = m_imp->m_pegbarTable.begin(); it != m_imp->m_pegbarTable.end();
|
|
Shinya Kitaoka |
120a6e |
++it) {
|
|
Shinya Kitaoka |
120a6e |
it->second->invalidate();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectTree::setHandleManager(HandleManager *hm) {
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_handleManager = hm;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TPointD TStageObjectTree::getHandlePos(const TStageObjectId &id,
|
|
Shinya Kitaoka |
120a6e |
std::string handle, int row) const {
|
|
Shinya Kitaoka |
120a6e |
if (m_imp->m_handleManager)
|
|
Shinya Kitaoka |
120a6e |
return m_imp->m_handleManager->getHandlePos(id, handle, row);
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
return TPointD();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int TStageObjectTree::getSplineCount() const { return m_imp->m_splines.size(); }
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//-----------------------------------------------------------------------------
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TStageObjectSpline *TStageObjectTree::getSpline(int index) const {
|
|
Shinya Kitaoka |
120a6e |
assert(0 <= index && index < getSplineCount());
|
|
Shinya Kitaoka |
120a6e |
std::map<int, *="" tstageobjectspline="">::iterator it = m_imp->m_splines.begin();</int,>
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < index; i++) it++;
|
|
Shinya Kitaoka |
120a6e |
return it->second;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TStageObjectSpline *TStageObjectTree::getSplineById(int splineId) const {
|
|
Shinya Kitaoka |
120a6e |
std::map<int, *="" tstageobjectspline="">::iterator it =</int,>
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_splines.find(splineId);
|
|
Shinya Kitaoka |
120a6e |
if (it != m_imp->m_splines.end()) return it->second;
|
|
Shinya Kitaoka |
120a6e |
return 0;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TStageObjectSpline *TStageObjectTree::createSpline() {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectSpline *spline = new TStageObjectSpline();
|
|
Shinya Kitaoka |
120a6e |
spline->setId(m_imp->m_splineCount++);
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_splines[spline->getId()] = spline;
|
|
Shinya Kitaoka |
120a6e |
spline->addRef();
|
|
Shinya Kitaoka |
120a6e |
return spline;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectTree::assignUniqueSplineId(TStageObjectSpline *spline) {
|
|
Shinya Kitaoka |
120a6e |
if (!spline) return;
|
|
Shinya Kitaoka |
120a6e |
spline->setId(m_imp->m_splineCount++);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectTree::removeSpline(TStageObjectSpline *spline) {
|
|
Shinya Kitaoka |
120a6e |
assert(spline->getId() >= 0);
|
|
Shinya Kitaoka |
120a6e |
std::map<int, *="" tstageobjectspline=""> &splines = m_imp->m_splines;</int,>
|
|
Shinya Kitaoka |
120a6e |
std::map<int, *="" tstageobjectspline="">::iterator it;</int,>
|
|
Shinya Kitaoka |
120a6e |
it = splines.find(spline->getId());
|
|
Shinya Kitaoka |
120a6e |
if (it == splines.end()) return;
|
|
Shinya Kitaoka |
120a6e |
splines.erase(it);
|
|
Shinya Kitaoka |
120a6e |
assert(!containsSpline(spline));
|
|
Shinya Kitaoka |
120a6e |
spline->release();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bool TStageObjectTree::containsSpline(TStageObjectSpline *s) const {
|
|
Shinya Kitaoka |
120a6e |
assert(s->getId() >= 0);
|
|
Shinya Kitaoka |
120a6e |
std::map<int, *="" tstageobjectspline=""> &splines = m_imp->m_splines;</int,>
|
|
Shinya Kitaoka |
120a6e |
std::map<int, *="" tstageobjectspline="">::iterator it = splines.find(s->getId());</int,>
|
|
Shinya Kitaoka |
120a6e |
return it != splines.end() && s == it->second;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectTree::insertSpline(TStageObjectSpline *s) {
|
|
Shinya Kitaoka |
120a6e |
assert(s->getId() >= 0);
|
|
Shinya Kitaoka |
120a6e |
std::map<int, *="" tstageobjectspline=""> &splines = m_imp->m_splines;</int,>
|
|
Shinya Kitaoka |
120a6e |
if (containsSpline(s)) return;
|
|
Shinya Kitaoka |
120a6e |
splines[s->getId()] = s;
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_splineCount = std::max(m_imp->m_splineCount, s->getId() + 1);
|
|
Shinya Kitaoka |
120a6e |
s->addRef();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectTree::createGrammar(TXsheet *xsh) {
|
|
Shinya Kitaoka |
120a6e |
assert(!m_imp->m_grammar);
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_grammar = createXsheetGrammar(xsh);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
std::map<tstageobjectid, *="" tstageobject="">::iterator it;</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
for (it = m_imp->m_pegbarTable.begin(); it != m_imp->m_pegbarTable.end();
|
|
Shinya Kitaoka |
120a6e |
++it) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *obj = it->second;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int c, cCount = TStageObject::T_ChannelCount;
|
|
Shinya Kitaoka |
120a6e |
for (c = 0; c != cCount; ++c)
|
|
Shinya Kitaoka |
120a6e |
obj->getParam((TStageObject::Channel)c)->setGrammar(m_imp->m_grammar);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (const PlasticSkeletonDeformationP &sd =
|
|
Shinya Kitaoka |
120a6e |
obj->getPlasticSkeletonDeformation())
|
|
Shinya Kitaoka |
120a6e |
sd->setGrammar(m_imp->m_grammar);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectTree::setGrammar(const TDoubleParamP ¶m) {
|
|
Shinya Kitaoka |
120a6e |
if (m_imp->m_grammar) param->setGrammar(m_imp->m_grammar);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TSyntax::Grammar *TStageObjectTree::getGrammar() const {
|
|
Shinya Kitaoka |
120a6e |
return m_imp->m_grammar;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
/*
|
|
Toshihiro Shimizu |
890ddd |
void TStageObjectTree::setToonzBuilder(const TDoubleParamP ¶m)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
// param->setBuilder(new ToonzCalcNodeBuilder(this));
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TCamera *TStageObjectTree::getCamera(const TStageObjectId &cameraId) {
|
|
Shinya Kitaoka |
120a6e |
assert(cameraId.isCamera());
|
|
Shinya Kitaoka |
120a6e |
TStageObject *cameraPegbar = getStageObject(cameraId);
|
|
Shinya Kitaoka |
120a6e |
assert(cameraPegbar);
|
|
Shinya Kitaoka |
120a6e |
return cameraPegbar->getCamera();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectTree::setDagGridDimension(int dim) {
|
|
Shinya Kitaoka |
120a6e |
m_imp->m_dagGridDimension = dim;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int TStageObjectTree::getDagGridDimension() const {
|
|
Shinya Kitaoka |
120a6e |
return m_imp->m_dagGridDimension;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
PERSIST_IDENTIFIER(TStageObjectTree, "PegbarTree");
|