[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