सारांश
ऑप्स संचालन के निर्माण खंड हैं जो Katana में 3डी दृश्य डेटा बनाते और हेरफेर करते हैं। ऑप्स प्लग-इन के उदाहरण हैं जिन्हें सी++ में लिखे गए ओप टाइप्स कहा जाता है। वे कटाना के ऑप एपीआई Katana उपयोग करके विभिन्न ऑपरेशन कर सकते हैं, दृश्य ग्राफ़ में हेरफेर कर सकते हैं और विशेषताओं को संशोधित कर सकते हैं ।
यह आलेख $KATANA_ROOT/plugins/Src/Ops के अंतर्गत पाए गए HelloWorld उदाहरण Op के आधार पर एक कस्टम Op को लिखने, संकलित करने और परीक्षण करने का चरण-दर-चरण उदाहरण प्रदान करता है ।
अधिक जानकारी
कस्टम Op बनाने से पहले, $KATANA_ROOT/plugins/Src/Ops में स्थित उदाहरण Ops पर एक नज़र डालना मददगार हो सकता है । यह ट्यूटोरियल विशेष रूप से हैलोवर्ल्ड उदाहरण ऑप पर आधारित है।
निम्नलिखित चरण वर्णन करते हैं कि एक ऐसा ऑप बनाने के लिए इस ऑप के स्रोत कोड को कैसे संशोधित किया जाए जो दृश्य ग्राफ़ में स्थानों पर विशेषताओं को पढ़ और सेट कर सके।
- इस प्रकार पढ़ने के लिए $KATANA_ROOT/plugins/Src/Ops/HelloWorld/src/HelloWorldOp.cpp में
cook()
फ़ंक्शन को संशोधित करें :
static void cook(Foundry::Katana::GeolibCookInterface& interface)
{
FnAttribute::StringAttribute typeAttr = interface.getAttr("type");
interface.setAttr("testType", typeAttr);
if (interface.atRoot())
{
interface.setAttr("hello", FnAttribute::StringAttribute("world!"));
}
}
- उदाहरण ऑप प्लगइन बनाने के लिए, कृपया $KATANA_ROOT/plugins/Src/README.md में दिए गए निर्देशों का पालन करें।
सुनिश्चित करें कि स्रोत फ़ाइल पथcmake
कमांड में सही Katana संस्करण की ओर इशारा कर रहा है।cmake
कमांड में -DCMAKE_PREFIX_PATH को शामिल करना आवश्यक नहीं है, क्योंकि यह अन्य Op उदाहरणों के लिए निर्भरता निर्दिष्ट कर रहा है, जिनमें इस मामले में हमारी रुचि नहीं है।
- एक बार प्लग-इन बन जाने और इंस्टॉल हो जाने के बाद, सुनिश्चित करें कि इंस्टॉल निर्देशिका KATANA _RESOURCES का हिस्सा है। README.md में दिए गए आदेश का उपयोग करते हुए, MyKatanaResources निर्देशिका को KATANA _RESOURCES में शामिल किया जाना चाहिए।
- Katana लॉन्च करें, एक कैमराक्रिएट नोड बनाएं और उससे एक जेनेरिकऑप नोड कनेक्ट करें।
- जेनेरिकऑप नोड के ऑपटाइप पैरामीटर को "हैलोवर्ल्ड" पर सेट करें। इसका परिणाम यह होना चाहिए कि प्रत्येक स्थान पर testType नाम की एक विशेषता सेट की जाए और विशेषता का मान स्थान का प्रकार होगा। इसके अतिरिक्त, "हैलो" नामक एक विशेषता /root पर "world!" के मान पर सेट की जाएगी।
कुक cook()
फ़ंक्शन को किसी भी विशेषता को पढ़ने या सेट करने के लिए संशोधित किया जा सकता है, जिसमें आप किसी स्थान पर रुचि रखते हैं, या कई अन्य ऑपरेशन कर सकते हैं।
कस्टम ऑप्स में उपयोग किए जा सकने वाले अधिक कार्यों के लिए, कृपया कुक इंटरफ़ेस (सी++) पर Katana डेवलपर गाइड देखें ।
नोट: ओप डिफ़ॉल्ट रूप से सभी स्थानों पर चलता है (जैसा कि जेनेरिकऑप नोड में अप्लाईव्हेयर पैरामीटर द्वारा निर्दिष्ट किया गया है), इसलिए यह प्रत्येक दृश्य ग्राफ़ स्थान पर निष्पादित होगा। उपरोक्त उदाहरण में, इसके परिणामस्वरूप सभी स्थानों पर टेस्टटाइप विशेषता सेट की जा रही है।
क्योंकि यह हमेशा वांछनीय नहीं होता है, ऊपर दिए गए उदाहरण में एक if स्टेटमेंट भी शामिल है जो यह जाँचता है कि इंटरफ़ेस atRoot()
है - इसके परिणामस्वरूप if ब्लॉक के अंदर स्टेटमेंट केवल तभी निष्पादित होंगे जब Op सबसे ऊपरी स्थान पर चल रहा हो, इसे पकाया गया हो। पर, और आप ओपी को उस शीर्ष स्थान के नीचे पूरे दृश्य ग्राफ़ को पार करने से रोकने के लिए if कथन के बाद interface.stopChildTraversal()
का उपयोग कर सकते हैं।
यदि आप अपने Op का उपयोग करने के लिए एक कस्टम नोड प्रकार बनाना चाहते हैं, तो कृपया $KATANA_ROOT/plugins/Src/Ops/Messer/RegisterMesserNode.py के अंतर्गत पाए जाने वाले NodeTypeBuilder-आधारित नोड प्रकार का उदाहरण देखें।
कुछ NodeTypeBuilder API फ़ंक्शन Katana डेवलपर गाइड में प्रलेखित हैं।
यदि आप इन चरणों के साथ किसी समस्या का सामना कर रहे हैं, तो कृपया एक सहायता टिकट खोलें और हमें बताएं कि आप किस समस्या का सामना कर रहे हैं और आपने अब तक क्या समस्या निवारण कदम उठाए हैं।
समर्थन टिकट कैसे खोलें के बारे में अधिक जानकारी के लिए, कृपया Q100064 देखें : समर्थन टिकट कैसे बढ़ाएं ।
हम चाहते हैं कि खेद व्यक्त करते हैं
कृपया हमें बताएँ कि