Blender V4.3
transform_mode_align.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2001-2002 NaN Holding BV. All rights reserved.
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#include <cstdlib>
10
11#include "ED_screen.hh"
12
13#include "BLI_math_matrix.h"
14#include "BLI_math_vector.h"
15
16#include "BLT_translation.hh"
17
18#include "transform.hh"
19#include "transform_convert.hh"
20
21#include "transform_mode.hh"
22
23/* -------------------------------------------------------------------- */
27static void applyAlign(TransInfo *t)
28{
29 float center[3];
30 int i;
31
33 /* Saving original center. */
34 copy_v3_v3(center, tc->center_local);
35 TransData *td = tc->data;
36 for (i = 0; i < tc->data_len; i++, td++) {
37 float mat[3][3], invmat[3][3];
38
39 if (td->flag & TD_SKIP) {
40 continue;
41 }
42
43 /* Around local centers. */
44 if (t->options & (CTX_OBJECT | CTX_POSE_BONE)) {
45 copy_v3_v3(tc->center_local, td->center);
46 }
47 else {
49 copy_v3_v3(tc->center_local, td->center);
50 }
51 }
52
53 invert_m3_m3(invmat, td->axismtx);
54
55 mul_m3_m3m3(mat, t->spacemtx, invmat);
56
57 ElementRotation(t, tc, td, mat, t->around);
58 }
59 /* Restoring original center. */
60 copy_v3_v3(tc->center_local, center);
61 }
62
63 recalc_data(t);
64
65 ED_area_status_text(t->area, IFACE_("Align"));
66}
67
68static void initAlign(TransInfo *t, wmOperator * /*op*/)
69{
71}
72
76 /*flags*/ T_NO_CONSTRAINT,
77 /*init_fn*/ initAlign,
78 /*transform_fn*/ applyAlign,
79 /*transform_matrix_fn*/ nullptr,
80 /*handle_event_fn*/ nullptr,
81 /*snap_distance_fn*/ nullptr,
82 /*snap_apply_fn*/ nullptr,
83 /*draw_fn*/ nullptr,
84};
bool invert_m3_m3(float inverse[3][3], const float mat[3][3])
void mul_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3])
MINLINE void copy_v3_v3(float r[3], const float a[3])
#define IFACE_(msgid)
@ SCE_SELECT_FACE
void ED_area_status_text(ScrArea *area, const char *str)
Definition area.cc:803
float axismtx[3][3]
short around
Definition transform.hh:580
ToolSettings * settings
Definition transform.hh:656
MouseInput mouse
Definition transform.hh:543
float spacemtx[3][3]
Definition transform.hh:592
eTContext options
Definition transform.hh:521
ScrArea * area
Definition transform.hh:651
@ INPUT_NONE
Definition transform.hh:741
@ CTX_POSE_BONE
Definition transform.hh:73
@ CTX_OBJECT
Definition transform.hh:71
@ T_NO_CONSTRAINT
Definition transform.hh:95
void initMouseInputMode(TransInfo *t, MouseInput *mi, MouseInputMode mode)
#define FOREACH_TRANS_DATA_CONTAINER(t, th)
Definition transform.hh:854
void recalc_data(TransInfo *t)
conversion and adaptation of different datablocks to a common struct.
@ TD_SKIP
void ElementRotation(const TransInfo *t, const TransDataContainer *tc, TransData *td, const float mat[3][3], const short around)
transform modes used by different operators.
TransModeInfo TransMode_align
static void initAlign(TransInfo *t, wmOperator *)
static void applyAlign(TransInfo *t)