[Bf-blender-cvs] [fc60f40] mesh-transfer-data: Better UI for modifier, based on feedback from first review.

Bastien Montagne noreply at git.blender.org
Thu Nov 13 10:05:57 CET 2014


Commit: fc60f40412a23daf15558dc0ca4bee9f95e74e05
Author: Bastien Montagne
Date:   Thu Nov 13 10:02:48 2014 +0100
Branches: mesh-transfer-data
https://developer.blender.org/rBfc60f40412a23daf15558dc0ca4bee9f95e74e05

Better UI for modifier, based on feedback from first review.

===================================================================

M	release/scripts/startup/bl_ui/properties_data_modifier.py
M	source/blender/blenkernel/BKE_data_transfer.h
M	source/blender/makesdna/DNA_modifier_types.h
M	source/blender/makesrna/intern/rna_modifier.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py
index 4e753f0..e374cc8 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -1234,56 +1234,80 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
 
         layout.separator()
 
-        layout.prop(md, "vert_mapping")
-        col = layout.column(align=True)
-        split = col.split(0.333, align=True)
-        sub = split.column(align=True)
-        sub.prop(md, "data_types_verts_vgroup")
-        row = split.row(align=True)
-        row.prop(md, "fromlayers_vgroup_select", text="")
-        row.label(icon='RIGHTARROW')
-        row.prop(md, "tolayers_vgroup_select", text="")
-        split = col.split(0.333, align=True)
-        sub = split.column(align=True)
-        sub.prop(md, "data_types_verts")
+        split = layout.split(0.333)
+        split.prop(md, "use_vert_data")
+        use_vert = md.use_vert_data
+        row = split.row()
+        row.active = use_vert
+        row.prop(md, "vert_mapping", text="")
+        if use_vert:
+            col = layout.column(align=True)
+            split = col.split(0.333, align=True)
+            sub = split.column(align=True)
+            sub.prop(md, "data_types_verts_vgroup")
+            row = split.row(align=True)
+            row.prop(md, "fromlayers_vgroup_select", text="")
+            row.label(icon='RIGHTARROW')
+            row.prop(md, "tolayers_vgroup_select", text="")
+            split = col.split(0.333, align=True)
+            sub = split.column(align=True)
+            sub.prop(md, "data_types_verts")
 
         layout.separator()
 
-        layout.prop(md, "edge_mapping")
-        col = layout.column(align=True)
-        split = col.split(0.333, align=True)
-        sub = split.column(align=True)
-        sub.prop(md, "data_types_edges")
+        split = layout.split(0.333)
+        split.prop(md, "use_edge_data")
+        use_edge = md.use_edge_data
+        row = split.row()
+        row.active = use_edge
+        row.prop(md, "edge_mapping", text="")
+        if use_edge:
+            col = layout.column(align=True)
+            split = col.split(0.333, align=True)
+            sub = split.column(align=True)
+            sub.prop(md, "data_types_edges")
 
         layout.separator()
 
-        layout.prop(md, "loop_mapping")
-        col = layout.column(align=True)
-        split = col.split(0.333, align=True)
-        sub = split.column(align=True)
-        sub.prop(md, "data_types_loops")
-        split = col.split(0.333, align=True)
-        sub = split.column(align=True)
-        sub.prop(md, "data_types_loops_vcol")
-        row = split.row(align=True)
-        row.prop(md, "fromlayers_vcol_select", text="")
-        row.label(icon='RIGHTARROW')
-        row.prop(md, "tolayers_vcol_select", text="")
+        split = layout.split(0.333)
+        split.prop(md, "use_loop_data")
+        use_loop = md.use_loop_data
+        row = split.row()
+        row.active = use_loop or 'UV' in md.data_types_polys_uv  # Exception!
+        row.prop(md, "loop_mapping", text="")
+        if use_loop:
+            col = layout.column(align=True)
+            split = col.split(0.333, align=True)
+            sub = split.column(align=True)
+            sub.prop(md, "data_types_loops")
+            split = col.split(0.333, align=True)
+            sub = split.column(align=True)
+            sub.prop(md, "data_types_loops_vcol")
+            row = split.row(align=True)
+            row.prop(md, "fromlayers_vcol_select", text="")
+            row.label(icon='RIGHTARROW')
+            row.prop(md, "tolayers_vcol_select", text="")
 
         layout.separator()
 
