Merge branch 'blender-v2.92-release'
# Conflicts: # source/blender/editors/transform/transform_constraints.c
This commit is contained in:
commit
9d902d1b30
|
@ -9014,6 +9014,7 @@ static int ui_handle_list_event(bContext *C, const wmEvent *event, ARegion *regi
|
|||
{
|
||||
int retval = WM_UI_HANDLER_CONTINUE;
|
||||
int type = event->type, val = event->val;
|
||||
int scroll_dir = 1;
|
||||
bool redraw = false;
|
||||
|
||||
uiList *ui_list = listbox->custom_data;
|
||||
|
@ -9030,6 +9031,11 @@ static int ui_handle_list_event(bContext *C, const wmEvent *event, ARegion *regi
|
|||
if (type == MOUSEPAN) {
|
||||
ui_pan_to_scroll(event, &type, &val);
|
||||
|
||||
/* 'ui_pan_to_scroll' gives the absolute direction. */
|
||||
if (event->is_direction_inverted) {
|
||||
scroll_dir = -1;
|
||||
}
|
||||
|
||||
/* If type still is mouse-pan, we call it handled, since delta-y accumulate. */
|
||||
/* also see wm_event_system.c do_wheel_ui hack */
|
||||
if (type == MOUSEPAN) {
|
||||
|
@ -9124,7 +9130,7 @@ static int ui_handle_list_event(bContext *C, const wmEvent *event, ARegion *regi
|
|||
else if (ELEM(type, WHEELUPMOUSE, WHEELDOWNMOUSE)) {
|
||||
if (dyn_data->height > dyn_data->visual_height) {
|
||||
/* list template will clamp */
|
||||
ui_list->list_scroll += (type == WHEELUPMOUSE) ? -1 : 1;
|
||||
ui_list->list_scroll += scroll_dir * ((type == WHEELUPMOUSE) ? -1 : 1);
|
||||
|
||||
redraw = true;
|
||||
retval = WM_UI_HANDLER_BREAK;
|
||||
|
|
|
@ -722,8 +722,6 @@ bool calculateCenterActive(TransInfo *t, bool select_only, float r_center[3]);
|
|||
|
||||
void calculatePropRatio(TransInfo *t);
|
||||
|
||||
void getViewVector(const TransInfo *t, const float coord[3], float vec[3]);
|
||||
|
||||
void transform_data_ext_rotate(TransData *td, float mat[3][3], bool use_drot);
|
||||
|
||||
void freeCustomNormalArray(TransInfo *t, TransDataContainer *tc, TransCustomData *custom_data);
|
||||
|
|
|
@ -83,6 +83,18 @@ static void projection_matrix_calc(const TransInfo *t, float r_pmtx[3][3])
|
|||
mul_m3_m3m3(r_pmtx, t->spacemtx, mat);
|
||||
}
|
||||
|
||||
static void view_vector_calc(const TransInfo *t, const float focus[3], float r_vec[3])
|
||||
{
|
||||
if (t->persp != RV3D_ORTHO) {
|
||||
sub_v3_v3v3(r_vec, t->viewinv[3], focus);
|
||||
}
|
||||
else {
|
||||
copy_v3_v3(r_vec, t->viewinv[2]);
|
||||
}
|
||||
normalize_v3(r_vec);
|
||||
}
|
||||
|
||||
/* ************************** CONSTRAINTS ************************* */
|
||||
#define CONSTRAIN_EPSILON 0.0001f
|
||||
|
||||
static void constraint_plane_calc(TransInfo *t, float r_plane[4])
|
||||
|
@ -221,14 +233,14 @@ static void axisProjection(const TransInfo *t,
|
|||
float norm_center[3];
|
||||
float plane[3];
|
||||
|
||||
getViewVector(t, t_con_center, norm_center);
|
||||
view_vector_calc(t, t_con_center, norm_center);
|
||||
cross_v3_v3v3(plane, norm_center, axis);
|
||||
|
||||
project_v3_v3v3(vec, in, plane);
|
||||
sub_v3_v3v3(vec, in, vec);
|
||||
|
||||
add_v3_v3v3(v, vec, t_con_center);
|
||||
getViewVector(t, v, norm);
|
||||
view_vector_calc(t, v, norm);
|
||||
|
||||
/* give arbitrary large value if projection is impossible */
|
||||
factor = dot_v3v3(axis, norm);
|
||||
|
@ -345,7 +357,7 @@ static bool isPlaneProjectionViewAligned(const TransInfo *t, const float plane[4
|
|||
{
|
||||
const float eps = 0.001f;
|
||||
float view_to_plane[3];
|
||||
getViewVector(t, t->center_global, view_to_plane);
|
||||
view_vector_calc(t, t->center_global, view_to_plane);
|
||||
|
||||
float factor = dot_v3v3(plane, view_to_plane);
|
||||
return fabsf(factor) < eps;
|
||||
|
@ -356,7 +368,7 @@ static void planeProjection(const TransInfo *t, const float in[3], float out[3])
|
|||
float vec[3], factor, norm[3];
|
||||
|
||||
add_v3_v3v3(vec, in, t->center_global);
|
||||
getViewVector(t, vec, norm);
|
||||
view_vector_calc(t, vec, norm);
|
||||
|
||||
sub_v3_v3v3(vec, out, in);
|
||||
|
||||
|
@ -561,7 +573,9 @@ static void constraints_rotation_imp(TransInfo *t,
|
|||
}
|
||||
/* don't flip axis if asked to or if num input */
|
||||
if (r_angle && (mode & CON_NOFLIP) == 0 && hasNumInput(&t->num) == 0) {
|
||||
if (dot_v3v3(r_vec, t->viewinv[2]) > 0.0f) {
|
||||
float view_vector[3];
|
||||
view_vector_calc(t, t->center_global, view_vector);
|
||||
if (dot_v3v3(r_vec, view_vector) > 0.0f) {
|
||||
*r_angle = -(*r_angle);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -64,19 +64,6 @@
|
|||
#include "transform_orientations.h"
|
||||
#include "transform_snap.h"
|
||||
|
||||
/* ************************** Functions *************************** */
|
||||
|
||||
void getViewVector(const TransInfo *t, const float coord[3], float vec[3])
|
||||
{
|
||||
if (t->persp != RV3D_ORTHO) {
|
||||
sub_v3_v3v3(vec, coord, t->viewinv[3]);
|
||||
}
|
||||
else {
|
||||
copy_v3_v3(vec, t->viewinv[2]);
|
||||
}
|
||||
normalize_v3(vec);
|
||||
}
|
||||
|
||||
/* ************************** GENERICS **************************** */
|
||||
|
||||
void drawLine(TransInfo *t, const float center[3], const float dir[3], char axis, short options)
|
||||
|
|
|
@ -1865,7 +1865,10 @@ static void WIDGETGROUP_gizmo_invoke_prepare(const bContext *C,
|
|||
PropertyRNA *prop_orient_type = RNA_struct_find_property(ptr, "orient_type");
|
||||
const TransformOrientationSlot *orient_slot = BKE_scene_orientation_slot_get_from_flag(
|
||||
scene, ggd->twtype_init);
|
||||
if (orient_slot == &scene->orientation_slots[SCE_ORIENT_DEFAULT]) {
|
||||
if ((gz == ggd->gizmos[MAN_AXIS_ROT_C]) ||
|
||||
(orient_slot == &scene->orientation_slots[SCE_ORIENT_DEFAULT])) {
|
||||
/* #MAN_AXIS_ROT_C always uses the #V3D_ORIENT_VIEW orientation,
|
||||
* optionally we could set this orientation instead of unset the property. */
|
||||
RNA_property_unset(ptr, prop_orient_type);
|
||||
}
|
||||
else {
|
||||
|
|
Loading…
Reference in New Issue