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"
manongjohn b41f36
#include "toonz/columnfan.h"
manongjohn b41f36
#include "../include/orientation.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;
otakuto ed7dcd
  if (i > j) std::swap(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);
otakuto ed7dcd
    std::swap(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
manongjohn 4334db
void TStageObjectTree::loadData(TIStream &is, TXsheet *xsh) {
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;
manongjohn b41f36
manongjohn b41f36
      if (id.isCamera()) {
manongjohn b41f36
        if (is.getTagAttribute("columnLocked") == "yes")
manongjohn b41f36
          xsh->setCameraColumnLocked(true);
manongjohn b41f36
        if (is.getTagAttribute("columnFolded") == "yes")
manongjohn b41f36
          xsh->getColumnFan(Orientations::topToBottom())->deactivate(-1);
manongjohn b41f36
      }
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
manongjohn 4334db
void TStageObjectTree::saveData(TOStream &os, int occupiedColumnCount,
manongjohn 4334db
                                TXsheet *xsh) {
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
manongjohn b41f36
    // Since we don't have a real column and we want the files to open in
manongjohn b41f36
    // older versions, we'll store column settings on the camera pegbar
manongjohn 4334db
    if ((objectId == m_imp->m_currentCameraId ||
manongjohn b41f36
         objectId == m_imp->m_currentPreviewCameraId)) {
manongjohn b41f36
      if (xsh->isCameraColumnLocked()) attr["columnLocked"] = "yes";
manongjohn b41f36
      if (!xsh->getColumnFan(Orientations::topToBottom())->isActive(-1))
manongjohn b41f36
        attr["columnFolded"] = "yes";
manongjohn b41f36
    }
manongjohn 4334db
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");