Fix T48689: Transform proportional size was not seriously clamped.
Now use same, reasonable min/max values, to avoid getting inf or zero values when using shortcuts during transform operation...
This commit is contained in:
parent
d9a01a1d04
commit
37560e77e8
Notes:
blender-bot
2023-02-14 11:01:33 +01:00
Referenced by issue #48689, Bledner proportional tool go to inf by it self
|
@ -1202,8 +1202,12 @@ int transformEvent(TransInfo *t, const wmEvent *event)
|
|||
if (t->flag & T_PROP_EDIT) {
|
||||
float fac = 1.0f + 0.005f *(event->y - event->prevy);
|
||||
t->prop_size *= fac;
|
||||
if (t->spacetype == SPACE_VIEW3D && t->persp != RV3D_ORTHO)
|
||||
t->prop_size = min_ff(t->prop_size, ((View3D *)t->view)->far);
|
||||
if (t->spacetype == SPACE_VIEW3D && t->persp != RV3D_ORTHO) {
|
||||
t->prop_size = max_ff(min_ff(t->prop_size, ((View3D *)t->view)->far), T_PROP_SIZE_MIN);
|
||||
}
|
||||
else {
|
||||
t->prop_size = max_ff(min_ff(t->prop_size, T_PROP_SIZE_MAX), T_PROP_SIZE_MIN);
|
||||
}
|
||||
calculatePropRatio(t);
|
||||
t->redraw |= TREDRAW_HARD;
|
||||
handled = true;
|
||||
|
@ -1212,8 +1216,12 @@ int transformEvent(TransInfo *t, const wmEvent *event)
|
|||
case TFM_MODAL_PROPSIZE_UP:
|
||||
if (t->flag & T_PROP_EDIT) {
|
||||
t->prop_size *= (t->modifiers & MOD_PRECISION) ? 1.01f : 1.1f;
|
||||
if (t->spacetype == SPACE_VIEW3D && t->persp != RV3D_ORTHO)
|
||||
if (t->spacetype == SPACE_VIEW3D && t->persp != RV3D_ORTHO) {
|
||||
t->prop_size = min_ff(t->prop_size, ((View3D *)t->view)->far);
|
||||
}
|
||||
else {
|
||||
t->prop_size = min_ff(t->prop_size, T_PROP_SIZE_MAX);
|
||||
}
|
||||
calculatePropRatio(t);
|
||||
t->redraw |= TREDRAW_HARD;
|
||||
handled = true;
|
||||
|
@ -1222,6 +1230,7 @@ int transformEvent(TransInfo *t, const wmEvent *event)
|
|||
case TFM_MODAL_PROPSIZE_DOWN:
|
||||
if (t->flag & T_PROP_EDIT) {
|
||||
t->prop_size /= (t->modifiers & MOD_PRECISION) ? 1.01f : 1.1f;
|
||||
t->prop_size = max_ff(t->prop_size, T_PROP_SIZE_MIN);
|
||||
calculatePropRatio(t);
|
||||
t->redraw |= TREDRAW_HARD;
|
||||
handled = true;
|
||||
|
|
|
@ -592,6 +592,10 @@ typedef struct TransInfo {
|
|||
#define POINT_INIT 4
|
||||
#define MULTI_POINTS 8
|
||||
|
||||
/* Hard min/max for proportional size. */
|
||||
#define T_PROP_SIZE_MIN 1e-6f
|
||||
#define T_PROP_SIZE_MAX 1e12f
|
||||
|
||||
bool initTransform(struct bContext *C, struct TransInfo *t, struct wmOperator *op, const struct wmEvent *event, int mode);
|
||||
void saveTransform(struct bContext *C, struct TransInfo *t, struct wmOperator *op);
|
||||
int transformEvent(TransInfo *t, const struct wmEvent *event);
|
||||
|
|
|
@ -528,7 +528,8 @@ void Transform_Properties(struct wmOperatorType *ot, int flags)
|
|||
prop = RNA_def_enum(ot->srna, "proportional_edit_falloff", rna_enum_proportional_falloff_items, 0,
|
||||
"Proportional Editing Falloff", "Falloff type for proportional editing mode");
|
||||
RNA_def_property_translation_context(prop, BLT_I18NCONTEXT_ID_CURVE); /* Abusing id_curve :/ */
|
||||
RNA_def_float(ot->srna, "proportional_size", 1, 0.00001f, FLT_MAX, "Proportional Size", "", 0.001, 100);
|
||||
RNA_def_float(ot->srna, "proportional_size", 1, T_PROP_SIZE_MIN, T_PROP_SIZE_MAX,
|
||||
"Proportional Size", "", 0.001f, 100.0f);
|
||||
}
|
||||
|
||||
if (flags & P_SNAP) {
|
||||
|
|
Loading…
Reference in New Issue