[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53590] trunk/blender/doc/python_api/ examples/bpy.props.5.py: Added some python API examples for the new get/ set callbacks in bpy.props.

Lukas Toenne lukas.toenne at googlemail.com
Sat Jan 5 16:50:56 CET 2013


Revision: 53590
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53590
Author:   lukastoenne
Date:     2013-01-05 15:50:51 +0000 (Sat, 05 Jan 2013)
Log Message:
-----------
Added some python API examples for the new get/set callbacks in bpy.props.

Added Paths:
-----------
    trunk/blender/doc/python_api/examples/bpy.props.5.py

Added: trunk/blender/doc/python_api/examples/bpy.props.5.py
===================================================================
--- trunk/blender/doc/python_api/examples/bpy.props.5.py	                        (rev 0)
+++ trunk/blender/doc/python_api/examples/bpy.props.5.py	2013-01-05 15:50:51 UTC (rev 53590)
@@ -0,0 +1,85 @@
+"""
+Get/Set Example
+++++++++++++++
+
+Get/Set functions can be used for boolean, int, float, string and enum properties.
+If these callbacks are defined the property will not be stored in the ID properties
+automatically, instead the get/set functions will be called when the property is
+read or written from the API.
+"""
+
+import bpy
+
+
+# Simple property reading/writing from ID properties.
+# This is what the RNA would do internally.
+def get_float(self):
+    return self["testprop"]
+
+def set_float(self, value):
+    self["testprop"] = value
+
+bpy.types.Scene.test_float = bpy.props.FloatProperty(get=get_float, set=set_float)
+
+
+# Read-only string property, returns the current date
+def get_date(self):
+    import datetime
+    return str(datetime.datetime.now())
+
+bpy.types.Scene.test_date = bpy.props.StringProperty(get=get_date)
+
+
+# Boolean array. Set function stores a single boolean value, returned as the second component.
+# Array getters must return a list or tuple
+# Array size must match the property vector size exactly
+def get_array(self):
+    return (True, self["somebool"])
+
+def set_array(self, values):
+    self["somebool"] = values[0] and values[1]
+
+bpy.types.Scene.test_array = bpy.props.BoolVectorProperty(size=2, get=get_array, set=set_array)
+
+
+# Enum property.
+# Note: the getter/setter callback must use integer identifiers!
+test_items = [
+    ("RED", "Red", "", 1),
+    ("GREEN", "Red", "", 2),
+    ("BLUE", "Red", "", 3),
+    ("YELLOW", "Red", "", 4),
+    ]
+
+def get_enum(self):
+    import random
+    return random.randint(1, 4)
+
+def set_enum(self, value):
+    print("setting value", value)
+
+bpy.types.Scene.test_enum = bpy.props.EnumProperty(items=test_items, get=get_enum, set=set_enum)
+
+
+# Testing
+
+scene = bpy.context.scene
+
+scene.test_float = 12.34
+print (scene.test_float)
+
+scene.test_array = (True, False)
+print ([x for x in scene.test_array])
+
+#scene.test_date = "blah"   # this would fail, property is read-only
+print (scene.test_date)
+
+scene.test_enum = 'BLUE'
+print (scene.test_enum)
+
+
+# >>> 12.34000015258789
+# >>> [True, False]
+# >>> 2013-01-05 16:33:52.135340
+# >>> setting value 3
+# >>> GREEN




More information about the Bf-blender-cvs mailing list