[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31037] trunk/blender: Brush/ Paint internal changes

Campbell Barton ideasman42 at gmail.com
Wed Aug 4 14:18:07 CEST 2010


Revision: 31037
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31037
Author:   campbellbarton
Date:     2010-08-04 14:18:07 +0200 (Wed, 04 Aug 2010)

Log Message:
-----------
Brush/Paint internal changes
- remove brush array for each Paint struct, just use a single brush pointer.
- removed rna function based template filtering.
- filter brushes using a flag on the brush and the pointer poll function.
- set the brushes using a new operator WM_OT_context_set_id().

TODO
- remake startup.blend, currently brush groupings are lost.
- rewrite WM_OT_context_set_id() to use rna introspection.

Modified Paths:
--------------
    trunk/blender/release/scripts/op/wm.py
    trunk/blender/release/scripts/ui/space_view3d_toolbar.py
    trunk/blender/source/blender/blenkernel/BKE_brush.h
    trunk/blender/source/blender/blenkernel/BKE_paint.h
    trunk/blender/source/blender/blenkernel/intern/brush.c
    trunk/blender/source/blender/blenkernel/intern/paint.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/blenloader/intern/writefile.c
    trunk/blender/source/blender/editors/gpencil/gpencil_buttons.c
    trunk/blender/source/blender/editors/include/UI_interface.h
    trunk/blender/source/blender/editors/interface/interface_templates.c
    trunk/blender/source/blender/editors/sculpt_paint/paint_ops.c
    trunk/blender/source/blender/editors/sculpt_paint/sculpt.c
    trunk/blender/source/blender/editors/space_image/Makefile
    trunk/blender/source/blender/editors/space_image/image_buttons.c
    trunk/blender/source/blender/editors/space_logic/logic_window.c
    trunk/blender/source/blender/editors/space_nla/nla_buttons.c
    trunk/blender/source/blender/editors/space_node/drawnode.c
    trunk/blender/source/blender/makesdna/DNA_brush_types.h
    trunk/blender/source/blender/makesdna/DNA_scene_types.h
    trunk/blender/source/blender/makesrna/intern/rna_brush.c
    trunk/blender/source/blender/makesrna/intern/rna_define.c
    trunk/blender/source/blender/makesrna/intern/rna_sculpt_paint.c
    trunk/blender/source/blender/makesrna/intern/rna_ui_api.c

Modified: trunk/blender/release/scripts/op/wm.py
===================================================================
--- trunk/blender/release/scripts/op/wm.py	2010-08-04 11:07:14 UTC (rev 31036)
+++ trunk/blender/release/scripts/op/wm.py	2010-08-04 12:18:07 UTC (rev 31037)
@@ -325,6 +325,39 @@
         exec("context.%s=advance_enum" % self.properties.data_path)
         return {'FINISHED'}
 
+
+class WM_OT_context_set_id(bpy.types.Operator):
+    '''Toggle a context value.'''
+    bl_idname = "wm.context_set_id"
+    bl_label = "Set Library ID"
+    bl_options = {'UNDO'}
+
+    data_path = rna_path_prop
+    value = StringProperty(name="Value",
+            description="Assign value", maxlen=1024, default="")
+
+    def execute(self, context):
+        value = self.properties.value
+        print(value)
+
+        # TODO! highly lazy, must rewrite
+        for lib in dir(bpy.data):
+            try:
+                id_value = getattr(bpy.data, lib)[value] # bpy.data.brushes["Smooth"]
+            except:
+                id_value = None
+            
+            if id_value:
+                try:
+                    print("attempts", id_value)
+                    exec("context.%s=id_value" % self.properties.data_path)
+                    break # success
+                except:
+                    pass
+
+        return {'FINISHED'}
+
+
 doc_id = StringProperty(name="Doc ID",
         description="", maxlen=1024, default="", options={'HIDDEN'})
 

Modified: trunk/blender/release/scripts/ui/space_view3d_toolbar.py
===================================================================
--- trunk/blender/release/scripts/ui/space_view3d_toolbar.py	2010-08-04 11:07:14 UTC (rev 31036)
+++ trunk/blender/release/scripts/ui/space_view3d_toolbar.py	2010-08-04 12:18:07 UTC (rev 31037)
@@ -504,27 +504,8 @@
 
         if not context.particle_edit_object:
             col = layout.split().column()
+            col.template_ID_preview(settings, "brush", new="brush.add", rows=3, cols=8)
 
