void RenderCommand::doRender(bool isPreview) { bool isWritable = true; bool isMultiFrame; /*-- 初期化処理。フレーム範囲の計算や、Renderの場合はOutputSettingsから保存先パスも作る --*/ if (!init(isPreview)) return; if (m_fp.getDots() == ".") { isMultiFrame = false; TFileStatus fs(m_fp); if (fs.doesExist()) isWritable = fs.isWritable(); } else { isMultiFrame = true; TFilePath dir = m_fp.getParentDir(); QDir qDir(QString::fromStdWString(dir.getWideString())); QString levelName = QRegExp::escape(QString::fromStdWString(m_fp.getWideName())); QString levelType = QString::fromStdString(m_fp.getType()); QString exp(levelName + ".[0-9]{1,4}." + levelType); QRegExp regExp(exp); QStringList list = qDir.entryList(QDir::Files); QStringList livelFrames = list.filter(regExp); int i; for (i = 0; i < livelFrames.size() && isWritable; i++) { TFilePath frame = dir + TFilePath(livelFrames[i].toStdWString()); if (frame.isEmpty() || !frame.isAbsolute()) continue; TFileStatus fs(frame); isWritable = fs.isWritable(); } } if (!isWritable) { string str = "It is not possible to write the output: the file"; str += isMultiFrame ? "s are read only." : " is read only."; MsgBox(WARNING, QString::fromStdString(str)); return; } ToonzScene *scene = 0; TCamera *camera = 0; try { /*-- Xsheetノードに繋がっている各ラインごとに計算するモード。 MultipleRender で Schematic Flows または Fx Schematic Terminal Nodes が選択されている場合 --*/ if (m_multimediaRender && m_fp.getType() != "swf") //swf is not currently supported on multimedia... multimediaRender(); else if (!isPreview && m_fp.getType() == "swf") flashRender(); else /*-- 通常のRendering --*/ rasterRender(isPreview); } catch (TException &e) { MsgBox(WARNING, QString::fromStdString(toString(e.getMessage()))); } catch (...) { MsgBox(WARNING, QObject::tr("It is not possible to complete the rendering.")); } }
bool TFilePath::isAncestorOf(const TFilePath &fp) const { size_t len = m_path.length(); if (len == 0) { // il punto e' antenato di tutti i path non assoluti return !fp.isAbsolute(); } return len < fp.m_path.length() // l'antenato deve essere piu' corto && (m_path[len - 1] == slash // deve finire con slash se e' "/" o "C:\" || fp.m_path[len] == slash) // negli altri casi ci deve essere uno slash subito dopo && #ifdef WIN32 toLower(m_path) == toLower(fp.m_path.substr(0, len)); #else m_path == fp.m_path.substr(0, len); #endif }
TFilePath TMyPaintBrushStyle::decodePath(const TFilePath &path) const { if (path.isAbsolute()) return path; if (m_currentScene) { TFilePath p = m_currentScene->decodeFilePath(path); TFileStatus fs(p); if (fs.doesExist() && !fs.isDirectory()) return p; } TFilePathSet paths = getBrushesDirs(); for(TFilePathSet::iterator i = paths.begin(); i != paths.end(); ++i) { TFilePath p = *i + path; TFileStatus fs(p); if (fs.doesExist() && !fs.isDirectory()) return p; } return path; }
void ProjectCreatePopup::createProject() { if (!IoCmd::saveSceneIfNeeded(QObject::tr("Create project"))) return; #ifdef LINETEST TnzCamera *camera = TnzCamera::instance(); if (camera->isCameraConnected()) camera->cameraDisconnect(); #endif QFileInfo fi(m_nameFld->text()); if (!isValidFileName(fi.baseName())) { error( tr("Project Name cannot be empty or contain any of the following " "characters:\n \\ / : * ? \" < > |")); return; } TProjectManager *pm = TProjectManager::instance(); TFilePath projectName = TFilePath(m_nameFld->text().toStdWString()); if (projectName == TFilePath()) { return; } if (projectName.isAbsolute()) { error(tr("Bad project name: '%1' looks like an absolute file path") .arg(m_nameFld->text())); return; } if (pm->getProjectPathByName(projectName) != TFilePath()) { error(tr("Project '%1' already exists").arg(m_nameFld->text())); // project already exists return; } TFilePath currentProjectRoot; DvDirModelFileFolderNode *node = dynamic_cast<DvDirModelFileFolderNode *>(m_treeView->getCurrentNode()); if (node) currentProjectRoot = node->getPath(); else currentProjectRoot = pm->getCurrentProjectRoot(); TFilePath projectFolder = currentProjectRoot + projectName; TFilePath projectPath = pm->projectFolderToProjectPath(projectFolder); TProject *project = new TProject(); updateProjectFromFields(project); TProjectP currentProject = pm->getCurrentProject(); project->setSceneProperties(currentProject->getSceneProperties()); try { bool isSaved = project->save(projectPath); if (!isSaved) DVGui::error(tr("It is not possible to create the %1 project.") .arg(toQString(projectPath))); } catch (TSystemException se) { DVGui::warning(QString::fromStdWString(se.getMessage())); return; } pm->setCurrentProjectPath(projectPath); IoCmd::newScene(); DvDirModel::instance()->refreshFolder(projectFolder.getParentDir()); accept(); }