[Bf-python] Patch to add new functions,

Campbell Barton cbarton at metavr.com
Sun May 30 12:16:58 CEST 2004


Whoops, remove the sconstruct section in the patch... thats spesific to 
my system.

Campbell Barton wrote:

> Hi,
>
> I have added some functions to the Object module.
> Now you can select and unselect objects
> getSel(), setSel(1/0), .sel
> and Object.Centre(0/1/2)
> All Epydocs have been updated.
>
> Eg...
> Object.Get()[0].setSel(1)
> Object.Get()[1].setSel(0)
>
> print ob.getSel()
>
> # or as a Class Variable,
> # Toggle selection eg.
> for ob in Object.Get()
>  if ob.sel:
>    ob.sel = 0
>  else:
>    ob.sel = 1
>
> This would be usefull for different things, but mainly when dealing 
> with large scenes.
> It would be trivial to make a GUI script that Could load and save the 
> current selection into different slots.
>
> The next functions implimentation might be disputed (sorry not to 
> split the patch up)
> ob.centre(0/1/2)
>
> This is basic in the way that it hooks the docentre() function.
> 0:Object->Centre
> 1:Centre->Object
> 2:Centre->Cursor
>
> The issue with this is that it affects all selected objects so it 
> relys on setSel() for any control of exacthy what is affected.
>
> eg
> Window.SetCurserPos(1,2,3)
> # Deselect all
> for ob in Object.Get()
>  ob.sel = 0
>
> # Select the 1st object
> ob = Object.Get()[0]
> ob.sel = 1
> Object.Centre(2) # Centre around cursor.
>
> ___________
>
> -Cam
>
>
>
>------------------------------------------------------------------------
>
>? blender
>? blender_back
>? config.opts
>? source/blender/python/api2_2x/buttons_editing.c
>? source/blender/python/api2_2x/doc/Armature.pyc
>? source/blender/python/api2_2x/doc/BGL.pyc
>? source/blender/python/api2_2x/doc/BPY_API_233
>? source/blender/python/api2_2x/doc/Blender.pyc
>? source/blender/python/api2_2x/doc/Bone.pyc
>? source/blender/python/api2_2x/doc/Camera.pyc
>? source/blender/python/api2_2x/doc/Curve.pyc
>? source/blender/python/api2_2x/doc/Draw.pyc
>? source/blender/python/api2_2x/doc/Effect.pyc
>? source/blender/python/api2_2x/doc/Image.pyc
>? source/blender/python/api2_2x/doc/Ipo.pyc
>? source/blender/python/api2_2x/doc/Lamp.pyc
>? source/blender/python/api2_2x/doc/Lattice.pyc
>? source/blender/python/api2_2x/doc/Library.pyc
>? source/blender/python/api2_2x/doc/Material.pyc
>? source/blender/python/api2_2x/doc/Mathutils.pyc
>? source/blender/python/api2_2x/doc/Metaball.pyc
>? source/blender/python/api2_2x/doc/NLA.pyc
>? source/blender/python/api2_2x/doc/NMesh.pyc
>? source/blender/python/api2_2x/doc/Noise.pyc
>? source/blender/python/api2_2x/doc/Object.pyc
>? source/blender/python/api2_2x/doc/Registry.pyc
>? source/blender/python/api2_2x/doc/Render.pyc
>? source/blender/python/api2_2x/doc/Scene.pyc
>? source/blender/python/api2_2x/doc/Sys.pyc
>? source/blender/python/api2_2x/doc/Text.pyc
>? source/blender/python/api2_2x/doc/Texture.pyc
>? source/blender/python/api2_2x/doc/Types.pyc
>? source/blender/python/api2_2x/doc/Window.pyc
>? source/blender/python/api2_2x/doc/World.pyc
>? source/blender/src/tooltip.diff
>Index: SConstruct
>===================================================================
>RCS file: /cvsroot/bf-blender/blender/SConstruct,v
>retrieving revision 1.54
>diff -u -r1.54 SConstruct
>--- SConstruct	12 May 2004 22:11:39 -0000	1.54
>+++ SConstruct	30 May 2004 10:00:34 -0000
>@@ -38,9 +38,9 @@
>     build_blender_static = 'false'
>     build_blender_player = 'false'
>     build_blender_plugin = 'false'
>-    release_flags = ['-O2']
>-    debug_flags = ['-O2', '-g']
>-    extra_flags = ['-pipe', '-fPIC', '-funsigned-char']
>+    release_flags = ['-O3']
>+    debug_flags = ['-O3', '-g']
>+    extra_flags = ['-march=athlon-xp', '-m3dnow', '-msse', '-mfpmath=sse', '-maccumulate-outgoing-args', '-pipe', '-fPIC', '-funsigned-char']
>     cxxflags = []
>     defines = []
>     warn_flags = ['-Wall']
>Index: source/blender/python/api2_2x/Object.c
>===================================================================
>RCS file: /cvsroot/bf-blender/blender/source/blender/python/api2_2x/Object.c,v
>retrieving revision 1.73
>diff -u -r1.73 Object.c
>--- source/blender/python/api2_2x/Object.c	20 May 2004 06:26:43 -0000	1.73
>+++ source/blender/python/api2_2x/Object.c	30 May 2004 10:00:50 -0000
>@@ -39,6 +39,7 @@
> #include "DNA_scene_types.h"
> #include "BSE_edit.h"
> 
>+
> /*****************************************************************************/
> /* Python API function prototypes for the Blender module.					 */
> /*****************************************************************************/
>@@ -47,6 +48,7 @@
> PyObject *M_Object_get(PyObject *self, PyObject *args);
> static PyObject *M_Object_GetSelected (PyObject *self, PyObject *args);
> static PyObject *M_Object_getSelected (PyObject *self, PyObject *args);
>+static PyObject *M_Object_Centre (PyObject *self, PyObject *args);
> 
> /*****************************************************************************/
> /* The following string definitions are used for documentation strings.		 */
>@@ -70,6 +72,10 @@
> "() - Returns a list of selected Objects in the active layer(s)\n\
> The active object is the first in the list, if visible";
> 
>+char M_Object_Centre_doc[] =
>+"(mode) - Moves the objects centre depending on the mode (1,2 or 3)\n\
>+0-Object to Centre, 1-Centre to Object, 2-Centre to Cursor";
>+
> /*****************************************************************************/
> /* Python method structure definition for Blender.Object module:			 */
> /*****************************************************************************/
>@@ -84,6 +90,8 @@
> 					M_Object_GetSelected_doc},
> 	{"getSelected", (PyCFunction)M_Object_getSelected, METH_VARARGS,
> 					M_Object_GetSelected_doc},
>+	{"Centre", (PyCFunction)M_Object_Centre, METH_VARARGS,
>+					M_Object_Centre_doc},          
> 	{NULL, NULL, 0, NULL}
> };
> 
>@@ -111,6 +119,7 @@
> static PyObject *Object_getType (BPy_Object *self);
> static PyObject *Object_getBoundBox (BPy_Object *self);
> static PyObject *Object_getAction (BPy_Object *self);
>+static PyObject *Object_getSel (BPy_Object *self);
> static PyObject *Object_makeDisplayList (BPy_Object *self);
> static PyObject *Object_link (BPy_Object *self, PyObject *args);
> static PyObject *Object_makeParent (BPy_Object *self, PyObject *args);
>@@ -127,6 +136,7 @@
> static PyObject *Object_setSize (BPy_Object *self, PyObject *args);
> static PyObject *Object_setTimeOffset (BPy_Object *self, PyObject *args);
> static PyObject *Object_shareFrom (BPy_Object *self, PyObject *args);
>+static PyObject *Object_setSel (BPy_Object *self, PyObject *args);
> 
> /*****************************************************************************/
> /* Python BPy_Object methods table:											   */
>@@ -151,6 +161,8 @@
> 	"Returns the object draw type"},
>   {"getAction", (PyCFunction)Object_getAction, METH_NOARGS,
> 	"Returns the active action for this object"},
>+  {"getSel", (PyCFunction)Object_getSel, METH_NOARGS,
>+	"Return a 1/0 depending on weather the object is selected"},  
>   {"getEuler", (PyCFunction)Object_getEuler, METH_NOARGS,
> 	"Returns the object's rotation as Euler rotation vector\n\
> (rotX, rotY, rotZ)"},
>@@ -224,6 +236,8 @@
>   {"shareFrom", (PyCFunction)Object_shareFrom, METH_VARARGS,
> 	"Link data of self with object specified in the argument. This\n\
> works only if self and the object specified are of the same type."},
>+  {"setSel", (PyCFunction)Object_setSel, METH_VARARGS,
>+	"Set the selected state of the object 1/0."},
>   {"setIpo", (PyCFunction)Object_setIpo, METH_VARARGS,
> 	"(Blender Ipo) - Sets the object's ipo"},
>   {"clearIpo", (PyCFunction)Object_clearIpo, METH_NOARGS,
>@@ -514,6 +528,38 @@
> }
> 
> /*****************************************************************************/
>+/* Function:			  M_Object_Centre							  	 */
>+/* Python equivalent:	  Blender.Object.Centre						 */
>+/*****************************************************************************/
>+static PyObject *M_Object_Centre (PyObject *self, PyObject *args)
>+{
>+  // 0 Centre object over its own centre.
>+  // 1 Move objects centre to moddle of the object.
>+  // 2 Place the objects centre to the cursor.
>+  int centreType;
>+  
>+  if (!PyArg_ParseTuple(args, "i", &centreType))
>+		return EXPP_ReturnPyObjError 
>+		   (PyExc_TypeError, "expected an int, 0, 1 or 2");
>+  
>+  if (centreType == 0)
>+    {
>+    docentre();
>+  } else if (centreType == 1)
>+  {
>+    docentre_new();
>+  }
>+  else if (centreType == 2)
>+    {
>+    docentre_cursor();
>+    }
>+  
>+  Py_INCREF (Py_None);
>+	return (Py_None);
>+}
>+
>+
>+/*****************************************************************************/
> /* Function:			  initObject										 */
> /*****************************************************************************/
> PyObject *Object_Init (void)
>@@ -754,6 +800,29 @@
> 	}
> }
> 
>+
>+static PyObject *Object_getSel (BPy_Object *self)
>+{
>+  Base *base;
>+  base= FIRSTBASE;
>+  
>+  PyObject *sel; 
>+  
>+  while (base) {
>+    if (base->object == self->object)
>+      {
>+        if (base->flag & SELECT) {
>+          sel = Py_BuildValue ("b", 1);
>+          } else { 
>+            sel = Py_BuildValue ("b", 0);
>+          }
>+        return sel;
>+      }
>+    base= base->next;
>+  }
>+}
>+
>+
> static PyObject *Object_getDrawType (BPy_Object *self)
> {
> 	PyObject *attr = Py_BuildValue ("b", self->object->dt);
>@@ -1350,6 +1419,7 @@
> 	return (Py_None);
> }
> 
>+
> static PyObject *Object_setIpo(BPy_Object *self, PyObject *args)
> {
> 	PyObject *pyipo = 0;
>@@ -1590,6 +1660,42 @@
> 	return (Py_None);
> }
> 
>+
>+
>+static PyObject *Object_setSel (BPy_Object *self, PyObject *args)
>+{
>+  Base *base;
>+  base= FIRSTBASE;
>+  
>+  int sel;
>+  
>+  if (!PyArg_ParseTuple (args, "i", &sel))
>+		return EXPP_ReturnPyObjError 
>+		   (PyExc_TypeError, "expected an int, 0 or 1");
>+    
>+    while (base) {
>+      if (base->object == self->object)
>+      {
>+        if (sel == 1)
>+        {
>+          base->flag |= SELECT;
>+          self->object->flag= base->flag;
>+        } else { 
>+          base->flag &= ~SELECT;
>+          self->object->flag= base->flag;
>+        }
>+        Py_INCREF (Py_None);
>+        return (Py_None);
>+      }
>+      base= base->next;
>+    }
>+	
>+	countall();  
>+  
>+
>+}
>+
>+
> /*****************************************************************************/
> /* Function:	Object_CreatePyObject										 */
> /* Description: This function will create a new BlenObject from an existing  */
>@@ -1793,7 +1899,9 @@
> 		return (Py_BuildValue ("b", object->dtx));
> 	if (StringEqual (name, "name"))
> 		return (Py_BuildValue ("s", object->id.name+2));
>-
>+	if (StringEqual (name, "sel"))
>+		return (Object_getSel (obj));
>+  
> 	/* not an attribute, search the methods table */
> 	return Py_FindMethod(BPy_Object_methods, (PyObject *)obj, name);
> }
>@@ -2002,7 +2110,15 @@
> 		else
> 			return (0);
> 	}
>-
>+  
>+  if (StringEqual (name, "sel"))
>+	{
>+		if (Object_setSel (obj, valtuple) != Py_None)
>+			return (-1);
>+		else
>+			return (0);
>+	}
>+  
> 	printf ("Unknown variable.\n");
> 	return (0);
> }
>Index: source/blender/python/api2_2x/doc/Object.py
>===================================================================
>RCS file: /cvsroot/bf-blender/blender/source/blender/python/api2_2x/doc/Object.py,v
>retrieving revision 1.16
>diff -u -r1.16 Object.py
>--- source/blender/python/api2_2x/doc/Object.py	20 May 2004 07:21:07 -0000	1.16
>+++ source/blender/python/api2_2x/doc/Object.py	30 May 2004 10:00:51 -0000
>@@ -88,6 +88,15 @@
>     print objects
>   """
> 
>+def Centre (mode):
>+  """
>+  Moves all selected objects centre point, this is shown as a purple dot in blender 3d window.
>+  @param mode: One of the following:
>+      - 0 - Centre object data around its centre point (moves objects data).
>+      - 1 - Centre New, moves centre point to the centre of the object.
>+      - 2 - Centre Cursor, moves the objects centre point to the curser position.
>+  """
>+
> class Object:
>   """
>   The Object object
>@@ -131,12 +140,11 @@
>     @cvar EffZ: The Z effector coordinate of the object. Only applies to IKA.
>     @cvar Layer: The object layer.  This value is a bitmask with one position
>         set for each of the 20 possible layers starting from the low order bit.
>-	The easiest way to deal with these values in in hexadecimal notation.
>-	Example::
>-	    ob.Layer = 0x04    # sets layer 3 ( bit pattern 0100 )
>-	
>-	After setting the Layer value, call Blender.Redraw( -1 ) to update the
>-	interface.
>+        The easiest way to deal with these values in in hexadecimal notation.
>+        Example::
>+          ob.Layer = 0x04    # sets layer 3 ( bit pattern 0100 )
>+        After setting the Layer value, call Blender.Redraw( -1 ) to update the
>+        interface.
>     @cvar parent: The parent object of the object. (Read-only)
>     @cvar track: The object tracking this object. (Read-only)
>     @cvar data: The data of the object. (Read-only)
>@@ -152,6 +160,7 @@
>         of: 2 - axis, 4 - texspace, 8 - drawname, 16 - drawimage,
>         32 - drawwire.
>     @cvar name: The name of the object.
>+    @cvar sel: The selection of the object, 1/0.
>   """
> 
>   def buildParts():
>@@ -163,7 +172,7 @@
>   def clearIpo():
>     """
>     Unlinks the ipo from this object.
>-    @return: True if there was an ipo linked or False otherwise.
>+    
>     """
> 
>   def clrParent(mode = 0, fast = 0):
>@@ -346,6 +355,12 @@
> 
>         Blender.Redraw()
>     """
>+  def getSel():
>+    """
>+    Returns the objects selection state as 1 or 0
>+    @rtype: int
>+    @return: Objects selection state as 1 or 0
>+    """  
> 
>   def link(object):
>     """
>@@ -468,13 +483,22 @@
>     @type timeOffset: float
>     @param timeOffset: The new time offset for the object's animation.
>     """
>-	
>+  
>   def shareFrom(object):
>     """
>     Link data of self with object specified in the argument. This works only
>     if self and the object specified are of the same type.
>     @type object: Blender Object
>     @param object: A Blender Object of the same type.
>+    """
>+  
>+  def setSel(boolean):
>+    """
>+    Sets the object's selection state.
>+    @type boolean: Integer
>+    @param boolean: A sum of the following:
>+        - 0  - unselected
>+        - 1  - selected
>     """
> 
>   def getBoundBox():
>Index: source/blender/src/buttons_editing.c
>===================================================================
>RCS file: /cvsroot/bf-blender/blender/source/blender/src/buttons_editing.c,v
>retrieving revision 1.49
>diff -u -r1.49 buttons_editing.c
>--- source/blender/src/buttons_editing.c	24 May 2004 19:48:06 -0000	1.49
>+++ source/blender/src/buttons_editing.c	30 May 2004 10:00:58 -0000
>@@ -544,12 +544,15 @@
> 		break;
> 	case B_DOCENTRE:
> 		docentre();
>+    allqueue(REDRAWVIEW3D, 0);
> 		break;
> 	case B_DOCENTRENEW:
> 		docentre_new();
>+    allqueue(REDRAWVIEW3D, 0);
> 		break;
> 	case B_DOCENTRECURSOR:
> 		docentre_cursor();
>+    allqueue(REDRAWVIEW3D, 0);
> 		break;
> 	case B_SETSMOOTH:
> 	case B_SETSOLID:
>Index: source/blender/src/editobject.c
>===================================================================
>RCS file: /cvsroot/bf-blender/blender/source/blender/src/editobject.c,v
>retrieving revision 1.86
>diff -u -r1.86 editobject.c
>--- source/blender/src/editobject.c	29 May 2004 16:17:46 -0000	1.86
>+++ source/blender/src/editobject.c	30 May 2004 10:01:11 -0000
>@@ -1404,7 +1404,6 @@
> 		base= base->next;
> 	}
> 
>-	allqueue(REDRAWVIEW3D, 0);
> }
> 
> void docentre_new(void)
>  
>


-- 
Campbell J Barton

133 Hope Street
Geelong West, Victoria 3218 Australia

URL:    http://www.metavr.com
e-mail: cbarton at metavr.com
phone: AU (03) 5229 0241




More information about the Bf-python mailing list