void TSystem::renameFileOrLevel_throw(const TFilePath &dst, const TFilePath &src, bool renamePalette) { if (renamePalette && ((src.getType() == "tlv") || (src.getType() == "tzp") || (src.getType() == "tzu"))) { // Special case: since renames cannot be 'grouped' in the UI, palettes are // automatically // renamed here if required const char *type = (src.getType() == "tlv") ? "tpl" : "plt"; TFilePath srcpltname(src.withNoFrame().withType(type)); TFilePath dstpltname(dst.withNoFrame().withType(type)); if (TSystem::doesExistFileOrLevel(src) && TSystem::doesExistFileOrLevel(srcpltname)) TSystem::renameFile(dstpltname, srcpltname, false); } if (src.isLevelName()) { TFilePathSet files; files = TSystem::readDirectory(src.getParentDir(), false); for (TFilePathSet::iterator it = files.begin(); it != files.end(); it++) { if (it->getLevelName() == src.getLevelName()) { TFilePath src1 = *it; TFilePath dst1 = dst.withFrame(it->getFrame()); TSystem::renameFile(dst1, src1); } } } else TSystem::renameFile(dst, src); }
/*! to retrieve the both lists with groupFrames option = on and off. */ void TSystem::readDirectory(TFilePathSet &groupFpSet, TFilePathSet &allFpSet, const TFilePath &path) { if (!TFileStatus(path).isDirectory()) throw TSystemException(path, " is not a directory"); std::set<TFilePath, CaselessFilepathLess> fileSet_group; std::set<TFilePath, CaselessFilepathLess> fileSet_all; QStringList fil = QDir(toQString(path)) .entryList(QDir::Files | QDir::NoDotAndDotDot | QDir::Readable); if (fil.size() == 0) return; for (int i = 0; i < fil.size(); i++) { QString fi = fil.at(i); TFilePath son = path + TFilePath(fi.toStdWString()); // store all file paths fileSet_all.insert(son); // in case of the sequencial files if (son.getDots() == "..") son = son.withFrame(); // store the group. insersion avoids duplication of the item fileSet_group.insert(son); } groupFpSet.insert(groupFpSet.end(), fileSet_group.begin(), fileSet_group.end()); allFpSet.insert(allFpSet.end(), fileSet_all.begin(), fileSet_all.end()); }
void TSystem::copyFileOrLevel_throw(const TFilePath &dst, const TFilePath &src) { if (src.isLevelName()) { TFilePathSet files; files = TSystem::readDirectory(src.getParentDir(), false); TFilePathSet::iterator it, end = files.end(); for (it = files.begin(); it != end; ++it) { if (it->getLevelNameW() == src.getLevelNameW()) { TFilePath src1 = *it; TFilePath dst1 = dst.withFrame(it->getFrame()); TSystem::copyFile(dst1, src1); } } } else TSystem::copyFile(dst, src); }
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; }