Fix T42561 (semi feature request/comeback) UVs in image editor can get
authorAntony Riakiotakis <kalast@gmail.com>
Fri, 14 Nov 2014 12:50:10 +0000 (13:50 +0100)
committerAntony Riakiotakis <kalast@gmail.com>
Fri, 14 Nov 2014 12:50:21 +0000 (13:50 +0100)
too crowded.

UVs in the same layer can be used for many images. It used to be
possible to filter UV faces based on the image, but this is impossible
now due to the way the system works, so I added an option to allow
filtering UVs based on active material index.

Rationale on using option and not being smart here (options are bad tm)
is that for some workflows, such as preserving image space by using the
same image for many materials, people might want to turn this off.

release/scripts/startup/bl_ui/space_image.py
source/blender/editors/space_image/space_image.c
source/blender/editors/uvedit/uvedit_draw.c
source/blender/makesdna/DNA_space_types.h
source/blender/makesrna/intern/rna_object.c
source/blender/makesrna/intern/rna_space.c

index bdb0ca7aa15fb0af51e5e2f0df5655dfb1698983..1e3a7433e250dc901837a9f0f244b8036502544b 100644 (file)
@@ -82,6 +82,7 @@ class IMAGE_MT_view(Menu):
         layout.prop(uv, "show_other_objects")
         if paint.brush and (context.image_paint_object or sima.mode == 'PAINT'):
             layout.prop(uv, "show_texpaint")
+            layout.prop(uv, "texpaint_filter_mat")
 
         layout.separator()
 
index 42c1b920f399202a4de5add2396d3567a7eea7fa..770582f4afa6c1e68455dbdccdc0c971c5e1bc3a 100644 (file)
@@ -791,7 +791,7 @@ static void image_main_area_draw(const bContext *C, ARegion *ar)
 #endif
 }
 
-static void image_main_area_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void image_main_area_listener(bScreen *UNUSED(sc), ScrArea *sa, ARegion *ar, wmNotifier *wmn)
 {
        /* context changes */
        switch (wmn->category) {
@@ -803,6 +803,14 @@ static void image_main_area_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), A
                        if (wmn->action == NA_PAINTING)
                                ED_region_tag_redraw(ar);
                        break;
+               case NC_MATERIAL:
+                       if (wmn->data == ND_SHADING_LINKS) {
+                               SpaceImage *sima = sa->spacedata.first;
+
+                               if (sima->flag & SI_TEXPAINT_FILTER_MATERIAL)
+                                       ED_region_tag_redraw(ar);
+                       }
+                       break;
        }
 }
 
index 525cedb859f14407e155519f0731a0a4536a2ee6..7b674e75525cf68dd6ec39574918e269492b03f3 100644 (file)
@@ -506,6 +506,8 @@ static void draw_uvs_texpaint(SpaceImage *sima, Scene *scene, Object *ob)
                mloopuv_base = mloopuv;
 
                for (a = me->totpoly; a > 0; a--, mpoly++) {
+                       if ((sima->flag & SI_TEXPAINT_FILTER_MATERIAL) && mpoly->mat_nr != ob->actcol - 1)
+                               continue;
                        glBegin(GL_LINE_LOOP);
 
                        mloopuv = mloopuv_base + mpoly->loopstart;
index a267217abf618d9d282723e6cd3afaa8c1382163..41b302ebdd84bf6b41f5ea0aa91891dc1850554a 100644 (file)
@@ -809,7 +809,9 @@ typedef enum eSpaceImage_Flag {
 
        SI_COLOR_CORRECTION   = (1 << 24),
 
-       SI_NO_DRAW_TEXPAINT   = (1 << 25)
+       SI_NO_DRAW_TEXPAINT   = (1 << 25),
+       /* filter texpaint uvs based on active material */
+       SI_TEXPAINT_FILTER_MATERIAL   = (1 << 26)
 } eSpaceImage_Flag;
 
 /* Text Editor ============================================ */
index 690468a5278d79a3967efa8ec19a37d763f9fcae..b57c3689d055aab09139e5e24dfecfd6ec50fc82 100644 (file)
@@ -941,6 +941,7 @@ static void rna_MaterialSlot_name_get(PointerRNA *ptr, char *str)
 static void rna_MaterialSlot_update(Main *bmain, Scene *scene, PointerRNA *ptr)
 {
        rna_Object_internal_update(bmain, scene, ptr);
+
        WM_main_add_notifier(NC_OBJECT | ND_OB_SHADING, ptr->id.data);
        WM_main_add_notifier(NC_MATERIAL | ND_SHADING_LINKS, NULL);
 }
index 68173ebefb4727560d7c6169c472809831564c8c..8788a724f0ccacd8271794a710c276ce6b7d9cde 100644 (file)
@@ -1523,6 +1523,11 @@ static void rna_def_space_image_uv(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Draw Texture Paint UVs", "Draw overlay of texture paint uv layer");
        RNA_def_property_update(prop, NC_SPACE | ND_SPACE_IMAGE, NULL);
 
+       prop = RNA_def_property(srna, "texpaint_filter_mat", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", SI_TEXPAINT_FILTER_MATERIAL);
+       RNA_def_property_ui_text(prop, "Same Material UVs", "Only draw UVs of faces with active material");
+       RNA_def_property_update(prop, NC_SPACE | ND_SPACE_IMAGE, NULL);
+
        prop = RNA_def_property(srna, "show_normalized_coords", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", SI_COORDFLOATS);
        RNA_def_property_ui_text(prop, "Normalized Coordinates",