<?xml version="1.0" encoding="UTF-8" ?>
<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns="http://purl.org/rss/1.0/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">

  <channel rdf:about="http://blenderscript.ni-moe.com/RSS/100/">
    <title>blender-scriptメモ</title>
    <link>http://blenderscript.ni-moe.com/</link>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://blenderscript.ni-moe.com/RSS/" />
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" />
    <description></description>
    <dc:language>ja</dc:language>
    <dc:date>2015-07-12T23:49:53+09:00</dc:date>
    <items>
    <rdf:Seq>
      <rdf:li rdf:resource="http://blenderscript.ni-moe.com/blenderscript/prop_search%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9" />
      <rdf:li rdf:resource="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" />
    </rdf:Seq>
    </items>
  </channel>

  <item rdf:about="http://blenderscript.ni-moe.com/blenderscript/prop_search%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9">
    <link>http://blenderscript.ni-moe.com/blenderscript/prop_search%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9</link>
    <title>prop_searchの使い方</title>
    <description>prop_searchによるドロップダウンUIの作成方法をまとめてみました。  
普段目にするオブジェクトを選択するときに使うコントロールです。


row.prop_search(tps, &amp;quot;sel_obj&amp;quot;, context.scene, &amp;quot;objects&amp;quot;, text=&amp;quot;Objects&amp;quot;)

...</description>
    <content:encoded><![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:encoded>
    <dc:subject>BlenderScript</dc:subject>
    <dc:date>2013-08-05T01:22:20+09:00</dc:date>
    <dc:creator>ののき</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>ののき</dc:rights>
  </item>
  <item rdf:about="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">
    <link>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</link>
    <title>BlenderのScriptについての備忘録</title>
    <description>BlenderのPythonスクリプトに関する情報をメインにまとめていきます。
調べながら、試行錯誤しながらですので、拙い部分があるとは思いますが、
よろしくお願いします。
...</description>
    <content:encoded><![CDATA[BlenderのPythonスクリプトに関する情報をメインにまとめていきます。<br />
調べながら、試行錯誤しながらですので、拙い部分があるとは思いますが、<br />
よろしくお願いします。<br />
]]></content:encoded>
    <dc:subject>BlenderScript</dc:subject>
    <dc:date>2013-08-05T01:09:00+09:00</dc:date>
    <dc:creator>ののき</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>ののき</dc:rights>
  </item>
</rdf:RDF>
