Revision: 17739
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17739
Author:   campbellbarton
Date:     2008-12-07 20:24:41 +0100 (Sun, 07 Dec 2008)

Log Message:
-----------
* layer mask (similar to the gimp), uses a UV layer's image as mask for 
painting.
* cloning between layers was broken
* Added buttons for selecting the souce clone/mask layer in the UV layer list.

Modified Paths:
--------------
    branches/projection-paint/source/blender/blenkernel/BKE_customdata.h
    branches/projection-paint/source/blender/blenkernel/intern/customdata.c
    branches/projection-paint/source/blender/include/butspace.h
    branches/projection-paint/source/blender/makesdna/DNA_customdata_types.h
    branches/projection-paint/source/blender/makesdna/DNA_scene_types.h
    branches/projection-paint/source/blender/src/buttons_editing.c
    branches/projection-paint/source/blender/src/imagepaint.c

Modified: branches/projection-paint/source/blender/blenkernel/BKE_customdata.h
===================================================================
--- branches/projection-paint/source/blender/blenkernel/BKE_customdata.h        
2008-12-07 13:22:50 UTC (rev 17738)
+++ branches/projection-paint/source/blender/blenkernel/BKE_customdata.h        
2008-12-07 19:24:41 UTC (rev 17739)
@@ -198,8 +198,12 @@
 int CustomData_get_named_layer_index(const struct CustomData *data, int type, 
char *name);
 int CustomData_get_active_layer_index(const struct CustomData *data, int type);
 int CustomData_get_render_layer_index(const struct CustomData *data, int type);
+int CustomData_get_clone_layer_index(const struct CustomData *data, int type);
+int CustomData_get_mask_layer_index(const struct CustomData *data, int type);
 int CustomData_get_active_layer(const struct CustomData *data, int type);
 int CustomData_get_render_layer(const struct CustomData *data, int type);
+int CustomData_get_clone_layer(const struct CustomData *data, int type);
+int CustomData_get_mask_layer(const struct CustomData *data, int type);
 
 /* copies the data from source to the data element at index in the first
  * layer of type
@@ -227,10 +231,14 @@
 /* sets the nth layer of type as active */
 void CustomData_set_layer_active(struct CustomData *data, int type, int n);
 void CustomData_set_layer_render(struct CustomData *data, int type, int n);
+void CustomData_set_layer_clone(struct CustomData *data, int type, int n);
+void CustomData_set_layer_mask(struct CustomData *data, int type, int n);
 
 /* same as above but works with an index from CustomData_get_layer_index */
 void CustomData_set_layer_active_index(struct CustomData *data, int type, int 
n);
 void CustomData_set_layer_render_index(struct CustomData *data, int type, int 
n);
+void CustomData_set_layer_clone_index(struct CustomData *data, int type, int 
n);
+void CustomData_set_layer_mask_index(struct CustomData *data, int type, int n);
 
 /* adds flag to the layer flags */
 void CustomData_set_layer_flag(struct CustomData *data, int type, int flag);

Modified: 
branches/projection-paint/source/blender/blenkernel/intern/customdata.c
===================================================================
--- branches/projection-paint/source/blender/blenkernel/intern/customdata.c     
2008-12-07 13:22:50 UTC (rev 17738)
+++ branches/projection-paint/source/blender/blenkernel/intern/customdata.c     
2008-12-07 19:24:41 UTC (rev 17739)
@@ -606,7 +606,7 @@
 {
        const LayerTypeInfo *typeInfo;
        CustomDataLayer *layer, *newlayer;
-       int i, type, number = 0, lasttype = -1, lastactive = 0, lastrender = 0;
+       int i, type, number = 0, lasttype = -1, lastactive = 0, lastrender = 0, 
lastclone = 0, lastmask = 0;
 
        for(i = 0; i < source->totlayer; ++i) {
                layer = &source->layers[i];
@@ -618,6 +618,8 @@
                        number = 0;
                        lastactive = layer->active;
                        lastrender = layer->active_rnd;
+                       lastclone = layer->active_clone;
+                       lastmask = layer->active_mask;
                        lasttype = type;
                }
                else
@@ -637,6 +639,8 @@
                if(newlayer) {
                        newlayer->active = lastactive;
                        newlayer->active_rnd = lastrender;
+                       newlayer->active_clone = lastclone;
+                       newlayer->active_mask = lastmask;
                }
        }
 }
@@ -736,6 +740,28 @@
        return -1;
 }
 
