本文整理汇总了C++中ToonzScene::getFrameCount方法的典型用法代码示例。如果您正苦于以下问题:C++ ToonzScene::getFrameCount方法的具体用法?C++ ToonzScene::getFrameCount怎么用?C++ ToonzScene::getFrameCount使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ToonzScene
的用法示例。
在下文中一共展示了ToonzScene::getFrameCount方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: onDeliver
void onDeliver()
{
if (m_error) {
m_error = false;
MsgBox(DVGui::CRITICAL, QObject::tr("There was an error saving frames for the %1 level.").arg(QString::fromStdWString(m_fp.withoutParentDir().getWideString())));
}
bool isPreview = (m_fp.getType() == "noext");
TImageCache::instance()->remove(toString(m_fp.getWideString() + L".0"));
TNotifier::instance()->notify(TSceneNameChange());
if (Preferences::instance()->isGeneratedMovieViewEnabled()) {
if (!isPreview && (Preferences::instance()->isDefaultViewerEnabled()) &&
(m_fp.getType() == "mov" || m_fp.getType() == "avi" || m_fp.getType() == "3gp")) {
QString name = QString::fromStdString(m_fp.getName());
int index;
if ((index = name.indexOf("#RENDERID")) != -1) //!quite ugly I know....
m_fp = m_fp.withName(name.left(index).toStdWString());
if (!TSystem::showDocument(m_fp)) {
QString msg(QObject::tr("It is not possible to display the file %1: no player associated with its format").arg(QString::fromStdWString(m_fp.withoutParentDir().getWideString())));
MsgBox(WARNING, msg);
}
}
else {
int r0, r1, step;
TApp *app = TApp::instance();
ToonzScene *scene = app->getCurrentScene()->getScene();
TOutputProperties &outputSettings = isPreview ? *scene->getProperties()->getPreviewProperties() : *scene->getProperties()->getOutputProperties();
outputSettings.getRange(r0, r1, step);
const TRenderSettings rs = outputSettings.getRenderSettings();
if (r0 == 0 && r1 == -1)
r0 = 0, r1 = scene->getFrameCount() - 1;
double timeStretchFactor = isPreview ? 1.0 : (double)outputSettings.getRenderSettings().m_timeStretchTo /
outputSettings.getRenderSettings().m_timeStretchFrom;
r0 = tfloor(r0 * timeStretchFactor);
r1 = tceil((r1 + 1) * timeStretchFactor) - 1;
TXsheet::SoundProperties *prop = new TXsheet::SoundProperties();
prop->m_frameRate = outputSettings.getFrameRate();
TSoundTrack *snd = app->getCurrentXsheet()->getXsheet()->makeSound(prop);
if (outputSettings.getRenderSettings().m_stereoscopic) {
assert(!isPreview);
::viewFile(m_fp.withName(m_fp.getName() + "_l"), r0 + 1, r1 + 1, step, isPreview ? rs.m_shrinkX : 1, snd, 0, false, true);
::viewFile(m_fp.withName(m_fp.getName() + "_r"), r0 + 1, r1 + 1, step, isPreview ? rs.m_shrinkX : 1, snd, 0, false, true);
} else
::viewFile(m_fp, r0 + 1, r1 + 1, step, isPreview ? rs.m_shrinkX : 1, snd, 0, false, true);
}
}
}
示例2: updateCurrentFrame
void TApp::updateCurrentFrame() {
ToonzScene *scene = m_currentScene->getScene();
m_currentFrame->setSceneFrameSize(scene->getFrameCount());
int f0, f1, step;
scene->getProperties()->getPreviewProperties()->getRange(f0, f1, step);
if (f0 > f1) {
f0 = 0;
f1 = scene->getFrameCount() - 1;
}
if (f0 != m_currentFrame->getStartFrame() ||
f1 != m_currentFrame->getEndFrame()) {
m_currentFrame->setFrameRange(f0, f1);
std::vector<TFrameId> fids;
TXshSimpleLevel *sl = m_currentLevel->getSimpleLevel();
if (sl) {
sl->getFids(fids);
m_currentFrame->setFrameIds(fids);
}
}
}
示例3: printCurrentFrame
static void printCurrentFrame() {
QPrinter printer;
QPrintDialog dialog(&printer, 0);
if (!dialog.exec()) return;
ToonzScene *scene = TApp::instance()->getCurrentScene()->getScene();
int frame = TApp::instance()->getCurrentFrame()->getFrame();
int lx = TApp::instance()
->getCurrentScene()
->getScene()
->getCurrentCamera()
->getRes()
.lx;
int ly = TApp::instance()
->getCurrentScene()
->getScene()
->getCurrentCamera()
->getRes()
.ly;
TRaster32P raster(lx, ly);
if (scene->getFrameCount() <= 0) {
// Ricordarsi di usare DvMsgBox !! (se si decommenta questo codice :) )
// QMessageBox::warning(0,"Print",tr("It is not possible to generate an
// animation\nbecause the scene is empty.", "WARNING"));
return;
}
raster->fill(scene->getProperties()->getBgColor());
scene->renderFrame(raster, frame,
TApp::instance()->getCurrentXsheet()->getXsheet());
QImage img = rasterToQImage(raster);
QPainter painter(&printer);
QRect rect = painter.viewport();
QSize size = img.size();
size.scale(rect.size(), Qt::KeepAspectRatio);
painter.setViewport(rect.x(), rect.y(), size.width(), size.height());
painter.setWindow(img.rect());
painter.drawImage(0, 0, img);
}
示例4: init
bool RenderCommand::init(bool isPreview)
{
ToonzScene *scene = TApp::instance()->getCurrentScene()->getScene();
TSceneProperties *sprop = scene->getProperties();
/*-- Preview/Renderに応じてそれぞれのSettingを取得 --*/
TOutputProperties &outputSettings = isPreview ? *sprop->getPreviewProperties() : *sprop->getOutputProperties();
outputSettings.getRange(m_r0, m_r1, m_step);
/*-- シーン全体のレンダリングの場合、m_r1をScene長に設定 --*/
if (m_r0 == 0 && m_r1 == -1) {
m_r0 = 0;
m_r1 = scene->getFrameCount() - 1;
}
if (m_r0 < 0)
m_r0 = 0;
if (m_r1 >= scene->getFrameCount())
m_r1 = scene->getFrameCount() - 1;
if (m_r1 < m_r0) {
MsgBox(WARNING, QObject::tr("The command cannot be executed because the scene is empty."));
return false;
// throw TException("empty scene");
// non so perche', ma termina il programma
// nonostante il try all'inizio
}
// Initialize the preview case
/*TRenderSettings rs = sprop->getPreviewProperties()->getRenderSettings();
TRenderSettings rso = sprop->getOutputProperties()->getRenderSettings();
rs.m_stereoscopic=true;
rs.m_stereoscopicShift=0.05;
rso.m_stereoscopic=true;
rso.m_stereoscopicShift=0.05;
sprop->getPreviewProperties()->setRenderSettings(rs);
sprop->getOutputProperties()->setRenderSettings(rso);*/
if (isPreview) {
/*-- PreviewではTimeStretchを考慮しないので、そのままフレーム値を格納してゆく --*/
m_numFrames = (int)(m_r1 - m_r0 + 1);
m_r = m_r0;
m_stepd = m_step;
m_multimediaRender = 0;
return true;
}
// Full render case
// Read the output filepath
TFilePath fp = outputSettings.getPath();
/*-- ファイル名が指定されていない場合は、シーン名を出力ファイル名にする --*/
if (fp.getWideName() == L"")
fp = fp.withName(scene->getScenePath().getName());
/*-- ラスタ画像の場合、ファイル名にフレーム番号を追加 --*/
if (TFileType::getInfo(fp) == TFileType::RASTER_IMAGE || fp.getType() == "pct" || fp.getType() == "pic" || fp.getType() == "pict") //pct e' un formato"livello" (ha i settings di quicktime) ma fatto di diversi frames
fp = fp.withFrame(TFrameId::EMPTY_FRAME);
fp = scene->decodeFilePath(fp);
if (!TFileStatus(fp.getParentDir()).doesExist()) {
try {
TFilePath parent = fp.getParentDir();
TSystem::mkDir(parent);
DvDirModel::instance()->refreshFolder(parent.getParentDir());
} catch (TException &e) {
MsgBox(WARNING, QObject::tr("It is not possible to create folder : %1").arg(QString::fromStdString(toString(e.getMessage()))));
return false;
} catch (...) {
MsgBox(WARNING, QObject::tr("It is not possible to create a folder."));
return false;
}
}
m_fp = fp;
// Retrieve camera infos
const TCamera *camera = isPreview ? scene->getCurrentPreviewCamera() : scene->getCurrentCamera();
TDimension cameraSize = camera->getRes();
TPointD cameraDpi = camera->getDpi();
// Retrieve render interval/step/times
double stretchTo = (double)outputSettings.getRenderSettings().m_timeStretchTo;
double stretchFrom = (double)outputSettings.getRenderSettings().m_timeStretchFrom;
m_timeStretchFactor = stretchTo / stretchFrom;
m_stepd = m_step / m_timeStretchFactor;
int stretchedR0 = tfloor(m_r0 * m_timeStretchFactor);
int stretchedR1 = tceil((m_r1 + 1) * m_timeStretchFactor) - 1;
m_r = stretchedR0 / m_timeStretchFactor;
m_numFrames = (stretchedR1 - stretchedR0) / m_step + 1;
// Update the multimedia render switch
m_multimediaRender = outputSettings.getMultimediaRendering();
return true;
}