[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24086] trunk/blender/source/blender/ editors/object: Restored 'Make Parent Without Inverse' Operator ( Ctrl Shift P)
Joshua Leung
aligorith at gmail.com
Mon Oct 26 12:20:17 CET 2009
Revision: 24086
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24086
Author: aligorith
Date: 2009-10-26 12:20:16 +0100 (Mon, 26 Oct 2009)
Log Message:
-----------
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).
Modified Paths:
--------------
trunk/blender/source/blender/editors/object/object_intern.h
trunk/blender/source/blender/editors/object/object_ops.c
trunk/blender/source/blender/editors/object/object_relations.c
Modified: trunk/blender/source/blender/editors/object/object_intern.h
===================================================================
--- trunk/blender/source/blender/editors/object/object_intern.h 2009-10-26 11:10:04 UTC (rev 24085)
+++ trunk/blender/source/blender/editors/object/object_intern.h 2009-10-26 11:20:16 UTC (rev 24086)
@@ -51,6 +51,7 @@
/* 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);
Modified: trunk/blender/source/blender/editors/object/object_ops.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_ops.c 2009-10-26 11:10:04 UTC (rev 24085)
+++ trunk/blender/source/blender/editors/object/object_ops.c 2009-10-26 11:20:16 UTC (rev 24086)
@@ -83,6 +83,7 @@
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 @@
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);
Modified: trunk/blender/source/blender/editors/object/object_relations.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_relations.c 2009-10-26 11:10:04 UTC (rev 24085)
+++ trunk/blender/source/blender/editors/object/object_relations.c 2009-10-26 11:20:16 UTC (rev 24086)
@@ -638,7 +638,7 @@
what_does_parent(scene, ob, &workob);
ob->partype= PARSKEL;
-
+
Mat4Invert(ob->parentinv, workob.obmat);
}
else {
@@ -720,6 +720,60 @@
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)
More information about the Bf-blender-cvs
mailing list