Revision: 17337
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17337
Author:   theeth
Date:     2008-11-05 21:15:32 +0100 (Wed, 05 Nov 2008)

Log Message:
-----------
Sketch retargetting. Templating from other armature objects.

Moving stuff home, saving doesn't work ok yet, will finish this later today, 
demo video when done.

Also a couple of bug fixes for crashing and some text reformulation and the 
like.

Modified Paths:
--------------
    branches/etch-a-ton/source/blender/blenlib/intern/graph.c
    branches/etch-a-ton/source/blender/blenloader/intern/readfile.c
    branches/etch-a-ton/source/blender/include/BIF_editarmature.h
    branches/etch-a-ton/source/blender/makesdna/DNA_scene_types.h
    branches/etch-a-ton/source/blender/src/drawview.c
    branches/etch-a-ton/source/blender/src/editarmature.c
    branches/etch-a-ton/source/blender/src/editarmature_retarget.c
    branches/etch-a-ton/source/blender/src/editarmature_sketch.c

Modified: branches/etch-a-ton/source/blender/blenlib/intern/graph.c
===================================================================
--- branches/etch-a-ton/source/blender/blenlib/intern/graph.c   2008-11-05 
17:38:31 UTC (rev 17336)
+++ branches/etch-a-ton/source/blender/blenlib/intern/graph.c   2008-11-05 
20:15:32 UTC (rev 17337)
@@ -1033,6 +1033,11 @@
        BNode *node;
        BArc *arc;
        
+       if (root_node == NULL)
+       {
+               return;
+       }
+       
        if (BLI_isGraphCyclic(graph))
        {
                return;

Modified: branches/etch-a-ton/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/etch-a-ton/source/blender/blenloader/intern/readfile.c     
2008-11-05 17:38:31 UTC (rev 17336)
+++ branches/etch-a-ton/source/blender/blenloader/intern/readfile.c     
2008-11-05 20:15:32 UTC (rev 17337)
@@ -3549,6 +3549,8 @@
        sce->radio= newdataadr(fd, sce->radio);
        
        sce->toolsettings= newdataadr(fd, sce->toolsettings);
+       
+       sce->toolsettings->skgen_template = newdataadr(fd, 
sce->toolsettings->skgen_template);
 
        sce->sculptdata.session= NULL;
        /* SculptData textures */

Modified: branches/etch-a-ton/source/blender/include/BIF_editarmature.h
===================================================================
--- branches/etch-a-ton/source/blender/include/BIF_editarmature.h       
2008-11-05 17:38:31 UTC (rev 17336)
+++ branches/etch-a-ton/source/blender/include/BIF_editarmature.h       
2008-11-05 20:15:32 UTC (rev 17337)
@@ -73,8 +73,16 @@
 /* duplicate method */
 void preEditBoneDuplicate(struct ListBase *editbones);
 EditBone *duplicateEditBone(EditBone *curBone, struct ListBase *editbones, 
struct Object *ob);
-void updateDuplicateSubtarget(EditBone *dupBone, struct Object *ob);
+void updateDuplicateSubtarget(EditBone *dupBone, struct ListBase *editbones, 
struct Object *ob);
 
+/* duplicate method (cross objects */
+
+/* editbones is the target list */
+EditBone *duplicateEditBoneObjects(EditBone *curBone, struct ListBase 
*editbones, struct Object *src_ob, struct Object *dst_ob);
+
+/* editbones is the source list */
+void updateDuplicateSubtargetObjects(EditBone *dupBone, struct ListBase 
*editbones, struct Object *src_ob, struct Object *dst_ob);
+
 /* -- */
 
 float rollBoneToVector(EditBone *bone, float new_up_axis[3]);

Modified: branches/etch-a-ton/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- branches/etch-a-ton/source/blender/makesdna/DNA_scene_types.h       
2008-11-05 17:38:31 UTC (rev 17336)
+++ branches/etch-a-ton/source/blender/makesdna/DNA_scene_types.h       
2008-11-05 20:15:32 UTC (rev 17337)
@@ -443,6 +443,7 @@
        char  skgen_multi_level;
        
        /* Skeleton Sketching */
+       struct Object *skgen_template;
        char bone_sketching;
        char bone_sketching_convert;
        char skgen_subdivision_number;

Modified: branches/etch-a-ton/source/blender/src/drawview.c
===================================================================
--- branches/etch-a-ton/source/blender/src/drawview.c   2008-11-05 17:38:31 UTC 
(rev 17336)
+++ branches/etch-a-ton/source/blender/src/drawview.c   2008-11-05 20:15:32 UTC 
(rev 17337)
@@ -2338,12 +2338,20 @@
                yco -= 20;
 
                uiBlockEndAlign(block);
+
+               yco -= 10;
+               uiBlockBeginAlign(block);
                
+               uiDefIDPoinBut(block, test_obpoin_but, ID_OB, B_DIFF, "OB:", 
10, yco, 150, 19, &G.scene->toolsettings->skgen_template, "Template Object"); 
+               yco -= 20;
+               
                uiDefButF(block, NUM, B_DIFF,                                   
                "Ang:",                 10, yco, 50,19, 
&G.scene->toolsettings->skgen_retarget_angle_weight, 0, 10, 1, 0,               
"Angle Weight");
                uiDefButF(block, NUM, B_DIFF,                                   
                "Len:",                 60, yco, 50,19, 
&G.scene->toolsettings->skgen_retarget_length_weight, 0, 10, 1, 0,              
"Length Weight");
                uiDefButF(block, NUM, B_DIFF,                                   
                "Dist:",                110,yco, 50,19, 
&G.scene->toolsettings->skgen_retarget_distance_weight, 0, 10, 1, 0,            
"Distance Weight");
                yco -= 20;
 
+               uiBlockEndAlign(block);
+
                if(yco < 0) uiNewPanelHeight(block, height-yco);
        }
 }

