本文整理汇总了C++中TXsheet::getCellRange方法的典型用法代码示例。如果您正苦于以下问题:C++ TXsheet::getCellRange方法的具体用法?C++ TXsheet::getCellRange怎么用?C++ TXsheet::getCellRange使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TXsheet
的用法示例。
在下文中一共展示了TXsheet::getCellRange方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: changeFrameSkippingHolds
bool changeFrameSkippingHolds(QKeyEvent *e) {
if ((e->modifiers() & Qt::ShiftModifier) == 0 ||
e->key() != Qt::Key_Down && e->key() != Qt::Key_Up)
return false;
TApp *app = TApp::instance();
TFrameHandle *fh = app->getCurrentFrame();
if (!fh->isEditingScene()) return false;
int row = fh->getFrame();
int col = app->getCurrentColumn()->getColumnIndex();
TXsheet *xsh = app->getCurrentXsheet()->getXsheet();
TXshCell cell = xsh->getCell(row, col);
if (e->key() == Qt::Key_Down) {
if (cell.isEmpty()) {
int r0, r1;
if (xsh->getCellRange(col, r0, r1)) {
while (row <= r1 && xsh->getCell(row, col).isEmpty()) row++;
if (xsh->getCell(row, col).isEmpty()) return false;
} else
return false;
} else {
while (xsh->getCell(row, col) == cell) row++;
}
} else {
// Key_Up
while (row >= 0 && xsh->getCell(row, col) == cell) row--;
if (row < 0) return false;
cell = xsh->getCell(row, col);
while (row > 0 && xsh->getCell(row - 1, col) == cell) row--;
}
fh->setFrame(row);
return true;
}
示例2: redo
void redo() const override {
TXsheet *xsh = TApp::instance()->getCurrentXsheet()->getXsheet();
int r0, r1;
xsh->getCellRange(m_col, r0, r1);
if (r0 <= r1) {
xsh->clearCells(r0, m_col, r1 - r0 + 1);
xsh->updateFrameCount();
TApp::instance()->getCurrentXsheet()->notifyXsheetChanged();
}
}
示例3: ClearColumnCellsUndo
ClearColumnCellsUndo(int col) : m_col(col), m_r0(0) {
TXsheet *xsh = TApp::instance()->getCurrentXsheet()->getXsheet();
int r0, r1;
xsh->getCellRange(col, r0, r1);
m_r0 = r0;
if (r0 > r1) return;
for (int r = r0; r <= r1; r++) {
m_oldFrames.push_back(xsh->getCell(r, col));
}
}
示例4: canMergeColumns
static bool canMergeColumns(int column, int mColumn, bool forMatchlines) {
TXsheet *xsh = TApp::instance()->getCurrentXsheet()->getXsheet();
if (xsh->getColumn(column)->isLocked()) return false;
int start, end;
xsh->getCellRange(column, start, end);
if (start > end) return false;
std::vector<TXshCell> cell(end - start + 1);
std::vector<TXshCell> mCell(end - start + 1);
xsh->getCells(start, column, cell.size(), &(cell[0]));
xsh->getCells(start, mColumn, cell.size(), &(mCell[0]));
TXshSimpleLevel *level = 0, *mLevel = 0;
TXshLevelP xl;
for (int i = 0; i < (int)cell.size(); i++) {
if (cell[i].isEmpty() || mCell[i].isEmpty()) continue;
if (!level) {
level = cell[i].getSimpleLevel();
xl = cell[i].m_level;
}
else if (level != cell[i].getSimpleLevel())
return false;
if (!mLevel)
mLevel = mCell[i].getSimpleLevel();
else if (mLevel != mCell[i].getSimpleLevel())
return false;
if (!mLevel || !level || // potrebbero non essere dei simplelevel
(forMatchlines && (level->getType() != TZP_XSHLEVEL ||
mLevel->getType() != TZP_XSHLEVEL)))
return false;
else if (!forMatchlines) {
if (level->getType() != mLevel->getType()) return false;
if (level->getType() != PLI_XSHLEVEL && level->getType() != OVL_XSHLEVEL)
return false;
// Check level type write support. Based on TTool::updateEnabled()
if (level->getType() == OVL_XSHLEVEL &&
(level->getPath().getType() == "psd" || // PSD files.
level->is16BitChannelLevel() || // 16bpc images.
level->getProperties()->getBpp() == 1)) { // Black & White images.
return false;
}
}
}
return true;
}
示例5: ResequenceUndo
ResequenceUndo(int col, int count)
: m_index(col), m_r0(0), m_newFramesCount(count) {
TXsheet *xsh = TApp::instance()->getCurrentXsheet()->getXsheet();
int r0, r1;
xsh->getCellRange(col, r0, r1);
m_r0 = r0;
assert(r0 <= r1);
if (r0 > r1) return;
for (int r = r0; r <= r1; r++) {
TXshCell cell = xsh->getCell(r, col);
assert(cell.isEmpty() || cell.m_level->getChildLevel());
m_oldFrames.push_back(cell.m_frameId);
}
}
示例6: undo
void undo() const override {
TXsheet *xsh = TApp::instance()->getCurrentXsheet()->getXsheet();
int r0, r1;
xsh->getCellRange(m_index, r0, r1);
assert(r0 <= r1);
if (r0 > r1) return;
TXshCell cell = xsh->getCell(r0, m_index);
assert(!cell.isEmpty());
assert(cell.m_level->getChildLevel());
xsh->clearCells(r0, m_index, r1 - r0 + 1);
for (int i = 0; i < (int)m_oldFrames.size(); i++) {
TFrameId fid = m_oldFrames[i];
if (fid != TFrameId::EMPTY_FRAME) {
cell.m_frameId = fid;
xsh->setCell(m_r0 + i, m_index, cell);
}
}
TApp::instance()->getCurrentXsheet()->notifyXsheetChanged();
}
示例7: canMergeColumns
bool canMergeColumns(int column, int mColumn, bool forMatchlines) {
TXsheet *xsh = TApp::instance()->getCurrentXsheet()->getXsheet();
int start, end;
xsh->getCellRange(column, start, end);
if (start > end) return false;
std::vector<TXshCell> cell(end - start + 1);
std::vector<TXshCell> mCell(end - start + 1);
xsh->getCells(start, column, cell.size(), &(cell[0]));
xsh->getCells(start, mColumn, cell.size(), &(mCell[0]));
TXshSimpleLevel *level = 0, *mLevel = 0;
TXshLevelP xl;
for (int i = 0; i < (int)cell.size(); i++) {
if (cell[i].isEmpty() || mCell[i].isEmpty()) continue;
if (!level) {
level = cell[i].getSimpleLevel();
xl = cell[i].m_level;
}
else if (level != cell[i].getSimpleLevel())
return false;
if (!mLevel)
mLevel = mCell[i].getSimpleLevel();
else if (mLevel != mCell[i].getSimpleLevel())
return false;
if (!mLevel || !level || // potrebbero non essere dei simplelevel
(forMatchlines && (level->getType() != TZP_XSHLEVEL ||
mLevel->getType() != TZP_XSHLEVEL)))
return false;
else if (!forMatchlines) {
if (level->getType() != mLevel->getType()) return false;
if (level->getType() != PLI_XSHLEVEL && level->getType() != OVL_XSHLEVEL)
return false;
}
}
return true;
}
示例8: mergeColumns
void mergeColumns(int column, int mColumn, bool isRedo)
{
MergeColumnsSessionId++;
TXsheet *xsh = TApp::instance()->getCurrentXsheet()->getXsheet();
int start, end;
xsh->getCellRange(column, start, end);
if (start > end)
return;
vector<TXshCell> cell(end - start + 1);
vector<TXshCell> mCell(end - start + 1);
xsh->getCells(start, column, cell.size(), &(cell[0]));
xsh->getCells(start, mColumn, cell.size(), &(mCell[0]));
TXshColumn *col = xsh->getColumn(column);
TXshColumn *mcol = xsh->getColumn(mColumn);
vector<MatchlinePair> matchingLevels;
std::set<TFrameId> alreadyDoneSet;
TXshSimpleLevel *level = 0, *mLevel = 0;
TXshLevelP xl;
bool areRasters = false;
std::map<TFrameId, QString> images;
for (int i = 0; i < (int)cell.size(); i++) {
if (cell[i].isEmpty() || mCell[i].isEmpty())
continue;
if (!level) {
level = cell[i].getSimpleLevel();
xl = cell[i].m_level;
}
else if (level != cell[i].getSimpleLevel()) {
MsgBox(WARNING, QObject::tr("It is not possible to perform a merging involving more than one level per column."));
return;
}
if (!mLevel)
mLevel = mCell[i].getSimpleLevel();
else if (mLevel != mCell[i].getSimpleLevel()) {
MsgBox(WARNING, QObject::tr("It is not possible to perform a merging involving more than one level per column."));
return;
}
TImageP img = cell[i].getImage(true);
TImageP match = mCell[i].getImage(false);
TFrameId fid = cell[i].m_frameId;
TFrameId mFid = mCell[i].m_frameId;
if (!img || !match)
continue;
if (alreadyDoneSet.find(fid) == alreadyDoneSet.end()) {
TRasterImageP timg = (TRasterImageP)img;
TRasterImageP tmatch = (TRasterImageP)match;
TVectorImageP vimg = (TVectorImageP)img;
TVectorImageP vmatch = (TVectorImageP)match;
if (timg) {
if (!tmatch) {
MsgBox(WARNING, QObject::tr("Only raster levels can be merged to a raster level."));
return;
}
areRasters = true;
} else if (vimg) {
if (!vmatch) {
MsgBox(WARNING, QObject::tr("Only vector levels can be merged to a vector level."));
return;
}
} else {
MsgBox(WARNING, QObject::tr("It is possible to merge only Toonz vector levels or standard raster levels."));
return;
}
QString id = "MergeColumnsUndo" + QString::number(MergeColumnsSessionId) + "-" + QString::number(fid.getNumber());
TImageCache::instance()->add(id, (timg) ? timg->cloneImage() : vimg->cloneImage());
images[fid] = id;
TAffine imgAff, matchAff;
getColumnPlacement(imgAff, xsh, start + i, column, false);
getColumnPlacement(matchAff, xsh, start + i, mColumn, false);
TAffine dpiAff = getDpiAffine(level, fid);
TAffine mdpiAff = getDpiAffine(mLevel, mFid);
matchingLevels.push_back(MatchlinePair(cell[i], imgAff * dpiAff, mCell[i], matchAff * mdpiAff));
alreadyDoneSet.insert(fid);
}
}
if (matchingLevels.empty()) {
MsgBox(WARNING, QObject::tr("It is possible to merge only Toonz vector levels or standard raster levels."));
return;
}
ToonzScene *sc = TApp::instance()->getCurrentScene()->getScene();
TXshSimpleLevel *simpleLevel = sc->getLevelSet()->getLevel(column)->getSimpleLevel();
if (!isRedo)
//.........这里部分代码省略.........
示例9: mergeCmapped
void mergeCmapped(int column, int mColumn, const QString &fullpath, bool isRedo)
{
static int MergeCmappedSessionId = 0;
MergeCmappedSessionId++;
TXsheet *xsh = TApp::instance()->getCurrentXsheet()->getXsheet();
int start, end;
int mStart, mEnd;
xsh->getCellRange(column, start, end);
xsh->getCellRange(mColumn, mStart, mEnd);
if (start > end)
return;
vector<TXshCell> cell(max(end, mEnd) - min(start, mStart) + 1);
vector<TXshCell> mCell(cell.size());
xsh->getCells(min(start, mStart), column, cell.size(), &(cell[0]));
if (mColumn != -1)
xsh->getCells(min(start, mStart), mColumn, cell.size(), &(mCell[0]));
TXshColumn *col = xsh->getColumn(column);
TXshColumn *mcol = xsh->getColumn(mColumn);
vector<MergeCmappedPair> matchingLevels;
std::map<MergedPair, TFrameId> computedMergedMap;
TXshSimpleLevel *level = 0, *mLevel = 0;
TXshLevel *xl;
std::map<TFrameId, QString> images;
double dpix = 0, dpiy = 0;
for (int i = 0; i < (int)cell.size(); i++) {
if (!cell[i].isEmpty() && dpix == 0)
((TToonzImageP)(cell[i].getImage(false)))->getDpi(dpix, dpiy);
if (!level) {
level = cell[i].getSimpleLevel();
xl = cell[i].m_level.getPointer();
}
if (!mLevel)
mLevel = mCell[i].getSimpleLevel();
}
if (!level || !mLevel)
return;
TFilePath fp(fullpath.toStdString());
TXshLevel *txl = level->getScene()->createNewLevel(level->getType(), fp.getWideName(), level->getResolution());
TXshSimpleLevel *newLevel = txl->getSimpleLevel();
newLevel->setPalette(level->getPalette());
newLevel->clonePropertiesFrom(level);
newLevel->setPath(fp);
TApp::instance()->getCurrentScene()->notifySceneChanged();
TApp::instance()->getCurrentScene()->notifyCastChange();
TApp::instance()->getCurrentXsheet()->notifyXsheetChanged();
int count = 0;
for (int i = 0; i < (int)cell.size(); i++) {
if (cell[i].isEmpty() && mCell[i].isEmpty())
continue;
TAffine imgAff, matchAff;
getColumnPlacement(imgAff, xsh, min(start, mStart) + i, column, false);
getColumnPlacement(matchAff, xsh, min(start, mStart) + i, mColumn, false);
//std::map<TFrameId, TFrameId>::iterator it;
MergedPair mp(cell[i].isEmpty() ? TFrameId() : cell[i].getFrameId(),
mCell[i].isEmpty() ? TFrameId() : mCell[i].getFrameId(),
imgAff.inv() * matchAff);
std::map<MergedPair, TFrameId>::iterator computedMergedIt = computedMergedMap.find(mp);
if (computedMergedIt != computedMergedMap.end()) {
TXshCell newCell(newLevel, computedMergedIt->second);
xsh->setCell(i, column, newCell);
cell[i] = newCell;
continue;
}
TFrameId newFid(++count); //level->getLastFid().getNumber()+1);
TDimension dim = level->getResolution();
TToonzImageP newImage;
if (cell[i].isEmpty()) {
newImage = TToonzImageP(TRasterCM32P(dim), TRect(0, 0, dim.lx - 1, dim.ly - 1));
newImage->setDpi(dpix, dpiy);
} else
newImage = (TToonzImageP)(cell[i].getImage(false)->cloneImage());
newImage->setPalette(level->getPalette());
newLevel->setFrame(newFid, newImage);
TXshCell newCell(newLevel, newFid);
xsh->setCell(i, column, newCell);
computedMergedMap[mp] = newCell.getFrameId();
//.........这里部分代码省略.........
示例10: getCurrentImageType
int TApp::getCurrentImageType() {
/*-- 現在のセルの種類に関係無く、Splineを選択中はベクタを編集できるようにする
* --*/
if (getCurrentObject()->isSpline()) return TImage::VECTOR;
TXshSimpleLevel *sl = 0;
if (getCurrentFrame()->isEditingScene()) {
int row = getCurrentFrame()->getFrame();
int col = getCurrentColumn()->getColumnIndex();
if (col < 0)
#ifdef LINETEST
return TImage::RASTER;
#else
{
int levelType = Preferences::instance()->getDefLevelType();
return (levelType == PLI_XSHLEVEL)
? TImage::VECTOR
: // RASTER image type includes both TZI_XSHLEVEL
(levelType == TZP_XSHLEVEL)
? TImage::TOONZ_RASTER
: TImage::RASTER; // and OVL_XSHLEVEL level types
}
#endif
TXsheet *xsh = getCurrentXsheet()->getXsheet();
TXshCell cell = xsh->getCell(row, col);
if (cell.isEmpty()) {
int r0, r1;
xsh->getCellRange(col, r0, r1);
if (0 <= r0 && r0 <= r1) {
/*-- Columnに格納されている一番上のLevelのTypeに合わせる--*/
cell = xsh->getCell(r0, col);
} else /*-- Columnが空の場合 --*/
{
#ifdef LINETEST
return TImage::RASTER;
#else
int levelType = Preferences::instance()->getDefLevelType();
return (levelType == PLI_XSHLEVEL)
? TImage::VECTOR
: (levelType == TZP_XSHLEVEL) ? TImage::TOONZ_RASTER
: TImage::RASTER;
#endif
}
}
sl = cell.getSimpleLevel();
} else if (getCurrentFrame()->isEditingLevel())
sl = getCurrentLevel()->getSimpleLevel();
if (sl) {
switch (sl->getType()) {
case TZP_XSHLEVEL:
return TImage::TOONZ_RASTER;
case OVL_XSHLEVEL:
return TImage::RASTER;
case PLI_XSHLEVEL:
default:
return TImage::VECTOR;
case MESH_XSHLEVEL:
return TImage::MESH;
}
}
return TImage::VECTOR;
}
示例11: while
TImage *TTool::touchImage() {
if (!m_application) return 0;
m_cellsData.clear();
m_isLevelCreated = false;
m_isFrameCreated = false;
Preferences *pref = Preferences::instance();
bool isAutoCreateEnabled = pref->isAutoCreateEnabled();
bool animationSheetEnabled = pref->isAnimationSheetEnabled();
bool isAutoStretchEnabled = pref->isAutoStretchEnabled();
TFrameHandle *currentFrame = m_application->getCurrentFrame();
TXshLevelHandle *currentLevel = m_application->getCurrentLevel();
if (currentFrame->isEditingLevel()) {
// Editing level
// no level => return 0
TXshLevel *xl = currentLevel->getLevel();
if (!xl) return 0;
TXshSimpleLevel *sl = xl->getSimpleLevel();
if (!sl || sl->isEmpty()) return 0;
TFrameId fid = currentFrame->getFid();
TImageP img = sl->getFrame(fid, true);
if (!img) {
// no drawing found
if (sl->isSubsequence() || sl->isReadOnly() || !isAutoCreateEnabled)
return 0;
// create a new drawing
img = sl->createEmptyFrame();
sl->setFrame(fid, img);
currentLevel->notifyLevelChange();
m_isFrameCreated = true;
}
return img.getPointer();
} else {
// editing xsheet
if (m_application->getCurrentObject()->isSpline()) return 0;
TSceneHandle *currentScene = m_application->getCurrentScene();
ToonzScene *scene = currentScene->getScene();
int row = currentFrame->getFrame();
int col = m_application->getCurrentColumn()->getColumnIndex();
if (col < 0) return 0;
TXsheetHandle *currentXsheet = m_application->getCurrentXsheet();
TXsheet *xsh = currentXsheet->getXsheet();
if (!xsh) return 0;
TXshCell cell = xsh->getCell(row, col);
TXshSimpleLevel *sl = cell.getSimpleLevel();
if (sl != 0) {
// current cell is not empty
if (isAutoCreateEnabled && animationSheetEnabled && row > 0 &&
xsh->getCell(row - 1, col) == xsh->getCell(row, col)) {
// animationSheet is enabled and the current cell is a "hold". We must
// create a new drawing.
// measure the hold length (starting from the current row) : r0-r1
int r0 = row, r1 = row;
if (isAutoStretchEnabled)
while (xsh->getCell(r1 + 1, col) == cell) r1++;
// find the proper frameid (possibly addisng suffix, in order to avoid a
// fid already used)
TFrameId fid = getNewFrameId(sl, row);
// create the new drawing
TImageP img = sl->createEmptyFrame();
m_isFrameCreated = true;
// insert the drawing in the level
sl->setFrame(fid, img);
// update the cell
cell = TXshCell(sl, fid);
// update the xsheet (change the current cell and possibly all the
// following "hold")
for (int r = r0; r <= r1; r++) xsh->setCell(r, col, cell);
// notify
currentXsheet->notifyXsheetChanged();
currentScene->notifyCastChange();
currentLevel->notifyLevelChange();
m_cellsData.push_back(r0);
m_cellsData.push_back(r1);
m_cellsData.push_back(0);
}
// we've found the image. return it.
return cell.getImage(true).getPointer();
}
// current cell is empty.
if (!isAutoCreateEnabled) return 0;
// get the column range
int r0, r1;
xsh->getCellRange(col, r0, r1);
if (animationSheetEnabled && r0 <= r1) {
// animation sheet enabled and not empty column. We must create a new
//.........这里部分代码省略.........