[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12412] trunk/blender/source/blender/ python/api2_2x: ==Python API==

Campbell Barton cbarton at metavr.com
Sat Oct 27 00:38:15 CEST 2007


Revision: 12412
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12412
Author:   campbellbarton
Date:     2007-10-27 00:38:15 +0200 (Sat, 27 Oct 2007)

Log Message:
-----------
==Python API==
layerMask access for pose bones, even though this is a Bone property, its much more convenient to add access from the poseBone, it also matches how the 
user interface works.

Modified Paths:
--------------
    trunk/blender/source/blender/python/api2_2x/Pose.c
    trunk/blender/source/blender/python/api2_2x/doc/Pose.py

Modified: trunk/blender/source/blender/python/api2_2x/Pose.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/Pose.c	2007-10-26 22:11:08 UTC (rev 12411)
+++ trunk/blender/source/blender/python/api2_2x/Pose.c	2007-10-26 22:38:15 UTC (rev 12412)
@@ -1128,7 +1128,35 @@
 	return 0;
 }
 
+//------------------------Bone.layerMask (get)
+static PyObject *PoseBone_getLayerMask(BPy_PoseBone *self)
+{
+	/* do this extra stuff because the short's bits can be negative values */
+	unsigned short laymask = 0;
+	laymask |= self->posechannel->bone->layer;
+	return PyInt_FromLong((int)laymask);
+}
+//------------------------Bone.layerMask (set)
+static int PoseBone_setLayerMask(BPy_PoseBone *self, PyObject *value)
+{
+	int laymask;
+	if (!PyInt_Check(value)) {
+		return EXPP_ReturnIntError( PyExc_AttributeError,
+									"expected an integer (bitmask) as argument" );
+	}
+	
+	laymask = PyInt_AsLong(value);
 
+	if (laymask <= 0 || laymask > (1<<16) - 1)
+		return EXPP_ReturnIntError( PyExc_AttributeError,
+									"bitmask must have from 1 up to 16 bits set");
+
+	self->posechannel->bone->layer = 0;
+	self->posechannel->bone->layer |= laymask;
+
+	return 0;
+}
+
 //------------------TYPE_OBECT IMPLEMENTATION---------------------------
 //------------------------tp_getset
 //This contains methods for attributes that require checking
@@ -1188,7 +1216,8 @@
 		"disable Y DoF when part of an IK", (void *)BONE_IK_NO_YDOF },
 	{"lockZRot", (getter)PoseBone_getIKFlag, (setter)PoseBone_setIKFlag,
 		"disable Z DoF when part of an IK", (void *)BONE_IK_NO_ZDOF },
-	
+	{"layerMask", (getter)PoseBone_getLayerMask, (setter)PoseBone_setLayerMask, 
+		"Layer bitmask", NULL },
 	{NULL, NULL, NULL, NULL, NULL}
 };
 //------------------------tp_dealloc

Modified: trunk/blender/source/blender/python/api2_2x/doc/Pose.py
===================================================================
--- trunk/blender/source/blender/python/api2_2x/doc/Pose.py	2007-10-26 22:11:08 UTC (rev 12411)
+++ trunk/blender/source/blender/python/api2_2x/doc/Pose.py	2007-10-26 22:38:15 UTC (rev 12412)
@@ -217,7 +217,11 @@
 	@ivar lockYRot: Disable Y DoF when part of an IK.
 	@type lockZRot: bool
 	@ivar lockZRot: Disable Z DoF when part of an IK.
-	
+	@ivar layerMask: Layer bitmask
+		Example::
+			# set bone to layers 14 and 16
+			bone.layerMask = (1<<13) + (1<<15)
+	@type layerMask: Int
 	"""
 
 	def insertKey(parentObject, frameNumber, type = "[Pose.LOC, Pose.ROT, Pose.SIZE]", fast = False):





More information about the Bf-blender-cvs mailing list