[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