Revision: 17345
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17345
Author:   theeth
Date:     2008-11-06 04:31:25 +0100 (Thu, 06 Nov 2008)

Log Message:
-----------
Sketch Retargetting: template selection from dropdown (listing all other 
armatures) instead of silly object name input.

Modified Paths:
--------------
    branches/etch-a-ton/source/blender/blenloader/intern/readfile.c
    branches/etch-a-ton/source/blender/include/BIF_sketch.h
    branches/etch-a-ton/source/blender/src/drawview.c
    branches/etch-a-ton/source/blender/src/editarmature_sketch.c
    branches/etch-a-ton/source/blender/src/usiblender.c

Modified: branches/etch-a-ton/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/etch-a-ton/source/blender/blenloader/intern/readfile.c     
2008-11-06 02:08:41 UTC (rev 17344)
+++ branches/etch-a-ton/source/blender/blenloader/intern/readfile.c     
2008-11-06 03:31:25 UTC (rev 17345)
@@ -3459,6 +3459,9 @@
                        sce->toolsettings->imapaint.brush=
                                newlibadr_us(fd, sce->id.lib, 
sce->toolsettings->imapaint.brush);
 
+       
+                       sce->toolsettings->skgen_template = newlibadr_us(fd, 
sce->id.lib, sce->toolsettings->skgen_template);
+
                        /* Sculptdata textures */
                        for(a=0; a<MAX_MTEX; ++a) {
                                MTex *mtex= sce->sculptdata.mtex[a];
@@ -3549,8 +3552,6 @@
        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_sketch.h
===================================================================
--- branches/etch-a-ton/source/blender/include/BIF_sketch.h     2008-11-06 
02:08:41 UTC (rev 17344)
+++ branches/etch-a-ton/source/blender/include/BIF_sketch.h     2008-11-06 
03:31:25 UTC (rev 17345)
@@ -32,4 +32,10 @@
 int BIF_fullSketchMode(); /* full sketch turned on (not Quick) */
 void BIF_cancelStrokeSketch();
 
+void  BIF_makeListTemplates();
+char *BIF_listTemplates();
+int   BIF_currentTemplate();
+void  BIF_freeTemplates();
+void  BIF_setTemplate(int);    
+
 #endif /* BIF_SKETCH_H */

Modified: branches/etch-a-ton/source/blender/src/drawview.c
===================================================================
--- branches/etch-a-ton/source/blender/src/drawview.c   2008-11-06 02:08:41 UTC 
(rev 17344)
+++ branches/etch-a-ton/source/blender/src/drawview.c   2008-11-06 03:31:25 UTC 
(rev 17345)
@@ -2283,8 +2283,14 @@
        BIF_convertSketch();
 }
 
