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:
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"
|
@ -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 ** */
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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++) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue