[Bf-blender-cvs] [f7c0fce0612] soc-2019-npr: Gpencil: Fix stroke duplication offset and UI slider.

YimingWu noreply at git.blender.org
Fri Jul 5 06:04:41 CEST 2019


Commit: f7c0fce061266803627edd1636834a90ed6fcc3f
Author: YimingWu
Date:   Fri Jul 5 12:04:01 2019 +0800
Branches: soc-2019-npr
https://developer.blender.org/rBf7c0fce061266803627edd1636834a90ed6fcc3f

Gpencil: Fix stroke duplication offset and UI slider.

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

M	release/scripts/startup/bl_ui/properties_data_modifier.py
M	source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c
M	source/blender/makesrna/intern/rna_gpencil_modifier.c

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

diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py
index 81ee8a3dc37..782850f68af 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -2357,7 +2357,7 @@ class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel):
         if md.enable_duplication:
             col.prop(md,"duplications")
             col.prop(md,"distance")
-            col.prop(md,"offset")
+            col.prop(md,"offset", slider=True)
 
         col = sp.column()
         col.prop(md, "enable_angle_splitting")
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c
index 07bff517b8e..2ec84ea6505 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c
@@ -148,6 +148,26 @@ static void duplicateStroke(
     normalize_v3(stroke_normal);
   }
 
+  float* t1_array = MEM_callocN(sizeof(float)*3*gps->totpoints,"duplicate_temp_result_array_1");
+  float* t2_array = MEM_callocN(sizeof(float)*3*gps->totpoints,"duplicate_temp_result_array_2");
+  
+  pt= gps->points;
+
+  for (int j = 0; j < gps->totpoints; j++) {
+    if (j == 0) {
+      minter_v3_v3v3v3_ref(minter, NULL, &pt[j].x, &pt[j + 1].x, stroke_normal);
+    }
+    else if (j == gps->totpoints - 1) {
+      minter_v3_v3v3v3_ref(minter, &pt[j - 1].x, &pt[j].x, NULL, stroke_normal);
+    }
+    else {
+      minter_v3_v3v3v3_ref(minter, &pt[j - 1].x, &pt[j].x, &pt[j + 1].x, stroke_normal);
+    }
+    mul_v3_fl(minter, dist);
+    add_v3_v3v3(&t1_array[j*3], &pt[j].x, minter);
+    sub_v3_v3v3(&t2_array[j*3], &pt[j].x, minter);
+  }
+
   for (i = 0; i < count; i++) {
     if (i != 0) {
       new_gps = BKE_gpencil_stroke_duplicate(gps);
@@ -159,32 +179,19 @@ static void duplicateStroke(
     }
 
     pt = new_gps->points;
-    offset_factor = (float)i / (float)count;
-
-    float* result_array = MEM_callocN(sizeof(float)*3*new_gps->totpoints,"duplicate_temp_result_array");
-
-    for (int j = 0; j < new_gps->totpoints; j++) {
-      if (j == 0) {
-        minter_v3_v3v3v3_ref(minter, NULL, &pt[j].x, &pt[j + 1].x, stroke_normal);
-      }
-      else if (j == new_gps->totpoints - 1) {
-        minter_v3_v3v3v3_ref(minter, &pt[j - 1].x, &pt[j].x, NULL, stroke_normal);
-      }
-      else {
-        minter_v3_v3v3v3_ref(minter, &pt[j - 1].x, &pt[j].x, &pt[j + 1].x, stroke_normal);
-      }
-      mul_v3_fl(minter, dist);
-      add_v3_v3v3(target1, &pt[j].x, minter);
-      sub_v3_v3v3(target2, &pt[j].x, minter);
-      interp_v3_v3v3(&result_array[j*3], target1, target2, offset_factor + offset / 2);
+    
+    if(count == 1){
+      offset_factor = 0;
+    }else{
+      offset_factor = offset_factor = (float)i / (float)(count-1);
     }
+
     for (int j = 0; j < new_gps->totpoints; j++) {
-      copy_v3_v3(&pt[j].x,&result_array[j*3]);
+      interp_v3_v3v3(&pt[j].x, &t1_array[j*3], &t2_array[j*3], interpf(1+offset,offset,offset_factor));
     }
-
-    MEM_freeN(result_array);
-
   }
+  MEM_freeN(t1_array);
+  MEM_freeN(t2_array);
 }
 
 static void bakeModifier(Main *UNUSED(bmain),
diff --git a/source/blender/makesrna/intern/rna_gpencil_modifier.c b/source/blender/makesrna/intern/rna_gpencil_modifier.c
index 13c1f96fd1d..f9284f4a992 100644
--- a/source/blender/makesrna/intern/rna_gpencil_modifier.c
+++ b/source/blender/makesrna/intern/rna_gpencil_modifier.c
@@ -1780,7 +1780,7 @@ static void rna_def_modifier_gpencilmultiply(BlenderRNA *brna)
   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
 
   prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_NONE);
-  RNA_def_property_range(prop, 0, 10);
+  RNA_def_property_ui_range(prop, -1, 1, 0.1, 3);
   RNA_def_property_ui_text(prop, "Offset", "Offset of duplications. -1 to 1: inner to outer");
   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
 }



More information about the Bf-blender-cvs mailing list