[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