-            if context.sculpt_object and context.tool_settings.sculpt:
-                col.template_ID_preview(settings, "brush", new="brush.add", filter="is_sculpt_brush", rows=3, cols=8)
-            elif context.texture_paint_object and context.tool_settings.image_paint:
-                col.template_ID_preview(settings, "brush", new="brush.add", filter="is_imapaint_brush", rows=3, cols=8)
-            elif context.vertex_paint_object and context.tool_settings.vertex_paint:
-                col.template_ID_preview(settings, "brush", new="brush.add", filter="is_vpaint_brush", rows=3, cols=8)
-            elif context.weight_paint_object and context.tool_settings.weight_paint:
-                col.template_ID_preview(settings, "brush", new="brush.add", filter="is_wpaint_brush", rows=3, cols=8)
-            else:
-                row = col.row()
-
-                if context.sculpt_object and brush:
-                    defaultbrushes = 8
-                elif context.texture_paint_object and brush:
-                    defaultbrushes = 4
-                else:
-                    defaultbrushes = 7
-
-                row.template_list(settings, "brushes", settings, "active_brush_index", rows=2, maxrows=defaultbrushes)
-
         # Particle Mode #
 
         # XXX This needs a check if psys is editable.
@@ -865,7 +846,13 @@
         elif context.vertex_paint_object or context.weight_paint_object:
             col.prop(brush, "vertexpaint_tool", expand=False, text="")
 
+        row = layout.row(align=True)
+        row.prop(brush, "use_paint_sculpt", text="", icon='SCULPTMODE_HLT')
+        row.prop(brush, "use_paint_vertex", text="", icon='VPAINT_HLT')
+        row.prop(brush, "use_paint_weight", text="", icon='WPAINT_HLT')
+        row.prop(brush, "use_paint_texture", text="", icon='TPAINT_HLT')
 
+
 class VIEW3D_PT_tools_brush_stroke(PaintPanel, bpy.types.Panel):
     bl_label = "Stroke"
     bl_default_closed = True
@@ -1191,7 +1178,8 @@
     bl_label = "Project Paint"
 
     def poll(self, context):
-        return context.tool_settings.image_paint.brush.imagepaint_tool != 'SMEAR'
+        brush = context.tool_settings.image_paint.brush
+        return (brush and brush.imagepaint_tool != 'SMEAR')
 
     def draw_header(self, context):
         ipaint = context.tool_settings.image_paint

Modified: trunk/blender/source/blender/blenkernel/BKE_brush.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_brush.h	2010-08-04 11:07:14 UTC (rev 31036)
+++ trunk/blender/source/blender/blenkernel/BKE_brush.h	2010-08-04 12:18:07 UTC (rev 31037)
@@ -50,10 +50,7 @@
 struct ImBuf *get_brush_icon(struct Brush *brush);
 
 /* brush library operations used by different paint panels */
-int brush_set_nr(struct Brush **current_brush, int nr, const char *name);
 int brush_delete(struct Brush **current_brush);
-void brush_check_exists(struct Brush **brush, const char *name);
-void brush_toggled_fake_user(struct Brush *brush);
 int brush_texture_set_nr(struct Brush *brush, int nr);
 int brush_texture_delete(struct Brush *brush);
 int brush_clone_image_set_nr(struct Brush *brush, int nr);

Modified: trunk/blender/source/blender/blenkernel/BKE_paint.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_paint.h	2010-08-04 11:07:14 UTC (rev 31036)
+++ trunk/blender/source/blender/blenkernel/BKE_paint.h	2010-08-04 12:18:07 UTC (rev 31037)
@@ -47,21 +47,17 @@
 
 void paint_init(struct Paint *p, const char col[3]);
 void free_paint(struct Paint *p);
-void copy_paint(struct Paint *orig, struct Paint *new);
+void copy_paint(struct Paint *src, struct Paint *tar);
 
 struct Paint *paint_get_active(struct Scene *sce);
 struct Brush *paint_brush(struct Paint *paint);
 void paint_brush_set(struct Paint *paint, struct Brush *br);
-void paint_brush_slot_add(struct Paint *p);
-void paint_brush_slot_remove(struct Paint *p);
 
 /* testing face select mode
  * Texture paint could be removed since selected faces are not used
  * however hiding faces is useful */
 int paint_facesel_test(struct Object *ob);
 