+int CustomData_get_clone_layer_index(const CustomData *data, int type)
+{
+       int i;
+
+       for(i=0; i < data->totlayer; ++i)
+               if(data->layers[i].type == type)
+                       return i + data->layers[i].active_clone;
+
+       return -1;
+}
+
+int CustomData_get_mask_layer_index(const CustomData *data, int type)
+{
+       int i;
+
+       for(i=0; i < data->totlayer; ++i)
+               if(data->layers[i].type == type)
+                       return i + data->layers[i].active_mask;
+
+       return -1;
+}
+
 int CustomData_get_active_layer(const CustomData *data, int type)
 {
        int i;
@@ -758,7 +784,28 @@
        return -1;
 }
 
+int CustomData_get_clone_layer(const CustomData *data, int type)
+{
+       int i;
 
+       for(i=0; i < data->totlayer; ++i)
+               if(data->layers[i].type == type)
+                       return data->layers[i].active_clone;
+
+       return -1;
+}
+
+int CustomData_get_mask_layer(const CustomData *data, int type)
+{
+       int i;
+
+       for(i=0; i < data->totlayer; ++i)
+               if(data->layers[i].type == type)
+                       return data->layers[i].active_mask;
+
+       return -1;
+}
+
 void CustomData_set_layer_active(CustomData *data, int type, int n)
 {
        int i;
@@ -777,6 +824,24 @@
                        data->layers[i].active_rnd = n;
 }
 
+void CustomData_set_layer_clone(CustomData *data, int type, int n)
+{
+       int i;
+
+       for(i=0; i < data->totlayer; ++i)
+               if(data->layers[i].type == type)
+                       data->layers[i].active_clone = n;
+}
+
+void CustomData_set_layer_mask(CustomData *data, int type, int n)
+{
+       int i;
+
+       for(i=0; i < data->totlayer; ++i)
+               if(data->layers[i].type == type)
+                       data->layers[i].active_mask = n;
+}
+
 /* for using with an index from CustomData_get_active_layer_index and 
CustomData_get_render_layer_index */
 void CustomData_set_layer_active_index(CustomData *data, int type, int n)
 {
@@ -796,7 +861,24 @@
                        data->layers[i].active_rnd = n-i;
 }
 
