Revision: 38192
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38192
Author:   jason_hays22
Date:     2011-07-07 15:42:50 +0000 (Thu, 07 Jul 2011)
Log Message:
-----------
This is incorporating every change I made to Radish branch into Salad.
That means that vgroup locking, multipaint, and weight paint mode's basic 
vertex selection have been added.

Also, I created a patch file with all of the changes (its only fully compatible 
with salad)--if anyone wants it.

Modified Paths:
--------------
    
branches/soc-2011-salad/release/scripts/startup/bl_ui/properties_data_mesh.py
    
branches/soc-2011-salad/release/scripts/startup/bl_ui/space_view3d_toolbar.py
    branches/soc-2011-salad/source/blender/blenkernel/BKE_DerivedMesh.h
    branches/soc-2011-salad/source/blender/blenkernel/intern/DerivedMesh.c
    branches/soc-2011-salad/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/soc-2011-salad/source/blender/editors/armature/editarmature.c
    branches/soc-2011-salad/source/blender/editors/include/ED_mesh.h
    branches/soc-2011-salad/source/blender/editors/include/ED_view3d.h
    
branches/soc-2011-salad/source/blender/editors/interface/interface_templates.c
    branches/soc-2011-salad/source/blender/editors/mesh/editmesh.c
    branches/soc-2011-salad/source/blender/editors/object/object_intern.h
    branches/soc-2011-salad/source/blender/editors/object/object_ops.c
    branches/soc-2011-salad/source/blender/editors/object/object_vgroup.c
    branches/soc-2011-salad/source/blender/editors/sculpt_paint/paint_vertex.c
    branches/soc-2011-salad/source/blender/editors/space_view3d/drawobject.c
    branches/soc-2011-salad/source/blender/editors/space_view3d/view3d_select.c
    branches/soc-2011-salad/source/blender/makesdna/DNA_object_types.h
    branches/soc-2011-salad/source/blender/makesdna/DNA_scene_types.h
    branches/soc-2011-salad/source/blender/makesrna/intern/rna_internal.h
    branches/soc-2011-salad/source/blender/makesrna/intern/rna_object.c
    branches/soc-2011-salad/source/blender/makesrna/intern/rna_scene.c

Modified: 
branches/soc-2011-salad/release/scripts/startup/bl_ui/properties_data_mesh.py
===================================================================
--- 
branches/soc-2011-salad/release/scripts/startup/bl_ui/properties_data_mesh.py   
    2011-07-07 13:59:28 UTC (rev 38191)
+++ 
branches/soc-2011-salad/release/scripts/startup/bl_ui/properties_data_mesh.py   
    2011-07-07 15:42:50 UTC (rev 38192)
@@ -134,7 +134,8 @@
 
         ob = context.object
         group = ob.vertex_groups.active
-
+        
+        
         rows = 2
         if group:
             rows = 5
@@ -143,6 +144,9 @@
         row.template_list(ob, "vertex_groups", ob.vertex_groups, 
"active_index", rows=rows)
 
         col = row.column(align=True)
+        # Jason was here, this was replaced by hardcoded list view checkboxes. 
#
+        #col.prop(group, "flag")
+        
         col.operator("object.vertex_group_add", icon='ZOOMIN', text="")
         col.operator("object.vertex_group_remove", icon='ZOOMOUT', text="")
         col.menu("MESH_MT_vertex_group_specials", icon='DOWNARROW_HLT', 
text="")
@@ -153,6 +157,13 @@
         if group:
             row = layout.row()
             row.prop(group, "name")
