[Bf-blender-cvs] [d2a34bc4ce4] greasepencil-object: Use object location as center for swirl

Antonio Vazquez noreply at git.blender.org
Sat Aug 19 13:40:10 CEST 2017


Commit: d2a34bc4ce402e5c186120e4b5d16788ac6e6810
Author: Antonio Vazquez
Date:   Sat Aug 19 12:22:57 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rBd2a34bc4ce402e5c186120e4b5d16788ac6e6810

Use object location as center for swirl

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

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_gpencilswirl.c

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

diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py
index 007fdbcca3d..36b60d1c099 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -1821,7 +1821,10 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
 
         col = split.column()
         col.label(text="Center:")
-        col.prop(md, "center", text="")
+        col.prop(md, "use_loc", text="Use Location")
+        row = col.row()
+        row.enabled = md.use_loc
+        row.prop(md, "center", text="")
 
         col.separator()
         col.prop(md, "radius")
diff --git a/source/blender/draw/engines/gpencil/gpencil_vfx.c b/source/blender/draw/engines/gpencil/gpencil_vfx.c
index b2a85d6212e..c2f361f079b 100644
--- a/source/blender/draw/engines/gpencil/gpencil_vfx.c
+++ b/source/blender/draw/engines/gpencil/gpencil_vfx.c
@@ -31,6 +31,9 @@
 
 #include "DNA_gpencil_types.h"
 #include "DNA_modifier_types.h"
+#include "DNA_screen_types.h"
+
+#include "ED_view3d.h"
 
 #include "gpencil_engine.h"
 
@@ -279,8 +282,18 @@ static void DRW_gpencil_vfx_swirl(ModifierData *md, int ob_idx, GPENCIL_e_data *
 	GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
 	GPENCIL_PassList *psl = ((GPENCIL_Data *)vedata)->psl;
 	DRWShadingGroup *vfx_shgrp;
-	stl->vfx[ob_idx].vfx_swirl.center[0] = mmd->center[0];
-	stl->vfx[ob_idx].vfx_swirl.center[1] = mmd->center[1];
+	const DRWContextState *draw_ctx = DRW_context_state_get();
+	ARegion *ar = draw_ctx->ar;
+	int co[2];
+	if (mmd->flag & GP_SWIRL_USE_OB_LOC) {
+		ED_view3d_project_int_global(ar, ob->loc, co, V3D_PROJ_TEST_NOP);
+		stl->vfx[ob_idx].vfx_swirl.center[0] = co[0];
+		stl->vfx[ob_idx].vfx_swirl.center[1] = co[1];
+	}
+	else {
+		stl->vfx[ob_idx].vfx_swirl.center[0] = mmd->center[0];
+		stl->vfx[ob_idx].vfx_swirl.center[1] = mmd->center[1];
+	}
 	stl->vfx[ob_idx].vfx_swirl.radius = mmd->radius;
 	stl->vfx[ob_idx].vfx_swirl.angle = mmd->angle;
 	stl->vfx[ob_idx].vfx_swirl.transparent = (int)mmd->flag & GP_SWIRL_MAKE_TRANSPARENT;
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index 6b3c64df957..a2d71e96d8a 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -1844,6 +1844,7 @@ typedef struct GpencilSwirlModifierData {
 
 typedef enum eGpencilSwirl_Flag {
 	GP_SWIRL_MAKE_TRANSPARENT = (1 << 0),
+	GP_SWIRL_USE_OB_LOC       = (1 << 1),
 } eGpencilSwirl_Flag;
 
 #define MOD_MESHSEQ_READ_ALL \
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index 0f9ac4218e5..2a1bd4e65cf 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -5513,6 +5513,11 @@ static void rna_def_modifier_gpencilswirl(BlenderRNA *brna)
 	RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SWIRL_MAKE_TRANSPARENT);
 	RNA_def_property_ui_text(prop, "Transparent", "Make image transparent outside of radius");
 	RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+	prop = RNA_def_property(srna, "use_loc", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SWIRL_USE_OB_LOC);
+	RNA_def_property_ui_text(prop, "Use Location", "Use object location as center");
+	RNA_def_property_update(prop, 0, "rna_Modifier_update");
 }
 
 void RNA_def_modifier(BlenderRNA *brna)
diff --git a/source/blender/modifiers/intern/MOD_gpencilswirl.c b/source/blender/modifiers/intern/MOD_gpencilswirl.c
index 467b3ab0744..e4791bf834f 100644
--- a/source/blender/modifiers/intern/MOD_gpencilswirl.c
+++ b/source/blender/modifiers/intern/MOD_gpencilswirl.c
@@ -46,6 +46,7 @@ static void initData(ModifierData *md)
 	gpmd->radius = 100;
 	ARRAY_SET_ITEMS(gpmd->center, 600, 600);
 	gpmd->angle = 1.57079f; // PI/2
+	gpmd->flag |= GP_SWIRL_USE_OB_LOC;
 
 	BKE_gpencil_batch_cache_alldirty();
 }



More information about the Bf-blender-cvs mailing list