2013-03-15 3 views
8

प्रश्न: ब्लेंडर 2.64 में, मेरे पास कुछ शीर्षकों के साथ संपादन मोड में जाल है। मैं पाइथन लिपि में चयनित चरम के सूचकांक की सूची कैसे प्राप्त या उत्पन्न कर सकता हूं?ब्लेंडर स्क्रिप्टिंग: चयनित शिखर के सूचकांक

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

सूचकांक जाल के ओबीजे निर्यात में कशेरुक सूचकांक के साथ संगत होना चाहिए। मैं एक सी ++ प्रोग्राम में इन चरमों तक पहुंचने के लिए टेक्स्ट फ़ाइल में वर्टेक्स इंडेक्स को निर्यात करने वाली एक स्क्रिप्ट लिखना चाहता हूं।

उत्तर

8

यदि आपका कोड निष्पादित करने से पहले आप ऑब्जेक्ट मोड पर स्विच करते हैं तो आपका कोड केवल विश्वसनीय रूप से काम करता है। कारण यह है कि संपादन मोड में, जाल डेटा ऑब्जेक्ट मोड से जाल के साथ सिंक्रनाइज़ नहीं किया जाता है। यह तब किया जाता है जब आप ऑब्जेक्ट मोड पर वापस स्विच करते हैं। आप संपादन मोड में स्विच करके इसे सत्यापित कर सकते हैं, अपनी ऑब्जेक्ट से कुछ कोष्ठक का चयन कर सकते हैं, अपना कोड निष्पादित कर सकते हैं, फिर अलग-अलग शिखर (अभी भी संपादन मोड में) चुनें और अपनी स्क्रिप्ट फिर से चलाएं। आप देखेंगे कि पाइथन कंसोल में चयनित कोष्ठकों की आपकी सूची बदली नहीं जाएगी। यह व्यवहार isdocumented। संपादन मोड में चयनित कोने निम्नलिखित कोड एक प्रथम सूचक के रूप में सेवा कर सकते हैं प्राप्त करने के लिए (2.66.5 r56033 के साथ परीक्षण):

import bpy 
import bmesh 

obj=bpy.context.object 
if obj.mode == 'EDIT': 
    bm=bmesh.from_edit_mesh(obj.data) 
    for v in bm.verts: 
     if v.select: 
      print(v.co) 
else: 
    print("Object is not in edit mode.") 

करें/नोड्स चयन रद्द करें और देखने के लिए कोने बदल स्क्रिप्ट को निष्पादित।

+0

आउटपुट <वेक्टर (1.0000, 1.0000, -1.0000)> – Nianliang

+0

जैसा दिखता है मुझे इंडेक्स प्राप्त करने के लिए "v.co" के बजाय "v.index" का उपयोग करने की आवश्यकता है। – Nianliang

6

अंत में एक Blog, अच्छा और कॉम्पैक्ट में यह पाया:

Verts = [i.index for i in bpy.context.active_object.data.vertices if i.select] 

यह OBJ निर्यात में शिखर आदेश (Blender.2.64) के साथ वास्तव में संगत है।

+0

उत्पादन की तरह दिखता है [0, 5] ब्लेंडर 2.70 पर, जो मैं चाहता हूं! – Nianliang

2

@hochl और @DCS, संपादन मोड में के आधार पर, अजगर कंसोल में निम्न पंक्ति चलाएँ:

import bmesh; [i.index for i in bmesh.from_edit_mesh(bpy.context.active_object.data).verts if i.select] 

* ब्लेंडर संस्करण 2.70 (2.70 2014-अप्रैल-10)

संबंधित मुद्दे