* Moved the code to retrieve an object by name to a seperate function in
[blender.git] / source / blender / python / api2_2x / gen_utils.c
1 /* 
2  *
3  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version. The Blender
9  * Foundation also sells licenses for use in proprietary software under
10  * the Blender License.  See http://www.blender.org/BL/ for information
11  * about this.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21  *
22  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
23  * All rights reserved.
24  *
25  * This is a new part of Blender.
26  *
27  * Contributor(s): Michel Selten
28  *
29  * ***** END GPL/BL DUAL LICENSE BLOCK *****
30 */
31
32 #include <stdio.h>
33 #include <string.h>
34 #include <Python.h>
35
36 #include <BKE_global.h>
37 #include <BKE_main.h>
38 #include <DNA_ID.h>
39 #include <DNA_object_types.h>
40 #include <DNA_scriptlink_types.h>
41
42 /*****************************************************************************/
43 /* Description: This function returns true if both given strings are equal,  */
44 /*              otherwise it returns false.                                  */
45 /*****************************************************************************/
46 int StringEqual (char * string1, char * string2)
47 {
48         return (strcmp(string1, string2)==0);
49 }
50
51 /*****************************************************************************/
52 /* Description: This function returns the name of the given ID struct        */
53 /*              without the Object type identifying characters prepended.    */
54 /*****************************************************************************/
55 char * GetIdName (ID *id)
56 {
57         return ((id->name)+2);
58 }
59
60 /*****************************************************************************/
61 /* Description: This function sets an internal string with the given type    */
62 /*              and error_msg arguments.                                     */
63 /*****************************************************************************/
64 PyObject * PythonReturnErrorObject (PyObject * type, char * error_msg)
65 {
66         PyErr_SetString (type, error_msg);
67         return (NULL);
68 }
69
70 /*****************************************************************************/
71 /* Description: This function increments the reference count of the given    */
72 /*              Python object.                                               */
73 /*****************************************************************************/
74 PyObject * PythonIncRef (PyObject *object)
75 {
76         Py_INCREF (object);
77         return (object);
78 }
79
80 /*****************************************************************************/
81 /* Description: This function maps the event identifier to a string.         */
82 /*****************************************************************************/
83 char * event_to_name(short event)
84 {
85         switch (event)
86         {
87                 case SCRIPT_FRAMECHANGED:
88                         return "FrameChanged";
89                 case SCRIPT_ONLOAD:
90                         return "OnLoad";
91                 case SCRIPT_REDRAW:
92                         return "Redraw";
93                 default:
94                         return "Unknown";
95         }
96 }       
97
98 /*****************************************************************************/
99 /* Description: Returns the object with the name specified by the argument   */
100 /*              name. Note that the calling function has to remove the first */
101 /*              two characters of the object name. These two characters      */
102 /*              specify the type of the object (OB, ME, WO, ...)             */
103 /*              The function will return NULL when no object with the given  */
104 /*              name is found.                                               */
105 /*****************************************************************************/
106 struct Object * GetObjectByName (char * name)
107 {
108         Object  * obj_iter;
109
110         obj_iter = G.main->object.first;
111         while (obj_iter)
112         {
113                 if (StringEqual (name, GetIdName (&(obj_iter->id))))
114                 {
115                         return (obj_iter);
116                 }
117                 obj_iter = obj_iter->id.next;
118         }
119
120         /* There is no object with the given name */
121         return (NULL);
122 }
123