Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYimingWu <xp8110@outlook.com>2021-09-19 08:18:27 +0300
committerYimingWu <xp8110@outlook.com>2021-09-19 08:19:32 +0300
commit69697fcca96178d53b57b14b5e4a39685a8378a1 (patch)
treee9b967deb25f77eef348786f5cd22524eef0ec20 /source/blender/gpencil_modifiers
parent25e548c96b3d8c1698fd4385b4dc395665b5a7f6 (diff)
Revert "GPencil: Curvature support for length modifier."
Reason for revert: accidental push of a intermediate change locally. This reverts commit 25e548c96b3d8c1698fd4385b4dc395665b5a7f6.
Diffstat (limited to 'source/blender/gpencil_modifiers')
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencillength.c134
1 files changed, 21 insertions, 113 deletions
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencillength.c b/source/blender/gpencil_modifiers/intern/MOD_gpencillength.c
index b104d4685e0..6aa0e6c152e 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencillength.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencillength.c
@@ -72,14 +72,9 @@ static void copyData(const GpencilModifierData *md, GpencilModifierData *target)
}
static bool gpencil_modify_stroke(bGPDstroke *gps,
- const float length,
+ float length,
const float overshoot_fac,
- const short len_mode,
- const bool use_curvature,
- const int extra_point_count,
- const float edge_point_tradeoff,
- const float max_angle,
- const bool invert_curvature)
+ const short len_mode)
{
bool changed = false;
if (length == 0.0f) {
@@ -87,18 +82,10 @@ static bool gpencil_modify_stroke(bGPDstroke *gps,
}
if (length > 0.0f) {
- changed = BKE_gpencil_stroke_stretch(gps,
- length,
- overshoot_fac,
- len_mode,
- use_curvature,
- extra_point_count,
- edge_point_tradeoff,
- max_angle,
- invert_curvature);
+ BKE_gpencil_stroke_stretch(gps, length, overshoot_fac, len_mode);
}
else {
- changed = BKE_gpencil_stroke_shrink(gps, fabs(length), len_mode);
+ changed |= BKE_gpencil_stroke_shrink(gps, fabs(length), len_mode);
}
return changed;
@@ -109,51 +96,12 @@ static void applyLength(LengthGpencilModifierData *lmd, bGPdata *gpd, bGPDstroke
bool changed = false;
const float len = (lmd->mode == GP_LENGTH_ABSOLUTE) ? 1.0f :
BKE_gpencil_stroke_length(gps, true);
- const int totpoints = gps->totpoints;
if (len < FLT_EPSILON) {
return;
}
- /* Always do the stretching first since it might depend on points which could be deleted by the
- * shrink. */
- float first_fac = lmd->start_fac;
- int first_mode = 1;
- float second_fac = lmd->end_fac;
- int second_mode = 2;
- if (first_fac < 0) {
- SWAP(float, first_fac, second_fac);
- SWAP(int, first_mode, second_mode);
- }
-
- const int first_extra_point_count = ceil(first_fac * lmd->point_density);
- const int second_extra_point_count = ceil(second_fac * lmd->point_density);
-
- changed |= gpencil_modify_stroke(gps,
- len * first_fac,
- lmd->overshoot_fac,
- first_mode,
- lmd->flag & GP_LENGTH_USE_CURVATURE,
- first_extra_point_count,
- lmd->edge_point_tradeoff,
- lmd->max_angle,
- lmd->flag & GP_LENGTH_INVERT_CURVATURE);
- /* HACK: The second #overshoot_fac needs to be adjusted because it is not
- * done in the same stretch call, because it can have a different length.
- * The adjustment needs to be stable when
- * ceil(overshoot_fac*(gps->totpoints - 2)) is used in stretch and never
- * produce a result highter than totpoints - 2. */
- const float second_overshoot_fac = lmd->overshoot_fac * (totpoints - 2) /
- ((float)gps->totpoints - 2) *
- (1.0f - 0.1f / (totpoints - 1.0f));
- changed |= gpencil_modify_stroke(gps,
- len * second_fac,
- second_overshoot_fac,
- second_mode,
- lmd->flag & GP_LENGTH_USE_CURVATURE,
- second_extra_point_count,
- lmd->edge_point_tradeoff,
- lmd->max_angle,
- lmd->flag & GP_LENGTH_INVERT_CURVATURE);
+ changed |= gpencil_modify_stroke(gps, len * lmd->start_fac, lmd->overshoot_fac, 1);
+ changed |= gpencil_modify_stroke(gps, len * lmd->end_fac, lmd->overshoot_fac, 2);
if (changed) {
BKE_gpencil_stroke_geometry_update(gpd, gps);
@@ -169,25 +117,20 @@ static void deformStroke(GpencilModifierData *md,
{
bGPdata *gpd = ob->data;
LengthGpencilModifierData *lmd = (LengthGpencilModifierData *)md;
- if (!is_stroke_affected_by_modifier(ob,
- lmd->layername,
- lmd->material,
- lmd->pass_index,
- lmd->layer_pass,
- 1,
- gpl,
- gps,
- lmd->flag & GP_LENGTH_INVERT_LAYER,
- lmd->flag & GP_LENGTH_INVERT_PASS,
- lmd->flag & GP_LENGTH_INVERT_LAYERPASS,
- lmd->flag & GP_LENGTH_INVERT_MATERIAL)) {
- return;
+ if (is_stroke_affected_by_modifier(ob,
+ lmd->layername,
+ lmd->material,
+ lmd->pass_index,
+ lmd->layer_pass,
+ 1,
+ gpl,
+ gps,
+ lmd->flag & GP_LENGTH_INVERT_LAYER,
+ lmd->flag & GP_LENGTH_INVERT_PASS,
+ lmd->flag & GP_LENGTH_INVERT_LAYERPASS,
+ lmd->flag & GP_LENGTH_INVERT_MATERIAL)) {
+ applyLength(lmd, gpd, gps);
}
- if ((gps->flag & GP_STROKE_CYCLIC) != 0) {
- /* Don't affect cyclic strokes as they have no start/end. */
- return;
- }
- applyLength(lmd, gpd, gps);
}
static void bakeModifier(Main *UNUSED(bmain),
@@ -225,14 +168,8 @@ static void panel_draw(const bContext *UNUSED(C), Panel *panel)
uiLayout *col = uiLayoutColumn(layout, true);
- if (RNA_enum_get(ptr, "mode") == GP_LENGTH_RELATIVE) {
- uiItemR(col, ptr, "start_factor", 0, IFACE_("Start"), ICON_NONE);
- uiItemR(col, ptr, "end_factor", 0, IFACE_("End"), ICON_NONE);
- }
- else {
- uiItemR(col, ptr, "start_length", 0, IFACE_("Start"), ICON_NONE);
- uiItemR(col, ptr, "end_length", 0, IFACE_("End"), ICON_NONE);
- }
+ uiItemR(col, ptr, "start_factor", 0, IFACE_("Start"), ICON_NONE);
+ uiItemR(col, ptr, "end_factor", 0, IFACE_("End"), ICON_NONE);
uiItemR(layout, ptr, "overshoot_factor", UI_ITEM_R_SLIDER, IFACE_("Overshoot"), ICON_NONE);
@@ -244,40 +181,11 @@ static void mask_panel_draw(const bContext *UNUSED(C), Panel *panel)
gpencil_modifier_masking_panel_draw(panel, true, false);
}
-static void curvature_header_draw(const bContext *UNUSED(C), Panel *panel)
-{
- uiLayout *layout = panel->layout;
-
- PointerRNA *ptr = gpencil_modifier_panel_get_property_pointers(panel, NULL);
-
- uiItemR(layout, ptr, "use_curvature", 0, IFACE_("Curvature"), ICON_NONE);
-}
-
-static void curvature_panel_draw(const bContext *UNUSED(C), Panel *panel)
-{
- uiLayout *layout = panel->layout;
-
- PointerRNA *ptr = gpencil_modifier_panel_get_property_pointers(panel, NULL);
-
- uiLayoutSetPropSep(layout, true);
-
- uiLayout *col = uiLayoutColumn(layout, false);
-
- uiLayoutSetActive(col, RNA_boolean_get(ptr, "use_curvature"));
-
- uiItemR(col, ptr, "point_density", 0, NULL, ICON_NONE);
- uiItemR(col, ptr, "edge_point_tradeoff", 0, NULL, ICON_NONE);
- uiItemR(col, ptr, "max_angle", 0, NULL, ICON_NONE);
- uiItemR(col, ptr, "invert_curvature", 0, IFACE_("Invert"), ICON_NONE);
-}
-
static void panelRegister(ARegionType *region_type)
{
PanelType *panel_type = gpencil_modifier_panel_register(
region_type, eGpencilModifierType_Length, panel_draw);
gpencil_modifier_subpanel_register(
- region_type, "curvature", "", curvature_header_draw, curvature_panel_draw, panel_type);
- gpencil_modifier_subpanel_register(
region_type, "mask", "Influence", NULL, mask_panel_draw, panel_type);
}