-int paint_has_brush(struct Paint *p, struct Brush *brush);
-
 /* Session data (mode-specific) */
 
 typedef struct SculptSession {

Modified: trunk/blender/source/blender/blenkernel/intern/brush.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/brush.c	2010-08-04 11:07:14 UTC (rev 31036)
+++ trunk/blender/source/blender/blenkernel/intern/brush.c	2010-08-04 12:18:07 UTC (rev 31037)
@@ -35,6 +35,7 @@
 #include "DNA_brush_types.h"
 #include "DNA_color_types.h"
 #include "DNA_scene_types.h"
+#include "DNA_object_types.h"
 #include "DNA_windowmanager_types.h"
 
 #include "WM_types.h"
@@ -67,6 +68,8 @@
 	brush->blend = 0;
 	brush->flag = 0;
 
+	brush->ob_mode = (OB_MODE_SCULPT|OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT);
+
 	/* BRUSH SCULPT TOOL SETTINGS */
 	brush->size= 35; /* radius of the brush in pixels */
 	brush->alpha= 0.5f; /* brush strength/intensity probably variable should be renamed? */
@@ -120,6 +123,9 @@
 
 	brush= alloc_libblock(&G.main->brush, ID_BR, name);
 
+	/* enable fake user by default */
+	brush->id.flag |= LIB_FAKEUSER;
+
 	brush_set_defaults(brush);
 
 	brush->sculpt_tool = SCULPT_TOOL_DRAW; /* sculpting defaults to the draw tool for new brushes */
@@ -127,10 +133,6 @@
 	 /* the default alpha falloff curve */
 	brush_curve_preset(brush, CURVE_PRESET_SMOOTH);
 
-	/* enable fake user by default */
-	brush->id.flag |= LIB_FAKEUSER;
-	brush_toggled_fake_user(brush);
-
 	return brush;
 }
 
@@ -151,7 +153,7 @@
 	/* enable fake user by default */
 	if (!(brushn->id.flag & LIB_FAKEUSER)) {
 		brushn->id.flag |= LIB_FAKEUSER;
-		brush_toggled_fake_user(brushn);
+		brushn->id.us++;
 	}
 	
 	return brushn;
@@ -205,7 +207,7 @@
 		/* enable fake user by default */
 		if (!(brush->id.flag & LIB_FAKEUSER)) {
 			brush->id.flag |= LIB_FAKEUSER;
-			brush_toggled_fake_user(brush);
+			brush->id.us++;
 		}
 	}
 	else if(local && lib) {
@@ -393,54 +395,6 @@
 }
 
 /* Library Operations */
-
-int brush_set_nr(Brush **current_brush, int nr, const char *name)
-{
-	ID *idtest, *id;
-	
-	id= (ID*)(*current_brush);
-	idtest= (ID*)BLI_findlink(&G.main->brush, nr-1);
-	
-	if(idtest==0) { /* new brush */
-		if(id) idtest= (ID *)copy_brush((Brush *)id);
-		else idtest= (ID *)add_brush(name);
-		idtest->us--;
-	}
-	if(idtest!=id) {
-		brush_delete(current_brush);
-		*current_brush= (Brush *)idtest;
-		id_us_plus(idtest);
-
-		return 1;
-	}
-
-	return 0;
-}
-
-int brush_delete(Brush **current_brush)
-{
-	if (*current_brush) {
-		(*current_brush)->id.us--;
-		*current_brush= NULL;
-
-		return 1;
-	}
-
-	return 0;
-}
-
-void brush_toggled_fake_user(Brush *brush)
-{
-	ID *id= (ID*)brush;
-	if(id) {
-		if(id->flag & LIB_FAKEUSER) {
-			id_us_plus(id);
-		} else {
-			id->us--;
-		}
-	}
-}
-
 void brush_curve_preset(Brush *b, /*CurveMappingPreset*/int preset)
 {
 	CurveMap *cm = NULL;
@@ -524,12 +478,6 @@
 	return 0;
 }
 
-void brush_check_exists(Brush **brush, const char *name)
-{
-	if(*brush==NULL)
-		brush_set_nr(brush, 1, name);
-}
-
 /* Brush Sampling */
 void brush_sample_tex(Brush *brush, float *xy, float *rgba)
 {

Modified: trunk/blender/source/blender/blenkernel/intern/paint.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/paint.c	2010-08-04 11:07:14 UTC (rev 31036)
+++ trunk/blender/source/blender/blenkernel/intern/paint.c	2010-08-04 12:18:07 UTC (rev 31037)
@@ -71,93 +71,15 @@
 
 Brush *paint_brush(Paint *p)
 {
-	return p && p->brushes ? p->brushes[p->active_brush_index] : NULL;
+	return p ? p->brush : NULL;
 }
 
 void paint_brush_set(Paint *p, Brush *br)
 {
-	if(p && !br) {
-		/* Setting to NULL removes the current slot */
-		paint_brush_slot_remove(p);
-	}
-	else if(p) {
-		int found = 0;
-	
-		if(p->brushes) {
-			int i;
-			
-			/* See if there's already a slot with the brush */
-			for(i = 0; i < p->brush_count; ++i) {
-				if(p->brushes[i] == br) {
-					p->active_brush_index = i;
-					found = 1;
-					break;
-				}
-			}
-			
-		}
-		
-		if(!found) {
-			paint_brush_slot_add(p);
-			id_us_plus(&br->id);
-		}
-		
-		/* Make sure the current slot is the new brush */
-		p->brushes[p->active_brush_index] = br;
-	}
+	if(p)
+		p->brush= br;
 }
 
-static void paint_brush_slots_alloc(Paint *p, const int count)
-{
-	p->brush_count = count;

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list