Q100385: उपयोगकर्ता क्रियाओं के आधार पर कस्टम कार्यक्षमता जोड़ने के लिए पायथन का उपयोग करके Katana में कॉलबैक और इवेंट हैंडलर्स को कैसे पंजीकृत करें

सारांश

यह आलेख बताता है कि Katana में कॉलबैक या ईवेंट हैंडलर्स को कैसे पंजीकृत किया जाए, और उपलब्ध कॉलबैक और ईवेंट प्रकारों और उनके कॉलबैक फ़ंक्शन के लिए अपेक्षित इनपुट तर्कों के बारे में जानकारी कहां मिलेगी, इसके बारे में विवरण देता है।
कॉलबैक और इवेंट के लिए दस्तावेज़ीकरण Katana डेवलपर गाइड में भी पाया जा सकता है। नीचे दिया गया लेख इनके कार्यान्वयन के कुछ व्यावहारिक उदाहरण देता है।

अधिक जानकारी

कॉलबैक, Katana वातावरण में जोड़ा गया पायथन कोड का एक टुकड़ा है जो Katana में विभिन्न घटनाओं (जैसे नोड बनाना या स्क्रिप्ट लोड करना) के होने पर स्वचालित रूप से चलता है।

इवेंट एक ऐसी क्रिया है जो उपयोगकर्ता की किसी क्रिया या किसी अन्य स्रोत, जैसे माउस पर क्लिक या किसी कुंजी के दबाने के परिणामस्वरूप घटित होती है। इवेंट हैंडलर एक रूटीन है जिसका उपयोग इवेंट से निपटने के लिए किया जाता है, जिससे प्रोग्रामर को ऐसा कोड लिखने की अनुमति मिलती है जो इवेंट के घटित होने पर निष्पादित होगा।

कुछ स्थितियों में (जैसे कि किसी फ़ाइल को सहेजने से ठीक पहले) Katana द्वारा कॉलबैक को ट्रिगर किया जाता है और कॉलिंग कोड आगे बढ़ने से पहले कॉलबैक के निष्पादित होने की प्रतीक्षा करता है, जिससे उपयोगकर्ता को, उदाहरण के लिए, प्रोजेक्ट को सहेजने से पहले उसे संशोधित करने की अनुमति मिलती है।

इसके विपरीत, इवेंट्स को कतारबद्ध किया जाता है और Katana के इवेंट सिस्टम द्वारा "बाद में" संसाधित किया जाता है। इसका मतलब है कि कॉलबैक ज़्यादा तुरंत होते हैं, लेकिन आमतौर पर बहुत तेज़ भी होने चाहिए, अन्यथा उनके काम करते समय UI के फ़्रीज़ होने का ख़तरा रहता है।

कॉलबैक और इवेंट हैंडलर दोनों ही कई स्थितियों में उपयोगी होते हैं, उदाहरण के लिए, नया Katana प्रोजेक्ट बनाते समय प्रोजेक्ट सेटिंग्स को बदलने के लिए या कुछ नोड पैरामीटर्स के मूल्य परिवर्तनों पर प्रतिक्रिया करने के लिए।

कॉलबैक

Katana में, विभिन्न स्थितियों के लिए कॉलबैक उपलब्ध हैं, जैसे कि सॉफ़्टवेयर लॉन्च किया जा रहा हो, Katana प्रोजेक्ट लोड किया जा रहा हो या नोड बनाया जा रहा हो। उपलब्ध कॉलबैक की पूरी सूची देखने के लिए, कृपया पायथन टैब में निम्नलिखित कोड चलाएँ:

from Katana import Callbacks
print(dir(Callbacks.Type))


यह जानने के लिए कि प्रत्येक कॉलबैक प्रकार में कौन से कीवर्ड तर्क पास किए जाते हैं, आप निम्नलिखित कॉलबैक पंजीकृत कर सकते हैं जो कॉल किए जाने पर इनपुट तर्कों को प्रिंट करेगा:

def Hello(**kwargs):
for i in kwargs.keys():
print(i)

from Katana import Callbacks
Callbacks.addCallback(Callbacks.Type.onSceneLoad, Hello)


इन तर्कों को कॉलबैक फ़ंक्शन के भीतर एक्सेस किया जा सकता है, उदाहरण के लिए निम्नानुसार:

def Hello(**kwargs):
   print(kwargs.get('filename'))

from Katana import Callbacks Callbacks.addCallback(Callbacks.Type.onSceneLoad, Hello)

इवेंट हैंडलर्स

Katana में कई अलग-अलग प्रकार के इवेंट हैं जिन्हें पंजीकृत हैंडलर सुन सकते हैं। सभी उपलब्ध इवेंट प्रकारों की सूची देखने के लिए, कृपया पायथन टैब में निम्नलिखित चलाएँ:

 from Katana import Utils
print ( sorted ( Utils . EventModule . GetAllRegisteredEventTypes ()))

प्रत्येक इवेंट प्रकार के लिए कौन से इनपुट तर्क मौजूद हैं, यह जानने के लिए आप किसी विशिष्ट इवेंट के लिए निम्नलिखित हैंडलर पंजीकृत कर सकते हैं। जब इवेंट ट्रिगर होता है, तो हैंडलर तर्कों को प्रिंट कर देगा। निम्नलिखित एक उदाहरण है जो "node_create" इवेंट प्रकार के लिए इनपुट तर्कों को प्रिंट करता है:

