Blender V4.3
transform_orientations.cc File Reference
#include <cctype>
#include <cstddef>
#include <cstring>
#include "MEM_guardedalloc.h"
#include "DNA_armature_types.h"
#include "DNA_curve_types.h"
#include "DNA_meta_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "DNA_sequence_types.h"
#include "DNA_space_types.h"
#include "DNA_view3d_types.h"
#include "BLI_listbase.h"
#include "BLI_math_geom.h"
#include "BLI_math_matrix.h"
#include "BLI_math_rotation.h"
#include "BLI_math_vector.h"
#include "BLI_string.h"
#include "BLI_string_utils.hh"
#include "BLI_utildefines.h"
#include "BKE_action.hh"
#include "BKE_armature.hh"
#include "BKE_context.hh"
#include "BKE_curve.hh"
#include "BKE_editmesh.hh"
#include "BKE_layer.hh"
#include "BKE_report.hh"
#include "BKE_scene.hh"
#include "BLT_translation.hh"
#include "ED_armature.hh"
#include "ANIM_bone_collections.hh"
#include "SEQ_select.hh"
#include "transform.hh"
#include "transform_orientations.hh"

Go to the source code of this file.

Macros

#define SEL_F1   (1 << 0)
 
#define SEL_F2   (1 << 1)
 
#define SEL_F3   (1 << 2)
 

Functions

void BIF_clearTransformOrientation (bContext *C)
 
static TransformOrientationfindOrientationName (ListBase *lb, const char *name)
 
static bool uniqueOrientationNameCheck (void *arg, const char *name)
 
static void uniqueOrientationName (ListBase *lb, char *name)
 
static TransformOrientationcreateViewSpace (bContext *C, ReportList *, const char *name, const bool overwrite)
 
static TransformOrientationcreateObjectSpace (bContext *C, ReportList *, const char *name, const bool overwrite)
 
static TransformOrientationcreateBoneSpace (bContext *C, ReportList *reports, const char *name, const bool overwrite)
 
static TransformOrientationcreateCurveSpace (bContext *C, ReportList *reports, const char *name, const bool overwrite)
 
static TransformOrientationcreateMeshSpace (bContext *C, ReportList *reports, const char *name, const bool overwrite)
 
static bool test_rotmode_euler (short rotmode)
 
static void axis_angle_to_gimbal_axis (float gmat[3][3], const float axis[3], const float angle)
 
bool gimbal_axis_pose (Object *ob, const bPoseChannel *pchan, float gmat[3][3])
 
bool gimbal_axis_object (Object *ob, float gmat[3][3])
 
bool transform_orientations_create_from_axis (float mat[3][3], const float x[3], const float y[3], const float z[3])
 
bool createSpaceNormal (float mat[3][3], const float normal[3])
 
bool createSpaceNormalTangent (float mat[3][3], const float normal[3], const float tangent[3])
 
bool BIF_createTransformOrientation (bContext *C, ReportList *reports, const char *name, const bool use_view, const bool activate, const bool overwrite)
 
TransformOrientationaddMatrixSpace (bContext *C, float mat[3][3], const char *name, const bool overwrite)
 
void BIF_removeTransformOrientation (bContext *C, TransformOrientation *target)
 
void BIF_removeTransformOrientationIndex (bContext *C, int index)
 
void BIF_selectTransformOrientation (bContext *C, TransformOrientation *target)
 
int BIF_countTransformOrientation (const bContext *C)
 
void applyTransformOrientation (const TransformOrientation *ts, float r_mat[3][3], char r_name[64])
 
static int armature_bone_transflags_update_recursive (bArmature *arm, ListBase *lb, const bool do_it)
 
void ED_transform_calc_orientation_from_type (const bContext *C, float r_mat[3][3])
 
static void handle_armature_parent_orientation (Object *ob, float r_mat[3][3])
 
static void handle_object_parent_orientation (Object *ob, float r_mat[3][3])
 
