[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37170] branches/soc-2011-onion: Revision: 29579

Jason Wilkins Jason.A.Wilkins at gmail.com
Sat Jun 4 08:41:58 CEST 2011


Revision: 37170
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37170
Author:   jwilkins
Date:     2011-06-04 06:41:58 +0000 (Sat, 04 Jun 2011)
Log Message:
-----------
Revision: 29579
Author: nicholasbishop
Date: 12:42:24 PM, Sunday, June 20, 2010
Message:
* Added mesh rna for paint masks
* Added operators to add/remove paint mask layers
* Added UI to select paint mask layer and add/remove

Note that this commit doesn't include the code for actually using multiple layers in sculpt mode.

** jwilkins:
** sculpt_mask.c included stdint.h, which does not come with MSVC 2008, but it seems it isn't needed to compile

Modified Paths:
--------------
    branches/soc-2011-onion/release/scripts/startup/bl_ui/space_view3d_toolbar.py
    branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_intern.h
    branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_mask.c
    branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_ops.c
    branches/soc-2011-onion/source/blender/makesrna/intern/rna_mesh.c

Property Changed:
----------------
    branches/soc-2011-onion/


Property changes on: branches/soc-2011-onion
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/soc-2010-jwilkins:28499-37009
/branches/soc-2010-nicolasbishop:28448-29483,29503,29514,29536,29572-29574
/trunk/blender:36833-37054
   + /branches/soc-2010-jwilkins:28499-37009
/branches/soc-2010-nicolasbishop:28448-29483,29503,29514,29536,29572-29574,29579
/trunk/blender:36833-37054

Modified: branches/soc-2011-onion/release/scripts/startup/bl_ui/space_view3d_toolbar.py
===================================================================
--- branches/soc-2011-onion/release/scripts/startup/bl_ui/space_view3d_toolbar.py	2011-06-04 06:25:24 UTC (rev 37169)
+++ branches/soc-2011-onion/release/scripts/startup/bl_ui/space_view3d_toolbar.py	2011-06-04 06:41:58 UTC (rev 37170)
@@ -715,9 +715,20 @@
         layout = self.layout
 
         settings = self.paint_settings(context)
+        mesh = context.object.data
 
+        row = layout.row()
+
+        col = row.column()
+        col.label("Mask:")
+        col.template_list(mesh, "paint_mask_layers", mesh, "active_paint_mask_index", rows=2)
+
+        col = row.column(align=True)
+        col.operator("paint.mask_layer_add", icon='ZOOMIN', text="")
+        col.operator("paint.mask_layer_remove", icon='ZOOMOUT', text="")
+
         col = layout.column()
-        col.label("Masking:")
+        col.active = mesh.active_paint_mask_index != -1
         col.operator("paint.mask_set", text="Clear").mode = 'CLEAR'
         col.operator("paint.mask_set", text="Fill").mode = 'FILL'
         col.operator("paint.mask_set", text="Invert").mode = 'INVERT'
@@ -726,7 +737,7 @@
         if context.sculpt_object:
             layout.separator()
             col = layout.column()
-            col.label("Hiding:")
+            col.label("Hide:")
             col.operator("sculpt.area_hide", text="Show Hidden Areas").show_all = True
             col.operator("sculpt.area_hide", text="Select Area to Show")
             col.operator("sculpt.area_hide", text="Select Area to Hide").hide_inside = True

Modified: branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_intern.h
===================================================================
--- branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_intern.h	2011-06-04 06:25:24 UTC (rev 37169)
+++ branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_intern.h	2011-06-04 06:41:58 UTC (rev 37170)
@@ -143,6 +143,9 @@
 void undo_paint_push_end(int type);
 
 /* paint_mask.c */
