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;


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

Reply via email to