[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25688] trunk/blender: Changes to Brush texture workflow
Matt Ebb
matt at mke3.net
Sun Jan 3 09:37:18 CET 2010
Revision: 25688
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25688
Author: broken
Date: 2010-01-03 09:37:18 +0100 (Sun, 03 Jan 2010)
Log Message:
-----------
Changes to Brush texture workflow
This changes how textures are accessed from Brushes, with the intention of simplifying
the workflow, and reducing the amount of clicking. Rather than the previous texture slots
(which didn't work as a stack anyway), brushes now have a single texture linked. Rather
than taking time having to set up your slots in advance, you can now select and change
textures directly as you sculpt/paint on the fly. For complex brushes, node textures can
be used, or for fast access, it's easy to make a duplicate of your brush with the texture
you like and assign a hotkey.
Brush textures can now be chosen from a new Textures panel in the brush tool
properties - click on the thumbnail to open a texture selector. This is done using a new
variation on the ID template - the number of rows and columns to display in the popup
can be customised in the UI scripts.
Modified Paths:
--------------
trunk/blender/release/scripts/ui/properties_texture.py
trunk/blender/release/scripts/ui/space_view3d_toolbar.py
trunk/blender/source/blender/blenkernel/intern/brush.c
trunk/blender/source/blender/blenkernel/intern/texture.c
trunk/blender/source/blender/blenloader/intern/readfile.c
trunk/blender/source/blender/blenloader/intern/writefile.c
trunk/blender/source/blender/editors/include/UI_interface.h
trunk/blender/source/blender/editors/include/UI_interface_icons.h
trunk/blender/source/blender/editors/interface/interface.c
trunk/blender/source/blender/editors/interface/interface_icons.c
trunk/blender/source/blender/editors/interface/interface_intern.h
trunk/blender/source/blender/editors/interface/interface_layout.c
trunk/blender/source/blender/editors/interface/interface_regions.c
trunk/blender/source/blender/editors/interface/interface_templates.c
trunk/blender/source/blender/editors/interface/interface_widgets.c
trunk/blender/source/blender/editors/sculpt_paint/paint_image.c
trunk/blender/source/blender/editors/sculpt_paint/sculpt.c
trunk/blender/source/blender/editors/space_buttons/buttons_context.c
trunk/blender/source/blender/editors/space_buttons/space_buttons.c
trunk/blender/source/blender/editors/space_outliner/outliner.c
trunk/blender/source/blender/editors/space_view3d/view3d_toolbar.c
trunk/blender/source/blender/makesdna/DNA_brush_types.h
trunk/blender/source/blender/makesrna/intern/rna_brush.c
trunk/blender/source/blender/makesrna/intern/rna_ui_api.c
trunk/blender/source/blender/windowmanager/intern/wm_operators.c
Modified: trunk/blender/release/scripts/ui/properties_texture.py
===================================================================
--- trunk/blender/release/scripts/ui/properties_texture.py 2010-01-03 05:49:56 UTC (rev 25687)
+++ trunk/blender/release/scripts/ui/properties_texture.py 2010-01-03 08:37:18 UTC (rev 25688)
@@ -87,13 +87,15 @@
def draw(self, context):
layout = self.layout
+ space = context.space_data
tex = context.texture
wide_ui = context.region.width > narrowui
idblock = context_tex_datablock(context)
+ tex_collection = space.pin_id == None and type(idblock) != bpy.types.Brush
- space = context.space_data
+
- if idblock:
+ if tex_collection:
row = layout.row()
row.template_list(idblock, "textures", idblock, "active_texture_index", rows=2)
@@ -101,24 +103,31 @@
col = row.column(align=True)
col.operator("texture.slot_move", text="", icon='TRIA_UP').type = 'UP'
col.operator("texture.slot_move", text="", icon='TRIA_DOWN').type = 'DOWN'
-
-
+
if wide_ui:
split = layout.split(percentage=0.65)
- if idblock:
- split.template_ID(idblock, "active_texture", new="texture.new")
- elif tex:
- split.template_ID(space, "pin_id")
+ col = split.column()
else:
- layout.template_ID(idblock, "active_texture", new="texture.new")
-
+ col = layout.column()
+
+ if tex_collection:
+ col.template_ID(idblock, "active_texture", new="texture.new")
+ elif idblock:
+ col.template_ID(idblock, "texture", new="texture.new")
+
+ if space.pin_id:
+ col.template_ID(space, "pin_id")
+
+ if wide_ui:
+ col = split.column()
+
if (not space.pin_id) and (
context.sculpt_object or
context.vertex_paint_object or
context.weight_paint_object or
context.texture_paint_object):
- split.prop(space, "brush_texture", text="Brush", toggle=True)
+ col.prop(space, "brush_texture", text="Brush", toggle=True)
if tex:
layout.prop(tex, "use_nodes")
@@ -268,6 +277,10 @@
bl_label = "Influence"
def poll(self, context):
+ idblock = context_tex_datablock(context)
+ if type(idblock) == bpy.types.Brush:
+ return False
+
return context.texture_slot
def draw(self, context):
Modified: trunk/blender/release/scripts/ui/space_view3d_toolbar.py
===================================================================
--- trunk/blender/release/scripts/ui/space_view3d_toolbar.py 2010-01-03 05:49:56 UTC (rev 25687)
+++ trunk/blender/release/scripts/ui/space_view3d_toolbar.py 2010-01-03 08:37:18 UTC (rev 25688)
@@ -624,6 +624,29 @@
#row.prop(brush, "jitter", slider=True)
#row.prop(brush, "use_jitter_pressure", toggle=True, text="")
+
+class VIEW3D_PT_tools_brush_texture(PaintPanel):
+ bl_label = "Texture"
+ bl_default_closed = True
+
+ def poll(self, context):
+ settings = self.paint_settings(context)
+ return (settings and settings.brush and (context.sculpt_object or
+ context.texture_paint_object))
+
+ def draw(self, context):
+ layout = self.layout
+
+ settings = self.paint_settings(context)
+ brush = settings.brush
+ tex_slot = brush.texture_slot
+
+ col = layout.column()
+
+ col.template_ID_preview(brush, "texture", new="texture.new", rows=2, cols=4)
+
+ col.row().prop(tex_slot, "map_mode", expand=True)
+
class VIEW3D_PT_tools_brush_tool(PaintPanel):
bl_label = "Tool"
bl_default_closed = True
@@ -975,6 +998,7 @@
bpy.types.register(VIEW3D_PT_tools_posemode)
bpy.types.register(VIEW3D_PT_tools_posemode_options)
bpy.types.register(VIEW3D_PT_tools_brush)
+bpy.types.register(VIEW3D_PT_tools_brush_texture)
bpy.types.register(VIEW3D_PT_tools_brush_tool)
bpy.types.register(VIEW3D_PT_tools_brush_stroke)
bpy.types.register(VIEW3D_PT_tools_brush_curve)
Modified: trunk/blender/source/blender/blenkernel/intern/brush.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/brush.c 2010-01-03 05:49:56 UTC (rev 25687)
+++ trunk/blender/source/blender/blenkernel/intern/brush.c 2010-01-03 08:37:18 UTC (rev 25688)
@@ -100,19 +100,11 @@
Brush *copy_brush(Brush *brush)
{
Brush *brushn;
- MTex *mtex;
- int a;
brushn= copy_libblock(brush);
- for(a=0; a<MAX_MTEX; a++) {
- mtex= brush->mtex[a];
- if(mtex) {
- brushn->mtex[a]= MEM_dupallocN(mtex);
- if(mtex->tex) id_us_plus((ID*)mtex->tex);
- }
- }
-
+ if(brush->mtex.tex) id_us_plus((ID*)brush->mtex.tex);
+
brushn->curve= curvemapping_copy(brush->curve);
/* enable fake user by default */
@@ -127,17 +119,8 @@
/* not brush itself */
void free_brush(Brush *brush)
{
- MTex *mtex;
- int a;
-
- for(a=0; a<MAX_MTEX; a++) {
- mtex= brush->mtex[a];
- if(mtex) {
- if(mtex->tex) mtex->tex->id.us--;
- MEM_freeN(mtex);
- }
- }
-
+ if(brush->mtex.tex) brush->mtex.tex->id.us--;
+
curvemapping_free(brush->curve);
}
@@ -295,8 +278,8 @@
static MTex *brush_active_texture(Brush *brush)
{
- if(brush && brush->texact >= 0)
- return brush->mtex[brush->texact];
+ if(brush)
+ return &brush->mtex;
return NULL;
}
@@ -304,8 +287,7 @@
{
ID *idtest, *id=NULL;
- if(brush->mtex[brush->texact])
- id= (ID *)brush->mtex[brush->texact]->tex;
+ id= (ID *)brush->mtex.tex;
idtest= (ID*)BLI_findlink(&G.main->tex, nr-1);
if(idtest==0) { /* new tex */
@@ -316,13 +298,7 @@
if(idtest!=id) {
brush_texture_delete(brush);
- if(brush->mtex[brush->texact]==NULL) {
- brush->mtex[brush->texact]= add_mtex();
- brush->mtex[brush->texact]->r = 1.0f;
- brush->mtex[brush->texact]->g = 1.0f;
- brush->mtex[brush->texact]->b = 1.0f;
- }
- brush->mtex[brush->texact]->tex= (Tex*)idtest;
+ brush->mtex.tex= (Tex*)idtest;
id_us_plus(idtest);
return 1;
@@ -333,16 +309,10 @@
int brush_texture_delete(Brush *brush)
{
- if(brush->mtex[brush->texact]) {
- if(brush->mtex[brush->texact]->tex)
- brush->mtex[brush->texact]->tex->id.us--;
- MEM_freeN(brush->mtex[brush->texact]);
- brush->mtex[brush->texact]= NULL;
+ if(brush->mtex.tex)
+ brush->mtex.tex->id.us--;
- return 1;
- }
-
- return 0;
+ return 1;
}
int brush_clone_image_set_nr(Brush *brush, int nr)
@@ -383,7 +353,7 @@
/* Brush Sampling */
void brush_sample_tex(Brush *brush, float *xy, float *rgba)
{
- MTex *mtex= brush->mtex[brush->texact];
+ MTex *mtex= &brush->mtex;
if (mtex && mtex->tex) {
float co[3], tin, tr, tg, tb, ta;
@@ -741,7 +711,7 @@
{
Brush *brush= painter->brush;
BrushPainterCache *cache= &painter->cache;
- MTex *mtex= brush->mtex[brush->texact];
+ MTex *mtex= &brush->mtex;
int size;
short flt;
@@ -976,7 +946,7 @@
unsigned int *brush_gen_texture_cache(Brush *br, int half_side)
{
unsigned int *texcache = NULL;
- MTex *mtex = br->mtex[br->texact];
+ MTex *mtex = &br->mtex;
TexResult texres;
int hasrgb, ix, iy;
int side = half_side * 2;
Modified: trunk/blender/source/blender/blenkernel/intern/texture.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/texture.c 2010-01-03 05:49:56 UTC (rev 25687)
+++ trunk/blender/source/blender/blenkernel/intern/texture.c 2010-01-03 08:37:18 UTC (rev 25688)
@@ -703,11 +703,9 @@
}
br= G.main->brush.first;
while(br) {
- for(a=0; a<MAX_MTEX; a++) {
- if(br->mtex[a] && br->mtex[a]->tex==tex) {
- if(br->id.lib) lib= 1;
- else local= 1;
- }
+ if(br->mtex.tex==tex) {
+ if(br->id.lib) lib= 1;
+ else local= 1;
}
br= br->id.next;
}
@@ -762,13 +760,11 @@
}
br= G.main->brush.first;
while(br) {
- for(a=0; a<MAX_MTEX; a++) {
- if(br->mtex[a] && br->mtex[a]->tex==tex) {
- if(br->id.lib==0) {
- br->mtex[a]->tex= texn;
- texn->id.us++;
- tex->id.us--;
- }
+ if(br->mtex.tex==tex) {
+ if(br->id.lib==0) {
+ br->mtex.tex= texn;
+ texn->id.us++;
+ tex->id.us--;
}
}
br= br->id.next;
@@ -904,10 +900,6 @@
*mtex_ar= ((Lamp *)id)->mtex;
if(act) *act= (((Lamp *)id)->texact);
break;
- case ID_BR:
- *mtex_ar= ((Brush *)id)->mtex;
- if(act) *act= (((Brush *)id)->texact);
- break;
default:
*mtex_ar = NULL;
if(act) *act= 0;
@@ -932,9 +924,6 @@
case ID_LA:
((Lamp *)id)->texact= act;
break;
- case ID_BR:
- ((Brush *)id)->texact= act;
- break;
}
}
@@ -1016,35 +1005,18 @@
Tex *give_current_brush_texture(Brush *br)
{
- MTex *mtex= NULL;
- Tex *tex= NULL;
-
- if(br) {
- mtex= br->mtex[(int)(br->texact)];
- if(mtex) tex= mtex->tex;
- }
-
- return tex;
+ return br->mtex.tex;
}
void set_current_brush_texture(Brush *br, Tex *newtex)
{
- int act= br->texact;
+ if(br->mtex.tex)
+ id_us_min(&br->mtex.tex->id);
- if(br->mtex[act] && br->mtex[act]->tex)
- id_us_min(&br->mtex[act]->tex->id);
-
if(newtex) {
- if(!br->mtex[act])
- br->mtex[act]= add_mtex();
-
- br->mtex[act]->tex= newtex;
+ br->mtex.tex= newtex;
id_us_plus(&newtex->id);
}
- else if(br->mtex[act]) {
- MEM_freeN(br->mtex[act]);
- br->mtex[act]= NULL;
- }
}
/* ------------------------------------------------------------------------- */
Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c 2010-01-03 05:49:56 UTC (rev 25687)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c 2010-01-03 08:37:18 UTC (rev 25688)
@@ -1532,23 +1532,14 @@
static void lib_link_brush(FileData *fd, Main *main)
{
Brush *brush;
- MTex *mtex;
- int a;
/* only link ID pointers */
for(brush= main->brush.first; brush; brush= brush->id.next) {
if(brush->id.flag & LIB_NEEDLINK) {
brush->id.flag -= LIB_NEEDLINK;
+ brush->mtex.tex= newlibadr_us(fd, brush->id.lib, brush->mtex.tex);
brush->clone.image= newlibadr_us(fd, brush->id.lib, brush->clone.image);
-
- for(a=0; a<MAX_MTEX; a++) {
- mtex= brush->mtex[a];
- if(mtex)
- mtex->tex= newlibadr_us(fd, brush->id.lib, mtex->tex);
- }
-
- brush->clone.image= newlibadr_us(fd, brush->id.lib, brush->clone.image);
}
}
}
@@ -1556,11 +1547,7 @@
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list