[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28505] trunk/blender/source: option to copy constraints without making their ID references direct links .

Campbell Barton ideasman42 at gmail.com
Thu Apr 29 17:31:53 CEST 2010


Revision: 28505
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28505
Author:   campbellbarton
Date:     2010-04-29 17:31:53 +0200 (Thu, 29 Apr 2010)

Log Message:
-----------
option to copy constraints without making their ID references direct links.
needed because proxies are causing libs to be linked directly when they should be kept indirect (likely slowing load times though I didnt time this)

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_constraint.h
    trunk/blender/source/blender/blenkernel/intern/action.c
    trunk/blender/source/blender/blenkernel/intern/armature.c
    trunk/blender/source/blender/blenkernel/intern/constraint.c
    trunk/blender/source/blender/blenkernel/intern/object.c
    trunk/blender/source/blender/editors/armature/poseobject.c
    trunk/blender/source/blender/editors/object/object_constraint.c
    trunk/blender/source/blender/editors/object/object_edit.c
    trunk/blender/source/gameengine/Converter/BL_ArmatureObject.cpp

Modified: trunk/blender/source/blender/blenkernel/BKE_constraint.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_constraint.h	2010-04-29 14:44:39 UTC (rev 28504)
+++ trunk/blender/source/blender/blenkernel/BKE_constraint.h	2010-04-29 15:31:53 UTC (rev 28505)
@@ -122,7 +122,7 @@
 void unique_constraint_name(struct bConstraint *con, struct ListBase *list);
 
 void free_constraints(struct ListBase *list);
-void copy_constraints(struct ListBase *dst, const struct ListBase *src);
+void copy_constraints(struct ListBase *dst, const struct ListBase *src, int do_extern);
 void relink_constraints(struct ListBase *list);
 void id_loop_constraints(struct ListBase *list, ConstraintIDFunc func, void *userdata);
 void free_constraint_data(struct bConstraint *con);

Modified: trunk/blender/source/blender/blenkernel/intern/action.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/action.c	2010-04-29 14:44:39 UTC (rev 28504)
+++ trunk/blender/source/blender/blenkernel/intern/action.c	2010-04-29 15:31:53 UTC (rev 28505)
@@ -493,7 +493,7 @@
 	for (pchan=outPose->chanbase.first; pchan; pchan=pchan->next) {
 		// TODO: rename this argument...
 		if (copycon) {
-			copy_constraints(&listb, &pchan->constraints);  // copy_constraints NULLs listb
+			copy_constraints(&listb, &pchan->constraints, TRUE);  // copy_constraints NULLs listb
 			pchan->constraints= listb;
 			pchan->path= NULL; // XXX remove this line when the new motionpaths are ready... (depreceated code)
 			pchan->mpath= NULL; /* motion paths should not get copied yet... */
@@ -667,7 +667,7 @@
 	pchan->iklinweight= pchan_from->iklinweight;
 
 	/* constraints */
-	copy_constraints(&pchan->constraints, &pchan_from->constraints);
+	copy_constraints(&pchan->constraints, &pchan_from->constraints, TRUE);
 
 	/* id-properties */
 	if(pchan->prop) {

Modified: trunk/blender/source/blender/blenkernel/intern/armature.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/armature.c	2010-04-29 14:44:39 UTC (rev 28504)
+++ trunk/blender/source/blender/blenkernel/intern/armature.c	2010-04-29 15:31:53 UTC (rev 28505)
@@ -1568,9 +1568,11 @@
 			 *	1. extract constraints not from proxy (CONSTRAINT_PROXY_LOCAL) from pchan's constraints
 			 *	2. copy proxy-pchan's constraints on-to new
 			 *	3. add extracted local constraints back on top 
+			 *
+			 *  note for copy_constraints: when copying constraints, disable 'do_extern' otherwise we get the libs direct linked in this blend.
 			 */
 			extract_proxylocal_constraints(&proxylocal_constraints, &pchan->constraints);
-			copy_constraints(&pchanw.constraints, &pchanp->constraints);
+			copy_constraints(&pchanw.constraints, &pchanp->constraints, FALSE);
 			addlisttolist(&pchanw.constraints, &proxylocal_constraints);
 			
 			/* constraints - set target ob pointer to own object */

Modified: trunk/blender/source/blender/blenkernel/intern/constraint.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/constraint.c	2010-04-29 14:44:39 UTC (rev 28504)
+++ trunk/blender/source/blender/blenkernel/intern/constraint.c	2010-04-29 15:31:53 UTC (rev 28505)
@@ -4131,7 +4131,7 @@
 }
 
 /* duplicate all of the constraints in a constraint stack */
-void copy_constraints (ListBase *dst, const ListBase *src)
+void copy_constraints (ListBase *dst, const ListBase *src, int do_extern)
 {
 	bConstraint *con, *srccon;
 	
@@ -4149,10 +4149,13 @@
 			/* perform custom copying operations if needed */
 			if (cti->copy_data)
 				cti->copy_data(con, srccon);
-			
-			/* go over used ID-links for this constraint to ensure that they are valid for proxies */
-			if (cti->id_looper)
-				cti->id_looper(con, con_extern_cb, NULL);
+
+			/* for proxies we dont want to make extern */
+			if(do_extern) {
+				/* go over used ID-links for this constraint to ensure that they are valid for proxies */
+				if (cti->id_looper)
+					cti->id_looper(con, con_extern_cb, NULL);
+			}
 		}
 	}
 }

Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c	2010-04-29 14:44:39 UTC (rev 28504)
+++ trunk/blender/source/blender/blenkernel/intern/object.c	2010-04-29 15:31:53 UTC (rev 28505)
@@ -1282,7 +1282,7 @@
 			armature_rebuild_pose(obn, obn->data);
 	}
 	defgroup_copy_list(&obn->defbase, &ob->defbase);
