Fix Curves Smooth modifier appears to be able to act on control points

This is not the case though, the modifier act explicitly on mesh edges,
if no tesselated mesh is provided, it would simpy early out and do
nothing.

Now always disable the "Apply on Spline" option with a tip that this
modifier can only smooth the tesselated curve (not the underlying curve
control points). Similar to rB1a6b51e17502.

Fixes T102060.

Maniphest Tasks: T102060

Differential Revision: https://developer.blender.org/D16386
This commit is contained in:
Philipp Oeser 2022-11-04 12:45:38 +01:00
parent 94930da29b
commit ffc0db1994
Notes: blender-bot 2023-02-14 06:55:40 +01:00
Referenced by issue #102060, Smooth modifier does not work in spline curve mode
2 changed files with 31 additions and 1 deletions

View File

@ -532,6 +532,11 @@ static ModifierData *curve_get_tessellate_point(const Scene *scene,
return pretessellatePoint;
}
if (md->type == eModifierType_Smooth) {
/* Smooth modifier works with mesh edges explicitly (so needs tesselation, thus cannnot work on control points). */
md->mode &= ~eModifierMode_ApplyOnSpline;
return pretessellatePoint;
}
if (ELEM(md->type, eModifierType_Hook, eModifierType_Softbody, eModifierType_MeshDeform)) {
pretessellatePoint = md;

View File

@ -326,8 +326,33 @@ static void modifier_panel_header(const bContext *C, Panel *panel)
}
} /* Tessellation point for curve-typed objects. */
else if (ELEM(ob->type, OB_CURVES_LEGACY, OB_SURF, OB_FONT)) {
/* Smooth modifier can work with tessellated curves only (works on mesh edges explicitly). */
if (md->type == eModifierType_Smooth) {
/* Add button (appearing to be OFF) and add tip why this can't be changed. */
sub = uiLayoutRow(row, true);
uiBlock *block = uiLayoutGetBlock(sub);
static int apply_on_spline_always_off_hack = 0;
uiBut *but = uiDefIconButBitI(block,
UI_BTYPE_TOGGLE,
eModifierMode_ApplyOnSpline,
0,
ICON_SURFACE_DATA,
0,
0,
UI_UNIT_X - 2,
UI_UNIT_Y,
&apply_on_spline_always_off_hack,
0.0,
0.0,
0.0,
0.0,
TIP_("Apply on Spline"));
UI_but_disable(
but, TIP_("This modifier can only deform filled curve/surface, not the control points"));
buttons_number++;
}
/* Some modifiers can work with pre-tessellated curves only. */
if (ELEM(md->type, eModifierType_Hook, eModifierType_Softbody, eModifierType_MeshDeform)) {
else if (ELEM(md->type, eModifierType_Hook, eModifierType_Softbody, eModifierType_MeshDeform)) {
/* Add button (appearing to be ON) and add tip why this can't be changed. */
sub = uiLayoutRow(row, true);
uiBlock *block = uiLayoutGetBlock(sub);