short ED_transform_calc_orientation_from_type_ex (const Scene *scene, ViewLayer *view_layer, const View3D *v3d, const RegionView3D *rv3d, Object *ob, Object *obedit, const short orientation_index, const int pivot_point, float r_mat[3][3])
 
short transform_orientation_matrix_get (bContext *C, TransInfo *t, short orient_index, const float custom[3][3], float r_spacemtx[3][3])
 
const char * transform_orientations_spacename_get (TransInfo *t, const short orient_type)
 
void transform_orientations_current_set (TransInfo *t, const short orient_index)
 
static uint bm_mesh_elems_select_get_n__internal (BMesh *bm, BMElem **elems, const uint n, const BMIterType itype, const char htype)
 
static uint bm_mesh_verts_select_get_n (BMesh *bm, BMVert **elems, const uint n)
 
static uint bm_mesh_edges_select_get_n (BMesh *bm, BMEdge **elems, const uint n)
 
int getTransformOrientation_ex (const Scene *scene, ViewLayer *view_layer, const View3D *v3d, Object *ob, Object *obedit, float normal[3], float plane[3], const short around)
 
int getTransformOrientation (const bContext *C, float normal[3], float plane[3])
 
void ED_getTransformOrientationMatrix (const Scene *scene, ViewLayer *view_layer, const View3D *v3d, Object *ob, Object *obedit, const short around, float r_orientation_mat[3][3])
 

Macro Definition Documentation

◆ SEL_F1

#define SEL_F1   (1 << 0)

◆ SEL_F2

#define SEL_F2   (1 << 1)

◆ SEL_F3

#define SEL_F3   (1 << 2)

Function Documentation

◆ addMatrixSpace()

◆ applyTransformOrientation()

void applyTransformOrientation ( const TransformOrientation * ts,
float r_mat[3][3],
char r_name[64] )

◆ armature_bone_transflags_update_recursive()

static int armature_bone_transflags_update_recursive ( bArmature * arm,
ListBase * lb,
const bool do_it )
static

◆ axis_angle_to_gimbal_axis()

static void axis_angle_to_gimbal_axis ( float gmat[3][3],
const float axis[3],
const float angle )
static

Could move into BLI_math_rotation.h however this is only useful for display/editing purposes.

Definition at line 249 of file transform_orientations.cc.

References axis_angle_to_quat(), copy_v3_v3(), cross_v3_v3v3(), M_PI_2, mul_qt_v3(), normalize_m3(), and normalize_v3().

Referenced by gimbal_axis_object(), and gimbal_axis_pose().

◆ BIF_clearTransformOrientation()

◆ BIF_countTransformOrientation()

int BIF_countTransformOrientation ( const bContext * C)

Definition at line 530 of file transform_orientations.cc.

References BLI_listbase_count(), and CTX_data_scene().

Referenced by initTransInfo().

◆ BIF_createTransformOrientation()

bool BIF_createTransformOrientation ( bContext * C,
ReportList * reports,
const char * name,
const bool use_view,
const bool activate,
const bool overwrite )

◆ BIF_removeTransformOrientation()

void BIF_removeTransformOrientation ( bContext * C,
TransformOrientation * target )

◆ BIF_removeTransformOrientationIndex()

void BIF_removeTransformOrientationIndex ( bContext * C,
int index )

◆ BIF_selectTransformOrientation()

void BIF_selectTransformOrientation ( bContext * C,
TransformOrientation * target )

◆ bm_mesh_edges_select_get_n()

static uint bm_mesh_edges_select_get_n ( BMesh * bm,
BMEdge ** elems,
const uint n )
static

◆ bm_mesh_elems_select_get_n__internal()

static uint bm_mesh_elems_select_get_n__internal ( BMesh * bm,
BMElem ** elems,
const uint n,
const BMIterType itype,
const char htype )
static

◆ bm_mesh_verts_select_get_n()

static uint bm_mesh_verts_select_get_n ( BMesh * bm,
BMVert ** elems,
const uint n )
static

◆ createBoneSpace()

