<?xml version="1.0" encoding="UTF-8" ?>
<feed xml:lang="ja" xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:thr="http://purl.org/syndication/thread/1.0">
  <title type="text">blender-scriptメモ</title>
  <subtitle type="html"></subtitle>
  <link rel="self" type="application/atom+xml" href="http://blenderscript.ni-moe.com/atom"/>
  <link rel="alternate" type="text/html" href="http://blenderscript.ni-moe.com/"/>
  <updated>2013-08-05T01:05:25+09:00</updated>
  <author><name>ののき</name></author>
  <generator uri="//www.ninja.co.jp/blog/" version="0.9">忍者ブログ</generator>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" />
  <entry>
    <id>blenderscript.ni-moe.com://entry/2</id>
    <link rel="alternate" type="text/html" href="http://blenderscript.ni-moe.com/blenderscript/prop_search%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9" />
    <published>2013-08-05T01:22:20+09:00</published> 
    <updated>2013-08-05T01:22:20+09:00</updated> 
    <category term="BlenderScript" label="BlenderScript" />
    <title>prop_searchの使い方</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![CDATA[prop_searchによるドロップダウンUIの作成方法をまとめてみました。 <img alt="" src="//blenderscript.ni-moe.com/File/prop_search.png" /> <br />
普段目にするオブジェクトを選択するときに使うコントロールです。<br />
<br />

<pre>row.prop_search(tps, "sel_obj", context.scene, "objects", text="Objects")
</pre>
基本的にはCollectionPropertyと選択しているオブジェクトの名前を格納するプロパティを指定します。<br />
上記例では、context.scene.objectsがCollectionなので、そのままプロパティとして渡すことができます。<br />
<br />
必要があれば、自分でCollectionPropertyを定義して、そこから選択できるようにすることも出来ました。
<pre>class StringValGroup(bpy.types.PropertyGroup):
    string_val = bpy.props.StringProperty()

class TestPropSearchProps(bpy.types.PropertyGroup):
    string_val_list = bpy.props.CollectionProperty(type=bpy.types.StringValGroup)
</pre>
PropertyGroupにいろいろな情報を持たせていけばいろいろ便利なことができそうです。<hr /><br />

<pre class="source_code"># -*- coding: utf-8 -*-

import bmesh
import bpy
from bpy_extras import view3d_utils



class StringValGroup(bpy.types.PropertyGroup):
    string_val = bpy.props.StringProperty()

bpy.utils.register_class(StringValGroup)

#-----------------------------

class TestPropSearchProps(bpy.types.PropertyGroup):
    
    # リストで選択されているオブジェクトの名前
    sel_obj = bpy.props.StringProperty()
    
    # Drop Downリストに表示される値のリスト
    string_val_list = bpy.props.CollectionProperty(type=bpy.types.StringValGroup)
    
    # 選択されている値が格納されるプロパティ
    sel_string = bpy.props.StringProperty()
    sel_string_val = bpy.props.StringProperty()
    
    def init_val_list(self):
        self.string_val_list.clear()
        for i in range(10):
            v = self.string_val_list.add()
            v.string_val = "val" + str( i )
            v.name = "name" + str(i) 
    
    def update_val(self, nm):
        for sv in self.string_val_list:
            if sv.name == nm:
                self.sel_string_val = sv.string_val



class TestPropSearchPanel(bpy.types.Panel):
    bl_label = "TestPropSearch"
    bl_idname = "OBJECT_PT_rename"
    bl_space_type = 'PROPERTIES'
    bl_region_type = 'WINDOW'
    bl_description = "Rename Tools"
    bl_context = "object"
    
    def draw(self, context):
        
        tps = context.window_manager.test_prop_search

        layout = self.layout
        row = layout.row()
        row.prop_search(tps, "sel_obj", context.scene, "objects", text="Objects")
        row = layout.row()
        row.prop(tps, "sel_obj")
        
        tps.init_val_list()
        row = layout.row()
        row.prop_search(tps, "sel_string", tps, "string_val_list", text="Test")
        row = layout.row()
        row.prop(tps, "sel_string")
        
        tps.update_val(tps.sel_string)
        row.prop(tps, "sel_string_val")
        
        

def register():

    bpy.utils.register_class(TestPropSearchProps)
    bpy.utils.register_class(TestPropSearchPanel)
    
    bpy.types.WindowManager.test_prop_search = bpy.props.PointerProperty(\
        type = TestPropSearchProps)
    
def unregister():
    bpy.utils.unregister_class(StringValGroup)
    bpy.utils.unregister_class(TestPropSearchProps)
    bpy.utils.unregister_class(TestPropSearchPanel)
    
if __name__ == "__main__":
    register()
</pre>]]> 
    </content>
    <author>
            <name>ののき</name>
        </author>
  </entry>
  <entry>
    <id>blenderscript.ni-moe.com://entry/1</id>
    <link rel="alternate" type="text/html" href="http://blenderscript.ni-moe.com/blenderscript/blender%E3%81%AEscript%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%81%AE%E5%82%99%E5%BF%98%E9%8C%B2" />
    <published>2013-08-05T01:09:00+09:00</published> 
    <updated>2013-08-05T01:09:00+09:00</updated> 
    <category term="BlenderScript" label="BlenderScript" />
    <title>BlenderのScriptについての備忘録</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![CDATA[BlenderのPythonスクリプトに関する情報をメインにまとめていきます。<br />
調べながら、試行錯誤しながらですので、拙い部分があるとは思いますが、<br />
よろしくお願いします。<br />
]]> 
    </content>
    <author>
            <name>ののき</name>
        </author>
  </entry>
</feed>