Blender V4.3
transform_convert_object_texspace.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 "MEM_guardedalloc.h"
10
11#include "BLI_math_matrix.h"
12#include "BLI_math_vector.h"
13
14#include "BKE_layer.hh"
15#include "BKE_object.hh"
16#include "BKE_report.hh"
17
18#include "DNA_mesh_types.h"
19
20#include "transform.hh"
21#include "transform_snap.hh"
22
23/* Own include. */
24#include "transform_convert.hh"
25
26/* -------------------------------------------------------------------- */
33static void createTransTexspace(bContext * /*C*/, TransInfo *t)
34{
35 ViewLayer *view_layer = t->view_layer;
36 TransData *td;
37 Object *ob;
38 ID *id;
39 char *texspace_flag;
40
42 ob = BKE_view_layer_active_object_get(view_layer);
43
44 if (ob == nullptr) { /* Shouldn't logically happen, but still. */
45 return;
46 }
47
48 id = static_cast<ID *>(ob->data);
49 if (id == nullptr || !ELEM(GS(id->name), ID_ME, ID_CU_LEGACY, ID_MB)) {
50 BKE_report(t->reports, RPT_ERROR, "Unsupported object type for text-space transform");
51 return;
52 }
53
55 BKE_report(t->reports, RPT_ERROR, "Linked data can't text-space transform");
56 return;
57 }
58
59 {
62 tc->data_len = 1;
63 td = tc->data = static_cast<TransData *>(MEM_callocN(sizeof(TransData), "TransTexspace"));
64 td->ext = tc->data_ext = static_cast<TransDataExtension *>(
65 MEM_callocN(sizeof(TransDataExtension), "TransTexspace"));
66 }
67
68 td->flag = TD_SELECTED;
69 td->ob = ob;
70
71 copy_m3_m4(td->mtx, ob->object_to_world().ptr());
72 copy_m3_m4(td->axismtx, ob->object_to_world().ptr());
75
76 if (BKE_object_obdata_texspace_get(ob, &texspace_flag, &td->loc, &td->ext->size)) {
77 ob->dtx |= OB_TEXSPACE;
78 *texspace_flag &= ~ME_TEXSPACE_FLAG_AUTO;
79 }
80
81 copy_v3_v3(td->iloc, td->loc);
82 copy_v3_v3(td->center, td->loc);
83 copy_v3_v3(td->ext->isize, td->ext->size);
84}
85
88/* -------------------------------------------------------------------- */
93{
94
95 if (t->state != TRANS_CANCEL) {
97 }
98
100 TransData *td = tc->data;
101
102 for (int i = 0; i < tc->data_len; i++, td++) {
103 if (td->flag & TD_SKIP) {
104 continue;
105 }
107 }
108 }
109}
110
114 /*flags*/ 0,
115 /*create_trans_data*/ createTransTexspace,
116 /*recalc_data*/ recalcData_texspace,
117 /*special_aftertrans_update*/ nullptr,
118};
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
Object * BKE_view_layer_active_object_get(const ViewLayer *view_layer)
General operations, lookup, etc. for blender objects.
bool BKE_object_obdata_texspace_get(Object *ob, char **r_texspace_flag, float **r_texspace_location, float **r_texspace_size)
bool BKE_object_obdata_is_libdata(const Object *ob)
void BKE_report(ReportList *reports, eReportType type, const char *message)
Definition report.cc:125
#define BLI_assert(a)
Definition BLI_assert.h:50
void pseudoinverse_m3_m3(float inverse[3][3], const float mat[3][3], float epsilon)
void copy_m3_m4(float m1[3][3], const float m2[4][4])
#define PSEUDOINVERSE_EPSILON
void normalize_m3(float R[3][3]) ATTR_NONNULL()
MINLINE void copy_v3_v3(float r[3], const float a[3])
#define ELEM(...)
void DEG_id_tag_update(ID *id, unsigned int flags)
@ ID_RECALC_GEOMETRY
Definition DNA_ID.h:1041
@ ID_CU_LEGACY
@ ID_ME
@ ID_MB
@ OB_TEXSPACE
Read Guarded memory(de)allocation.
#define GS(x)
Definition iris.cc:202
void *(* MEM_callocN)(size_t len, const char *str)
Definition mallocn.cc:42
Definition DNA_ID.h:413
TransData * data
Definition transform.hh:445
TransDataExtension * data_ext
Definition transform.hh:447
float smtx[3][3]
float axismtx[3][3]
float mtx[3][3]
TransDataExtension * ext
ReportList * reports
Definition transform.hh:661
eTState state
Definition transform.hh:527
Scene * scene
Definition transform.hh:654
ViewLayer * view_layer
Definition transform.hh:655
int data_container_len
Definition transform.hh:506
TransDataContainer * data_container
Definition transform.hh:505
@ TRANS_CANCEL
Definition transform.hh:210
#define FOREACH_TRANS_DATA_CONTAINER(t, th)
Definition transform.hh:854
conversion and adaptation of different datablocks to a common struct.
static void recalcData_texspace(TransInfo *t)
static void createTransTexspace(bContext *, TransInfo *t)
TransConvertTypeInfo TransConvertType_ObjectTexSpace
@ TD_SELECTED
@ TD_SKIP
void transform_snap_project_individual_apply(TransInfo *t)