[Bf-blender-cvs] [74d9811] master: Cleanup: factorize RNA accessor code of modifiers (saves over 160 lines of dummy code!)

Bastien Montagne noreply at git.blender.org
Tue Mar 18 19:27:38 CET 2014


Commit: 74d98115ca8ef4f9b32d0fe32903a3d30771f4dc
Author: Bastien Montagne
Date:   Tue Mar 18 17:17:51 2014 +0100
https://developer.blender.org/rB74d98115ca8ef4f9b32d0fe32903a3d30771f4dc

Cleanup: factorize RNA accessor code of modifiers (saves over 160 lines of dummy code!)

Reviewers: campbellbarton

Reviewed By: campbellbarton

Differential Revision: https://developer.blender.org/D364

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

M	source/blender/makesrna/intern/rna_modifier.c

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

diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index 11821fb..91333af 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -296,32 +296,42 @@ static void rna_Modifier_dependency_update(Main *bmain, Scene *scene, PointerRNA
 	DAG_relations_tag_update(bmain);
 }
 
-static void rna_Smoke_set_type(Main *bmain, Scene *scene, PointerRNA *ptr)
-{
-	SmokeModifierData *smd = (SmokeModifierData *)ptr->data;
-	Object *ob = (Object *)ptr->id.data;
-
-	/* nothing changed */
-	if ((smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain)
-		return;
-		
-	smokeModifier_free(smd); /* XXX TODO: completely free all 3 pointers */
-	smokeModifier_createType(smd); /* create regarding of selected type */
-
-	switch (smd->type) {
-		case MOD_SMOKE_TYPE_DOMAIN:
-			ob->dt = OB_WIRE;
-			break;
-		case MOD_SMOKE_TYPE_FLOW:
-		case MOD_SMOKE_TYPE_COLL:
-		case 0:
-		default:
-			break;
-	}
-	
-	/* update dependency since a domain - other type switch could have happened */
-	rna_Modifier_dependency_update(bmain, scene, ptr);
-}
+/* Vertex Groups */
+
+#define RNA_MOD_VGROUP_NAME_SET(_type, _prop)                                               \
+static void rna_##_type##Modifier_##_prop##_set(PointerRNA *ptr, const char *value)         \
+{                                                                                           \
+	_type##ModifierData *tmd = (_type##ModifierData *)ptr->data;                            \
+	rna_object_vgroup_name_set(ptr, value, tmd->_prop, sizeof(tmd->_prop));                 \
+}
+
+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(Curve, name);
+RNA_MOD_VGROUP_NAME_SET(Decimate, defgrp_name);
+RNA_MOD_VGROUP_NAME_SET(Displace, defgrp_name);
+RNA_MOD_VGROUP_NAME_SET(Hook, name);
+RNA_MOD_VGROUP_NAME_SET(LaplacianDeform, anchor_grp_name);
+RNA_MOD_VGROUP_NAME_SET(LaplacianSmooth, defgrp_name);
+RNA_MOD_VGROUP_NAME_SET(Lattice, name);
+RNA_MOD_VGROUP_NAME_SET(Mask, vgroup);
+RNA_MOD_VGROUP_NAME_SET(MeshDeform, defgrp_name);
+RNA_MOD_VGROUP_NAME_SET(Shrinkwrap, vgroup_name);
+RNA_MOD_VGROUP_NAME_SET(SimpleDeform, vgroup_name);
+RNA_MOD_VGROUP_NAME_SET(Smooth, defgrp_name);
+RNA_MOD_VGROUP_NAME_SET(Solidify, defgrp_name);
+RNA_MOD_VGROUP_NAME_SET(UVWarp, vgroup_name);
+RNA_MOD_VGROUP_NAME_SET(Warp, defgrp_name);
+RNA_MOD_VGROUP_NAME_SET(Wave, defgrp_name);
+RNA_MOD_VGROUP_NAME_SET(WeightVGEdit, defgrp_name);
+RNA_MOD_VGROUP_NAME_SET(WeightVGEdit, mask_defgrp_name);
+RNA_MOD_VGROUP_NAME_SET(WeightVGMix, defgrp_name_a);
+RNA_MOD_VGROUP_NAME_SET(WeightVGMix, defgrp_name_b);
+RNA_MOD_VGROUP_NAME_SET(WeightVGMix, mask_defgrp_name);
+RNA_MOD_VGROUP_NAME_SET(WeightVGProximity, defgrp_name);
+RNA_MOD_VGROUP_NAME_SET(WeightVGProximity, mask_defgrp_name);
+RNA_MOD_VGROUP_NAME_SET(Wireframe, defgrp_name);
 
 static void rna_ExplodeModifier_vgroup_get(PointerRNA *ptr, char *value)
 {
@@ -341,175 +351,109 @@ static void rna_ExplodeModifier_vgroup_set(PointerRNA *ptr, const char *value)
 	rna_object_vgroup_name_index_set(ptr, value, &emd->vgroup);
 }
 
-static void rna_SimpleDeformModifier_vgroup_set(PointerRNA *ptr, const char *value)
-{
-	SimpleDeformModifierData *smd = (SimpleDeformModifierData *)ptr->data;
-	rna_object_vgroup_name_set(ptr, value, smd->vgroup_name, sizeof(smd->vgroup_name));
-}
-
-static void rna_ShrinkwrapModifier_vgroup_set(PointerRNA *ptr, const char *value)
-{
-	ShrinkwrapModifierData *smd = (ShrinkwrapModifierData *)ptr->data;
-	rna_object_vgroup_name_set(ptr, value, smd->vgroup_name, sizeof(smd->vgroup_name));
-}
-
-static void rna_LatticeModifier_vgroup_set(PointerRNA *ptr, const char *value)
-{
-	LatticeModifierData *lmd = (LatticeModifierData *)ptr->data;
-	rna_object_vgroup_name_set(ptr, value, lmd->name, sizeof(lmd->name));
-}
-
-static void rna_ArmatureModifier_vgroup_set(PointerRNA *ptr, const char *value)
-{
-	ArmatureModifierData *lmd = (ArmatureModifierData *)ptr->data;
-	rna_object_vgroup_name_set(ptr, value, lmd->defgrp_name, sizeof(lmd->defgrp_name));
-}
+#undef RNA_MOD_VGROUP_NAME_SET
 
-static void rna_CurveModifier_vgroup_set(PointerRNA *ptr, const char *value)
-{
-	CurveModifierData *lmd = (CurveModifierData *)ptr->data;
-	rna_object_vgroup_name_set(ptr, value, lmd->name, sizeof(lmd->name));
-}
+/* UV layers */
 
-static void rna_DisplaceModifier_vgroup_set(PointerRNA *ptr, const char *value)
-{
-	DisplaceModifierData *lmd = (DisplaceModifierData *)ptr->data;
-	rna_object_vgroup_name_set(ptr, value, lmd->defgrp_name, sizeof(lmd->defgrp_name));
+#define RNA_MOD_UVLAYER_NAME_SET(_type, _prop)                                              \
+static void rna_##_type##Modifier_##_prop##_set(PointerRNA *ptr, const char *value)         \
+{                                                                                           \
+	_type##ModifierData *tmd = (_type##ModifierData *)ptr->data;                            \
+	rna_object_uvlayer_name_set(ptr, value, tmd->_prop, sizeof(tmd->_prop));                \
 }
 
-static void rna_HookModifier_vgroup_set(PointerRNA *ptr, const char *value)
-{
-	HookModifierData *lmd = (HookModifierData *)ptr->data;
-	rna_object_vgroup_name_set(ptr, value, lmd->name, sizeof(lmd->name));
-}
+RNA_MOD_UVLAYER_NAME_SET(MappingInfo, uvlayer_name);
+RNA_MOD_UVLAYER_NAME_SET(UVProject, uvlayer_name);
+RNA_MOD_UVLAYER_NAME_SET(UVWarp, uvlayer_name);
+RNA_MOD_UVLAYER_NAME_SET(WeightVGEdit, mask_tex_uvlayer_name);
+RNA_MOD_UVLAYER_NAME_SET(WeightVGMix, mask_tex_uvlayer_name);
+RNA_MOD_UVLAYER_NAME_SET(WeightVGProximity, mask_tex_uvlayer_name);
 
-static void rna_MaskModifier_vgroup_set(PointerRNA *ptr, const char *value)
-{
-	MaskModifierData *lmd = (MaskModifierData *)ptr->data;
-	rna_object_vgroup_name_set(ptr, value, lmd->vgroup, sizeof(lmd->vgroup));
-}
+#undef RNA_MOD_UVLAYER_NAME_SET
 
-static void rna_MeshDeformModifier_vgroup_set(PointerRNA *ptr, const char *value)
-{
-	MeshDeformModifierData *lmd = (MeshDeformModifierData *)ptr->data;
-	rna_object_vgroup_name_set(ptr, value, lmd->defgrp_name, sizeof(lmd->defgrp_name));
-}
+/* Objects */
 
-static void rna_SmoothModifier_vgroup_set(PointerRNA *ptr, const char *value)
+static void modifier_object_set(Object *self, Object **ob_p, int type, PointerRNA value)
 {
-	SmoothModifierData *lmd = (SmoothModifierData *)ptr->data;
-	rna_object_vgroup_name_set(ptr, value, lmd->defgrp_name, sizeof(lmd->defgrp_name));
-}
+	Object *ob = value.data;
 
-static void rna_LaplacianSmoothModifier_vgroup_set(PointerRNA *ptr, const char *value)
-{
-	LaplacianSmoothModifierData *lmd = (LaplacianSmoothModifierData *)ptr->data;
-	rna_object_vgroup_name_set(ptr, value, lmd->defgrp_name, sizeof(lmd->defgrp_name));
+	if (!self || ob != self) {
+		if (!ob || type == OB_EMPTY || ob->type == type) {
+			id_lib_extern((ID *)ob);
+			*ob_p = ob;
+		}
+	}
 }
 
-static void rna_WaveModifier_vgroup_set(PointerRNA *ptr, const char *value)
-{
-	WaveModifierData *lmd = (WaveModifierData *)ptr->data;
-	rna_object_vgroup_name_set(ptr, value, lmd->defgrp_name, sizeof(lmd->defgrp_name));
+#define RNA_MOD_OBJECT_SET(_type, _prop, _obtype)                                           \
+static void rna_##_type##Modifier_##_prop##_set(PointerRNA *ptr, PointerRNA value)          \
+{                                                                                           \
+	_type##ModifierData *tmd = (_type##ModifierData *)ptr->data;                            \
+	modifier_object_set(ptr->id.data, &tmd->_prop, _obtype, value);                         \
 }
 
-static void rna_CastModifier_vgroup_set(PointerRNA *ptr, const char *value)
-{
-	CastModifierData *lmd = (CastModifierData *)ptr->data;
-	rna_object_vgroup_name_set(ptr, value, lmd->defgrp_name, sizeof(lmd->defgrp_name));
-}
+RNA_MOD_OBJECT_SET(Armature, object, OB_ARMATURE);
+RNA_MOD_OBJECT_SET(Array, start_cap, OB_MESH);
+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(Curve, object, OB_CURVE);
+RNA_MOD_OBJECT_SET(Lattice, object, OB_LATTICE);
+RNA_MOD_OBJECT_SET(Mask, ob_arm, OB_ARMATURE);
+RNA_MOD_OBJECT_SET(MeshDeform, object, OB_MESH);
+RNA_MOD_OBJECT_SET(Shrinkwrap, target, OB_MESH);
+RNA_MOD_OBJECT_SET(Shrinkwrap, auxTarget, OB_MESH);
 
-static void rna_SolidifyModifier_vgroup_set(PointerRNA *ptr, const char *value)
+static void rna_HookModifier_object_set(PointerRNA *ptr, PointerRNA value)
 {
-	SolidifyModifierData *smd = (SolidifyModifierData *)ptr->data;
-	rna_object_vgroup_name_set(ptr, value, smd->defgrp_name, sizeof(smd->defgrp_name));
-}
+	HookModifierData *hmd = ptr->data;
 
-static void rna_DecimateModifier_vgroup_set(PointerRNA *ptr, const char *value)
-{
-	DecimateModifierData *dmd = (DecimateModifierData *)ptr->data;
-	rna_object_vgroup_name_set(ptr, value, dmd->defgrp_name, sizeof(dmd->defgrp_name));
+	hmd->object = (Object *)value.data;
+	BKE_object_modifier_hook_reset((Object *)ptr->id.data, hmd);
 }
 
-static void rna_WeightVGModifier_vgroup_set(PointerRNA *ptr, const char *value)
+static PointerRNA rna_UVProjector_object_get(PointerRNA *ptr)
 {
-	ModifierData *md = (ModifierData *)ptr->data;
-	if (md->type == eModifierType_WeightVGEdit) {
-		WeightVGEditModifierData *wmd = (WeightVGEditModifierData *)md;
-		rna_object_vgroup_name_set(ptr, value, wmd->defgrp_name, sizeof(wmd->defgrp_name));
-	}
-	else if (md->type == eModifierType_WeightVGMix) {
-		WeightVGMixModifierData *wmd = (WeightVGMixModifierData *)md;
-		rna_object_vgroup_name_set(ptr, value, wmd->defgrp_name_a, sizeof(wmd->defgrp_name_a));
-	}
-	else if (md->type == eModifierType_WeightVGProximity) {
-		WeightVGProximityModifierData *wmd = (WeightVGProximityModifierData *)md;
-		rna_object_vgroup_name_set(ptr, value, wmd->defgrp_name, sizeof(wmd->defgrp_name));
-	}
+	Object **ob = (Object **)ptr->data;
+	return rna_pointer_inherit_refine(ptr, &RNA_Object, *ob);
 }
 
-static void rna_WeightVGModifier_mask_vgroup_set(PointerRNA *ptr, const char *value)
+static void rna_UVProj

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list