merge with trunk at r27259 and commit of a patch by anthony jones to fix msvc (though...
[blender-staging.git] / source / gameengine / Converter / BL_ArmatureChannel.h
1 /**
2  * $Id: BL_ArmatureChannel.h 23562 2009-09-29 21:42:40Z campbellbarton $
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19  *
20  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
21  * All rights reserved.
22  *
23  * The Original Code is: all of this file.
24  *
25  * Contributor(s): none yet.
26  *
27  * ***** END GPL LICENSE BLOCK *****
28  */
29 #ifndef __BL_ARMATURECHANNEL
30 #define __BL_ARMATURECHANNEL
31
32 #include "DNA_action_types.h"
33 #include "GEN_HashedPtr.h"
34 #include "GEN_Map.h"
35 #include "PyObjectPlus.h"
36
37 class SCA_IObject;
38 class KX_GameObject;
39 class BL_ArmatureObject;
40 struct bConstraint;
41 struct bPoseChannel;
42 struct Object;
43 struct bPose;
44
45 class BL_ArmatureChannel : public PyObjectPlus
46 {
47         // use Py_HeaderPtr since we use generic pointer in proxy
48         Py_HeaderPtr;
49
50 private:
51         friend class BL_ArmatureObject;
52         struct bPoseChannel* m_posechannel;
53         BL_ArmatureObject* m_armature;
54
55 public:
56         BL_ArmatureChannel(class BL_ArmatureObject *armature, 
57                                                 struct bPoseChannel *posechannel);
58         virtual ~BL_ArmatureChannel();
59
60 #ifndef DISABLE_PYTHON
61         // Python access
62         virtual PyObject* py_repr(void);
63
64         static PyObject* py_attr_getattr(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
65         static int py_attr_setattr(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
66         static PyObject* py_attr_get_joint_rotation(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
67         static int py_attr_set_joint_rotation(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
68 #endif // DISABLE_PYTHON
69 };
70
71 /* this is a factory class to access bBone data field in the GE.
72    It's not supposed to be instantiated, we only need it for the Attributes and Method array.
73    The actual proxy object will be manually created using NewProxyPtr */
74 class BL_ArmatureBone : public PyObjectPlus
75 {
76         // use Py_HeaderPtr since we use generic pointer in proxy
77         Py_HeaderPtr;
78 private:
79         // make constructor private to make sure no one tries to instantiate this class
80         BL_ArmatureBone() {}
81         virtual ~BL_ArmatureBone() {}
82
83 public:
84
85 #ifndef DISABLE_PYTHON
86         static PyObject *py_bone_repr(PyObject *self);
87         static PyObject *py_bone_get_parent(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
88         static PyObject *py_bone_get_children(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
89 #endif
90
91 };
92
93
94 #endif //__BL_ARMATURECHANNEL
95