ड्राइवर चर के रूप में किसी ऑब्जेक्ट का उपयोग करें

Dec 04 2020

मेरे पास एक ड्राइवर के लिए एक फ़ंक्शन है जो 2 ऑब्जेक्ट्स को तर्कों के रूप में अपेक्षा करता है, और मुझे ऑब्जेक्ट आईडी के रूप में वेरिएबल सेट करने का एक तरीका नहीं मिल सकता है, उस ऑब्जेक्ट का केवल एक गुण है। संभव है कि?

जवाब

3 lemon Dec 05 2020 at 14:37

आप ड्राइवर को डेटा पथ पर सेट कर सकते हैं और उसके नाम से ऑब्जेक्ट प्राप्त करने की कीमत पर पथ के रूप में "नाम" का उपयोग कर सकते हैं।

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

4 batFINGER Dec 05 2020 at 17:50

डिप्सग्राफ का उपयोग करना

2.8 के अपग्रेड के बाद से डिप्सग्राफ एक ड्राइवर के स्थानीय लोगों का सदस्य है, जैसा कि चर हैं। का उत्तर देखें

ड्राइवर चर के लिए विभिन्न प्रकार के डेटा ब्लॉक का उपयोग कैसे करें?

एक परीक्षण ड्राइवर की स्थापना।

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

def test(*args, depsgraph=None, **kwargs):
    for arg in args:
        print(arg)
    print(depsgraph)   
    return -1 # a simple val to indicate working

<bpy_struct, Object("Cube") at 0x7f62fcbefa08, evaluated>
<bpy_struct, Object("Lamp") at 0x7f62fcbf0008, evaluated>
<bpy_struct, Depsgraph at 0x7f62faba6c08>

डिप्सग्राफ में अन्य सभी वस्तुओं के न्यूनतम वैश्विक जेड को वापस करने का एक उदाहरण। ऑब्जेक्ट नामों के लिए @lemon की विधि का उपयोग किया जा सकता है। अन्य विकल्प कस्टम संपत्ति या नाम उपसर्ग प्रत्यय के माध्यम से उन्हें टैग किया जा सकता है।

def test(self, *args, depsgraph=None, **kwargs):

    z = min(o.matrix_world.translation.z for o in depsgraph.objects
    if o != self)

    return z  

सूचक

IMO किसी वस्तु के साथ किसी वस्तु (एस) को जोड़ने का सबसे अच्छा तरीका एक पॉइंटर संपत्ति है

bpy.types.Object.driver_obj1 = bpy.props.PointerProperty(type=bpy.types.Object)

जिसे स्क्रिप्ट या UI के माध्यम से सौंपा जा सकता है।

context.object.driver_object1 = context.scene.objects.get("Lamp")