एक टिकट बनाएं
अनुसरण करें

Q100385: कटाना में कॉलबैक और इवेंट हैंडलर

सारांश

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

अधिक जानकारी

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

एक घटना एक ऐसी कार्रवाई है जो उपयोगकर्ता कार्रवाई या किसी अन्य स्रोत के परिणामस्वरूप होती है, जैसे कि माउस क्लिक किया जा रहा है, या एक कुंजी दबाया जा रहा है। एक ईवेंट हैंडलर एक रूटीन है, जिसका उपयोग ईवेंट से निपटने के लिए किया जाता है, जो प्रोग्रामर को कोड लिखने की अनुमति देता है, जिसे इवेंट होने पर निष्पादित किया जाएगा ( https://www.computerhope.com/jargon.htm से परिभाषाएँ)।

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

इसके विपरीत, घटनाओं को कतारबद्ध किया जाता है और कटाना की घटना प्रणाली द्वारा "बाद में" संसाधित किया जाता है। इसका मतलब है कि कॉलबैक अधिक तत्काल हैं, लेकिन आम तौर पर बहुत तेज होना चाहिए या वे काम करते समय यूआई को फ्रीज करने का जोखिम उठाते हैं।

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

कॉलबैक

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

from Katana import Callbacks
print dir(Callbacks.Type)


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

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


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

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

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

इवेंट हैंडलर

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

import Utils.EventModule
print Utils.EventModule.GetAllRegisteredEventTypes()

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

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


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

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

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

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

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

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() 


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

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


कटाना शुरू होने पर कॉलबैक या ईवेंट हैंडलर अपने आप पंजीकृत हो सकते हैं:

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

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 ऑनलाइन सहायता में संबंधित विषय देखें।

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

अन्य सहायता


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


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

क्या यह लेख उपयोगी था?
/

We're sorry to hear that!

Please tell us why.
2 में से 2 के लिए उपयोगी रहा

टिप्पणियां