forked from bartvdbraak/blender
Restored 'Make Parent Without Inverse' Operator (Ctrl Shift P)
I've made this a separate operator to Make Parent, since the two were signficantly different (this version only works for Objects, and doesn't care about other types of parenting).
This commit is contained in:
parent
b2f9672078
commit
536fe27ba3
@ -51,6 +51,7 @@ void OBJECT_OT_center_set(struct wmOperatorType *ot);
|
||||
|
||||
/* object_relations.c */
|
||||
void OBJECT_OT_parent_set(struct wmOperatorType *ot);
|
||||
void OBJECT_OT_parent_no_inverse_set(struct wmOperatorType *ot);
|
||||
void OBJECT_OT_parent_clear(struct wmOperatorType *ot);
|
||||
void OBJECT_OT_vertex_parent_set(struct wmOperatorType *ot);
|
||||
void OBJECT_OT_track_set(struct wmOperatorType *ot);
|
||||
|
@ -83,6 +83,7 @@ void ED_operatortypes_object(void)
|
||||
WM_operatortype_append(OBJECT_OT_shade_flat);
|
||||
|
||||
WM_operatortype_append(OBJECT_OT_parent_set);
|
||||
WM_operatortype_append(OBJECT_OT_parent_no_inverse_set);
|
||||
WM_operatortype_append(OBJECT_OT_parent_clear);
|
||||
WM_operatortype_append(OBJECT_OT_vertex_parent_set);
|
||||
WM_operatortype_append(OBJECT_OT_track_set);
|
||||
@ -244,6 +245,7 @@ void ED_keymap_object(wmKeyConfig *keyconf)
|
||||
WM_keymap_add_item(keymap, "OBJECT_OT_select_mirror", MKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0);
|
||||
|
||||
WM_keymap_verify_item(keymap, "OBJECT_OT_parent_set", PKEY, KM_PRESS, KM_CTRL, 0);
|
||||
WM_keymap_verify_item(keymap, "OBJECT_OT_parent_no_inverse_set", PKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0);
|
||||
WM_keymap_verify_item(keymap, "OBJECT_OT_parent_clear", PKEY, KM_PRESS, KM_ALT, 0);
|
||||
WM_keymap_verify_item(keymap, "OBJECT_OT_track_set", TKEY, KM_PRESS, KM_CTRL, 0);
|
||||
WM_keymap_verify_item(keymap, "OBJECT_OT_track_clear", TKEY, KM_PRESS, KM_ALT, 0);
|
||||
|
@ -638,7 +638,7 @@ static int parent_set_exec(bContext *C, wmOperator *op)
|
||||
what_does_parent(scene, ob, &workob);
|
||||
|
||||
ob->partype= PARSKEL;
|
||||
|
||||
|
||||
Mat4Invert(ob->parentinv, workob.obmat);
|
||||
}
|
||||
else {
|
||||
@ -720,6 +720,60 @@ void OBJECT_OT_parent_set(wmOperatorType *ot)
|
||||
RNA_def_enum(ot->srna, "type", prop_make_parent_types, 0, "Type", "");
|
||||
}
|
||||
|
||||
/* ************ Make Parent Without Inverse Operator ******************* */
|
||||
|
||||
static int parent_noinv_set_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
Object *par= CTX_data_active_object(C);
|
||||
|
||||
par->recalc |= OB_RECALC_OB;
|
||||
|
||||
/* context itterator */
|
||||
CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) {
|
||||
if (ob != par) {
|
||||
if (test_parent_loop(par, ob)) {
|
||||
BKE_report(op->reports, RPT_ERROR, "Loop in parents");
|
||||
}
|
||||
else {
|
||||
/* clear inverse matrix and also the object location */
|
||||
Mat4One(ob->parentinv);
|
||||
memset(ob->loc, 0, 3*sizeof(float));
|
||||
|
||||
/* set recalc flags */
|
||||
ob->recalc |= OB_RECALC_OB|OB_RECALC_DATA;
|
||||
|
||||
/* set parenting type for object - object only... */
|
||||
ob->parent= par;
|
||||
ob->partype= PAROBJECT; /* note, dna define, not operator property */
|
||||
}
|
||||
}
|
||||
}
|
||||
CTX_DATA_END;
|
||||
|
||||
DAG_scene_sort(CTX_data_scene(C));
|
||||
ED_anim_dag_flush_update(C);
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void OBJECT_OT_parent_no_inverse_set(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Make Parent without Inverse";
|
||||
ot->description = "Set the object's parenting without setting the inverse parent correction.";
|
||||
ot->idname= "OBJECT_OT_parent_no_inverse_set";
|
||||
|
||||
/* api callbacks */
|
||||
ot->invoke= WM_operator_confirm;
|
||||
ot->exec= parent_noinv_set_exec;
|
||||
ot->poll= ED_operator_object_active;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
}
|
||||
|
||||
/************************ Clear Slow Parent Operator *********************/
|
||||
|
||||
static int object_slow_parent_clear_exec(bContext *C, wmOperator *op)
|
||||
|
Loading…
Reference in New Issue
Block a user