Transform: center override
Hidden option to override transform center. Needed for manipulators that define their own center.
This commit is contained in:
parent
1261a29fc0
commit
a520e7c85c
Notes:
blender-bot
2023-02-14 11:34:30 +01:00
Referenced by commit 684898cfbf
, Fix Proportional Edit Projected 2D method skiped center calculation
Referenced by issue #58882, Proportional Edit Influence Circle is Always draw in Origin in Projected 2D Mode
|
@ -148,7 +148,8 @@ int BIF_countTransformOrientation(const struct bContext *C);
|
|||
#define P_CORRECT_UV (1 << 8)
|
||||
#define P_NO_DEFAULTS (1 << 10)
|
||||
#define P_NO_TEXSPACE (1 << 11)
|
||||
#define P_GPENCIL_EDIT (1 << 12)
|
||||
#define P_CENTER (1 << 12)
|
||||
#define P_GPENCIL_EDIT (1 << 13)
|
||||
|
||||
void Transform_Properties(struct wmOperatorType *ot, int flags);
|
||||
|
||||
|
|
|
@ -2878,7 +2878,9 @@ static void initBend(TransInfo *t)
|
|||
t->flag |= T_NO_CONSTRAINT;
|
||||
|
||||
//copy_v3_v3(t->center, ED_view3d_cursor3d_get(t->scene, t->view));
|
||||
calculateCenterCursor(t, t->center);
|
||||
if ((t->flag & T_OVERRIDE_CENTER) == 0) {
|
||||
calculateCenterCursor(t, t->center);
|
||||
}
|
||||
calculateCenterGlobal(t, t->center, t->center_global);
|
||||
|
||||
t->val = 0.0f;
|
||||
|
@ -8513,9 +8515,11 @@ static void initTimeScale(TransInfo *t)
|
|||
|
||||
/* recalculate center2d to use CFRA and mouse Y, since that's
|
||||
* what is used in time scale */
|
||||
t->center[0] = t->scene->r.cfra;
|
||||
projectFloatView(t, t->center, center);
|
||||
center[1] = t->mouse.imval[1];
|
||||
if ((t->flag & T_OVERRIDE_CENTER) == 0) {
|
||||
t->center[0] = t->scene->r.cfra;
|
||||
projectFloatView(t, t->center, center);
|
||||
center[1] = t->mouse.imval[1];
|
||||
}
|
||||
|
||||
/* force a reinit with the center2d used here */
|
||||
initMouseInput(t, &t->mouse, center, t->mouse.imval, false);
|
||||
|
|
|
@ -533,6 +533,9 @@ typedef struct TransInfo {
|
|||
/* alternative transformation. used to add offset to tracking markers */
|
||||
#define T_ALT_TRANSFORM (1 << 24)
|
||||
|
||||
/** #TransInfo.center has been set, don't change it. */
|
||||
#define T_OVERRIDE_CENTER (1 << 25)
|
||||
|
||||
/* TransInfo->modifiers */
|
||||
#define MOD_CONSTRAINT_SELECT 0x01
|
||||
#define MOD_PRECISION 0x02
|
||||
|
|
|
@ -1331,7 +1331,12 @@ void initTransInfo(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
|
|||
t->current_orientation = V3D_MANIP_GLOBAL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (op && (prop = RNA_struct_find_property(op->ptr, "center_override")) && RNA_property_is_set(op->ptr, prop)) {
|
||||
RNA_property_float_get_array(op->ptr, prop, t->center);
|
||||
t->flag |= T_OVERRIDE_CENTER;
|
||||
}
|
||||
|
||||
if (op && ((prop = RNA_struct_find_property(op->ptr, "release_confirm")) &&
|
||||
RNA_property_is_set(op->ptr, prop)))
|
||||
{
|
||||
|
@ -1835,7 +1840,9 @@ static void calculateCenter_FromAround(TransInfo *t, int around, float r_center[
|
|||
|
||||
void calculateCenter(TransInfo *t)
|
||||
{
|
||||
calculateCenter_FromAround(t, t->around, t->center);
|
||||
if ((t->flag & T_OVERRIDE_CENTER) == 0) {
|
||||
calculateCenter_FromAround(t, t->around, t->center);
|
||||
}
|
||||
calculateCenterGlobal(t, t->center, t->center_global);
|
||||
|
||||
/* avoid calculating again */
|
||||
|
@ -1849,7 +1856,7 @@ void calculateCenter(TransInfo *t)
|
|||
calculateCenter2D(t);
|
||||
|
||||
/* for panning from cameraview */
|
||||
if (t->flag & T_OBJECT) {
|
||||
if ((t->flag & T_OBJECT) && (t->flag & T_OVERRIDE_CENTER) == 0) {
|
||||
if (t->spacetype == SPACE_VIEW3D && t->ar && t->ar->regiontype == RGN_TYPE_WINDOW) {
|
||||
|
||||
if (t->flag & T_CAMERA) {
|
||||
|
|
|
@ -565,6 +565,14 @@ void Transform_Properties(struct wmOperatorType *ot, int flags)
|
|||
RNA_def_boolean(ot->srna, "correct_uv", 0, "Correct UVs", "Correct UV coordinates when transforming");
|
||||
}
|
||||
|
||||
if (flags & P_CENTER) {
|
||||
/* For manipulators that define their own center. */
|
||||
prop = RNA_def_property(ot->srna, "center_override", PROP_FLOAT, PROP_XYZ);
|
||||
RNA_def_property_array(prop, 3);
|
||||
RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE);
|
||||
RNA_def_property_ui_text(prop, "Center", "Force using this center value (when set)");
|
||||
}
|
||||
|
||||
if ((flags & P_NO_DEFAULTS) == 0) {
|
||||
// Add confirm method all the time. At the end because it's not really that important and should be hidden only in log, not in keymap edit
|
||||
/*prop =*/ RNA_def_boolean(ot->srna, "release_confirm", 0, "Confirm on Release", "Always confirm operation when releasing button");
|
||||
|
@ -612,7 +620,8 @@ static void TRANSFORM_OT_resize(struct wmOperatorType *ot)
|
|||
|
||||
RNA_def_float_vector(ot->srna, "value", 3, VecOne, -FLT_MAX, FLT_MAX, "Vector", "", -FLT_MAX, FLT_MAX);
|
||||
|
||||
Transform_Properties(ot, P_CONSTRAINT | P_PROPORTIONAL | P_MIRROR | P_GEO_SNAP | P_OPTIONS | P_GPENCIL_EDIT);
|
||||
Transform_Properties(
|
||||
ot, P_CONSTRAINT | P_PROPORTIONAL | P_MIRROR | P_GEO_SNAP | P_OPTIONS | P_GPENCIL_EDIT | P_CENTER);
|
||||
}
|
||||
|
||||
static int skin_resize_poll(bContext *C)
|
||||
|
@ -663,7 +672,7 @@ static void TRANSFORM_OT_trackball(struct wmOperatorType *ot)
|
|||
/* Maybe we could use float_vector_xyz here too? */
|
||||
RNA_def_float_rotation(ot->srna, "value", 2, NULL, -FLT_MAX, FLT_MAX, "Angle", "", -FLT_MAX, FLT_MAX);
|
||||
|
||||
Transform_Properties(ot, P_PROPORTIONAL | P_MIRROR | P_SNAP | P_GPENCIL_EDIT);
|
||||
Transform_Properties(ot, P_PROPORTIONAL | P_MIRROR | P_SNAP | P_GPENCIL_EDIT | P_CENTER);
|
||||
}
|
||||
|
||||
static void TRANSFORM_OT_rotate(struct wmOperatorType *ot)
|
||||
|
@ -683,7 +692,8 @@ static void TRANSFORM_OT_rotate(struct wmOperatorType *ot)
|
|||
|
||||
RNA_def_float_rotation(ot->srna, "value", 0, NULL, -FLT_MAX, FLT_MAX, "Angle", "", -M_PI * 2, M_PI * 2);
|
||||
|
||||
Transform_Properties(ot, P_AXIS | P_CONSTRAINT | P_PROPORTIONAL | P_MIRROR | P_GEO_SNAP | P_GPENCIL_EDIT);
|
||||
Transform_Properties(
|
||||
ot, P_AXIS | P_CONSTRAINT | P_PROPORTIONAL | P_MIRROR | P_GEO_SNAP | P_GPENCIL_EDIT | P_CENTER);
|
||||
}
|
||||
|
||||
static void TRANSFORM_OT_tilt(struct wmOperatorType *ot)
|
||||
|
@ -726,7 +736,7 @@ static void TRANSFORM_OT_bend(struct wmOperatorType *ot)
|
|||
|
||||
RNA_def_float_rotation(ot->srna, "value", 1, NULL, -FLT_MAX, FLT_MAX, "Angle", "", -M_PI * 2, M_PI * 2);
|
||||
|
||||
Transform_Properties(ot, P_PROPORTIONAL | P_MIRROR | P_SNAP | P_GPENCIL_EDIT);
|
||||
Transform_Properties(ot, P_PROPORTIONAL | P_MIRROR | P_SNAP | P_GPENCIL_EDIT | P_CENTER);
|
||||
}
|
||||
|
||||
static void TRANSFORM_OT_shear(struct wmOperatorType *ot)
|
||||
|
@ -767,7 +777,7 @@ static void TRANSFORM_OT_push_pull(struct wmOperatorType *ot)
|
|||
|
||||
RNA_def_float(ot->srna, "value", 0, -FLT_MAX, FLT_MAX, "Distance", "", -FLT_MAX, FLT_MAX);
|
||||
|
||||
Transform_Properties(ot, P_PROPORTIONAL | P_MIRROR | P_SNAP);
|
||||
Transform_Properties(ot, P_PROPORTIONAL | P_MIRROR | P_SNAP | P_CENTER);
|
||||
}
|
||||
|
||||
static void TRANSFORM_OT_shrink_fatten(struct wmOperatorType *ot)
|
||||
|
@ -810,7 +820,7 @@ static void TRANSFORM_OT_tosphere(struct wmOperatorType *ot)
|
|||
|
||||
RNA_def_float_factor(ot->srna, "value", 0, 0, 1, "Factor", "", 0, 1);
|
||||
|
||||
Transform_Properties(ot, P_PROPORTIONAL | P_MIRROR | P_SNAP | P_GPENCIL_EDIT);
|
||||
Transform_Properties(ot, P_PROPORTIONAL | P_MIRROR | P_SNAP | P_GPENCIL_EDIT | P_CENTER);
|
||||
}
|
||||
|
||||
static void TRANSFORM_OT_mirror(struct wmOperatorType *ot)
|
||||
|
@ -828,7 +838,7 @@ static void TRANSFORM_OT_mirror(struct wmOperatorType *ot)
|
|||
ot->cancel = transform_cancel;
|
||||
ot->poll = ED_operator_screenactive;
|
||||
|
||||
Transform_Properties(ot, P_CONSTRAINT | P_PROPORTIONAL | P_GPENCIL_EDIT);
|
||||
Transform_Properties(ot, P_CONSTRAINT | P_PROPORTIONAL | P_GPENCIL_EDIT | P_CENTER);
|
||||
}
|
||||
|
||||
static void TRANSFORM_OT_edge_slide(struct wmOperatorType *ot)
|
||||
|
@ -991,7 +1001,8 @@ static void TRANSFORM_OT_transform(struct wmOperatorType *ot)
|
|||
|
||||
RNA_def_float_vector(ot->srna, "value", 4, NULL, -FLT_MAX, FLT_MAX, "Values", "", -FLT_MAX, FLT_MAX);
|
||||
|
||||
Transform_Properties(ot, P_AXIS | P_CONSTRAINT | P_PROPORTIONAL | P_MIRROR | P_ALIGN_SNAP | P_GPENCIL_EDIT);
|
||||
Transform_Properties(
|
||||
ot, P_AXIS | P_CONSTRAINT | P_PROPORTIONAL | P_MIRROR | P_ALIGN_SNAP | P_GPENCIL_EDIT | P_CENTER);
|
||||
}
|
||||
|
||||
void transform_operatortypes(void)
|
||||
|
|
Loading…
Reference in New Issue