-        layout.prop(md, "poly_mapping")
-        col = layout.column(align=True)
-        split = col.split(0.333, align=True)
-        sub = split.column(align=True)
-        sub.prop(md, "data_types_polys_uv")
-        row = split.row(align=True)
-        row.prop(md, "fromlayers_uv_select", text="")
-        row.label(icon='RIGHTARROW')
-        row.prop(md, "tolayers_uv_select", text="")
-        split = col.split(0.333, align=True)
-        sub = split.column(align=True)
-        sub.prop(md, "data_types_polys")
+        split = layout.split(0.333)
+        split.prop(md, "use_poly_data")
+        use_poly = md.use_poly_data
+        row = split.row()
+        row.active = use_poly
+        row.prop(md, "poly_mapping", text="")
+        if use_poly:
+            col = layout.column(align=True)
+            split = col.split(0.333, align=True)
+            sub = split.column(align=True)
+            sub.prop(md, "data_types_polys_uv")
+            row = split.row(align=True)
+            row.prop(md, "fromlayers_uv_select", text="")
+            row.label(icon='RIGHTARROW')
+            row.prop(md, "tolayers_uv_select", text="")
+            split = col.split(0.333, align=True)
+            sub = split.column(align=True)
+            sub.prop(md, "data_types_polys")
 
         layout.separator()
 
diff --git a/source/blender/blenkernel/BKE_data_transfer.h b/source/blender/blenkernel/BKE_data_transfer.h
index 3672e98..ffc0074 100644
--- a/source/blender/blenkernel/BKE_data_transfer.h
+++ b/source/blender/blenkernel/BKE_data_transfer.h
@@ -49,18 +49,23 @@ enum {
 	DT_DATA_SHAPEKEY                    = 1 << 1,
 	DT_DATA_SKIN                        = 1 << 2,
 	DT_DATA_BWEIGHT_VERT                = 1 << 3,
+	DT_DATA_VERT_ALL                    = DT_DATA_MDEFORMVERT | DT_DATA_SHAPEKEY | DT_DATA_SKIN | DT_DATA_BWEIGHT_VERT,
 
 	DT_DATA_SHARP_EDGE                  = 1 << 8,
 	DT_DATA_SEAM                        = 1 << 9,
 	DT_DATA_CREASE                      = 1 << 10,
 	DT_DATA_BWEIGHT_EDGE                = 1 << 11,
 	DT_DATA_FREESTYLE_EDGE              = 1 << 12,
+	DT_DATA_EDGE_ALL                    = DT_DATA_SHARP_EDGE | DT_DATA_SEAM | DT_DATA_CREASE | DT_DATA_BWEIGHT_EDGE |
+	                                      DT_DATA_FREESTYLE_EDGE,
 
 	DT_DATA_UV                          = 1 << 16,
 	DT_DATA_SHARP_FACE                  = 1 << 17,
 	DT_DATA_FREESTYLE_FACE              = 1 << 18,
+	DT_DATA_POLY_ALL                    = DT_DATA_UV | DT_DATA_SHARP_FACE | DT_DATA_FREESTYLE_FACE,
 
 	DT_DATA_VCOL                        = 1 << 24,
+	DT_DATA_LOOP_ALL                    = DT_DATA_VCOL,
 };
 
 CustomDataMask BKE_data_transfer_dttypes_to_cdmask(const int dtdata_types);
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index 44f4825..e70145d 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -1400,6 +1400,12 @@ enum {
 	MOD_DATATRANSFER_OBSRC_TRANSFORM  = 1 << 1,
 	MOD_DATATRANSFER_MAP_MAXDIST      = 1 << 2,
 	MOD_DATATRANSFER_INVERT_VGROUP    = 1 << 3,
+
+	/* Only for UI really. */
+	MOD_DATATRANSFER_USE_VERT         = 1 << 28,
+	MOD_DATATRANSFER_USE_EDGE         = 1 << 29,
+	MOD_DATATRANSFER_USE_LOOP         = 1 << 30,
+	MOD_DATATRANSFER_USE_POLY         = 1 << 31,
 };
 
 
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index 6a68a70..b33e0f8 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -712,6 +712,46 @@ static int rna_LaplacianDeformModifier_is_bind_get(PointerRNA *ptr)
 	return ((lmd->flag & MOD_LAPLACIANDEFORM_BIND) && (lmd->cache_system != NULL));
 }
 
