Cleanup/Refactor: Transform Orientation: Use 'orient_index' instead 'orient_type'

`orient_index` is a more comprehensive value as it reveals both the type and index.

Differential Revision: https://developer.blender.org/D9595
This commit is contained in:
Germano Cavalcante 2021-04-01 11:19:31 -03:00
parent 952c4e41bb
commit 6ec463a4b7
Notes: blender-bot 2023-02-14 05:51:15 +01:00
Referenced by commit 2dc16223de, Fix compilation error: "too many arguments to function"
8 changed files with 73 additions and 71 deletions

View File

@ -140,6 +140,8 @@ struct TransformOrientationSlot *BKE_scene_orientation_slot_get(struct Scene *sc
void BKE_scene_orientation_slot_set_index(struct TransformOrientationSlot *orient_slot,
int orientation);
int BKE_scene_orientation_slot_get_index(const struct TransformOrientationSlot *orient_slot);
int BKE_scene_orientation_get_index(struct Scene *scene, int slot_index);
int BKE_scene_orientation_get_index_from_flag(struct Scene *scene, int flag);
/* ** Scene evaluation ** */

View File

@ -2517,6 +2517,18 @@ int BKE_scene_orientation_slot_get_index(const TransformOrientationSlot *orient_
orient_slot->type;
}
int BKE_scene_orientation_get_index(Scene *scene, int slot_index)
{
TransformOrientationSlot *orient_slot = BKE_scene_orientation_slot_get(scene, slot_index);
return BKE_scene_orientation_slot_get_index(orient_slot);
}
int BKE_scene_orientation_get_index_from_flag(Scene *scene, int flag)
{
TransformOrientationSlot *orient_slot = BKE_scene_orientation_slot_get_from_flag(scene, flag);
return BKE_scene_orientation_slot_get_index(orient_slot);
}
/** \} */
static bool check_rendered_viewport_visible(Main *bmain)

View File

@ -151,8 +151,7 @@ short ED_transform_calc_orientation_from_type_ex(const struct bContext *C,
struct RegionView3D *rv3d,
struct Object *ob,
struct Object *obedit,
const short orientation_type,
int orientation_index_custom,
const short orientation_index,
const int pivot_point);
/* transform gizmos */
@ -186,8 +185,7 @@ struct TransformCalcParams {
uint use_only_center : 1;
uint use_local_axis : 1;
/* Use 'Scene.orientation_type' when zero, otherwise subtract one and use. */
ushort orientation_type;
ushort orientation_index_custom;
ushort orientation_index;
};
int ED_transform_calc_gizmo_stats(const struct bContext *C,
const struct TransformCalcParams *params,

View File

@ -143,7 +143,7 @@ static void WIDGETGROUP_tool_generic_refresh(const bContext *C, wmGizmoGroup *gz
const bool hide = ED_transform_calc_gizmo_stats(C,
&(struct TransformCalcParams){
.use_only_center = true,
.orientation_type = orientation + 1,
.orientation_index = orientation + 1,
},
&tbounds) == 0;

View File

@ -512,11 +512,11 @@ static void protectflag_to_drawflags(short protectflag, short *drawflags)
/* for pose mode */
static void protectflag_to_drawflags_pchan(RegionView3D *rv3d,
const bPoseChannel *pchan,
short orientation_type)
short orientation_index)
{
/* Protect-flags apply to local space in pose mode, so only let them influence axis
* visibility if we show the global orientation, otherwise it's confusing. */
if (orientation_type == V3D_ORIENT_LOCAL) {
if (orientation_index == V3D_ORIENT_LOCAL) {
protectflag_to_drawflags(pchan->protectflag, &rv3d->twdrawflag);
}
}
@ -657,12 +657,9 @@ int ED_transform_calc_gizmo_stats(const bContext *C,
int a, totsel = 0;
const int pivot_point = scene->toolsettings->transform_pivot_point;
const short orientation_type = params->orientation_type ?
(params->orientation_type - 1) :
scene->orientation_slots[SCE_ORIENT_DEFAULT].type;
const short orientation_index_custom =
params->orientation_type ? params->orientation_index_custom :
scene->orientation_slots[SCE_ORIENT_DEFAULT].index_custom;
const short orient_index = params->orientation_index ?
(params->orientation_index - 1) :
BKE_scene_orientation_get_index(scene, SCE_ORIENT_DEFAULT);
/* transform widget matrix */
unit_m4(rv3d->twmat);
@ -678,7 +675,7 @@ int ED_transform_calc_gizmo_stats(const bContext *C,
if (ob) {
float mat[3][3];
ED_transform_calc_orientation_from_type_ex(
C, mat, scene, rv3d, ob, obedit, orientation_type, orientation_index_custom, pivot_point);
C, mat, scene, rv3d, ob, obedit, orient_index, pivot_point);
copy_m4_m3(rv3d->twmat, mat);
}
@ -976,7 +973,7 @@ int ED_transform_calc_gizmo_stats(const bContext *C,
Bone *bone = pchan->bone;
if (bone && (bone->flag & BONE_TRANSFORM)) {
calc_tw_center_with_matrix(tbounds, pchan->pose_head, use_mat_local, mat_local);
protectflag_to_drawflags_pchan(rv3d, pchan, orientation_type);
protectflag_to_drawflags_pchan(rv3d, pchan, orient_index);
}
}
totsel += totsel_iter;
@ -1063,7 +1060,7 @@ int ED_transform_calc_gizmo_stats(const bContext *C,
/* Protect-flags apply to world space in object mode, so only let them influence axis
* visibility if we show the global orientation, otherwise it's confusing. */
if (orientation_type == V3D_ORIENT_GLOBAL) {
if (orient_index == V3D_ORIENT_GLOBAL) {
protectflag_to_drawflags(base->object->protectflag, &rv3d->twdrawflag);
}
totsel++;
@ -1689,18 +1686,15 @@ static void WIDGETGROUP_gizmo_refresh(const bContext *C, wmGizmoGroup *gzgroup)
}
}
const TransformOrientationSlot *orient_slot = BKE_scene_orientation_slot_get_from_flag(
scene, ggd->twtype_init);
const int orient_index = BKE_scene_orientation_get_index_from_flag(scene, ggd->twtype_init);
/* skip, we don't draw anything anyway */
if ((ggd->all_hidden = (ED_transform_calc_gizmo_stats(
C,
&(struct TransformCalcParams){
.use_only_center = true,
.orientation_type = orient_slot->type + 1,
.orientation_index_custom = orient_slot->index_custom,
},
&tbounds) == 0))) {
if ((ggd->all_hidden = (ED_transform_calc_gizmo_stats(C,
&(struct TransformCalcParams){
.use_only_center = true,
.orientation_index = orient_index + 1,
},
&tbounds) == 0))) {
return;
}
@ -2119,14 +2113,12 @@ static void WIDGETGROUP_xform_cage_refresh(const bContext *C, wmGizmoGroup *gzgr
gzgroup->use_fallback_keymap = false;
}
const TransformOrientationSlot *orient_slot = BKE_scene_orientation_slot_get(scene,
SCE_ORIENT_SCALE);
const int orient_index = BKE_scene_orientation_get_index_from_flag(scene, SCE_ORIENT_SCALE);
if ((ED_transform_calc_gizmo_stats(C,
&(struct TransformCalcParams){
.use_local_axis = true,
.orientation_type = orient_slot->type + 1,
.orientation_index_custom = orient_slot->index_custom,
.orientation_index = orient_index + 1,
},
&tbounds) == 0) ||
equals_v3v3(rv3d->tw_axis_min, rv3d->tw_axis_max)) {
@ -2335,14 +2327,14 @@ static void WIDGETGROUP_xform_shear_refresh(const bContext *C, wmGizmoGroup *gzg
/* Needed to test view orientation changes. */
copy_m3_m4(xgzgroup->prev.viewinv_m3, rv3d->viewinv);
const TransformOrientationSlot *orient_slot = BKE_scene_orientation_slot_get(scene,
SCE_ORIENT_ROTATE);
TransformOrientationSlot *orient_slot = BKE_scene_orientation_slot_get_from_flag(
scene, SCE_ORIENT_ROTATE);
const int orient_index = BKE_scene_orientation_slot_get_index(orient_slot);
if (ED_transform_calc_gizmo_stats(C,
&(struct TransformCalcParams){
.use_local_axis = false,
.orientation_type = orient_slot->type + 1,
.orientation_index_custom = orient_slot->index_custom,
.orientation_index = orient_index + 1,
},
&tbounds) == 0) {
for (int i = 0; i < 3; i++) {

View File

@ -25,6 +25,7 @@
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_scene.h"
#include "RNA_access.h"
#include "RNA_define.h"
@ -88,7 +89,7 @@ typedef struct GizmoExtrudeGroup {
struct {
float normal_mat3[3][3]; /* use Z axis for normal. */
int orientation_type;
int orientation_index;
} data;
wmOperatorType *ot_extrude;
@ -254,8 +255,8 @@ static void gizmo_mesh_extrude_refresh(const bContext *C, wmGizmoGroup *gzgroup)
axis_type = RNA_property_enum_get(&ptr, ggd->gzgt_axis_type_prop);
}
ggd->data.orientation_type = scene->orientation_slots[SCE_ORIENT_DEFAULT].type;
const bool use_normal = ((ggd->data.orientation_type != V3D_ORIENT_NORMAL) ||
ggd->data.orientation_index = BKE_scene_orientation_get_index(scene, SCE_ORIENT_DEFAULT);
const bool use_normal = ((ggd->data.orientation_index != V3D_ORIENT_NORMAL) ||
(axis_type == EXTRUDE_AXIS_NORMAL));
const int axis_len_used = use_normal ? 4 : 3;
@ -265,7 +266,7 @@ static void gizmo_mesh_extrude_refresh(const bContext *C, wmGizmoGroup *gzgroup)
struct TransformBounds tbounds_normal;
if (!ED_transform_calc_gizmo_stats(C,
&(struct TransformCalcParams){
.orientation_type = V3D_ORIENT_NORMAL + 1,
.orientation_index = V3D_ORIENT_NORMAL + 1,
},
&tbounds_normal)) {
unit_m3(tbounds_normal.axis);
@ -276,7 +277,7 @@ static void gizmo_mesh_extrude_refresh(const bContext *C, wmGizmoGroup *gzgroup)
/* TODO(campbell): run second since this modifies the 3D view, it should not. */
if (!ED_transform_calc_gizmo_stats(C,
&(struct TransformCalcParams){
.orientation_type = ggd->data.orientation_type + 1,
.orientation_index = ggd->data.orientation_index + 1,
},
&tbounds)) {
return;
@ -391,7 +392,7 @@ static void gizmo_mesh_extrude_refresh(const bContext *C, wmGizmoGroup *gzgroup)
static void gizmo_mesh_extrude_draw_prepare(const bContext *C, wmGizmoGroup *gzgroup)
{
GizmoExtrudeGroup *ggd = gzgroup->customdata;
switch (ggd->data.orientation_type) {
switch (ggd->data.orientation_index) {
case V3D_ORIENT_VIEW: {
RegionView3D *rv3d = CTX_wm_region_view3d(C);
float mat[3][3];
@ -451,7 +452,7 @@ static void gizmo_mesh_extrude_invoke_prepare(const bContext *UNUSED(C),
if (i == 3) {
use_normal_matrix = true;
}
else if (ggd->data.orientation_type == V3D_ORIENT_NORMAL) {
else if (ggd->data.orientation_index == V3D_ORIENT_NORMAL) {
use_normal_matrix = true;
}
if (use_normal_matrix) {

View File

@ -492,12 +492,11 @@ void ED_transform_calc_orientation_from_type(const bContext *C, float r_mat[3][3
Object *obedit = CTX_data_edit_object(C);
RegionView3D *rv3d = region->regiondata;
Object *ob = OBACT(view_layer);
const short orientation_type = scene->orientation_slots[SCE_ORIENT_DEFAULT].type;
const short orientation_index_custom = scene->orientation_slots[SCE_ORIENT_DEFAULT].index_custom;
const short orient_index = BKE_scene_orientation_get_index(scene, SCE_ORIENT_DEFAULT);
const int pivot_point = scene->toolsettings->transform_pivot_point;
ED_transform_calc_orientation_from_type_ex(
C, r_mat, scene, rv3d, ob, obedit, orientation_type, orientation_index_custom, pivot_point);
C, r_mat, scene, rv3d, ob, obedit, orient_index, pivot_point);
}
/**
@ -516,11 +515,10 @@ short ED_transform_calc_orientation_from_type_ex(const bContext *C,
RegionView3D *rv3d,
Object *ob,
Object *obedit,
const short orientation_type,
int orientation_index_custom,
const short orientation_index,
const int pivot_point)
{
switch (orientation_type) {
switch (orientation_index) {
case V3D_ORIENT_GIMBAL: {
if (ob && gimbal_axis(ob, r_mat)) {
break;
@ -577,24 +575,28 @@ short ED_transform_calc_orientation_from_type_ex(const bContext *C,
}
case V3D_ORIENT_CUSTOM:
default: {
BLI_assert(orientation_type >= V3D_ORIENT_CUSTOM);
BLI_assert(orientation_index >= V3D_ORIENT_CUSTOM);
int orientation_index_custom = orientation_index - V3D_ORIENT_CUSTOM;
TransformOrientation *custom_orientation = BKE_scene_transform_orientation_find(
scene, orientation_index_custom);
applyTransformOrientation(custom_orientation, r_mat, NULL);
return V3D_ORIENT_CUSTOM + orientation_index_custom;
break;
}
}
return orientation_type;
return orientation_index;
}
/* Sets the matrix of the specified space orientation.
* If the matrix cannot be obtained, an orientation different from the one
* informed is returned */
short transform_orientation_matrix_get(
bContext *C, TransInfo *t, short orientation, const float custom[3][3], float r_spacemtx[3][3])
short transform_orientation_matrix_get(bContext *C,
TransInfo *t,
short orient_index,
const float custom[3][3],
float r_spacemtx[3][3])
{
if (orientation == V3D_ORIENT_CUSTOM_MATRIX) {
if (orient_index == V3D_ORIENT_CUSTOM_MATRIX) {
copy_m3_m3(r_spacemtx, custom);
return V3D_ORIENT_CUSTOM_MATRIX;
}
@ -603,24 +605,20 @@ short transform_orientation_matrix_get(
Object *obedit = CTX_data_edit_object(C);
Scene *scene = t->scene;
RegionView3D *rv3d = NULL;
int orientation_index_custom = 0;
if (orientation >= V3D_ORIENT_CUSTOM) {
orientation_index_custom = orientation - V3D_ORIENT_CUSTOM;
orientation = V3D_ORIENT_CUSTOM;
}
else if (ob && (ob->mode & OB_MODE_ALL_WEIGHT_PAINT) && !(t->options & CTX_PAINT_CURVE)) {
Object *ob_armature = transform_object_deform_pose_armature_get(t, ob);
if (ob_armature) {
ob = ob_armature;
}
}
if ((t->spacetype == SPACE_VIEW3D) && t->region && (t->region->regiontype == RGN_TYPE_WINDOW)) {
rv3d = t->region->regiondata;
if (ob && (ob->mode & OB_MODE_ALL_WEIGHT_PAINT) && !(t->options & CTX_PAINT_CURVE)) {
Object *ob_armature = transform_object_deform_pose_armature_get(t, ob);
if (ob_armature) {
/* The armature matrix is used for GIMBAL, NORMAL and LOCAL orientations. */
ob = ob_armature;
}
}
}
short orient_type = ED_transform_calc_orientation_from_type_ex(
short r_orient_index = ED_transform_calc_orientation_from_type_ex(
C,
r_spacemtx,
/* extra args (can be accessed from context) */
@ -628,13 +626,12 @@ short transform_orientation_matrix_get(
rv3d,
ob,
obedit,
orientation,
orientation_index_custom,
orient_index,
t->around);
if (rv3d && (t->options & CTX_PAINT_CURVE)) {
/* Screen space in the 3d region. */
if (orient_type == V3D_ORIENT_VIEW) {
if (r_orient_index == V3D_ORIENT_VIEW) {
unit_m3(r_spacemtx);
}
else {
@ -643,7 +640,7 @@ short transform_orientation_matrix_get(
}
}
return orient_type;
return r_orient_index;
}
const char *transform_orientations_spacename_get(TransInfo *t, const short orient_type)

View File

@ -27,7 +27,7 @@ struct TransInfo;
short transform_orientation_matrix_get(struct bContext *C,
struct TransInfo *t,
short orientation,
short orient_index,
const float custom[3][3],
float r_spacemtx[3][3]);
const char *transform_orientations_spacename_get(struct TransInfo *t, const short orient_type);