[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42667] trunk/blender/source/blender: de-duplicate parent loop checking function

Campbell Barton ideasman42 at gmail.com
Fri Dec 16 11:39:45 CET 2011


Revision: 42667
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42667
Author:   campbellbarton
Date:     2011-12-16 10:39:43 +0000 (Fri, 16 Dec 2011)
Log Message:
-----------
de-duplicate parent loop checking function

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_object.h
    trunk/blender/source/blender/blenkernel/intern/object.c
    trunk/blender/source/blender/editors/object/object_relations.c
    trunk/blender/source/blender/editors/space_view3d/view3d_buttons.c

Modified: trunk/blender/source/blender/blenkernel/BKE_object.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_object.h	2011-12-16 10:30:53 UTC (rev 42666)
+++ trunk/blender/source/blender/blenkernel/BKE_object.h	2011-12-16 10:39:43 UTC (rev 42667)
@@ -120,6 +120,8 @@
         const short flag,
         void (*func_cb)(const float[3], void *), void *user_data);
 
+int BKE_object_parent_loop_check(const struct Object *parent, const struct Object *ob);
+
 void solve_tracking (struct Object *ob, float targetmat[][4]);
 int ray_hit_boundbox(struct BoundBox *bb, float ray_start[3], float ray_normal[3]);
 

Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c	2011-12-16 10:30:53 UTC (rev 42666)
+++ trunk/blender/source/blender/blenkernel/intern/object.c	2011-12-16 10:39:43 UTC (rev 42667)
@@ -2473,6 +2473,14 @@
 	copy_m4_m4(ob->imat, obtfm->imat);
 }
 
+int BKE_object_parent_loop_check(const Object *par, const Object *ob)
+{
+	/* test if 'ob' is a parent somewhere in par's parents */
+	if(par == NULL) return 0;
+	if(ob == par) return 1;
+	return BKE_object_parent_loop_check(par->parent, ob);
+}
+
 /* proxy rule: lib_object->proxy_from == the one we borrow from, only set temporal and cleared here */
 /*           local_object->proxy      == pointer to library object, saved in files and read */
 

Modified: trunk/blender/source/blender/editors/object/object_relations.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_relations.c	2011-12-16 10:30:53 UTC (rev 42666)
+++ trunk/blender/source/blender/editors/object/object_relations.c	2011-12-16 10:39:43 UTC (rev 42667)
@@ -512,19 +512,9 @@
 	{0, NULL, 0, NULL, NULL}
 };
 
-static int test_parent_loop(Object *par, Object *ob)
-{
-	/* test if 'ob' is a parent somewhere in par's parents */
-	
-	if(par == NULL) return 0;
-	if(ob == par) return 1;
-	
-	return test_parent_loop(par->parent, ob);
-}
-
 void ED_object_parent(Object *ob, Object *par, int type, const char *substr)
 {
-	if(!par || test_parent_loop(par, ob)) {
+	if (!par || BKE_object_parent_loop_check(par, ob)) {
 		ob->parent= NULL;
 		ob->partype= PAROBJECT;
 		ob->parsubstr[0]= 0;
@@ -593,7 +583,7 @@
 		
 		if(ob!=par) {
 			
-			if( test_parent_loop(par, ob) ) {
+			if (BKE_object_parent_loop_check(par, ob)) {
 				BKE_report(op->reports, RPT_ERROR, "Loop in parents");
 			}
 			else {
@@ -766,7 +756,7 @@
 	/* context iterator */
 	CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) {
 		if (ob != par) {
-			if (test_parent_loop(par, ob)) {
+			if (BKE_object_parent_loop_check(par, ob)) {
 				BKE_report(op->reports, RPT_ERROR, "Loop in parents");
 			}
 			else {

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_buttons.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_buttons.c	2011-12-16 10:30:53 UTC (rev 42666)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_buttons.c	2011-12-16 10:39:43 UTC (rev 42667)
@@ -59,6 +59,7 @@
 #include "BKE_mesh.h"
 #include "BKE_screen.h"
 #include "BKE_deform.h"
+#include "BKE_object.h"
 
 #include "WM_api.h"
 #include "WM_types.h"
@@ -1105,14 +1106,6 @@
 	}	
 }
 
-/* test if 'ob' is a parent somewhere in par's parents */
-static int test_parent_loop(Object *par, Object *ob)
-{
-	if(par == NULL) return 0;
-	if(ob == par) return 1;
-	return test_parent_loop(par->parent, ob);
-}
-
 static void do_view3d_region_buttons(bContext *C, void *UNUSED(index), int event)
 {
 	Main *bmain= CTX_data_main(C);
@@ -1144,7 +1137,7 @@
 		/* note; this case also used for parbone */
 	case B_OBJECTPANELPARENT:
 		if(ob) {
-			if(ob->id.lib || test_parent_loop(ob->parent, ob) ) 
+			if (ob->id.lib || BKE_object_parent_loop_check(ob->parent, ob))
 				ob->parent= NULL;
 			else {
 				DAG_scene_sort(bmain, scene);




More information about the Bf-blender-cvs mailing list