Cleanup: pep8
[blender.git] / source / blender / editors / transform / transform_convert_sculpt.c
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
17  * All rights reserved.
18  */
19
20 /** \file
21  * \ingroup edtransform
22  */
23
24 #include "DNA_space_types.h"
25
26 #include "MEM_guardedalloc.h"
27
28 #include "BLI_math.h"
29
30 #include "BKE_context.h"
31 #include "BKE_report.h"
32 #include "BKE_scene.h"
33 #include "BKE_paint.h"
34
35 #include "transform.h"
36 #include "transform_convert.h"
37
38 /* -------------------------------------------------------------------- */
39 /** \name Sculpt Transform Creation
40  *
41  * \{ */
42
43 void createTransSculpt(TransInfo *t)
44 {
45   TransData *td;
46
47   Scene *scene = t->scene;
48   if (ID_IS_LINKED(scene)) {
49     BKE_report(t->reports, RPT_ERROR, "Linked data can't text-space transform");
50     return;
51   }
52
53   Object *ob = CTX_data_active_object(t->context);
54   SculptSession *ss = ob->sculpt;
55
56   {
57     BLI_assert(t->data_container_len == 1);
58     TransDataContainer *tc = t->data_container;
59     tc->data_len = 1;
60     tc->is_active = 1;
61     td = tc->data = MEM_callocN(sizeof(TransData), "TransSculpt");
62     td->ext = tc->data_ext = MEM_callocN(sizeof(TransDataExtension), "TransSculpt");
63   }
64
65   td->flag = TD_SELECTED;
66   copy_v3_v3(td->center, ss->pivot_pos);
67   mul_m4_v3(ob->obmat, td->center);
68   td->ob = ob;
69
70   td->loc = ss->pivot_pos;
71   copy_v3_v3(td->iloc, ss->pivot_pos);
72
73   if (is_zero_v4(ss->pivot_rot)) {
74     ss->pivot_rot[3] = 1.0f;
75   }
76
77   float obmat_inv[3][3];
78   copy_m3_m4(obmat_inv, ob->obmat);
79   invert_m3(obmat_inv);
80
81   td->ext->rot = NULL;
82   td->ext->rotAxis = NULL;
83   td->ext->rotAngle = NULL;
84   td->ext->quat = ss->pivot_rot;
85   copy_m4_m4(td->ext->obmat, ob->obmat);
86   copy_m3_m3(td->ext->l_smtx, obmat_inv);
87   copy_m3_m4(td->ext->r_mtx, ob->obmat);
88   copy_m3_m3(td->ext->r_smtx, obmat_inv);
89
90   copy_qt_qt(td->ext->iquat, ss->pivot_rot);
91   td->ext->rotOrder = ROT_MODE_QUAT;
92
93   ss->pivot_scale[0] = 1.0f;
94   ss->pivot_scale[1] = 1.0f;
95   ss->pivot_scale[2] = 1.0f;
96   td->ext->size = ss->pivot_scale;
97   copy_v3_v3(ss->init_pivot_scale, ss->pivot_scale);
98   copy_v3_v3(td->ext->isize, ss->init_pivot_scale);
99
100   copy_m3_m3(td->smtx, obmat_inv);
101   copy_m3_m4(td->mtx, ob->obmat);
102   copy_m3_m4(td->axismtx, ob->obmat);
103 }
104
105 /** \} */