+static void dt_use_data_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+{
+	DataTransferModifierData *dtmd = (DataTransferModifierData *)ptr->data;
+
+	if (!(dtmd->flags & MOD_DATATRANSFER_USE_VERT)) {
+		dtmd->data_types &= ~DT_DATA_VERT_ALL;
+	}
+	if (!(dtmd->flags & MOD_DATATRANSFER_USE_EDGE)) {
+		dtmd->data_types &= ~DT_DATA_EDGE_ALL;
+	}
+	if (!(dtmd->flags & MOD_DATATRANSFER_USE_LOOP)) {
+		dtmd->data_types &= ~DT_DATA_LOOP_ALL;
+	}
+	if (!(dtmd->flags & MOD_DATATRANSFER_USE_POLY)) {
+		dtmd->data_types &= ~DT_DATA_POLY_ALL;
+	}
+
+	rna_Modifier_update(bmain, scene, ptr);
+}
+
+static void dt_data_types_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+{
+	DataTransferModifierData *dtmd = (DataTransferModifierData *)ptr->data;
+	const int item_types = BKE_data_transfer_get_dttypes_item_types(dtmd->data_types);
+
+	if (item_types & ME_VERT) {
+		dtmd->flags |= MOD_DATATRANSFER_USE_VERT;
+	}
+	if (item_types & ME_EDGE) {
+		dtmd->flags |= MOD_DATATRANSFER_USE_EDGE;
+	}
+	if (item_types & ME_LOOP) {
+		dtmd->flags |= MOD_DATATRANSFER_USE_LOOP;
+	}
+	if (item_types & ME_POLY) {
+		dtmd->flags |= MOD_DATATRANSFER_USE_POLY;
+	}
+
+	rna_Modifier_update(bmain, scene, ptr);
+}
 
 static EnumPropertyItem *dt_fromlayers_select_itemf(bContext *C, PointerRNA *ptr, PropertyRNA *prop, bool *r_free)
 {
@@ -4057,44 +4097,62 @@ static void rna_def_modifier_datatransfer(BlenderRNA *brna)
 	RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DATATRANSFER_OBSRC_TRANSFORM);
 	RNA_def_property_update(prop, 0, "rna_Modifier_update");
 
+	/* Generic, UI-only data types toggles. */
+	prop = RNA_def_boolean(srna, "use_vert_data", false, "Vertex Data", "Enable vertex data transfer");
+	RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DATATRANSFER_USE_VERT);
+	RNA_def_property_update(prop, 0, "dt_use_data_update");
+
+	prop = RNA_def_boolean(srna, "use_edge_data", false, "Edge Data", "Enable edge data transfer");
+	RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DATATRANSFER_USE_EDGE);
+	RNA_def_property_update(prop, 0, "dt_use_data_update");
+
+	prop = RNA_def_boolean(srna, "use_loop_data", false, "Face Corner Data", "Enable face corner data transfer");
+	RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DATATRANSFER_USE_LOOP);
+	RNA_def_property_update(prop, 0, "dt_use_data_update");
+
+	prop = RNA_def_boolean(srna, "use_poly_data", false, "Face Data", "Enable face data transfer");
+	RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_DATATRANSFER_USE_POLY);
+	RNA_def_property_update(prop, 0, "dt_use_data_update");
+
+	/* Actual data types selection. */
 	prop = RNA_def_enum(srna, "data_types_verts", DT_layer_vert_it

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list