2012-01-27 4 views
6

का उपयोग करके ब्लेंडर में व्यूपोर्ट कोण बदलें, मैं यह पता लगाने की कोशिश कर रहा हूं कि पाइथन का उपयोग करके ब्लेंडर में व्यूपोर्ट कोण बदलने का कोई तरीका है या नहीं। मुझे परिणाम चाहिए जैसे आप नंबर पर 1, 3, या 7 दबाएंगे। तकती।पाइथन

किसी भी मदद

+0

ब्लेंडर का कौन सा संस्करण? – Blender

+0

['bpy.ops.view3d.viewnumpad'] के बारे में क्या है (http://www.blender.org/documentation/blender_python_api_2_69_0/bpy.ops.view3d.html?highlight=numpad#bpy.ops.view3d.viewnumpad)? – gandalf3

+0

यह भी देखें http://blender.stackexchange.com/a/678/2762 –

उत्तर

6

सबसे पहले करने के लिए धन्यवाद, ध्यान दें कि आप एक ही बार में खुला कई 3D दृश्य हो सकते हैं कि, और प्रत्येक का अपना व्यूपोर्ट कोण, परिप्रेक्ष्य/ऑर्थो सेटिंग्स आदि हो सकता है तो अपनी स्क्रिप्ट करना होगा उन सभी 3 डी विचारों को देखें जो मौजूद हो सकते हैं (जो कोई भी नहीं हो सकता है) और यह तय करें कि यह किस पर प्रभाव डाल रहा है।

bpy.data ऑब्जेक्ट के साथ प्रारंभ करें, जिसमें window_managers विशेषता है। इस संग्रह में हमेशा एक तत्व होता है। हालांकि, एक या अधिक खुले windows हो सकते हैं। प्रत्येक विंडो में screen है, जिसे एक या अधिक areas में विभाजित किया गया है। तो आपको "VIEW_3D" के स्पेस type के साथ सभी क्षेत्रों के माध्यम से खोजना होगा। और उसके बाद इस क्षेत्र के spaces के माध्यम से "VIEW_3D" प्रकार के साथ शिकार करें। ऐसी जगह उपclass SpaceView3D होगी। इसमें region_3d प्रकार RegionView3D की विशेषता होगी। और आखिरकार, इस ऑब्जेक्ट में बदले में view_matrix नामक एक विशेषता है, जो Matrix टाइप करने का मान लेती है जिसे आप प्राप्त या सेट कर सकते हैं।

यह सब मिला? :)

4

एक बार जब आप सही 'दृश्य' स्थित है, तो आप संशोधित कर सकते हैं:

view.spaces[0].region_3d.view_matrix 
view.spaces[0].region_3d.view_rotation 

ध्यान दें कि region_3d.view_location 'look_at' लक्ष्य, नहीं कैमरे के स्थान है, यदि आप कैमरे की स्थिति (जहां तक ​​मुझे पता है) को स्थानांतरित करना चाहते हैं तो आपको view_matrix को सीधे संशोधित करना होगा, लेकिन आप view_rotation का उपयोग करके रोटेशन को आसानी से समायोजित कर सकते हैं। आप शायद हालांकि एक वैध चौका उत्पन्न करने के लिए इस पढ़ने के लिए की आवश्यकता होगी: http://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation

शायद कुछ इस तरह उपयोगी हो सकता है:

class Utils(object): 

    def __init__(self, context): 
    self.context = context 

    @property 
    def views(self): 
    """ Returns the set of 3D views. 
    """ 
    rtn = [] 
    for a in self.context.window.screen.areas: 
     if a.type == 'VIEW_3D': 
     rtn.append(a) 
    return rtn 

    def camera(self, view): 
    """ Return position, rotation data about a given view for the first space attached to it """ 
    look_at = view.spaces[0].region_3d.view_location 
    matrix = view.spaces[0].region_3d.view_matrix 
    camera_pos = self.camera_position(matrix) 
    rotation = view.spaces[0].region_3d.view_rotation 
    return look_at, camera_pos, rotation 

    def camera_position(self, matrix): 
    """ From 4x4 matrix, calculate camera location """ 
    t = (matrix[0][3], matrix[1][3], matrix[2][3]) 
    r = (
     (matrix[0][0], matrix[0][1], matrix[0][2]), 
     (matrix[1][0], matrix[1][1], matrix[1][2]), 
     (matrix[2][0], matrix[2][1], matrix[2][2]) 
    ) 
    rp = (
     (-r[0][0], -r[1][0], -r[2][0]), 
     (-r[0][1], -r[1][1], -r[2][1]), 
     (-r[0][2], -r[1][2], -r[2][2]) 
    ) 
    output = (
     rp[0][0] * t[0] + rp[0][1] * t[1] + rp[0][2] * t[2], 
     rp[1][0] * t[0] + rp[1][1] * t[1] + rp[1][2] * t[2], 
     rp[2][0] * t[0] + rp[2][1] * t[1] + rp[2][2] * t[2], 
    ) 
    return output