MCPcopy Create free account
hub / github.com/NatronGitHub/Natron / createReadNodeAndConnectGraph

Method createReadNodeAndConnectGraph

Engine/WriteNode.cpp:643–707  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

641}
642
643void
644WriteNodePrivate::createReadNodeAndConnectGraph(const std::string& filename)
645{
646 QString qpattern = QString::fromUtf8( filename.c_str() );
647 std::string ext = QtCompat::removeFileExtension(qpattern).toLower().toStdString();
648 NodeGroupPtr isNodeGroup = std::dynamic_pointer_cast<NodeGroup>( _publicInterface->shared_from_this() );
649 std::string readerPluginID = appPTR->getReaderPluginIDForFileType(ext);
650 NodePtr writeNode = embeddedPlugin.lock();
651
652 readBackNode.reset();
653 if ( !readerPluginID.empty() ) {
654 CreateNodeArgs args(readerPluginID, isNodeGroup );
655 args.setProperty(kCreateNodeArgsPropNoNodeGUI, true);
656 args.setProperty(kCreateNodeArgsPropOutOfProject, true);
657 args.setProperty<std::string>(kCreateNodeArgsPropNodeInitialName, "internalDecoderNode");
658 args.setProperty<bool>(kCreateNodeArgsPropAllowNonUserCreatablePlugins, true);
659
660 //Set a pre-value for the inputfile knob only if it did not exist
661 if ( !filename.empty() ) {
662 args.addParamDefaultValue<std::string>(kOfxImageEffectFileParamName, filename);
663 }
664
665 if (writeNode) {
666 double first, last;
667 writeNode->getEffectInstance()->getFrameRange_public(writeNode->getEffectInstance()->getHash(), &first, &last);
668 std::vector<int> originalRange(2);
669 originalRange[0] = (int)first;
670 originalRange[1] = (int)last;
671 args.addParamDefaultValueN<int>(kReaderParamNameOriginalFrameRange, originalRange);
672 args.addParamDefaultValue<int>(kParamFirstFrame, (int)first);
673 args.addParamDefaultValue<int>(kParamFirstFrame, (int)last);
674 }
675
676
677 readBackNode = _publicInterface->getApp()->createNode(args);
678 }
679
680 NodePtr input = inputNode.lock(), output = outputNode.lock();
681 assert(input && output);
682 bool connectOutputToInput = true;
683 if (writeNode) {
684 writeNode->replaceInput(input, 0);
685 NodePtr readNode = readBackNode.lock();
686 if (readNode) {
687
688 bool readFile = readBackKnob.lock()->getValue();
689 if (readFile) {
690 output->replaceInput(readNode, 0);
691 connectOutputToInput = false;
692 }
693 readNode->replaceInput(input, 0);
694 // sync the output colorspace of the reader from input colorspace of the writer
695
696 KnobIPtr outputWriteColorSpace = writeNode->getKnobByName(kOCIOParamOutputSpace);
697 KnobIPtr inputReadColorSpace = readNode->getKnobByName(kNatronReadNodeOCIOParamInputSpace);
698 if (inputReadColorSpace && outputWriteColorSpace) {
699 inputReadColorSpace->slaveTo(0, outputWriteColorSpace, 0);
700 }

Callers 1

knobChangedMethod · 0.80

Calls 15

removeFileExtensionFunction · 0.85
toStdStringMethod · 0.80
emptyMethod · 0.80
setPropertyMethod · 0.80
getFrameRange_publicMethod · 0.80
getEffectInstanceMethod · 0.80
replaceInputMethod · 0.80
lockMethod · 0.45
resetMethod · 0.45
getHashMethod · 0.45
createNodeMethod · 0.45

Tested by

no test coverage detected