+static void assign_template_sketch_armature(void *arg1, void *arg2)
+{
+       int index = *(int*)arg1;
+       BIF_setTemplate(index);
+}
 static void view3d_panel_bonesketch_spaces(short cntrl)
 {
+       static int template_index;
        uiBlock *block;
        uiBut *but;
        int yco = 70, height = 140;
@@ -2342,7 +2348,13 @@
                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"); 
+               BIF_makeListTemplates();
+               template_index = BIF_currentTemplate();
+               
+               but = uiDefButI(block, MENU, B_REDR, BIF_listTemplates(), 
10,yco,150,19, &template_index, 0, 0, 0, 0, "Template");
+               uiButSetFunc(but, assign_template_sketch_armature, 
&template_index, NULL);
+               
+               //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");

Modified: branches/etch-a-ton/source/blender/src/editarmature_sketch.c
===================================================================
--- branches/etch-a-ton/source/blender/src/editarmature_sketch.c        
2008-11-06 02:08:41 UTC (rev 17344)
+++ branches/etch-a-ton/source/blender/src/editarmature_sketch.c        
2008-11-06 03:31:25 UTC (rev 17345)
@@ -35,6 +35,7 @@
 #include "BLI_blenlib.h"
 #include "BLI_arithb.h"
 #include "BLI_graph.h"
+#include "BLI_ghash.h"
 
 #include "BKE_utildefines.h"
 #include "BKE_global.h"
@@ -135,6 +136,122 @@
 int nextLengthSubdivision(SK_Stroke *stk, int start, int end, float head[3], 
float p[3]);
 int nextCorrelationSubdivision(SK_Stroke *stk, int start, int end, float 
head[3], float p[3]);
 
+/******************** TEMPLATES UTILS *************************/
+
+char  *TEMPLATES_MENU = NULL;
+int    TEMPLATES_CURRENT = 0;
+GHash *TEMPLATES_HASH = NULL;
+
+void BIF_makeListTemplates()
+{
+       Base *base;
+       int index = 0;
+
+       if (TEMPLATES_HASH != NULL)
+       {
+               BLI_ghash_free(TEMPLATES_HASH, NULL, NULL);
+       }
+       
+       TEMPLATES_HASH = BLI_ghash_new(BLI_ghashutil_inthash, 
BLI_ghashutil_intcmp);
+       TEMPLATES_CURRENT = 0;
+
+       for ( base = FIRSTBASE; base; base = base->next )
+       {
+               Object *ob = base->object;
+               
+               if (ob != G.obedit && ob->type == OB_ARMATURE)
+               {
+                       index++;
+                       BLI_ghash_insert(TEMPLATES_HASH, 
SET_INT_IN_POINTER(index), ob);
+                       
+                       if (ob == G.scene->toolsettings->skgen_template)
+                       {
+                               TEMPLATES_CURRENT = index;
+                       }
+               }
+       }
+}
+
+char *BIF_listTemplates()
+{
+       GHashIterator ghi;
+       char menu_header[] = "Template%t|None%x0|";
+       char *p;
+       
+       TEMPLATES_MENU = MEM_callocN(sizeof(char) * 
(BLI_ghash_size(TEMPLATES_HASH) * 32 + 30), "skeleton template menu");
+       
+       p = TEMPLATES_MENU;
+       
+       p += sprintf(TEMPLATES_MENU, "%s", menu_header);
+       
+       BLI_ghashIterator_init(&ghi, TEMPLATES_HASH);
+       
+       while (!BLI_ghashIterator_isDone(&ghi))
+       {
+               Object *ob = BLI_ghashIterator_getValue(&ghi);
+               int key = (int)BLI_ghashIterator_getKey(&ghi);
+               
+               p += sprintf(p, "|%s%%x%i", ob->id.name+2, key);
+               
+               BLI_ghashIterator_step(&ghi);
+       }
+       
+       return TEMPLATES_MENU;
+}
+
+int   BIF_currentTemplate()
+{
+       if (TEMPLATES_CURRENT == 0 && G.scene->toolsettings->skgen_template != 
NULL)
+       {
+               GHashIterator ghi;
+               int index = 0;
+               BLI_ghashIterator_init(&ghi, TEMPLATES_HASH);
+               
+               while (!BLI_ghashIterator_isDone(&ghi))
+               {
+                       Object *ob = BLI_ghashIterator_getValue(&ghi);
+                       int key = (int)BLI_ghashIterator_getKey(&ghi);
+                       
+                       index++;
+                       
+                       if (ob == G.scene->toolsettings->skgen_template)
+                       {
+                               TEMPLATES_CURRENT = index;
+                               break;
+                       }
+                       
+                       BLI_ghashIterator_step(&ghi);
+               }
+       }
+       
+       return TEMPLATES_CURRENT;
+}
+
+void  BIF_freeTemplates()
+{
+       if (TEMPLATES_MENU != NULL)
+       {
+               MEM_freeN(TEMPLATES_MENU);
+       }
+       
+       if (TEMPLATES_HASH != NULL)
+       {
+               BLI_ghash_free(TEMPLATES_HASH, NULL, NULL);
+       }
+}
+
+void  BIF_setTemplate(int index)
+{
+       if (index > 0)
+       {
+               G.scene->toolsettings->skgen_template = 
BLI_ghash_lookup(TEMPLATES_HASH, SET_INT_IN_POINTER(index));
+       }
+       else
+       {
+               G.scene->toolsettings->skgen_template = NULL;
+       }
+}      
+
 /******************** PEELING *********************************/
 
 typedef struct SK_DepthPeel

Modified: branches/etch-a-ton/source/blender/src/usiblender.c
===================================================================
--- branches/etch-a-ton/source/blender/src/usiblender.c 2008-11-06 02:08:41 UTC 
(rev 17344)
+++ branches/etch-a-ton/source/blender/src/usiblender.c 2008-11-06 03:31:25 UTC 
(rev 17345)
@@ -1103,6 +1103,7 @@
        
        BIF_GlobalReebFree();
        BIF_freeRetarget();
+       BIF_freeTemplates();
        
        tf= G.ttfdata.first;
        while(tf)


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

Reply via email to