def node_CreateCallback(eventType, eventID, **kwargs):
    for i in kwargs.keys():
        print(i)

Utils.EventModule.RegisterEventHandler(node_CreateCallback, 'node_create')


एक बार इनपुट तर्क ज्ञात हो जाने पर, उन्हें इवेंट हैंडलर फ़ंक्शन के भीतर इस्तेमाल किया जा सकता है। नीचे एक उदाहरण इवेंट हैंडलर दिया गया है जिसे उपयोगकर्ता की प्राथमिकताओं में बदलावों को सुनने के लिए पंजीकृत किया जा सकता है, और जो प्राथमिकता का नाम और उसका नया मान प्रिंट करेगा:

def PrefChangedCallback(eventType, eventID, prefKey, prefValue):
    print(prefKey, "preference changed to:", prefValue)

Utils.EventModule.RegisterEventHandler(PrefChangedCallback, 'pref_changed')

नोड पैरामीटर परिवर्तनों के लिए इवेंट हैंडलर

उदाहरण के लिए, यदि किसी इवेंट हैंडलर फ़ंक्शन को केवल किसी विशिष्ट नोड पैरामीटर में परिवर्तन पर प्रतिक्रिया देनी है, तो उसे parameter_finalizeValue इवेंट सुनने के लिए पंजीकृत किया जा सकता है। बदले गए पैरामीटर का नाम हैंडलर फ़ंक्शन के भीतर जाँचा जा सकता है ताकि यह निर्धारित किया जा सके कि वह प्रासंगिक है या नहीं:

def myParamCallback(eventType, eventID, node, param):
    if (node.getName() == "CameraCreate") and (param.getName() == 'fov'):
        print("FOV for the following camera changed to " + repr(param.getValue(0)) + ": " + node.getParameter('name').getValue(0))

Utils.EventModule.RegisterEventHandler(myParamCallback, "parameter_finalizeValue")

इवेंट हैंडलर ज़रूरी नहीं कि इवेंट के कतार में लगने के तुरंत बाद ही निष्पादित हो जाएँ। अगर कोई कोड किसी खास इवेंट के प्रोसेस होने और इवेंट हैंडलर के निष्पादित होने पर निर्भर करता है, तो निम्नलिखित को कॉल करना ज़रूरी हो सकता है:

Utils.EventModule.ProcessAllEvents() 


कॉलबैक और इवेंट हैंडलर्स के बारे में अधिक जानकारी के लिए, कृपया हमारे Katana डेवलपर गाइड के कॉलबैक और इवेंट अनुभाग को भी देखें।

Katana स्टार्टअप पर कॉलबैक या इवेंट हैंडलर पंजीकृत करना

Katana प्रारंभ होने पर कॉलबैक या ईवेंट हैंडलर स्वचालित रूप से पंजीकृत हो सकते हैं, जैसा कि नीचे बताया गया है:

  • उन सभी क्रियाओं को परिभाषित करें जिन्हें आप चाहते हैं कि आपका कॉलबैक या इवेंट हैंडलर फ़ंक्शन एक ही पायथन फ़ंक्शन में निष्पादित करे और इसे नीचे दिए गए उदाहरण कोड में दिखाए अनुसार पंजीकृत करें:
from Katana import Utils, Callbacks

def PrefChangedCallback(eventType, eventID, prefKey, prefValue):
    print(prefKey, "preference changed to:", prefValue)

Utils.EventModule.RegisterEventHandler(PrefChangedCallback, 'pref_changed')
def Hello(**kwargs): print(kwargs.get('filename'))
Callbacks.addCallback(Callbacks.Type.onSceneLoad, Hello) 

  • इसे कॉपी करके टेक्स्ट एडिटर में पेस्ट करें और फ़ाइल को सेव करें।

  • फ़ाइल का नाम बदलकर init.py कर दें और सुनिश्चित करें कि फ़ाइल एक्सटेंशन आपके फ़ाइल ब्राउज़र में दिखाई दे रहे हैं, यह सत्यापित करने के लिए है कि फ़ाइल एक्सटेंशन .py है और .txt या इससे भिन्न नहीं है।

  • फ़ाइल को या तो .katana फ़ोल्डर में या स्टार्टअप फ़ोल्डर में $KATANA_RESOURCES पर्यावरण चर में परिभाषित पथ के अंतर्गत रखें।


KATANA _RESOURCES पर अधिक जानकारी के लिए, कृपया Katana Install Guide में संबंधित विषय देखें।

अगली बार जब Katana लॉन्च किया जाएगा, तो निर्दिष्ट क्रिया होने पर कॉलबैक फ़ंक्शन निष्पादित होगा और संबंधित ईवेंट के कतारबद्ध और संसाधित होने पर इवेंट हैंडलर फ़ंक्शन निष्पादित होगा। ऊपर दिए गए उदाहरण में, जब कोई वरीयता बदली जाती है या Katana प्रोजेक्ट लोड किया जाता है, तो नया वरीयता मान या प्रोजेक्ट फ़ाइल पथ क्रमशः टर्मिनल पर प्रिंट हो जाता है।

आगे की सहायता

कॉलबैक और इवेंट हैंडलर्स के बारे में अधिक जानकारी के लिए, कृपया Katana डेवलपर गाइड के कॉलबैक और इवेंट अनुभाग देखें।

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


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

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

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