+        #Jason was here
+        if ob.mode == 'WEIGHT_PAINT' and len(ob.vertex_groups) > 0:
+            row = layout.row()
+            sub = row.row(align=True)
+            sub.operator("object.vertex_group_lock_all", text="Lock All")
+            sub.operator("object.vertex_group_invert_locks", text="Invert 
Locks")
+            sub.operator("object.vertex_group_unlock_all", text="Unlock All")
 
         if ob.mode == 'EDIT' and len(ob.vertex_groups) > 0:
             row = layout.row()

Modified: 
branches/soc-2011-salad/release/scripts/startup/bl_ui/space_view3d_toolbar.py
===================================================================
--- 
branches/soc-2011-salad/release/scripts/startup/bl_ui/space_view3d_toolbar.py   
    2011-07-07 13:59:28 UTC (rev 38191)
+++ 
branches/soc-2011-salad/release/scripts/startup/bl_ui/space_view3d_toolbar.py   
    2011-07-07 15:42:50 UTC (rev 38192)
@@ -676,6 +676,9 @@
         elif context.weight_paint_object and brush:
             layout.prop(context.tool_settings, "vertex_group_weight", 
text="Weight", slider=True)
             layout.prop(context.tool_settings, "use_auto_normalize", 
text="Auto Normalize")
+            # Jason was here
+            layout.prop(context.tool_settings, "use_multipaint", 
text="Multi-Paint")
+            layout.prop(context.tool_settings, "use_wp_vert_sel", text="Select 
Vertices")
 
             col = layout.column()
 

Modified: branches/soc-2011-salad/source/blender/blenkernel/BKE_DerivedMesh.h
===================================================================
--- branches/soc-2011-salad/source/blender/blenkernel/BKE_DerivedMesh.h 
2011-07-07 13:59:28 UTC (rev 38191)
+++ branches/soc-2011-salad/source/blender/blenkernel/BKE_DerivedMesh.h 
2011-07-07 15:42:50 UTC (rev 38192)
@@ -220,6 +220,9 @@
        /* Draw all vertices as bgl points (no options) */
        void (*drawVerts)(DerivedMesh *dm);
 
+       /* Jason Draw all selected vertices as bgl points (no options) */
+       void (*drawSelectedVerts)(DerivedMesh *dm);
+
        /* Draw edges in the UV mesh (if exists) */
        void (*drawUVEdges)(DerivedMesh *dm);
 

Modified: branches/soc-2011-salad/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/soc-2011-salad/source/blender/blenkernel/intern/DerivedMesh.c      
2011-07-07 13:59:28 UTC (rev 38191)
+++ branches/soc-2011-salad/source/blender/blenkernel/intern/DerivedMesh.c      
2011-07-07 15:42:50 UTC (rev 38192)
@@ -40,6 +40,9 @@
 #include "DNA_cloth_types.h"
 #include "DNA_key_types.h"
 #include "DNA_meshdata_types.h"
+// Jason
+#include "DNA_armature_types.h"
+
 #include "DNA_object_types.h"
 #include "DNA_scene_types.h" // N_T
 
@@ -72,7 +75,8 @@
 #include "GPU_material.h"
 
 #include "ED_sculpt.h" /* for ED_paint_modifiers_changed */
-
+// Jason was here, this is for multi-paint
+#include "ED_armature.h"
 ///////////////////////////////////
 ///////////////////////////////////
 
@@ -1601,19 +1605,51 @@
        }
 }
 
