[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [26713] trunk/blender/source/blender/ blenkernel/intern/constraint.c: run id_lib_extern on all constraint ID data when copying.

Campbell Barton ideasman42 at gmail.com
Mon Feb 8 18:30:37 CET 2010


Revision: 26713
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26713
Author:   campbellbarton
Date:     2010-02-08 18:30:35 +0100 (Mon, 08 Feb 2010)

Log Message:
-----------
run id_lib_extern on all constraint ID data when copying. solves possible errors when running make proxy on a library object.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/constraint.c

Modified: trunk/blender/source/blender/blenkernel/intern/constraint.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/constraint.c	2010-02-08 15:37:38 UTC (rev 26712)
+++ trunk/blender/source/blender/blenkernel/intern/constraint.c	2010-02-08 17:30:35 UTC (rev 26713)
@@ -2011,14 +2011,6 @@
 	data->type = 20;
 }
 
-/* only for setting the ID as extern */
-static void actcon_copy_data (bConstraint *con, bConstraint *srccon)
-{
-	//bActionConstraint *src= srccon->data;
-	bActionConstraint *dst= con->data;
-	id_lib_extern((ID *)dst->act); /* would be better solved with something like modifiers_foreachIDLink */
-}
-
 static void actcon_id_looper (bConstraint *con, ConstraintIDFunc func, void *userdata)
 {
 	bActionConstraint *data= con->data;
@@ -2170,7 +2162,7 @@
 	NULL, /* free data */
 	actcon_relink, /* relink data */
 	actcon_id_looper, /* id looper */
-	actcon_copy_data, /* copy data */
+	NULL, /* copy data */
 	actcon_new_data, /* new data */
 	actcon_get_tars, /* get constraint targets */
 	actcon_flush_tars, /* flush constraint targets */
@@ -4049,6 +4041,12 @@
 
 /* ......... */
 
+static void con_extern_cb(bConstraint *con, ID **idpoin, void *userdata)
+{
+	if(idpoin && (*idpoin)->lib)
+		id_lib_extern(*idpoin);
+}
+
 /* duplicate all of the constraints in a constraint stack */
 void copy_constraints (ListBase *dst, const ListBase *src)
 {
@@ -4067,8 +4065,15 @@
 		id_us_plus((ID *)con->ipo);
 		
 		/* only do specific constraints if required */
-		if (cti && cti->copy_data)
-			cti->copy_data(con, srccon);
+		if (cti) {
+			if (cti->copy_data) {
+				cti->copy_data(con, srccon);
+			}
+
+			if(cti->id_looper) {
+				cti->id_looper(con, con_extern_cb, NULL);
+			}
+		}
 	}
 }
 





More information about the Bf-blender-cvs mailing list