forked from bartvdbraak/blender
Fix T43174: "Record animation" does not update fcurve handles
`INSERT_FAST` implies you call `calchandles_fcurve()` at the end... For now, since we do not store edited FCurves nor can we get them easily (requires RNA...), just update handles of all fcurves, it's much more performant than removing usage of `INSERT_FAST` anyway.
This commit is contained in:
parent
ac619aaf38
commit
1187b98d48
@ -623,6 +623,7 @@ int WM_operator_ui_popup(struct bContext *C, struct wmOperator *op, int width, i
|
|||||||
void update_autoflags_fcurve(struct FCurve *fcu, struct bContext *C, struct ReportList *reports, struct PointerRNA *ptr) RET_NONE
|
void update_autoflags_fcurve(struct FCurve *fcu, struct bContext *C, struct ReportList *reports, struct PointerRNA *ptr) RET_NONE
|
||||||
short insert_keyframe(struct ReportList *reports, struct ID *id, struct bAction *act, const char group[], const char rna_path[], int array_index, float cfra, short flag) RET_ZERO
|
short insert_keyframe(struct ReportList *reports, struct ID *id, struct bAction *act, const char group[], const char rna_path[], int array_index, float cfra, short flag) RET_ZERO
|
||||||
short delete_keyframe(struct ReportList *reports, struct ID *id, struct bAction *act, const char group[], const char rna_path[], int array_index, float cfra, short flag) RET_ZERO
|
short delete_keyframe(struct ReportList *reports, struct ID *id, struct bAction *act, const char group[], const char rna_path[], int array_index, float cfra, short flag) RET_ZERO
|
||||||
|
struct bAction *verify_adt_action(struct ID *id, short add) RET_NULL
|
||||||
char *WM_operator_pystring_ex(struct bContext *C, struct wmOperator *op, const bool all_args, const bool macro_args, struct wmOperatorType *ot, struct PointerRNA *opptr) RET_NULL
|
char *WM_operator_pystring_ex(struct bContext *C, struct wmOperator *op, const bool all_args, const bool macro_args, struct wmOperatorType *ot, struct PointerRNA *opptr) RET_NULL
|
||||||
char *WM_operator_pystring(struct bContext *C, struct wmOperator *op, const bool all_args, const bool macro_args) RET_NULL
|
char *WM_operator_pystring(struct bContext *C, struct wmOperator *op, const bool all_args, const bool macro_args) RET_NULL
|
||||||
struct wmKeyMapItem *WM_modalkeymap_add_item(struct wmKeyMap *km, int type, int val, int modifier, int keymodifier, int value) RET_NULL
|
struct wmKeyMapItem *WM_modalkeymap_add_item(struct wmKeyMap *km, int type, int val, int modifier, int keymodifier, int value) RET_NULL
|
||||||
|
@ -69,6 +69,7 @@
|
|||||||
#include "DNA_scene_types.h"
|
#include "DNA_scene_types.h"
|
||||||
#include "DNA_world_types.h"
|
#include "DNA_world_types.h"
|
||||||
#include "BKE_main.h"
|
#include "BKE_main.h"
|
||||||
|
#include "BKE_fcurve.h"
|
||||||
|
|
||||||
#include "BLI_math.h"
|
#include "BLI_math.h"
|
||||||
|
|
||||||
@ -87,6 +88,7 @@ extern "C"
|
|||||||
#include "BKE_mesh.h" // BKE_mesh_copy
|
#include "BKE_mesh.h" // BKE_mesh_copy
|
||||||
#include "DNA_space_types.h"
|
#include "DNA_space_types.h"
|
||||||
#include "DNA_anim_types.h"
|
#include "DNA_anim_types.h"
|
||||||
|
#include "DNA_action_types.h"
|
||||||
#include "RNA_define.h"
|
#include "RNA_define.h"
|
||||||
#include "../../blender/editors/include/ED_keyframing.h"
|
#include "../../blender/editors/include/ED_keyframing.h"
|
||||||
}
|
}
|
||||||
@ -843,13 +845,26 @@ void KX_BlenderSceneConverter::TestHandlesPhysicsObjectToAnimationIpo()
|
|||||||
{
|
{
|
||||||
KX_GameObject* gameObj = (KX_GameObject*)parentList->GetValue(g);
|
KX_GameObject* gameObj = (KX_GameObject*)parentList->GetValue(g);
|
||||||
if (gameObj->IsRecordAnimation()) {
|
if (gameObj->IsRecordAnimation()) {
|
||||||
#if 0
|
|
||||||
Object* blenderObject = gameObj->GetBlenderObject();
|
Object* blenderObject = gameObj->GetBlenderObject();
|
||||||
if (blenderObject && blenderObject->ipo)
|
if (blenderObject && blenderObject->adt)
|
||||||
{
|
{
|
||||||
|
bAction *act = verify_adt_action(&blenderObject->id, false);
|
||||||
|
FCurve *fcu;
|
||||||
|
|
||||||
|
if (!act) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* for now, not much choice but to run this on all curves... */
|
||||||
|
for (fcu = (FCurve *)act->curves.first; fcu; fcu = fcu->next) {
|
||||||
|
/* Note: calling `sort_time_fcurve()` here is not needed, since
|
||||||
|
* all keys have been added in 'right' order. */
|
||||||
|
calchandles_fcurve(fcu);
|
||||||
|
}
|
||||||
|
#if 0
|
||||||
// XXX animato
|
// XXX animato
|
||||||
Ipo* ipo = blenderObject->ipo;
|
Ipo* ipo = blenderObject->ipo;
|
||||||
|
|
||||||
//create the curves, if not existing
|
//create the curves, if not existing
|
||||||
//testhandles_ipocurve checks for NULL
|
//testhandles_ipocurve checks for NULL
|
||||||
testhandles_ipocurve(findIpoCurve((IpoCurve *)ipo->curve.first,"LocX"));
|
testhandles_ipocurve(findIpoCurve((IpoCurve *)ipo->curve.first,"LocX"));
|
||||||
@ -858,8 +873,8 @@ void KX_BlenderSceneConverter::TestHandlesPhysicsObjectToAnimationIpo()
|
|||||||
testhandles_ipocurve(findIpoCurve((IpoCurve *)ipo->curve.first,"RotX"));
|
testhandles_ipocurve(findIpoCurve((IpoCurve *)ipo->curve.first,"RotX"));
|
||||||
testhandles_ipocurve(findIpoCurve((IpoCurve *)ipo->curve.first,"RotY"));
|
testhandles_ipocurve(findIpoCurve((IpoCurve *)ipo->curve.first,"RotY"));
|
||||||
testhandles_ipocurve(findIpoCurve((IpoCurve *)ipo->curve.first,"RotZ"));
|
testhandles_ipocurve(findIpoCurve((IpoCurve *)ipo->curve.first,"RotZ"));
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user