-static void calc_weightpaint_vert_color(Object *ob, ColorBand *coba, int vert, 
unsigned char *col)
+static void calc_weightpaint_vert_color(Object *ob, ColorBand *coba, int vert, 
unsigned char *col, char *dg_flags, int selected, int unselected, int 
multipaint, int auto_normalize)
 {
        Mesh *me = ob->data;
-       float colf[4], input = 0.0f;
+       float colf[4], input = 0.0f, unsel_sum = 0.0f;// Jason
        int i;
+       char make_black = FALSE;
+       char was_a_nonzero = FALSE;
+       if (me->dvert) {
+               for (i=0; i<me->dvert[vert].totweight; i++) {
+                       // Jason was here
+                       if(multipaint && selected > 1) {
+                               if(dg_flags[me->dvert[vert].dw[i].def_nr]) {
+                                       if(me->dvert[vert].dw[i].weight) {
+                                               
input+=me->dvert[vert].dw[i].weight;
+                                               was_a_nonzero = TRUE;
+                                       }
+                               }
+                               // TODO unselected non-bone groups should not 
be involved in this sum
+                               else if(auto_normalize) {
+                                       unsel_sum+=me->dvert[vert].dw[i].weight;
+                               }
+                       } else if (me->dvert[vert].dw[i].def_nr==ob->actdef-1) {
+                               input+=me->dvert[vert].dw[i].weight;
+                       }
+               }
+               
+               // Jason was here
+               if(!make_black && multipaint && selected > 1) {
+                       /*if(input == 1.0f && auto_normalize && !unsel_sum) {
+                               make_black = TRUE;
+                       } else */
+                       if(!was_a_nonzero) {
+                               make_black = TRUE;
+                       } else if (!auto_normalize){
+                               input /= selected;
+                       }
 
-       if (me->dvert) {
-               for (i=0; i<me->dvert[vert].totweight; i++)
-                       if (me->dvert[vert].dw[i].def_nr==ob->actdef-1)
-                               input+=me->dvert[vert].dw[i].weight;            
+               }
        }
 
-       CLAMP(input, 0.0f, 1.0f);
+       if(make_black) {
+               input = -1;
+       }else {
+               CLAMP(input, 0.0f, 1.0f);
+       }
        
        if(coba)
                do_colorband(coba, input, colf);
@@ -1633,25 +1669,69 @@
        stored_cb= coba;
 }
 
-static void add_weight_mcol_dm(Object *ob, DerivedMesh *dm)
+/* TODO move duplicates to header */
+/* Jason was here duplicate function in paint_vertex.c*/
+static char* get_selected_defgroups(Object *ob, int defcnt) {
+       bPoseChannel *chan;
+       bPose *pose;
+       bDeformGroup *defgroup;
+       //Bone *bone;
+       char *dg_flags = MEM_callocN(defcnt*sizeof(char), "dg_selected_flags");
+       int i;
+       Object *armob = ED_object_pose_armature(ob);
+       if(armob) {
+               pose = armob->pose;
+               for (chan=pose->chanbase.first; chan; chan=chan->next) {
+                       for (i = 0, defgroup = ob->defbase.first; i < defcnt && 
defgroup; defgroup = defgroup->next, i++) {
+                               if(!strcmp(defgroup->name, chan->bone->name)) {
+                                       dg_flags[i] = (chan->bone->flag & 
BONE_SELECTED);
+                               }
+                       }
+               }
+       }
+
+       return dg_flags;
+}
+/* TODO move duplicates to header */
+/* Jason was here duplicate function */
+static int count_true(char *list, int len)
 {
+       int i;
+       int cnt = 0;
+       for(i = 0; i < len; i++) {
+               if (list[i]) {
+                       cnt++;
+               }
+       }
+       return cnt;
+}
+static void add_weight_mcol_dm(Object *ob, DerivedMesh *dm, int multipaint, 
int auto_normalize)
+{
        Mesh *me = ob->data;
        MFace *mf = me->mface;
        ColorBand *coba= stored_cb;     /* warning, not a local var */
        unsigned char *wtcol;
        int i;
        
+       // Jason was here
+       int defcnt = BLI_countlist(&ob->defbase);
+       char *dg_flags = get_selected_defgroups(ob, defcnt);
+       int selected = count_true(dg_flags, defcnt);
+       int unselected = defcnt - selected;
+
        wtcol = MEM_callocN (sizeof (unsigned char) * me->totface*4*4, 
"weightmap");
        
        memset(wtcol, 0x55, sizeof (unsigned char) * me->totface*4*4);
        for (i=0; i<me->totface; i++, mf++) {
-               calc_weightpaint_vert_color(ob, coba, mf->v1, &wtcol[(i*4 + 
0)*4]); 
-               calc_weightpaint_vert_color(ob, coba, mf->v2, &wtcol[(i*4 + 
1)*4]); 
-               calc_weightpaint_vert_color(ob, coba, mf->v3, &wtcol[(i*4 + 
2)*4]); 
+               calc_weightpaint_vert_color(ob, coba, mf->v1, &wtcol[(i*4 + 
0)*4], dg_flags, selected, unselected, multipaint, auto_normalize);
+               calc_weightpaint_vert_color(ob, coba, mf->v2, &wtcol[(i*4 + 
1)*4], dg_flags, selected, unselected, multipaint, auto_normalize);
+               calc_weightpaint_vert_color(ob, coba, mf->v3, &wtcol[(i*4 + 
2)*4], dg_flags, selected, unselected, multipaint, auto_normalize);
                if (mf->v4)
-                       calc_weightpaint_vert_color(ob, coba, mf->v4, 
&wtcol[(i*4 + 3)*4]); 
+                       calc_weightpaint_vert_color(ob, coba, mf->v4, 
&wtcol[(i*4 + 3)*4], dg_flags, selected, unselected, multipaint, 
auto_normalize);
        }
-       
+       // Jason
+       MEM_freeN(dg_flags);
+
        CustomData_add_layer(&dm->faceData, CD_WEIGHT_MCOL, CD_ASSIGN, wtcol, 
dm->numFaceData);
 }
 
@@ -1858,7 +1938,7 @@
                                }
 
                                if((dataMask & CD_MASK_WEIGHT_MCOL) && 
(ob->mode & OB_MODE_WEIGHT_PAINT))
-                                       add_weight_mcol_dm(ob, dm);
+                                       add_weight_mcol_dm(ob, dm, 
scene->toolsettings->multipaint, scene->toolsettings->auto_normalize);// Jason
 
                                /* Constructive modifiers need to have an 
origindex
                                 * otherwise they wont have anywhere to copy 
the data from.
@@ -1968,7 +2048,7 @@
                CDDM_calc_normals(finaldm);
 
                if((dataMask & CD_MASK_WEIGHT_MCOL) && (ob->mode & 
OB_MODE_WEIGHT_PAINT))
-                       add_weight_mcol_dm(ob, finaldm);
+                       add_weight_mcol_dm(ob, finaldm, 
scene->toolsettings->multipaint, scene->toolsettings->auto_normalize);// Jason
        } else if(dm) {
                finaldm = dm;
        } else {
@@ -1980,7 +2060,7 @@
                }
 
                if((dataMask & CD_MASK_WEIGHT_MCOL) && (ob->mode & 
OB_MODE_WEIGHT_PAINT))
-                       add_weight_mcol_dm(ob, finaldm);
+                       add_weight_mcol_dm(ob, finaldm, 
scene->toolsettings->multipaint, scene->toolsettings->auto_normalize);// Jason
        }
 
        /* add an orco layer if needed */