static TransformOrientation * createBoneSpace ( bContext * C,
ReportList * reports,
const char * name,
const bool overwrite )
static

◆ createCurveSpace()

static TransformOrientation * createCurveSpace ( bContext * C,
ReportList * reports,
const char * name,
const bool overwrite )
static

◆ createMeshSpace()

static TransformOrientation * createMeshSpace ( bContext * C,
ReportList * reports,
const char * name,
const bool overwrite )
static

◆ createObjectSpace()

static TransformOrientation * createObjectSpace ( bContext * C,
ReportList * ,
const char * name,
const bool overwrite )
static

◆ createSpaceNormal()

◆ createSpaceNormalTangent()

bool createSpaceNormalTangent ( float mat[3][3],
const float normal[3],
const float tangent[3] )
Note
To recreate an orientation from the matrix:
  • (plane == mat[1])
  • (normal == mat[2])

Definition at line 408 of file transform_orientations.cc.

References cross_v3_v3v3(), is_zero_v3(), negate_v3_v3(), normalize_v3(), and normalize_v3_v3().

Referenced by createBoneSpace(), createCurveSpace(), createMeshSpace(), createTransCurveVerts(), ED_getTransformOrientationMatrix(), and transform_convert_mesh_islands_calc().

◆ createViewSpace()

◆ ED_getTransformOrientationMatrix()

void ED_getTransformOrientationMatrix ( const Scene * scene,
ViewLayer * view_layer,
const View3D * v3d,
Object * ob,
Object * obedit,
const short around,
float r_orientation_mat[3][3] )

◆ ED_transform_calc_orientation_from_type()

◆ ED_transform_calc_orientation_from_type_ex()

short ED_transform_calc_orientation_from_type_ex ( const Scene * scene,
ViewLayer * view_layer,
const View3D * v3d,
const RegionView3D * rv3d,
Object * ob,
Object * obedit,
short orientation_index,
int pivot_point,
float r_mat[3][3] )

◆ findOrientationName()

static TransformOrientation * findOrientationName ( ListBase * lb,
const char * name )
static

Definition at line 72 of file transform_orientations.cc.

References BLI_findstring(), and offsetof.

Referenced by addMatrixSpace(), and uniqueOrientationNameCheck().

◆ getTransformOrientation()

◆ getTransformOrientation_ex()

int getTransformOrientation_ex ( const Scene * scene,
ViewLayer * view_layer,
const View3D * v3d,
Object * ob,
Object * obedit,
float normal[3],
float plane[3],
const short around )

Logic explained:

  • Edges and vert-pairs treated the same way.
  • Point the Y axis along the edge vector (towards the active vertex).
  • Point the Z axis outwards (the same direction as the normals).
Note
Z points outwards - along the normal. take care making changes here, see: #38592, #43708

Definition at line 896 of file transform_orientations.cc.

