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);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to