Modified: 
branches/soc-2011-salad/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/soc-2011-salad/source/blender/blenkernel/intern/cdderivedmesh.c    
2011-07-07 13:59:28 UTC (rev 38191)
+++ branches/soc-2011-salad/source/blender/blenkernel/intern/cdderivedmesh.c    
2011-07-07 15:42:50 UTC (rev 38192)
@@ -284,6 +284,36 @@
        BLI_pbvh_update(cddm->pbvh, PBVH_UpdateNormals, face_nors);
 }
 
+// Jason
+static void cdDM_drawSelectedVerts(DerivedMesh *dm)
+{
+       CDDerivedMesh *cddm = (CDDerivedMesh*) dm;
+       MVert *mv = cddm->mvert;
+       int i;
+       if( GPU_buffer_legacy(dm) ) {
+               glBegin(GL_POINTS);
+               for(i = 0; i < dm->numVertData; i++, mv++) {
+                       if((mv->flag & 1)) {//TODO define selected
+                               glColor3f(1.0f, 1.0f, 0.0f);
+                       }else {
+                               glColor3f(0.0f, 0.0f, 0.0f);
+                       }
+                       if(!(mv->flag & ME_HIDE)) {
+                               glVertex3fv(mv->co);
+                       }
+               }
+               glEnd();
+       }
+       else {  /* use OpenGL VBOs or Vertex Arrays instead for better, faster 
rendering */

@@ 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