References bArmature::act_edbone, add_v3_v3(), add_v3_v3v3(), ANIM_bonecoll_is_visible_editbone(), armature_bone_transflags_update_recursive(), BASE_SELECTED, Nurb::bezt, BKE_curve_editNurbs_get(), BKE_curve_nurb_vert_active_get(), BKE_editmesh_from_object(), BKE_nurb_bezt_calc_normal(), BKE_nurb_bezt_calc_plane(), BKE_nurb_bpoint_calc_normal(), BKE_nurb_bpoint_calc_plane(), BKE_nurb_bpoint_get_next(), BKE_nurb_bpoint_get_prev(), BKE_pose_channel_active_if_bonecoll_visible(), BKE_view_layer_base_find(), BKE_view_layer_synced_ensure(), BLI_assert, BMEditMesh::bm, BM_EDGE, BM_edge_calc_length_squared(), BM_edge_exists(), BM_edge_is_boundary(), BM_edge_ordered_verts(), BM_edge_other_vert(), BM_editselection_normal(), BM_editselection_plane(), BM_elem_flag_test, BM_ELEM_SELECT, BM_FACE, BM_face_calc_tangent_auto(), BM_FACES_OF_MESH, BM_ITER_MESH, BM_mesh_active_vert_get(), bm_mesh_edges_select_get_n(), bm_mesh_verts_select_get_n(), BM_select_history_active_get(), BM_VERT, BM_vert_edge_pair(), BM_vert_tri_calc_tangent_edge(), BM_VERTS_OF_MESH, bPoseChannel::bone, BONE_CONNECTED, BONE_ROOTSEL, BONE_SELECTED, BONE_TIPSEL, BONE_TRANSFORM, bArmature::bonebase, Nurb::bp, bPose::chanbase, BMVert::co, copy_m3_m4(), copy_v3_v3(), CU_BEZIER, CURVE_HANDLE_NONE, Object::data, dot_v3v3(), e, ED_armature_ebone_to_mat3(), bArmature::edbo, MetaBall::editelems, ELEM, BezTriple::f1, BPoint::f1, BezTriple::f2, BezTriple::f3, ListBase::first, Bone::flag, EditBone::flag, flag, MetaElem::flag, View3DOverlay::handle_display, BMEditSelection::htype, invert_m3_m3(), is_zero_v3(), BMEdge::l, l, MetaBall::lastelem, LIKELY, LISTBASE_FOREACH, Object::mode, mul_m3_v3(), mul_mat3_m4_v3(), negate_v3(), Nurb::next, BMFace::no, BMVert::no, normal_tri_v3(), normalize_v3(), OB_ARMATURE, OB_CURVES_LEGACY, OB_MBALL, OB_MESH, OB_MODE_ALL_PAINT, OB_MODE_PARTICLE_EDIT, OB_MODE_POSE, OB_SURF, ORIENTATION_EDGE, ORIENTATION_FACE, ORIENTATION_NONE, ORIENTATION_NORMAL, ORIENTATION_VERT, ortho_v3_v3(), View3D::overlay, EditBone::parent, Nurb::pntsu, Nurb::pntsv, Object::pose, bPoseChannel::pose_mat, project_plane_normalized_v3_v3v3(), project_v3_v3v3(), MetaElem::quat, quat_to_mat3(), result, SEL_F1, SEL_F2, SEL_F3, SELECT, sub_v3_v3(), sub_v3_v3v3(), BMesh::totedgesel, BMesh::totfacesel, BMesh::totvertsel, transpose_m3(), Nurb::type, Object::type, UNLIKELY, BMLoop::v, v, BMEdge::v1, BMEdge::v2, V3D_AROUND_ACTIVE, V3D_AROUND_LOCAL_ORIGINS, BezTriple::vec, BPoint::vec, and zero_v3().

Referenced by ED_getTransformOrientationMatrix(), and getTransformOrientation().

◆ gimbal_axis_object()

◆ gimbal_axis_pose()

◆ handle_armature_parent_orientation()

static void handle_armature_parent_orientation ( Object * ob,
float r_mat[3][3] )
static

◆ handle_object_parent_orientation()

static void handle_object_parent_orientation ( Object * ob,
float r_mat[3][3] )
static

◆ test_rotmode_euler()

static bool test_rotmode_euler ( short rotmode)
static

Definition at line 241 of file transform_orientations.cc.

References ELEM, false, ROT_MODE_AXISANGLE, and ROT_MODE_QUAT.

Referenced by gimbal_axis_object(), and gimbal_axis_pose().

◆ transform_orientation_matrix_get()

◆ transform_orientations_create_from_axis()

bool transform_orientations_create_from_axis ( float mat[3][3],
const float x[3],
const float y[3],
const float z[3] )

◆ transform_orientations_current_set()

◆ transform_orientations_spacename_get()

◆ uniqueOrientationName()

static void uniqueOrientationName ( ListBase * lb,
char * name )
static

◆ uniqueOrientationNameCheck()

static bool uniqueOrientationNameCheck ( void * arg,
const char * name )
static

Definition at line 78 of file transform_orientations.cc.

References findOrientationName().

Referenced by uniqueOrientationName().