Q100351: समय से संबंधित मानों पर प्रतिक्रिया करने के लिए C++ Op के अंदर से सिस्टम ग्राफ़ स्टेट डेटा को कैसे क्वेरी करें?

सारांश

यह आलेख बताएगा कि वर्तमान ग्राफ स्थिति के सिस्टम तर्कों, जैसे वर्तमान फ्रेम समय या नमूनों की संख्या, को कस्टम ऑप से कैसे एक्सेस किया जा सकता है।

यदि आप कस्टम Op लिखने और संकलित करने के बारे में जानकारी खोज रहे हैं, तो कृपया Q100326 देखें: अपना पहला कस्टम Op कैसे लिखें और परीक्षण करें

अधिक जानकारी

कस्टम ऑप्स को लागू करते समय एक आम बाधा यह है कि वर्तमान समय ( shutterOpen या shutterClose मान) या समय नमूनों की संख्या लौटाने वाले कुक इंटरफ़ेस फ़ंक्शन, सही परिणाम नहीं लौटा सकते हैं, जब तक कि वह नोड जिसकी ऑप श्रृंखला का कस्टम ऑप हिस्सा है, सही ढंग से सेट न हो।

उदाहरण के लिए, यह निम्नलिखित कॉल के लिए प्रासंगिक है:

Foundry ::Katana::GetCurrentTime(इंटरफ़ेस)
Foundry ::Katana::GetShutterOpen(इंटरफ़ेस)
Foundry ::Katana::GetShutterClose(इंटरफ़ेस)
Foundry ::Katana::GetNumSamples(इंटरफ़ेस)

इन फ़ंक्शन से अपेक्षित रिटर्न मान प्राप्त करने के लिए, सिस्टम ऑप आर्ग्स जोड़ना आवश्यक है। आमतौर पर इन्हें प्रदान करना नोड (या interface.execOp के माध्यम से होस्टिंग ऑप) की ज़िम्मेदारी होती है।

यदि Op को GenericOp नोड के माध्यम से इंस्टैंशिएट किया गया है, तो इसके addSystemOpArgs पैरामीटर को Yes पर सेट करने की आवश्यकता है।

यदि Op को किसी कस्टम NodeTypeBuilder के माध्यम से पंजीकृत किया गया है, तो buildOpChain() को भेजे गए इंटरफ़ेस ऑब्जेक्ट में एक addOpSystemArgs() विधि होती है जो Op args में एक 'system' GroupAttribute जोड़ देगी। फिर Op इसे प्राप्त कर सकता है और इसका उपयोग कर सकता है।

नोट: प्रासंगिक NodeTypeBuilder फ़ंक्शन Katana डेवलपर गाइड में पाया जा सकता है।

उदाहरण कार्यान्वयन

संलग्न एक सरल NodeTypeBuilder आधारित नोड प्रकार का उदाहरण है , जो /root/world/geo/hello_world पर hello world प्रकार का एक एकल स्थान बनाता है , और उस पर HelloWorld Op चलाता है। (इस उदाहरण में /root पर कुछ विशेषताएँ सेट की गई हैं )।

उपयोग के लिए तैयार होने से पहले, Op स्रोत को संकलित करना आवश्यक है। ऐसा करने के लिए, कृपया Katana स्थापना निर्देशिका में शामिल $KATANA_ROOT/plugins/Src/README.md फ़ाइल में दिए गए निर्देशों का पालन करें।

अधिक विस्तृत मार्गदर्शन के लिए, कृपया Q100326 देखें: अपना पहला कस्टम Op कैसे लिखें और परीक्षण करें

एक बार जब C++ स्रोत को .so या .dll फ़ाइल में संकलित कर लिया जाता है, तो इस फ़ाइल को KATANA _RESOURCES निर्देशिका के Ops उप-फ़ोल्डर में रखा जाना चाहिए, और NTB.py को KATANA _RESOURCES निर्देशिका के Plugins उप-फ़ोल्डर में रखा जाना चाहिए।

KATANA _RESOURCES को स्थापित करने के बारे में अधिक जानकारी के लिए, कृपया Katana स्थापना मार्गदर्शिका देखें।

नोड के Op श्रृंखला में Op जोड़ते समय 'system' Op arg जोड़ने के लिए प्रासंगिक कोड निम्नलिखित है:

opArgs = FnAttribute.GroupBuilder()
interface.addOpSystemArgs(opArgs)

interface.appendOp('HelloWorld', opArgs.build())

यह निम्नलिखित कार्य करने के बराबर है:

graphState = interface.getGraphState()
opArgs = FnAttribute.GroupBuilder()
opArgs.set('system', graphState.getOpSystemArgs())
interface.appendOp('HelloWorld', opArgs.build())

'HelloWorld' ऑपरेटर इस तक पहुंच सकता है और, उदाहरण के लिए, रूट पर एक विशेषता के रूप में वर्तमान समय सेट कर सकता है:

static void cook(Foundry::Katana::GeolibCookInterface& interface)
{
    if (interface.atRoot())
    {
        interface.setAttr("Hello", FnAttribute::StringAttribute("World!"));
        interface.setAttr("CurrentTime", FnAttribute::FloatAttribute(Foundry::Katana::GetCurrentTime(interface)));
    }
    interface.stopChildTraversal();
}

तकनीकी स्पष्टीकरण

GraphState::getOpSystemArgs() एक समूह लौटाता है जिसमें timeslice समूह ( currentTime , shutterOpen , shutterClose , numSamples ) और variables समूह (ग्राफ़ स्टेट वेरिएबल) शामिल होते हैं। इस समूह को 'system' Op arg के रूप में सेट किया जाना चाहिए; GetCurrentTime और GetGraphStateVariables जैसे CookInterface कॉल सुविधाजनक फ़ंक्शन हैं जो getOpArg("system.[...]") कॉल करते हैं।

आगे की सहायता

यदि आपको इस आलेख में दी गई जानकारी से कोई समस्या आ रही है, तो कृपया एक सहायता टिकट खोलें और हमें बताएं कि आपको क्या समस्या आ रही है तथा आपने अब तक क्या समस्या निवारण कदम उठाए हैं।

समर्थन टिकट खोलने के तरीके के बारे में अधिक जानकारी के लिए, कृपया Q100064: समर्थन टिकट कैसे खोलें देखें

संलग्नक

हम चाहते हैं कि खेद व्यक्त करते हैं

कृपया हमें बताएँ कि