+void PAINT_OT_mask_layer_add(struct wmOperatorType *ot);
+void PAINT_OT_mask_layer_remove(struct wmOperatorType *ot);
+
 /* For now this is just temporary stuff to test masking */
 typedef enum {
 	MASKING_CLEAR,

Modified: branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_mask.c
===================================================================
--- branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_mask.c	2011-06-04 06:25:24 UTC (rev 37169)
+++ branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_mask.c	2011-06-04 06:41:58 UTC (rev 37170)
@@ -1,3 +1,7 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
 #include "DNA_mesh_types.h"
 #include "DNA_meshdata_types.h"
 #include "DNA_object_types.h"
@@ -19,12 +23,9 @@
 
 #include "BLI_pbvh.h"
 
+#include "ED_mesh.h"
 #include "paint_intern.h"
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
 static void set_mask_value(MaskSetMode mode, float *m)
 {
 	*m = (mode == MASKING_CLEAR ? 1 :
@@ -115,3 +116,67 @@
 	/* properties */
 	RNA_def_enum(ot->srna, "mode", mask_items, MASKING_CLEAR, "Mode", "");
 }
+
+static int mask_layer_poll(bContext *C)
+{
+	return mask_poll(C) && ED_mesh_layers_poll(C);
+}
+
+static int mask_layer_add_exec(bContext *C, wmOperator *op)
+{
+	Object *ob= CTX_data_active_object(C);
+	Mesh *me= ob->data;
+	int top;
+
+	top= CustomData_number_of_layers(&me->vdata, CD_PAINTMASK);
+	CustomData_add_layer(&me->vdata, CD_PAINTMASK, CD_DEFAULT, NULL, me->totvert);
+	CustomData_set_layer_active(&me->vdata, CD_PAINTMASK, top);
+
+	return OPERATOR_FINISHED;
+}
+
+void PAINT_OT_mask_layer_add(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "Add Mask Layer";
+	ot->description= "Add a paint mask layer";
+	ot->idname= "PAINT_OT_mask_layer_add";
+	
+	/* api callbacks */
+	ot->poll= mask_layer_poll;
+	ot->exec= mask_layer_add_exec;
+
+	/* flags */
+	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+}
+
+static int mask_layer_remove_exec(bContext *C, wmOperator *op)
+{
+	Object *ob= CTX_data_active_object(C);
+	Mesh *me= ob->data;
+	int active;
+
+	active = CustomData_get_active_layer_index(&me->vdata, CD_PAINTMASK);
+	
+	if(active >= 0)
+		CustomData_free_layer_active(&me->vdata, CD_PAINTMASK, me->totvert);
+	else
+		return OPERATOR_CANCELLED;
+
+	return OPERATOR_FINISHED;
+}
+
+void PAINT_OT_mask_layer_remove(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "Remove Mask Layer";
+	ot->description= "Remove the active paint mask layer";
+	ot->idname= "PAINT_OT_mask_layer_remove";
+	
+	/* api callbacks */
+	ot->poll= mask_layer_poll;
+	ot->exec= mask_layer_remove_exec;
+
+	/* flags */
+	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+}

Modified: branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_ops.c
===================================================================
--- branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_ops.c	2011-06-04 06:25:24 UTC (rev 37169)
+++ branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_ops.c	2011-06-04 06:41:58 UTC (rev 37170)
@@ -387,6 +387,8 @@
 	WM_operatortype_append(PAINT_OT_face_select_reveal);
 
 	/* mask */
+	WM_operatortype_append(PAINT_OT_mask_layer_add);
+	WM_operatortype_append(PAINT_OT_mask_layer_remove);
 	WM_operatortype_append(PAINT_OT_mask_set);
 }
 

Modified: branches/soc-2011-onion/source/blender/makesrna/intern/rna_mesh.c
===================================================================
--- branches/soc-2011-onion/source/blender/makesrna/intern/rna_mesh.c	2011-06-04 06:25:24 UTC (rev 37169)
+++ branches/soc-2011-onion/source/blender/makesrna/intern/rna_mesh.c	2011-06-04 06:41:58 UTC (rev 37170)
@@ -309,18 +309,21 @@
 	return (me->edit_mesh)? &me->edit_mesh->fdata: &me->fdata;
 }
 
-static int rna_CustomDataLayer_length(PointerRNA *ptr, int type)
+static CustomData *rna_mesh_vdata(Mesh *me)
 {
-	Mesh *me= (Mesh*)ptr->id.data;
-	CustomData *fdata= rna_mesh_fdata(me);
-	CustomDataLayer *layer;
-	int i, length= 0;
+	return (me->edit_mesh)? &me->edit_mesh->vdata: &me->vdata;
+}
 
-	for(layer=fdata->layers, i=0; i<fdata->totlayer; layer++, i++)
-		if(layer->type == type)
-			length++;
+static int rna_face_CustomDataLayer_count(PointerRNA *ptr, int type)
+{
+	CustomData *fdata= rna_mesh_fdata(ptr->id.data);
+	return CustomData_number_of_layers(fdata, type);
+}
 
-	return length;
+static int rna_vert_CustomDataLayer_count(PointerRNA *ptr, int type)
+{
+	CustomData *vdata= rna_mesh_vdata(ptr->id.data);
+	return CustomData_number_of_layers(vdata, type);
 }
 
 static int rna_CustomDataLayer_active_get(PointerRNA *ptr, int type, int render)
