Blender V4.5
transform_convert_sculpt.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
8
9#include "MEM_guardedalloc.h"
10
11#include "BLI_math_matrix.h"
12#include "BLI_math_rotation.h"
13#include "BLI_math_vector.h"
14
15#include "BKE_context.hh"
16#include "BKE_layer.hh"
17#include "BKE_lib_id.hh"
18#include "BKE_paint.hh"
19#include "BKE_report.hh"
20
21#include "ED_sculpt.hh"
22
23#include "transform.hh"
24#include "transform_convert.hh"
25
26namespace blender::ed::transform {
27
28/* -------------------------------------------------------------------- */
31
33{
34 TransData *td;
35
36 Scene *scene = t->scene;
37 if (!BKE_id_is_editable(CTX_data_main(C), &scene->id)) {
38 BKE_report(t->reports, RPT_ERROR, "Linked data can't text-space transform");
39 return;
40 }
41
44 SculptSession &ss = *ob.sculpt;
45
46 /* Avoid editing locked shapes. */
48 return;
49 }
50
51 {
54 tc->data_len = 1;
55 tc->is_active = true;
56 td = tc->data = MEM_callocN<TransData>(__func__);
57 td->ext = tc->data_ext = MEM_callocN<TransDataExtension>(__func__);
58 }
59
60 td->flag = TD_SELECTED;
62 mul_m4_v3(ob.object_to_world().ptr(), td->center);
63
64 td->loc = ss.pivot_pos;
65 copy_v3_v3(td->iloc, ss.pivot_pos);
66
67 if (is_zero_v4(ss.pivot_rot)) {
68 ss.pivot_rot[3] = 1.0f;
69 }
70
71 float obmat_inv[3][3];
72 copy_m3_m4(obmat_inv, ob.object_to_world().ptr());
73 invert_m3(obmat_inv);
74
75 td->ext->rot = nullptr;
76 td->ext->rotAxis = nullptr;
77 td->ext->rotAngle = nullptr;
78 td->ext->quat = ss.pivot_rot;
79 copy_m4_m4(td->ext->obmat, ob.object_to_world().ptr());
80 copy_m3_m3(td->ext->l_smtx, obmat_inv);
81 copy_m3_m4(td->ext->r_mtx, ob.object_to_world().ptr());
82 copy_m3_m3(td->ext->r_smtx, obmat_inv);
83
84 copy_qt_qt(td->ext->iquat, ss.pivot_rot);
86
87 ss.pivot_scale[0] = 1.0f;
88 ss.pivot_scale[1] = 1.0f;
89 ss.pivot_scale[2] = 1.0f;
90 td->ext->scale = ss.pivot_scale;
93
94 copy_m3_m3(td->smtx, obmat_inv);
95 copy_m3_m4(td->mtx, ob.object_to_world().ptr());
96 copy_m3_m4(td->axismtx, ob.object_to_world().ptr());
98
101}
102
104
105/* -------------------------------------------------------------------- */
108
121
123{
124 Scene *scene = t->scene;
125 if (!BKE_id_is_editable(CTX_data_main(C), &scene->id)) {
126 /* `sculpt_paint::init_transform` was not called in this case. */
127 return;
128 }
129
134}
135
137
139 /*flags*/ 0,
140 /*create_trans_data*/ createTransSculpt,
141 /*recalc_data*/ recalcData_sculpt,
142 /*special_aftertrans_update*/ special_aftertrans_update__sculpt,
143};
144
145} // namespace blender::ed::transform
Main * CTX_data_main(const bContext *C)
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
Object * BKE_view_layer_active_object_get(const ViewLayer *view_layer)
bool BKE_id_is_editable(const Main *bmain, const ID *id)
Definition lib_id.cc:2503
void BKE_report(ReportList *reports, eReportType type, const char *message)
Definition report.cc:126
#define BLI_assert(a)
Definition BLI_assert.h:46
void copy_m3_m3(float m1[3][3], const float m2[3][3])
void copy_m3_m4(float m1[3][3], const float m2[4][4])
void normalize_m3(float R[3][3]) ATTR_NONNULL()
void mul_m4_v3(const float M[4][4], float r[3])
void copy_m4_m4(float m1[4][4], const float m2[4][4])
bool invert_m3(float mat[3][3])
void copy_qt_qt(float q[4], const float a[4])
MINLINE bool is_zero_v4(const float v[4]) ATTR_WARN_UNUSED_RESULT
MINLINE void copy_v3_v3(float r[3], const float a[3])
@ ROT_MODE_QUAT
Read Guarded memory(de)allocation.
#define C
Definition RandGen.cpp:29
void * MEM_callocN(size_t len, const char *str)
Definition mallocn.cc:118
void update_modal_transform(bContext *C, Object &ob)
void end_transform(bContext *C, Object &ob)
void init_transform(bContext *C, Object &ob, const float mval_fl[2], const char *undo_name)
bool report_if_shape_key_is_locked(const Object &ob, ReportList *reports)
Definition sculpt.cc:128
void cancel_modal_transform(bContext *C, Object &ob)
static void recalcData_sculpt(TransInfo *t)
static void createTransSculpt(bContext *C, TransInfo *t)
TransConvertTypeInfo TransConvertType_Sculpt
static void special_aftertrans_update__sculpt(bContext *C, TransInfo *t)
struct SculptSession * sculpt
blender::float4 pivot_rot
Definition BKE_paint.hh:487
blender::float3 pivot_pos
Definition BKE_paint.hh:486
blender::float3 pivot_scale
Definition BKE_paint.hh:488
blender::float3 init_pivot_scale
Definition BKE_paint.hh:492
TransDataContainer * data_container
Definition transform.hh:797
conversion and adaptation of different datablocks to a common struct.