[Bf-blender-cvs] [e051af9cfd7] greasepencil-object: Add VFX Light a object to define light position

Antonio Vazquez noreply at git.blender.org
Wed Dec 6 22:07:25 CET 2017


Commit: e051af9cfd72c9add0eac5475b097e982f8bc25a
Author: Antonio Vazquez
Date:   Wed Dec 6 22:07:14 2017 +0100
Branches: greasepencil-object
https://developer.blender.org/rBe051af9cfd72c9add0eac5475b097e982f8bc25a

Add VFX Light a object to define light position

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

M	release/scripts/startup/bl_ui/properties_data_modifier.py
M	source/blender/draw/engines/gpencil/gpencil_vfx.c
M	source/blender/makesdna/DNA_modifier_types.h
M	source/blender/makesrna/intern/rna_modifier.c
M	source/blender/modifiers/intern/MOD_gpencillight.c

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

diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py
index 01af8957eea..b8015a370c2 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -1919,6 +1919,10 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
         col = split.column()
         col.prop(md, "distance")
 
+        col.label(text="Object:")
+        col.prop(md, "object", text="")
+
+
     def GP_HOOK(self, layout, ob, md):
         gpd = ob.data
         split = layout.split()
diff --git a/source/blender/draw/engines/gpencil/gpencil_vfx.c b/source/blender/draw/engines/gpencil/gpencil_vfx.c
index ac221be425c..7780fb2cc30 100644
--- a/source/blender/draw/engines/gpencil/gpencil_vfx.c
+++ b/source/blender/draw/engines/gpencil/gpencil_vfx.c
@@ -411,7 +411,12 @@ static void DRW_gpencil_vfx_light(
 	
 	/* location of the light using obj location as origin */
 	int co[2];
-	ED_view3d_project_int_global(ar, ob->loc, co, V3D_PROJ_TEST_NOP);
+	if (mmd->object) {
+		ED_view3d_project_int_global(ar, mmd->object->loc, co, V3D_PROJ_TEST_NOP);
+	}
+	else {
+		ED_view3d_project_int_global(ar, ob->loc, co, V3D_PROJ_TEST_NOP);
+	}
 	stl->vfx[ob_idx].vfx_light.loc[0] = (float)co[0] + mmd->loc[0];
 	stl->vfx[ob_idx].vfx_light.loc[1] = (float)co[1] + mmd->loc[1];
 	stl->vfx[ob_idx].vfx_light.loc[2] = (float)mmd->loc[2];
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index d0dd1ea4169..3ef914baaa8 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -1971,6 +1971,7 @@ typedef enum eGpencilFlip_Flag {
 
 typedef struct GpencilLightModifierData {
 	ModifierData modifier;
+	struct Object *object;
 	int loc[3];
 	int flag;                    /* flags */
 	float energy;
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index b9408cd3e41..724f3359331 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -674,6 +674,7 @@ RNA_MOD_OBJECT_SET(Shrinkwrap, target, OB_MESH);
 RNA_MOD_OBJECT_SET(Shrinkwrap, auxTarget, OB_MESH);
 RNA_MOD_OBJECT_SET(SurfaceDeform, target, OB_MESH);
 RNA_MOD_OBJECT_SET(GpencilLattice, object, OB_LATTICE);
+RNA_MOD_OBJECT_SET(GpencilLight, object, NULL);
 
 static void rna_HookModifier_object_set(PointerRNA *ptr, PointerRNA value)
 {
@@ -5968,6 +5969,12 @@ static void rna_def_modifier_gpencillight(BlenderRNA *brna)
 	RNA_def_property_ui_range(prop, 0, FLT_MAX, 1, 2);
 	RNA_def_property_ui_text(prop, "Ambient", "Strength of ambient light source");
 	RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+	prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
+	RNA_def_property_ui_text(prop, "Object", "Object to determine light source location");
+	RNA_def_property_pointer_funcs(prop, NULL, "rna_GpencilLightModifier_object_set", NULL, NULL);
+	RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+	RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
 }
 
 void RNA_def_modifier(BlenderRNA *brna)
diff --git a/source/blender/modifiers/intern/MOD_gpencillight.c b/source/blender/modifiers/intern/MOD_gpencillight.c
index f2249941dcf..234d98192c6 100644
--- a/source/blender/modifiers/intern/MOD_gpencillight.c
+++ b/source/blender/modifiers/intern/MOD_gpencillight.c
@@ -37,14 +37,43 @@
 #include "BLI_math_base.h"
 #include "BLI_utildefines.h"
 
+#include "BKE_library_query.h"
+
 #include "MOD_modifiertypes.h"
 
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
 static void initData(ModifierData *md)
 {
 	GpencilLightModifierData *gpmd = (GpencilLightModifierData *)md;
 	ARRAY_SET_ITEMS(gpmd->loc, 0, 0, 200);
 	gpmd->energy = 600.0f;
 	gpmd->ambient = 100.0f;
+	gpmd->object = NULL;
+}
+
+static void updateDepsgraph(ModifierData *md,
+	struct Main *UNUSED(bmain),
+	struct Scene *UNUSED(scene),
+	Object *object,
+	struct DepsNodeHandle *node)
+{
+	GpencilLightModifierData *lmd = (GpencilLightModifierData *)md;
+	if (lmd->object != NULL) {
+		DEG_add_object_relation(node, lmd->object, DEG_OB_COMP_GEOMETRY, "Light Modifier");
+		DEG_add_object_relation(node, lmd->object, DEG_OB_COMP_TRANSFORM, "Light Modifier");
+	}
+	DEG_add_object_relation(node, object, DEG_OB_COMP_TRANSFORM, "Light Modifier");
+}
+
+static void foreachObjectLink(
+	ModifierData *md, Object *ob,
+	ObjectWalkFunc walk, void *userData)
+{
+	GpencilLightModifierData *mmd = (GpencilLightModifierData *)md;
+
+	walk(userData, ob, &mmd->object, IDWALK_CB_NOP);
 }
 
 ModifierTypeInfo modifierType_GpencilLight = {
@@ -69,10 +98,10 @@ ModifierTypeInfo modifierType_GpencilLight = {
 	/* requiredDataMask */  NULL,
 	/* freeData */          NULL,
 	/* isDisabled */        NULL,
-	/* updateDepsgraph */   NULL,
+	/* updateDepsgraph */   updateDepsgraph,
 	/* dependsOnTime */     NULL,
 	/* dependsOnNormals */	NULL,
-	/* foreachObjectLink */ NULL,
+	/* foreachObjectLink */ foreachObjectLink,
 	/* foreachIDLink */     NULL,
 	/* foreachTexLink */    NULL,
 };



More information about the Bf-blender-cvs mailing list