@@ -382,7 +385,7 @@
 
 static int rna_Mesh_uv_textures_length(PointerRNA *ptr)
 {
-	return rna_CustomDataLayer_length(ptr, CD_MTFACE);
+	return rna_face_CustomDataLayer_count(ptr, CD_MTFACE);
 }
 
 static PointerRNA rna_Mesh_active_uv_texture_get(PointerRNA *ptr)
@@ -705,7 +708,7 @@
 
 static int rna_Mesh_vertex_colors_length(PointerRNA *ptr)
 {
-	return rna_CustomDataLayer_length(ptr, CD_MCOL);
+	return rna_face_CustomDataLayer_count(ptr, CD_MCOL);
 }
 
 static PointerRNA rna_Mesh_active_vertex_color_get(PointerRNA *ptr)
@@ -802,6 +805,89 @@
 	CustomData_set_layer_unique_name(fdata, cdl - fdata->layers);
 }
 
+/* Paint mask layer */
+
+static int rna_MeshPaintMaskLayer_data_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION])
+{
+	Mesh *me= (Mesh*)ptr->id.data;
+
+	length[0] = me->totvert;
+
+	return length[0];
+}
+
+static void rna_MeshPaintMaskLayer_data_get(PointerRNA *ptr, float *values)
+{
+	Mesh *me= (Mesh*)ptr->id.data;
+	CustomDataLayer *layer= (CustomDataLayer*)ptr->data;
+
+	memcpy(values, layer->data, me->totvert * sizeof(float));
+}
+
+static void rna_MeshPaintMaskLayer_data_set(PointerRNA *ptr, const float *values)
+{
+	Mesh *me= (Mesh*)ptr->id.data;
+	CustomDataLayer *layer= (CustomDataLayer*)ptr->data;
+
+	memcpy(layer->data, values, me->totvert * sizeof(float));
+}
+
+static char *rna_MeshPaintMask_path(PointerRNA *ptr)
+{
+	CustomDataLayer *layer= (CustomDataLayer*)ptr->data;
+
+	return BLI_sprintfN("paintmask[%d]", (float*)ptr->data - (float*)layer->data);
+}
+
+static int rna_mask_layer_check(CollectionPropertyIterator *iter, void *data)
+{
+	CustomDataLayer *layer= (CustomDataLayer*)data;
+	return (layer->type != CD_PAINTMASK);
+}
+
+
+static void rna_Mesh_mask_layers_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
+{
+	Mesh *me= (Mesh*)ptr->data;
+	CustomData *vdata= rna_mesh_vdata(me);
+	rna_iterator_array_begin(iter, (void*)vdata->layers,
+				 sizeof(CustomDataLayer),
+				 vdata->totlayer, 0,
+				 rna_mask_layer_check);
+}
+
+static int rna_Mesh_mask_layers_length(PointerRNA *ptr)
+{
+	return rna_vert_CustomDataLayer_count(ptr, CD_PAINTMASK);
+}
+
+static int rna_Mesh_active_paint_mask_index_get(PointerRNA *ptr)
+{
+	Mesh *me= (Mesh*)ptr->data;
+	CustomData *vdata= rna_mesh_vdata(me);
+	return CustomData_get_active_layer(vdata, CD_PAINTMASK);
+}
+
+static void rna_Mesh_active_paint_mask_index_set(PointerRNA *ptr, int value)
+{
+	Mesh *me= (Mesh*)ptr->data;
+	CustomData *vdata= rna_mesh_vdata(me);
+
+	CustomData_set_layer_active(vdata, CD_PAINTMASK, value);
+}
+
+static void rna_Mesh_active_paint_mask_index_range(PointerRNA *ptr, int *min, int *max)
+{
+	Mesh *me= (Mesh*)ptr->data;
+	CustomData *vdata= rna_mesh_vdata(me);
+
+	*min= 0;
+	*max= CustomData_number_of_layers(vdata, CD_PAINTMASK)-1;
+	*max= MAX2(0, *max);
+}
+
+/* Custom property layers */
+
 static void rna_MeshFloatPropertyLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
 {
 	Mesh *me= (Mesh*)ptr->id.data;
@@ -830,7 +916,7 @@
 
 static int rna_Mesh_float_layers_length(PointerRNA *ptr)
 {
-	return rna_CustomDataLayer_length(ptr, CD_PROP_FLT);
+	return rna_face_CustomDataLayer_count(ptr, CD_PROP_FLT);
 }
 
 static int rna_int_layer_check(CollectionPropertyIterator *UNUSED(iter), void *data)
@@ -861,7 +947,7 @@
 
 static int rna_Mesh_int_layers_length(PointerRNA *ptr)
 {

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list