Modified: branches/etch-a-ton/source/blender/src/editarmature.c
===================================================================
--- branches/etch-a-ton/source/blender/src/editarmature.c       2008-11-05 
17:38:31 UTC (rev 17336)
+++ branches/etch-a-ton/source/blender/src/editarmature.c       2008-11-05 
20:15:32 UTC (rev 17337)
@@ -2197,13 +2197,12 @@
        return ebo;
 }
 
-
-static EditBone *get_named_editbone(char *name)
+static EditBone *get_named_editbone_from_list(char *name, ListBase *editbones)
 {
        EditBone  *eBone;
 
        if (name) {
-               for (eBone=G.edbo.first; eBone; eBone=eBone->next) {
+               for (eBone=editbones->first; eBone; eBone=eBone->next) {
                        if (!strcmp(name, eBone->name))
                                return eBone;
                }
@@ -2212,6 +2211,11 @@
        return NULL;
 }
 
+static EditBone *get_named_editbone(char *name)
+{
+       return get_named_editbone_from_list(name, &G.edbo);
+}
+
 /* Call this before doing any duplications
  * */
 void preEditBoneDuplicate(ListBase *editbones)
@@ -2225,7 +2229,11 @@
        }
 }
 
-void updateDuplicateSubtarget(EditBone *dupBone, Object *ob)
+/*
+ * Note: When duplicating cross objects, editbones here is the list of bones
+ * from the SOURCE object but ob is the DESTINATION object
+ * */
+void updateDuplicateSubtargetObjects(EditBone *dupBone, ListBase *editbones, 
Object *src_ob, Object *dst_ob)
 {
        /* If an edit bone has been duplicated, lets
         * update it's constraints if the subtarget
@@ -2236,7 +2244,7 @@
        bConstraint  *curcon;
        ListBase     *conlist;
        
-       if ( (chan = verify_pose_channel(ob->pose, dupBone->name)) ) {
+       if ( (chan = verify_pose_channel(dst_ob->pose, dupBone->name)) ) {
                if ( (conlist = &chan->constraints) ) {
                        for (curcon = conlist->first; curcon; 
curcon=curcon->next) {
                                /* does this constraint have a subtarget in
@@ -2250,8 +2258,9 @@
                                        cti->get_constraint_targets(curcon, 
&targets);
                                        
                                        for (ct= targets.first; ct; ct= 
ct->next) {
-                                               if ((ct->tar == G.obedit) && 
(ct->subtarget[0])) {
-                                                       oldtarget = 
get_named_editbone(ct->subtarget);
+                                               if ((ct->tar == src_ob) && 
(ct->subtarget[0])) {
+                                                       ct->tar = dst_ob; /* 
update target */
+                                                       oldtarget = 
get_named_editbone_from_list(ct->subtarget, editbones);
                                                        if (oldtarget) {
                                                                /* was the 
subtarget bone duplicated too? If
                                                                 * so, update 
the constraint to point at the 
@@ -2273,8 +2282,14 @@
        }
 }
 
-EditBone *duplicateEditBone(EditBone *curBone, ListBase *editbones, Object *ob)
+void updateDuplicateSubtarget(EditBone *dupBone, ListBase *editbones, Object 
*ob)
 {
+       updateDuplicateSubtargetObjects(dupBone, editbones, ob, ob);
+}
+
+
+EditBone *duplicateEditBoneObjects(EditBone *curBone, ListBase *editbones, 
Object *src_ob, Object *dst_ob)
+{
        EditBone *eBone = MEM_callocN(sizeof(EditBone), "addup_editbone");
        
        /*      Copy data from old bone to new bone */
@@ -2289,11 +2304,11 @@
        /* Lets duplicate the list of constraints that the
         * current bone has.
         */
-       if (ob->pose) {
+       if (src_ob->pose) {
                bPoseChannel *chanold, *channew;
                ListBase     *listold, *listnew;
                
-               chanold = verify_pose_channel(ob->pose, curBone->name);
+               chanold = verify_pose_channel(src_ob->pose, curBone->name);
                if (chanold) {
                        listold = &chanold->constraints;
                        if (listold) {
@@ -2301,7 +2316,7 @@
                                 *              yet as the new bones created 
here are still 'EditBones' not 'Bones'. 
                                 */
                                channew = 
-                                       verify_pose_channel(ob->pose, 
eBone->name);
+                                       verify_pose_channel(dst_ob->pose, 
eBone->name);
                                if (channew) {
                                        /* copy transform locks */
                                        channew->protectflag = 
chanold->protectflag;
@@ -2327,14 +2342,14 @@
                }
        }
        
-       /* --------------------WARNING--------------------
-        * 
-        * need to call static void updateDuplicateSubtarget(EditBone *dupBone) 
at some point 
-        * */
-       
        return eBone;
 }
 
+EditBone *duplicateEditBone(EditBone *curBone, ListBase *editbones, Object *ob)
+{
+       return duplicateEditBoneObjects(curBone, editbones, ob, ob);
+}
+
 void adduplicate_armature(void)
 {
        bArmature *arm= G.obedit->data;
@@ -2448,7 +2463,7 @@
                                
                                /* Lets try to fix any constraint subtargets 
that might
                                        have been duplicated */
-                               updateDuplicateSubtarget(eBone, OBACT);
+                               updateDuplicateSubtarget(eBone, &G.edbo, OBACT);
                        }
                }
        } 

Modified: branches/etch-a-ton/source/blender/src/editarmature_retarget.c
===================================================================
--- branches/etch-a-ton/source/blender/src/editarmature_retarget.c      
2008-11-05 17:38:31 UTC (rev 17336)
+++ branches/etch-a-ton/source/blender/src/editarmature_retarget.c      
2008-11-05 20:15:32 UTC (rev 17337)
@@ -398,7 +398,7 @@
 }
 /************************************** CLONING TEMPLATES 
**********************************************/
 
-static RigControl *cloneControl(RigGraph *rg, RigControl *src_ctrl, GHash 
*ptr_hash)
+static RigControl *cloneControl(RigGraph *rg, RigGraph *src_rg, RigControl 
*src_ctrl, GHash *ptr_hash)
 {
        RigControl *ctrl;
        
@@ -411,7 +411,7 @@
        
        ctrl->flag = src_ctrl->flag;
 
-       ctrl->bone = duplicateEditBone(src_ctrl->bone, rg->editbones, rg->ob);
+       ctrl->bone = duplicateEditBoneObjects(src_ctrl->bone, rg->editbones, 
src_rg->ob, rg->ob);
        ctrl->bone->flag &= 
~(BONE_TIPSEL|BONE_SELECTED|BONE_ROOTSEL|BONE_ACTIVE);
        BLI_ghash_insert(ptr_hash, src_ctrl->bone, ctrl->bone);
        
@@ -420,7 +420,7 @@
        return ctrl;
 }
 
-static RigArc *cloneArc(RigGraph *rg, RigArc *src_arc, GHash *ptr_hash)
+static RigArc *cloneArc(RigGraph *rg, RigGraph *src_rg, RigArc *src_arc, GHash 
*ptr_hash)
 {
        RigEdge *src_edge;
        RigArc  *arc;
@@ -452,7 +452,7 @@
                
                if (src_edge->bone != NULL)
                {
-                       edge->bone = duplicateEditBone(src_edge->bone, 
rg->editbones, rg->ob);
+                       edge->bone = duplicateEditBoneObjects(src_edge->bone, 
rg->editbones, src_rg->ob, rg->ob);
                        edge->bone->flag &= 
~(BONE_TIPSEL|BONE_SELECTED|BONE_ROOTSEL|BONE_ACTIVE);
                        BLI_ghash_insert(ptr_hash, src_edge->bone, edge->bone);
                }
@@ -463,7 +463,7 @@
        return arc;
 }
 
-static RigGraph *cloneRigGraph(RigGraph *src)
+static RigGraph *cloneRigGraph(RigGraph *src, ListBase *editbones, Object *ob)
 {
        GHash   *ptr_hash;      
        RigNode *node;
@@ -475,10 +475,11 @@
 
        rg = newRigGraph();
        
-       rg->ob = src->ob;
-       rg->editbones = src->editbones;
+       rg->ob = ob;
+       rg->editbones = editbones;
        
        preEditBoneDuplicate(rg->editbones); /* prime bones for duplication */
+       preEditBoneDuplicate(src->editbones); /* prime bones for duplication */
        
        /* Clone nodes */
        for (node = src->nodes.first; node; node = node->next)
@@ -492,13 +493,13 @@
        /* Clone arcs */

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to