[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