[Bf-blender-cvs] [e4f0cb5] temp_custom_loop_normals: Split clnor modifier in two (one for generate, one for copyfrom), and add 'tracto' generate mode.
Bastien Montagne
noreply at git.blender.org
Mon Nov 3 16:50:59 CET 2014
Commit: e4f0cb5b55d60996258fb78507a0f9374a9f9d7b
Author: Bastien Montagne
Date: Mon Nov 3 15:15:07 2014 +0100
Branches: temp_custom_loop_normals
https://developer.blender.org/rBe4f0cb5b55d60996258fb78507a0f9374a9f9d7b
Split clnor modifier in two (one for generate, one for copyfrom), and add 'tracto' generate mode.
Note 'CopySplitNormalModifier' is doomed to be merged/replace by a generic 'TransferData' one
once mesh transfer data work is finished.
===================================================================
M release/scripts/startup/bl_ui/properties_data_modifier.py
M source/blender/makesdna/DNA_modifier_types.h
M source/blender/makesrna/RNA_access.h
M source/blender/makesrna/intern/rna_modifier.c
M source/blender/modifiers/CMakeLists.txt
M source/blender/modifiers/MOD_modifiertypes.h
A source/blender/modifiers/intern/MOD_copysplitnormal.c
M source/blender/modifiers/intern/MOD_setsplitnormal.c
M source/blender/modifiers/intern/MOD_util.c
===================================================================
diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py
index ba6bb17..b6b428a 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -1227,7 +1227,8 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
def SET_SPLIT_NORMAL(self, layout, ob, md):
has_vgroup = bool(md.vertex_group)
- needs_object_bbox_center = (md.mode == 'ELLIPSOID') and not md.target
+ needs_object_bbox_center = (((md.mode == 'ELLIPSOID') and not md.target) or
+ ((md.mode == 'TRACKTO') and md.use_trackto_parallel))
row = layout.row()
row.prop(md, "mode", expand=True)
@@ -1239,6 +1240,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
sub = col.row()
sub.active = needs_object_bbox_center
sub.prop(md, "use_bbox_center")
+ col.prop(md, "use_current_custom_split_normals")
col = split.column()
row = col.row(align=True)
@@ -1246,8 +1248,29 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
sub = row.row(align=True)
sub.active = has_vgroup
sub.prop(md, "use_invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
+ row = col.row(align=True)
+ row.active = (md.mode == 'TRACKTO')
+ row.prop(md, "use_trackto_parallel")
+
+ def COPY_SPLIT_NORMAL(self, layout, ob, md):
+ has_vgroup = bool(md.vertex_group)
+
+ row = layout.row()
+ row.prop(md, "mode", expand=True)
+
+ split = layout.split()
+
+ col = split.column()
+ col.prop(md, "target", text="")
col.prop(md, "use_current_custom_split_normals")
+ col = split.column()
+ row = col.row(align=True)
+ row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
+ sub = row.row(align=True)
+ sub.active = has_vgroup
+ sub.prop(md, "use_invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
+
if __name__ == "__main__": # only for live edit.
bpy.utils.register_module(__name__)
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index cc9600f..6f06336 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -83,6 +83,7 @@ typedef enum ModifierType {
eModifierType_LaplacianDeform = 47,
eModifierType_Wireframe = 48,
eModifierType_SetSplitNormal = 49,
+ eModifierType_CopySplitNormal = 50,
NUM_MODIFIER_TYPES
} ModifierType;
@@ -1380,15 +1381,37 @@ typedef struct SetSplitNormalModifierData {
/* SetSplitNormalModifierData.mode */
enum {
MOD_SETSPLITNORMAL_MODE_ELLIPSOID = 0,
- MOD_SETSPLITNORMAL_MODE_GEOM_FACENOR = 1,
- MOD_SETSPLITNORMAL_MODE_GEOM_LOOPNOR = 2,
+ MOD_SETSPLITNORMAL_MODE_TRACKTO = 1,
};
/* SetSplitNormalModifierData.flags */
enum {
- MOD_SETSPLITNORMAL_INVERT_VGROUP = (1 << 0),
- MOD_SETSPLITNORMAL_CENTER_BBOX = (1 << 1),
- MOD_SETSPLITNORMAL_USE_CURCLNORS = (1 << 2),
+ MOD_SETSPLITNORMAL_INVERT_VGROUP = (1 << 0),
+ MOD_SETSPLITNORMAL_CENTER_BBOX = (1 << 1),
+ MOD_SETSPLITNORMAL_USE_CURCLNORS = (1 << 2),
+ MOD_SETSPLITNORMAL_USE_PARALLEL_TRACKTO = (1 << 3),
+};
+
+/* Copy Split Normals modifier */
+typedef struct CopySplitNormalModifierData {
+ ModifierData modifier;
+ char defgrp_name[64]; /* MAX_VGROUP_NAME */
+ struct Object *target; /* Source of normals, or center of ellipsoid. */
+ short flags;
+ short mode;
+ short pad[2];
+} CopySplitNormalModifierData;
+
+/* CopySplitNormalModifierData.mode */
+enum {
+ MOD_COPYSPLITNORMAL_MODE_GEOM_FACENOR = 1,
+ MOD_COPYSPLITNORMAL_MODE_GEOM_LOOPNOR = 2,
+};
+
+/* CopySplitNormalModifierData.flags */
+enum {
+ MOD_COPYSPLITNORMAL_INVERT_VGROUP = (1 << 0),
+ MOD_COPYSPLITNORMAL_USE_CURCLNORS = (1 << 1),
};
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index b33db10..a3fbf2d 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -191,6 +191,7 @@ extern StructRNA RNA_Controller;
extern StructRNA RNA_CopyLocationConstraint;
extern StructRNA RNA_CopyRotationConstraint;
extern StructRNA RNA_CopyScaleConstraint;
+extern StructRNA RNA_CopySplitNormalModifier;
extern StructRNA RNA_CopyTransformsConstraint;
extern StructRNA RNA_Curve;
extern StructRNA RNA_CurveMap;
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index 81804ad..3eda9cb 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -65,6 +65,7 @@ EnumPropertyItem modifier_type_items[] = {
{eModifierType_WeightVGProximity, "VERTEX_WEIGHT_PROXIMITY", ICON_MOD_VERTEX_WEIGHT,
"Vertex Weight Proximity", ""},
{eModifierType_SetSplitNormal, "SET_SPLIT_NORMAL", ICON_MOD_SETSPLITNORMAL, "Set Split Normals", ""},
+ {eModifierType_CopySplitNormal, "COPY_SPLIT_NORMAL", ICON_MOD_SETSPLITNORMAL, "Copy Split Normals", ""},
{0, "", 0, N_("Generate"), ""},
{eModifierType_Array, "ARRAY", ICON_MOD_ARRAY, "Array", ""},
{eModifierType_Bevel, "BEVEL", ICON_MOD_BEVEL, "Bevel", ""},
@@ -247,6 +248,8 @@ static StructRNA *rna_Modifier_refine(struct PointerRNA *ptr)
return &RNA_WireframeModifier;
case eModifierType_SetSplitNormal:
return &RNA_SetSplitNormalModifier;
+ case eModifierType_CopySplitNormal:
+ return &RNA_CopySplitNormalModifier;
/* Default */
case eModifierType_None:
case eModifierType_ShapeKey:
@@ -311,6 +314,7 @@ static void rna_##_type##Modifier_##_prop##_set(PointerRNA *ptr, const char *val
RNA_MOD_VGROUP_NAME_SET(Armature, defgrp_name);
RNA_MOD_VGROUP_NAME_SET(Bevel, defgrp_name);
RNA_MOD_VGROUP_NAME_SET(Cast, defgrp_name);
+RNA_MOD_VGROUP_NAME_SET(CopySplitNormal, defgrp_name);
RNA_MOD_VGROUP_NAME_SET(Curve, name);
RNA_MOD_VGROUP_NAME_SET(Decimate, defgrp_name);
RNA_MOD_VGROUP_NAME_SET(Displace, defgrp_name);
@@ -402,6 +406,7 @@ RNA_MOD_OBJECT_SET(Array, end_cap, OB_MESH);
RNA_MOD_OBJECT_SET(Array, curve_ob, OB_CURVE);
RNA_MOD_OBJECT_SET(Boolean, object, OB_MESH);
RNA_MOD_OBJECT_SET(Cast, object, OB_EMPTY);
+RNA_MOD_OBJECT_SET(CopySplitNormal, target, OB_MESH);
RNA_MOD_OBJECT_SET(Curve, object, OB_CURVE);
RNA_MOD_OBJECT_SET(Lattice, object, OB_LATTICE);
RNA_MOD_OBJECT_SET(Mask, ob_arm, OB_ARMATURE);
@@ -3677,8 +3682,8 @@ static void rna_def_modifier_setsplitnormal(BlenderRNA *brna)
static EnumPropertyItem prop_mode_items[] = {
{MOD_SETSPLITNORMAL_MODE_ELLIPSOID, "ELLIPSOID", 0, "Ellipsoid",
"From an ellipsoid (shape defined by the boundbox's dimensions, target is optional)"},
- {MOD_SETSPLITNORMAL_MODE_GEOM_FACENOR, "FACE_NORMALS", 0, "Face Normals", "From a mesh's face normals"},
- {MOD_SETSPLITNORMAL_MODE_GEOM_LOOPNOR, "SPLIT_NORMALS", 0, "Split Normals", "From a mesh's split normals"},
+ {MOD_SETSPLITNORMAL_MODE_TRACKTO, "TRACKTO", 0, "Track Object",
+ "Normals 'track' (point to) the target object"},
{0, NULL, 0, NULL, NULL}
};
@@ -3704,7 +3709,7 @@ static void rna_def_modifier_setsplitnormal(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Modifier_update");
prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
- RNA_def_property_ui_text(prop, "Target", "Target object used to affect normal");
+ RNA_def_property_ui_text(prop, "Target", "Target object used to affect normals");
RNA_def_property_pointer_funcs(prop, NULL, "rna_SetSplitNormalModifier_target_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
@@ -3712,16 +3717,68 @@ static void rna_def_modifier_setsplitnormal(BlenderRNA *brna)
prop = RNA_def_property(srna, "use_bbox_center", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_SETSPLITNORMAL_CENTER_BBOX);
RNA_def_property_ui_text(prop, "BoundingBox Center",
- "Center ellipsoid on bounding box center instead of own object center "
- "(Ellipsoid mode only)");
+ "Use bounding box center instead of own object center as origin");
+ RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+ prop = RNA_def_property(srna, "use_trackto_parallel", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_SETSPLITNORMAL_USE_PARALLEL_TRACKTO);
+ RNA_def_property_boolean_default(prop, true);
+ RNA_def_property_ui_text(prop, "Parallel Normals",
+ "Use same direction for all normals, from origin to target's center "
+ "(Track Object mode only)");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
prop = RNA_def_property(srna, "use_current_custom_split_normals", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_SETSPLITNORMAL_USE_CURCLNORS);
RNA_def_property_boolean_default(prop, true);
RNA_def_property_ui_text(prop, "Use Custom Split Normals",
- "Use current custom split normals as basis, instead of auto-computed ones, if available "
- "(Split Normals mode only)");
+ "Use current custom split normals as basis, instead of auto-computed ones, if available");
+ RNA_def_property_update(prop, 0, "rna_Modifier_update");
+}
+
+static void rna_def_modifier_copysplitnormal(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ static EnumPropertyItem prop_mode_items[] = {
+ {MOD_COPYSPLITNORMAL_MODE_GEOM_FACENOR, "FACE_NORMALS", 0, "Face Normals", "From a mesh's face normals"},
+ {MOD_COPYSPLITNORMAL_MODE_GEOM_LOOPNOR, "SPLIT_NORMALS", 0, "Split Normals", "From a mesh's split normals"},
+ {0, NULL, 0, NULL, NULL}
+ };
+
+ srna = RNA_def_struct(brna, "CopySplitNormalModifier", "Modifier");
+ RNA_def_struct_ui_text(srna, "Set Split Normal Modifier", "Modifier copying split normals from a target geometry");
+ RNA_def_struct_sdna(srna, "CopySplitNormalModifierDa
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list