NodePtr Gui::createReader() { NodePtr ret; std::vector<std::string> filters; appPTR->getSupportedReaderFileFormats(&filters); std::string pattern = popOpenFileDialog( true, filters, _imp->_lastLoadSequenceOpenedDir.toStdString(), true ); if ( !pattern.empty() ) { NodeGraph* graph = 0; if (_imp->_lastFocusedGraph) { graph = _imp->_lastFocusedGraph; } else { graph = _imp->_nodeGraphArea; } NodeCollectionPtr group = graph->getGroup(); assert(group); CreateNodeArgsPtr args(CreateNodeArgs::create(PLUGINID_NATRON_READ, group)); ret = getApp()->createReader(pattern, args); } return ret; } // Gui::createReader
void Gui::createNewViewer() { NodeGraph* graph = _imp->_lastFocusedGraph ? _imp->_lastFocusedGraph : _imp->_nodeGraphArea; assert(graph); if (!graph) { throw std::logic_error(""); } CreateNodeArgsPtr args(CreateNodeArgs::create(PLUGINID_NATRON_VIEWER_GROUP, graph->getGroup() )); args->setProperty<bool>(kCreateNodeArgsPropSubGraphOpened, false); ignore_result( getApp()->createNode(args) ); }
boost::shared_ptr<NodeCollection> Gui::getLastSelectedNodeCollection() const { NodeGraph* graph = 0; if (_imp->_lastFocusedGraph) { graph = _imp->_lastFocusedGraph; } else { graph = _imp->_nodeGraphArea; } boost::shared_ptr<NodeCollection> group = graph->getGroup(); assert(group); return group; }
NodeCollectionPtr Gui::getLastSelectedNodeCollection() const { NodeGraph* graph = 0; if (_imp->_lastFocusedGraph) { graph = _imp->_lastFocusedGraph; } else { graph = _imp->_nodeGraphArea; } NodeCollectionPtr group = graph->getGroup(); assert(group); return group; }
NodePtr Gui::createWriter() { NodePtr ret; std::vector<std::string> filters; appPTR->getSupportedWriterFileFormats(&filters); std::string file; bool useDialogForWriters = appPTR->getCurrentSettings()->isFileDialogEnabledForNewWriters(); if (useDialogForWriters) { file = popSaveFileDialog( true, filters, _imp->_lastSaveSequenceOpenedDir.toStdString(), true ); if ( file.empty() ) { return NodePtr(); } } if ( !file.empty() ) { std::string patternCpy = file; std::string path = SequenceParsing::removePath(patternCpy); _imp->_lastSaveSequenceOpenedDir = QString::fromUtf8( path.c_str() ); } NodeGraph* graph = 0; if (_imp->_lastFocusedGraph) { graph = _imp->_lastFocusedGraph; } else { graph = _imp->_nodeGraphArea; } NodeCollectionPtr group = graph->getGroup(); assert(group); CreateNodeArgsPtr args(CreateNodeArgs::create(PLUGINID_NATRON_WRITE, group)); ret = getApp()->createWriter(file, args); return ret; }
void Gui::renderSelectedNode() { NodeGraph* graph = getLastSelectedGraph(); if (!graph) { return; } NodesGuiList selectedNodes = graph->getSelectedNodes(); if ( selectedNodes.empty() ) { Dialogs::warningDialog( tr("Render").toStdString(), tr("You must select a node to render first!").toStdString() ); return; } std::list<AppInstance::RenderWork> workList; bool useStats = getApp()->isRenderStatsActionChecked(); for (NodesGuiList::const_iterator it = selectedNodes.begin(); it != selectedNodes.end(); ++it) { NodePtr internalNode = (*it)->getNode(); if (!internalNode) { continue; } EffectInstPtr effect = internalNode->getEffectInstance(); if (!effect) { continue; } if ( effect->isWriter() ) { if ( !effect->areKnobsFrozen() ) { //if ((*it)->getNode()->is) ///if the node is a writer, just use it to render! AppInstance::RenderWork w; w.writer = dynamic_cast<OutputEffectInstance*>( effect.get() ); assert(w.writer); w.firstFrame = INT_MIN; w.lastFrame = INT_MAX; w.frameStep = INT_MIN; w.useRenderStats = useStats; workList.push_back(w); } } else { if (selectedNodes.size() == 1) { ///create a node and connect it to the node and use it to render #ifndef NATRON_ENABLE_IO_META_NODES NodePtr writer = createWriter(); #else NodeGraph* graph = selectedNodes.front()->getDagGui(); NodePtr writer = getApp()->createWriter( "", eCreateNodeReasonInternal, graph->getGroup() ); #endif if (writer) { AppInstance::RenderWork w; w.writer = dynamic_cast<OutputEffectInstance*>( writer->getEffectInstance().get() ); assert(w.writer); w.firstFrame = INT_MIN; w.lastFrame = INT_MAX; w.frameStep = INT_MIN; w.useRenderStats = useStats; workList.push_back(w); } } } } _imp->_appInstance->startWritersRendering(false, workList); } // Gui::renderSelectedNode