f7e531c300aff5ce164b6f1c286ae34b01d97ecf
[blender.git] / source / blender / python / api2_2x / BezTriple.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): Jacques Guignot
28  *
29  * ***** END GPL/BL DUAL LICENSE BLOCK *****
30  */
31
32 #include "BezTriple.h"
33
34 /*****************************************************************************/
35 /* Function:              M_BezTriple_New                                          */
36 /* Python equivalent:     Blender.BezTriple.New                                    */
37 /*****************************************************************************/
38 static PyObject *M_BezTriple_New(PyObject *self, PyObject *args)
39 {
40         return 0;
41 }
42
43 /*****************************************************************************/
44 /* Function:              M_BezTriple_Get                                       */
45 /* Python equivalent:     Blender.BezTriple.Get                                 */
46 /* Description:           Receives a string and returns the ipo data obj  */
47 /*                        whose name matches the string.  If no argument is  */
48 /*                        passed in, a list of all ipo data names in the  */
49 /*                        current scene is returned.                         */
50 /*****************************************************************************/
51 static PyObject *M_BezTriple_Get(PyObject *self, PyObject *args)
52 {
53         return 0;
54 }
55
56
57 /*****************************************************************************/
58 /* Python C_BezTriple methods:                                                  */
59 /*****************************************************************************/
60 static PyObject *BezTriple_getName(C_BezTriple *self)
61 {
62         return 0;
63 }
64
65 static PyObject *BezTriple_setName(C_BezTriple *self, PyObject *args)
66 {
67         return 0;
68 }
69
70
71 /*****************************************************************************/
72 /* Function:    BezTripleDeAlloc                                                   */
73 /* Description: This is a callback function for the C_BezTriple type. It is        */
74 /*              the destructor function.                                     */
75 /*****************************************************************************/
76 static void BezTripleDeAlloc (C_BezTriple *self)
77 {
78   PyObject_DEL (self);
79 }
80
81 static PyObject* BezTriple_getPoints (C_BezTriple *self)
82 {       
83 struct BezTriple *bezt = self->beztriple;
84         PyObject* l = PyList_New(0);
85                                 int i;
86                                 for(i = 0;i<2;i++)
87                                         {
88   PyList_Append( l, PyFloat_FromDouble(bezt->vec[1][i]));
89                                         }
90   return l;
91 }
92
93 static PyObject* BezTriple_geth1t (C_BezTriple *self)
94 {       
95         /*champ h1 de la struct*/
96   return PyString_FromString("Auto");
97 }
98 static PyObject* BezTriple_geth2t (C_BezTriple *self)
99 {
100         /*champ h2 de la struct*/
101   return PyString_FromString("Auto");
102 }
103
104 static PyObject* BezTriple_geth1 (C_BezTriple *self)
105 {       PyObject* ret = PyTuple_New(2);
106  PyTuple_SetItem(ret, 0 , PyFloat_FromDouble(self->beztriple->vec[0][0])); 
107  PyTuple_SetItem(ret, 1 , PyFloat_FromDouble(self->beztriple->vec[0][1])); 
108   return ret;
109 }
110 static PyObject* BezTriple_geth2 (C_BezTriple *self)
111 {       PyObject* ret = PyTuple_New(2);
112  PyTuple_SetItem(ret, 0 , PyFloat_FromDouble(self->beztriple->vec[2][0])); 
113  PyTuple_SetItem(ret, 1 , PyFloat_FromDouble(self->beztriple->vec[2][1])); 
114   return ret;
115 }
116 static PyObject* BezTriple_getf1 (C_BezTriple *self)
117 {
118 return  PyInt_FromLong(self->beztriple->f1); 
119 }
120 static PyObject* BezTriple_getf2 (C_BezTriple *self)
121 {
122 return  PyInt_FromLong(self->beztriple->f2); 
123 }
124
125 static PyObject* BezTriple_getf3 (C_BezTriple *self)
126 {
127 return  PyInt_FromLong(self->beztriple->f3); 
128 }
129
130 int  BezTriple_setPoints (C_BezTriple *self,PyObject *value)
131 {       
132
133         int i;
134         struct BezTriple *bezt = self->beztriple;
135         if (  PyList_Check(value) == 0)
136                 {puts("error in   BezTriple_setPoints"); 
137     return -1;}
138         for(i = 0;i<2;i++)bezt->vec[1][i] = PyFloat_AsDouble(PyList_GetItem(value, i));
139   return 0;
140 }
141
142
143 /*****************************************************************************/
144 /* Function:    BezTripleGetAttr                                                   */
145 /* Description: This is a callback function for the C_BezTriple type. It is        */
146 /*              the function that accesses C_BezTriple "member variables" and      */
147 /*              methods.                                                     */
148 /*****************************************************************************/
149 static PyObject *BezTripleGetAttr (C_BezTriple *self, char *name)
150 {
151 if (strcmp (name, "pt") == 0)return BezTriple_getPoints(self);
152 if (strcmp (name, "h1") == 0)return BezTriple_geth1(self);
153 if (strcmp (name, "h2") == 0)return BezTriple_geth2(self);
154 if (strcmp (name, "f1") == 0)return BezTriple_getf1(self);
155 if (strcmp (name, "f2") == 0)return BezTriple_getf2(self);
156 if (strcmp (name, "f3") == 0)return BezTriple_getf3(self);
157
158 if (strcmp (name, "h1t") == 0)return BezTriple_geth1t(self);
159 if (strcmp (name, "h1Type") == 0)return BezTriple_geth1t(self);
160
161 if (strcmp (name, "h2t") == 0)return BezTriple_geth2t(self);
162 if (strcmp (name, "h2Type") == 0)return BezTriple_geth2t(self);
163   return Py_FindMethod(C_BezTriple_methods, (PyObject *)self, name);
164 }
165
166 /*****************************************************************************/
167 /* Function:    BezTripleSetAttr                                                */
168 /* Description: This is a callback function for the C_BezTriple type. It is the */
169 /*              function that sets BezTriple Data attributes (member variables).*/
170 /*****************************************************************************/
171 static int BezTripleSetAttr (C_BezTriple *self, char *name, PyObject *value)
172 {
173 if (strcmp (name, "pt") == 0)return BezTriple_setPoints(self,value);
174   return 0; /* normal exit */
175 }
176
177 /*****************************************************************************/
178 /* Function:    BezTripleRepr                                                */
179 /* Description: This is a callback function for the C_BezTriple type. It     */
180 /*              builds a meaninful string to represent  BezTriple objects.   */
181 /*****************************************************************************/
182 static PyObject *BezTripleRepr (C_BezTriple *self)
183 {
184         /*      float vec[3][3];
185         float alfa;
186         short s[3][2];
187         short h1, h2;
188         char f1, f2, f3, hide;
189         */
190         char str[1000];
191         sprintf(str,"BezTriple %f %f %f %f %f %f %f %f %f %f\n %d %d %d %d %d %d %d %d %d %d %d %d\n",self->beztriple->vec[0][0],self->beztriple->vec[0][1],self->beztriple->vec[0][2],self->beztriple->vec[1][0],self->beztriple->vec[1][1],self->beztriple->vec[1][2],self->beztriple->vec[2][0],self->beztriple->vec[2][1],self->beztriple->vec[2][2],self->beztriple->alfa,self->beztriple->s[0][0],self->beztriple->s[0][1],self->beztriple->s[1][0],self->beztriple->s[1][1],self->beztriple->s[2][0],self->beztriple->s[1][1],self->beztriple->h1,self->beztriple->h2,self->beztriple->f1,self->beztriple->f2,self->beztriple->f3,self->beztriple->hide);
192   return PyString_FromString(str);
193 }
194
195 /* Three Python BezTriple_Type helper functions needed by the Object module: */
196
197 /*****************************************************************************/
198 /* Function:    BezTriple_CreatePyObject                                           */
199 /* Description: This function will create a new C_BezTriple from an existing       */
200 /*              Blender ipo structure.                                       */
201 /*****************************************************************************/
202 PyObject *BezTriple_CreatePyObject (BezTriple *bzt)
203 {
204         C_BezTriple *pybeztriple;
205
206         pybeztriple = (C_BezTriple *)PyObject_NEW (C_BezTriple, &BezTriple_Type);
207
208         if (!pybeztriple)
209                 return EXPP_ReturnPyObjError (PyExc_MemoryError,
210                                                 "couldn't create C_BezTriple object");
211
212         pybeztriple->beztriple = bzt;
213
214         return (PyObject *)pybeztriple;
215 }
216
217 /*****************************************************************************/
218 /* Function:    BezTriple_CheckPyObject                                            */
219 /* Description: This function returns true when the given PyObject is of the */
220 /*              type BezTriple. Otherwise it will return false.                    */
221 /*****************************************************************************/
222 int BezTriple_CheckPyObject (PyObject *pyobj)
223 {
224         return (pyobj->ob_type == &BezTriple_Type);
225 }
226
227 /*****************************************************************************/
228 /* Function:    BezTriple_FromPyObject                                             */
229 /* Description: This function returns the Blender beztriple from the given         */
230 /*              PyObject.                                                    */
231 /*****************************************************************************/
232 BezTriple *BezTriple_FromPyObject (PyObject *pyobj)
233 {
234         return ((C_BezTriple *)pyobj)->beztriple;
235 }