Skip to content

Commit 721aaab

Browse files
author
Roberto De Ioris
committed
added api for building animations from python
1 parent b3cdb3b commit 721aaab

6 files changed

Lines changed: 75 additions & 2 deletions

File tree

Source/UnrealEnginePython/Private/UEPyModule.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,8 @@ static PyMethodDef ue_PyUObject_methods[] = {
462462
{ "anim_sequence_get_skeleton", (PyCFunction)py_ue_anim_sequence_get_skeleton, METH_VARARGS, "" },
463463
{ "get_raw_animation_data", (PyCFunction)py_ue_anim_sequence_get_raw_animation_data, METH_VARARGS, "" },
464464
{ "get_raw_animation_track", (PyCFunction)py_ue_anim_sequence_get_raw_animation_track, METH_VARARGS, "" },
465+
{ "set_skeleton", (PyCFunction)py_ue_anim_sequence_set_skeleton, METH_VARARGS, "" },
466+
{ "add_new_raw_track", (PyCFunction)py_ue_anim_sequence_add_new_raw_track, METH_VARARGS, "" },
465467

466468

467469
// StaticMesh

Source/UnrealEnginePython/Private/UObject/UEPyAnimSequence.cpp

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,59 @@ PyObject *py_ue_anim_sequence_get_raw_animation_track(ue_PyUObject * self, PyObj
5757

5858
return py_ue_new_fraw_anim_sequence_track(anim_seq->GetRawAnimationTrack(index));
5959
}
60+
61+
PyObject *py_ue_anim_sequence_add_new_raw_track(ue_PyUObject * self, PyObject * args) {
62+
ue_py_check(self);
63+
64+
char *name;
65+
PyObject *py_rast = nullptr;
66+
if (!PyArg_ParseTuple(args, "s|O:add_new_raw_track", &name, &py_rast))
67+
return nullptr;
68+
69+
UAnimSequence *anim_seq = ue_py_check_type<UAnimSequence>(self);
70+
if (!anim_seq)
71+
return PyErr_Format(PyExc_Exception, "UObject is not a UAnimSequence.");
72+
73+
FRawAnimSequenceTrack *rast = nullptr;
74+
75+
if (py_rast) {
76+
ue_PyFRawAnimSequenceTrack *py_f_rast = py_ue_is_fraw_anim_sequence_track(py_rast);
77+
if (py_f_rast) {
78+
rast = &py_f_rast->raw_anim_sequence_track;
79+
}
80+
else {
81+
return PyErr_Format(PyExc_Exception, "argument is not a FRawAnimSequenceTrack.");
82+
}
83+
}
84+
85+
anim_seq->Modify();
86+
87+
int32 index = anim_seq->AddNewRawTrack(FName(UTF8_TO_TCHAR(name)), rast);
88+
89+
if (anim_seq->DoesNeedRebake())
90+
anim_seq->BakeTrackCurvesToRawAnimation();
91+
92+
anim_seq->MarkRawDataAsModified();
93+
94+
return PyLong_FromLong(index);
95+
}
96+
97+
PyObject *py_ue_anim_sequence_set_skeleton(ue_PyUObject * self, PyObject * args) {
98+
ue_py_check(self);
99+
100+
PyObject *py_skeleton;
101+
if (!PyArg_ParseTuple(args, "O:set_skeleton", &py_skeleton))
102+
return nullptr;
103+
104+
UAnimSequence *anim_seq = ue_py_check_type<UAnimSequence>(self);
105+
if (!anim_seq)
106+
return PyErr_Format(PyExc_Exception, "UObject is not a UAnimSequence.");
107+
108+
USkeleton *skeleton = ue_py_check_type<USkeleton>(py_skeleton);
109+
if (!skeleton)
110+
return PyErr_Format(PyExc_Exception, "argument is not a USkeleton.");
111+
112+
anim_seq->SetSkeleton(skeleton);
113+
114+
Py_RETURN_NONE;
115+
}

Source/UnrealEnginePython/Private/UObject/UEPyAnimSequence.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,6 @@
66

77
PyObject *py_ue_anim_sequence_get_skeleton(ue_PyUObject *, PyObject *);
88
PyObject *py_ue_anim_sequence_get_raw_animation_data(ue_PyUObject *, PyObject *);
9-
PyObject *py_ue_anim_sequence_get_raw_animation_track(ue_PyUObject *, PyObject *);
9+
PyObject *py_ue_anim_sequence_get_raw_animation_track(ue_PyUObject *, PyObject *);
10+
PyObject *py_ue_anim_sequence_add_new_raw_track(ue_PyUObject *, PyObject *);
11+
PyObject *py_ue_anim_sequence_set_skeleton(ue_PyUObject *, PyObject *);

Source/UnrealEnginePython/Private/Wrappers/UEPyFRawAnimSequenceTrack.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,12 @@ void ue_python_init_fraw_anim_sequence_track(PyObject *ue_module) {
168168
PyModule_AddObject(ue_module, "FRawAnimSequenceTrack", (PyObject *)&ue_PyFRawAnimSequenceTrackType);
169169
}
170170

171+
ue_PyFRawAnimSequenceTrack *py_ue_is_fraw_anim_sequence_track(PyObject *obj) {
172+
if (!PyObject_IsInstance(obj, (PyObject *)&ue_PyFRawAnimSequenceTrackType))
173+
return nullptr;
174+
return (ue_PyFRawAnimSequenceTrack *)obj;
175+
}
176+
171177
PyObject *py_ue_new_fraw_anim_sequence_track(FRawAnimSequenceTrack raw_anim_sequence_track) {
172178
ue_PyFRawAnimSequenceTrack *ret = (ue_PyFRawAnimSequenceTrack *)PyObject_New(ue_PyFRawAnimSequenceTrack, &ue_PyFRawAnimSequenceTrackType);
173179
new(&ret->raw_anim_sequence_track) FRawAnimSequenceTrack(raw_anim_sequence_track);

Source/UnrealEnginePython/Private/Wrappers/UEPyFRawAnimSequenceTrack.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,6 @@ typedef struct {
1212

1313
PyObject *py_ue_new_fraw_anim_sequence_track(FRawAnimSequenceTrack);
1414

15-
void ue_python_init_fraw_anim_sequence_track(PyObject *);
15+
void ue_python_init_fraw_anim_sequence_track(PyObject *);
16+
17+
ue_PyFRawAnimSequenceTrack *py_ue_is_fraw_anim_sequence_track(PyObject *);

Source/UnrealEnginePython/Private/Wrappers/UEPyFRotator.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,17 @@ static PyObject *py_ue_frotator_normalized(ue_PyFRotator *self, PyObject * args)
2020
return py_ue_new_frotator(rot);
2121
}
2222

23+
static PyObject *py_ue_frotator_quaternion(ue_PyFRotator *self, PyObject * args) {
24+
FQuat quat = self->rot.Quaternion();
25+
return py_ue_new_fquat(quat);
26+
}
2327

2428
static PyMethodDef ue_PyFRotator_methods[] = {
2529
{ "get_vector", (PyCFunction)py_ue_frotator_get_vector, METH_VARARGS, "" },
2630
{ "get_euler", (PyCFunction)py_ue_frotator_get_euler, METH_VARARGS, "" },
2731
{ "normalized", (PyCFunction)py_ue_frotator_normalized, METH_VARARGS, "" },
2832
{ "inversed", (PyCFunction)py_ue_frotator_normalized, METH_VARARGS, "" },
33+
{ "quaternion", (PyCFunction)py_ue_frotator_quaternion, METH_VARARGS, "" },
2934
{ NULL } /* Sentinel */
3035
};
3136

0 commit comments

Comments
 (0)