+void CustomData_set_layer_clone_index(CustomData *data, int type, int n)
+{
+       int i;
 
+       for(i=0; i < data->totlayer; ++i)
+               if(data->layers[i].type == type)
+                       data->layers[i].active_clone = n-i;
+}
+
+void CustomData_set_layer_mask_index(CustomData *data, int type, int n)
+{
+       int i;
+
+       for(i=0; i < data->totlayer; ++i)
+               if(data->layers[i].type == type)
+                       data->layers[i].active_mask = n-i;
+}
+
 void CustomData_set_layer_flag(struct CustomData *data, int type, int flag)
 {
        int i;

Modified: branches/projection-paint/source/blender/include/butspace.h
===================================================================
--- branches/projection-paint/source/blender/include/butspace.h 2008-12-07 
13:22:50 UTC (rev 17738)
+++ branches/projection-paint/source/blender/include/butspace.h 2008-12-07 
19:24:41 UTC (rev 17739)
@@ -446,6 +446,8 @@
 
 #define B_GEN_SKELETON         2085
 #define B_RETARGET_SKELETON    2086
+#define B_SETTFACE_CLONE       2087
+#define B_SETTFACE_MASK                2088
 
 /* *********************** */
 #define B_VGROUPBUTS           2100

Modified: 
branches/projection-paint/source/blender/makesdna/DNA_customdata_types.h
===================================================================
--- branches/projection-paint/source/blender/makesdna/DNA_customdata_types.h    
2008-12-07 13:22:50 UTC (rev 17738)
+++ branches/projection-paint/source/blender/makesdna/DNA_customdata_types.h    
2008-12-07 19:24:41 UTC (rev 17739)
@@ -37,6 +37,8 @@
        int flag;       /* general purpose flag */
        int active;     /* number of the active layer of this type */
        int active_rnd; /* number of the layer to render*/
+       int active_clone; /* number of the layer to render*/
+       int active_mask; /* number of the layer to render*/
        char pad[4];
        char name[32];  /* layer name */
        void *data;     /* layer data */

Modified: branches/projection-paint/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- branches/projection-paint/source/blender/makesdna/DNA_scene_types.h 
2008-12-07 13:22:50 UTC (rev 17738)
+++ branches/projection-paint/source/blender/makesdna/DNA_scene_types.h 
2008-12-07 19:24:41 UTC (rev 17739)
@@ -347,8 +347,7 @@
        short flag, tool;
        
        /* for projection painting only - todo - use flags */
-       char seam_bleed,normal_angle;
-       short clone_layer;
+       short seam_bleed,normal_angle;
 } ImagePaintSettings;
 
 typedef struct ParticleBrushData {
@@ -806,8 +805,10 @@
 #define IMAGEPAINT_PROJECT_DISABLE             8       /* Non projection 3D 
painting */
 #define IMAGEPAINT_PROJECT_XRAY                        16
 #define IMAGEPAINT_PROJECT_BACKFACE            32
-#define IMAGEPAINT_PROJECT_CLONE_LAYER 64
-#define IMAGEPAINT_PROJECT_FLAT                        128
+#define IMAGEPAINT_PROJECT_FLAT                        64
+#define IMAGEPAINT_PROJECT_LAYER_CLONE 128
+#define IMAGEPAINT_PROJECT_LAYER_MASK  256
+#define IMAGEPAINT_PROJECT_LAYER_MASK_INV      512
 
 /* toolsettings->uvcalc_flag */
 #define UVCALC_FILLHOLES                       1

Modified: branches/projection-paint/source/blender/src/buttons_editing.c
===================================================================
--- branches/projection-paint/source/blender/src/buttons_editing.c      
2008-12-07 13:22:50 UTC (rev 17738)
+++ branches/projection-paint/source/blender/src/buttons_editing.c      
2008-12-07 19:24:41 UTC (rev 17739)
@@ -184,7 +184,7 @@
 
 static float editbutweight= 1.0;
 float editbutvweight= 1;
-static int actmcol= 0, acttface= 0, acttface_rnd = 0, actmcol_rnd = 0;
+static int actmcol= 0, acttface= 0, acttface_rnd = 0, acttface_clone = 0, 
acttface_mask = 0, actmcol_rnd = 0;
 
 extern ListBase editNurb;
 
@@ -802,9 +802,9 @@
 
 static int customdata_buttons(
        uiBlock *block, Mesh *me, CustomData *data,
-       int type, int *activep, int *renderp,
-       int setevt, int setevt_rnd, int newevt,
-       char *label, char *shortlabel, char *browsetip, char *browsetip_rnd,
+       int type, int *activep, int *renderp, int *clonep, int *maskp,
+       int setevt, int setevt_rnd, int setevt_clone, int setevt_mask, int 
newevt,
+       char *label, char *shortlabel, char *browsetip, char *browsetip_rnd, 
char *browsetip_clone, char *browsetip_mask,
        char *newtip, char *deltip, int x, int y)
 {
        CustomDataLayer *layer;
@@ -828,12 +828,27 @@
                layer= &data->layers[i];
 
                if(layer->type == type) {
+                       int xi = 0;
                        *activep= layer->active + 1;
                        *renderp= layer->active_rnd + 1;
+                       if (clonep) *clonep= layer->active_clone + 1;
+                       if (maskp) *maskp= layer->active_mask + 1;
                        
+                       
                        uiDefIconButI(block, ROW, setevt, ICON_VIEW3D, 
x,y,25,19, activep, 1.0, count, 0, 0, browsetip);
                        uiDefIconButI(block, ROW, setevt_rnd, ICON_SCENE, 
x+25,y,25,19, renderp, 1.0, count, 0, 0, browsetip_rnd);
-                       but=uiDefBut(block, TEX, setevt, "", x+50,y,145,19, 
layer->name, 0.0, 31.0, 0, 0, label);
+                       
+                       if (clonep) {
+                               uiDefIconButI(block, ROW, setevt_clone, 
ICON_TEXTURE, x+50,y,25,19, clonep, 1.0, count, 0, 0, browsetip_clone);
+                               xi += 25;
+                       }
+                       
+                       if (maskp) {
+                               uiDefIconButI(block, ROW, setevt_mask, 
ICON_PAINT, x+50+xi,y,25,19, maskp, 1.0, count, 0, 0, browsetip_mask);
+                               xi += 25;
+                       }
+                       
+                       but=uiDefBut(block, TEX, setevt, "", 
x+50+xi,y,145-xi,19, layer->name, 0.0, 31.0, 0, 0, label);
                        uiButSetFunc(but, verify_customdata_name_func, data, 
layer);
                        but= uiDefIconBut(block, BUT, B_NOP, VICON_X, 
x+195,y,25,19, NULL, 0.0, 0.0, 0.0, 0.0, deltip);
                        uiButSetFunc(but, delete_customdata_layer, me, layer);
@@ -902,14 +917,14 @@
        uiBlockEndAlign(block);
 
        fdata= (G.obedit)? &G.editMesh->fdata: &me->fdata;

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