ClangFormat: apply to source, most of intern
[blender.git] / source / blender / blenkernel / BKE_lattice.h
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 #ifndef __BKE_LATTICE_H__
21 #define __BKE_LATTICE_H__
22
23 /** \file
24  * \ingroup bke
25  */
26
27 #include "BLI_compiler_attrs.h"
28
29 struct BPoint;
30 struct Depsgraph;
31 struct Lattice;
32 struct MDeformVert;
33 struct Main;
34 struct Mesh;
35 struct Object;
36 struct Scene;
37 struct bGPDstroke;
38
39 void BKE_lattice_resize(struct Lattice *lt, int u, int v, int w, struct Object *ltOb);
40 void BKE_lattice_init(struct Lattice *lt);
41 struct Lattice *BKE_lattice_add(struct Main *bmain, const char *name);
42 void BKE_lattice_copy_data(struct Main *bmain,
43                            struct Lattice *lt_dst,
44                            const struct Lattice *lt_src,
45                            const int flag);
46 struct Lattice *BKE_lattice_copy(struct Main *bmain, const struct Lattice *lt);
47 void BKE_lattice_free(struct Lattice *lt);
48 void BKE_lattice_make_local(struct Main *bmain, struct Lattice *lt, const bool lib_local);
49 void calc_lat_fudu(int flag, int res, float *r_fu, float *r_du);
50
51 struct LatticeDeformData *init_latt_deform(struct Object *oblatt,
52                                            struct Object *ob) ATTR_WARN_UNUSED_RESULT;
53 void calc_latt_deform(struct LatticeDeformData *lattice_deform_data, float co[3], float weight);
54 void end_latt_deform(struct LatticeDeformData *lattice_deform_data);
55
56 bool object_deform_mball(struct Object *ob, struct ListBase *dispbase);
57 void outside_lattice(struct Lattice *lt);
58
59 void curve_deform_verts(struct Object *cuOb,
60                         struct Object *target,
61                         float (*vertexCos)[3],
62                         int numVerts,
63                         struct MDeformVert *dvert,
64                         const int defgrp_index,
65                         short defaxis);
66 void curve_deform_vector(struct Object *cuOb,
67                          struct Object *target,
68                          float orco[3],
69                          float vec[3],
70                          float mat[3][3],
71                          int no_rot_axis);
72
73 void lattice_deform_verts(struct Object *laOb,
74                           struct Object *target,
75                           struct Mesh *mesh,
76                           float (*vertexCos)[3],
77                           int numVerts,
78                           const char *vgroup,
79                           float influence);
80 void armature_deform_verts(struct Object *armOb,
81                            struct Object *target,
82                            const struct Mesh *mesh,
83                            float (*vertexCos)[3],
84                            float (*defMats)[3][3],
85                            int numVerts,
86                            int deformflag,
87                            float (*prevCos)[3],
88                            const char *defgrp_name,
89                            struct bGPDstroke *gps);
90
91 float (*BKE_lattice_vertexcos_get(struct Object *ob, int *r_numVerts))[3];
92 void BKE_lattice_vertexcos_apply(struct Object *ob, float (*vertexCos)[3]);
93 void BKE_lattice_modifiers_calc(struct Depsgraph *depsgraph,
94                                 struct Scene *scene,
95                                 struct Object *ob);
96
97 struct MDeformVert *BKE_lattice_deform_verts_get(struct Object *lattice);
98 struct BPoint *BKE_lattice_active_point_get(struct Lattice *lt);
99
100 struct BoundBox *BKE_lattice_boundbox_get(struct Object *ob);
101 void BKE_lattice_minmax_dl(struct Object *ob, struct Lattice *lt, float min[3], float max[3]);
102 void BKE_lattice_minmax(struct Lattice *lt, float min[3], float max[3]);
103 void BKE_lattice_center_median(struct Lattice *lt, float cent[3]);
104 void BKE_lattice_center_bounds(struct Lattice *lt, float cent[3]);
105 void BKE_lattice_translate(struct Lattice *lt, float offset[3], bool do_keys);
106 void BKE_lattice_transform(struct Lattice *lt, float mat[4][4], bool do_keys);
107
108 bool BKE_lattice_is_any_selected(const struct Lattice *lt);
109
110 int BKE_lattice_index_from_uvw(struct Lattice *lt, const int u, const int v, const int w);
111 void BKE_lattice_index_to_uvw(struct Lattice *lt, const int index, int *r_u, int *r_v, int *r_w);
112 int BKE_lattice_index_flip(
113     struct Lattice *lt, const int index, const bool flip_u, const bool flip_v, const bool flip_w);
114 void BKE_lattice_bitmap_from_flag(struct Lattice *lt,
115                                   unsigned int *bitmap,
116                                   const short flag,
117                                   const bool clear,
118                                   const bool respecthide);
119
120 /* **** Depsgraph evaluation **** */
121
122 struct Depsgraph;
123
124 void BKE_lattice_eval_geometry(struct Depsgraph *depsgraph, struct Lattice *latt);
125
126 /* Draw Cache */
127 enum {
128   BKE_LATTICE_BATCH_DIRTY_ALL = 0,
129   BKE_LATTICE_BATCH_DIRTY_SELECT,
130 };
131 void BKE_lattice_batch_cache_dirty_tag(struct Lattice *lt, int mode);
132 void BKE_lattice_batch_cache_free(struct Lattice *lt);
133
134 extern void (*BKE_lattice_batch_cache_dirty_tag_cb)(struct Lattice *lt, int mode);
135 extern void (*BKE_lattice_batch_cache_free_cb)(struct Lattice *lt);
136
137 #endif /* __BKE_LATTICE_H__ */