-	copy_constraints(&obn->constraints, &ob->constraints);
+	copy_constraints(&obn->constraints, &ob->constraints, TRUE);
 
 	obn->mode = 0;
 	obn->sculpt = NULL;

Modified: trunk/blender/source/blender/editors/armature/poseobject.c
===================================================================
--- trunk/blender/source/blender/editors/armature/poseobject.c	2010-04-29 14:44:39 UTC (rev 28504)
+++ trunk/blender/source/blender/editors/armature/poseobject.c	2010-04-29 15:31:53 UTC (rev 28505)
@@ -691,7 +691,7 @@
 						/* copy constraints to tmpbase and apply 'local' tags before 
 						 * appending to list of constraints for this channel
 						 */
-						copy_constraints(&tmp_constraints, &pchanact->constraints);
+						copy_constraints(&tmp_constraints, &pchanact->constraints, TRUE);
 						if ((ob->proxy) && (pchan->bone->layer & arm->layer_protected)) {
 							bConstraint *con;
 							
@@ -800,7 +800,7 @@
 				/* copy constraints to tmpbase and apply 'local' tags before 
 				 * appending to list of constraints for this channel
 				 */
-				copy_constraints(&tmp_constraints, &const_copy);
+				copy_constraints(&tmp_constraints, &const_copy, TRUE);
 				if ((ob->proxy) && (pchan->bone->layer & arm->layer_protected)) {
 					bConstraint *con;
 					

Modified: trunk/blender/source/blender/editors/object/object_constraint.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_constraint.c	2010-04-29 14:44:39 UTC (rev 28504)
+++ trunk/blender/source/blender/editors/object/object_constraint.c	2010-04-29 15:31:53 UTC (rev 28505)
@@ -1256,7 +1256,7 @@
 	CTX_DATA_BEGIN(C, Object*, ob_iter, selected_editable_objects) {
 		if(ob != ob_iter) {
 			if (ob->data != ob_iter->data){
-				copy_constraints(&ob_iter->constraints, &ob->constraints);
+				copy_constraints(&ob_iter->constraints, &ob->constraints, TRUE);
 			}
 			
 			if(ob_iter->totcol==ob->totcol) {

Modified: trunk/blender/source/blender/editors/object/object_edit.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_edit.c	2010-04-29 14:44:39 UTC (rev 28504)
+++ trunk/blender/source/blender/editors/object/object_edit.c	2010-04-29 15:31:53 UTC (rev 28505)
@@ -1450,7 +1450,7 @@
 				}
 				else if(event==22) {
 					/* Copy the constraint channels over */
-					copy_constraints(&base->object->constraints, &ob->constraints);
+					copy_constraints(&base->object->constraints, &ob->constraints, TRUE);
 					
 					do_scene_sort= 1;
 				}

Modified: trunk/blender/source/gameengine/Converter/BL_ArmatureObject.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_ArmatureObject.cpp	2010-04-29 14:44:39 UTC (rev 28504)
+++ trunk/blender/source/gameengine/Converter/BL_ArmatureObject.cpp	2010-04-29 15:31:53 UTC (rev 28505)
@@ -108,7 +108,7 @@
 		if (copy_constraint) {
 			ListBase listb;
 			// copy all constraint for backward compatibility
-			copy_constraints(&listb, &pchan->constraints);  // copy_constraints NULLs listb
+			copy_constraints(&listb, &pchan->constraints, FALSE);  // copy_constraints NULLs listb, no need to make extern for this operation.
 			pchan->constraints= listb;
 		} else {
 			pchan->constraints.first = NULL;





More information about the Bf-blender-cvs mailing list