forked from bartvdbraak/blender
fix for crashes moving armature layers and applying loc/scale/rot in armature editmode.
This commit is contained in:
parent
a5867232b1
commit
91e4a1bdf8
@ -1707,15 +1707,18 @@ static int pose_armature_layers_invoke (bContext *C, wmOperator *op, wmEvent *ev
|
||||
static int pose_armature_layers_exec (bContext *C, wmOperator *op)
|
||||
{
|
||||
Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
|
||||
bArmature *arm= (ob)? ob->data : NULL;
|
||||
PointerRNA ptr;
|
||||
int layers[32]; /* hardcoded for now - we can only have 32 armature layers, so this should be fine... */
|
||||
|
||||
if(ob==NULL || ob->data==NULL) {
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
/* get the values set in the operator properties */
|
||||
RNA_boolean_get_array(op->ptr, "layers", layers);
|
||||
|
||||
/* get pointer for armature, and write data there... */
|
||||
RNA_id_pointer_create((ID *)arm, &ptr);
|
||||
RNA_id_pointer_create((ID *)ob->data, &ptr);
|
||||
RNA_boolean_set_array(&ptr, "layers", layers);
|
||||
|
||||
/* note, notifier might evolve */
|
||||
@ -1794,10 +1797,13 @@ static int pose_bone_layers_invoke (bContext *C, wmOperator *op, wmEvent *evt)
|
||||
static int pose_bone_layers_exec (bContext *C, wmOperator *op)
|
||||
{
|
||||
Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
|
||||
bArmature *arm= (ob)? ob->data : NULL;
|
||||
PointerRNA ptr;
|
||||
int layers[32]; /* hardcoded for now - we can only have 32 armature layers, so this should be fine... */
|
||||
|
||||
if(ob==NULL || ob->data==NULL) {
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
/* get the values set in the operator properties */
|
||||
RNA_boolean_get_array(op->ptr, "layers", layers);
|
||||
|
||||
@ -1805,7 +1811,7 @@ static int pose_bone_layers_exec (bContext *C, wmOperator *op)
|
||||
CTX_DATA_BEGIN(C, bPoseChannel *, pchan, selected_pose_bones)
|
||||
{
|
||||
/* get pointer for pchan, and write flags this way */
|
||||
RNA_pointer_create((ID *)arm, &RNA_Bone, pchan->bone, &ptr);
|
||||
RNA_pointer_create((ID *)ob->data, &RNA_Bone, pchan->bone, &ptr);
|
||||
RNA_boolean_set_array(&ptr, "layers", layers);
|
||||
}
|
||||
CTX_DATA_END;
|
||||
|
@ -607,7 +607,7 @@ void OBJECT_OT_location_apply(wmOperatorType *ot)
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= location_apply_exec;
|
||||
ot->poll= ED_operator_scene_editable;
|
||||
ot->poll= ED_operator_objectmode; /* editmode will crash */
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
@ -627,7 +627,7 @@ void OBJECT_OT_scale_apply(wmOperatorType *ot)
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= scale_apply_exec;
|
||||
ot->poll= ED_operator_scene_editable;
|
||||
ot->poll= ED_operator_objectmode;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
@ -647,7 +647,7 @@ void OBJECT_OT_rotation_apply(wmOperatorType *ot)
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= rotation_apply_exec;
|
||||
ot->poll= ED_operator_scene_editable;
|
||||
ot->poll= ED_operator_objectmode;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
|
Loading…
Reference in New Issue
Block a user