Blender  V2.93
ED_gizmo_library.h
Go to the documentation of this file.
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 
25 #pragma once
26 
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30 
31 /* initialize gizmos */
32 void ED_gizmotypes_arrow_3d(void);
33 void ED_gizmotypes_button_2d(void);
34 void ED_gizmotypes_cage_2d(void);
35 void ED_gizmotypes_cage_3d(void);
36 void ED_gizmotypes_dial_3d(void);
37 void ED_gizmotypes_move_3d(void);
41 void ED_gizmotypes_blank_3d(void);
42 void ED_gizmotypes_snap_3d(void);
43 
44 struct ARegion;
45 struct Depsgraph;
46 struct Object;
47 struct SnapObjectContext;
48 struct View3D;
49 struct bContext;
50 struct wmGizmo;
51 struct wmWindowManager;
52 
53 /* -------------------------------------------------------------------- */
54 /* Shape Presets
55  *
56  * Intended to be called by custom draw functions.
57  */
58 
59 /* gizmo_library_presets.c */
60 void ED_gizmo_draw_preset_box(const struct wmGizmo *gz, float mat[4][4], int select_id);
61 void ED_gizmo_draw_preset_arrow(const struct wmGizmo *gz,
62  float mat[4][4],
63  int axis,
64  int select_id);
65 void ED_gizmo_draw_preset_circle(const struct wmGizmo *gz,
66  float mat[4][4],
67  int axis,
68  int select_id);
70  const struct wmGizmo *gz,
71  struct Object *ob,
72  const int facemap,
73  int select_id);
74 
75 /* -------------------------------------------------------------------- */
76 /* 3D Arrow Gizmo */
77 
78 enum {
83 };
84 
85 /* transform */
86 enum {
87  /* inverted offset during interaction - if set it also sets constrained below */
89  /* clamp arrow interaction to property width */
91 };
92 
93 /* draw_options */
94 enum {
95  /* Show arrow stem. */
97 };
98 
99 void ED_gizmo_arrow3d_set_ui_range(struct wmGizmo *gz, const float min, const float max);
100 void ED_gizmo_arrow3d_set_range_fac(struct wmGizmo *gz, const float range_fac);
101 
102 /* -------------------------------------------------------------------- */
103 /* Cage Gizmo */
104 
105 enum {
106  ED_GIZMO_CAGE2D_XFORM_FLAG_TRANSLATE = (1 << 0), /* Translates */
107  ED_GIZMO_CAGE2D_XFORM_FLAG_ROTATE = (1 << 1), /* Rotates */
108  ED_GIZMO_CAGE2D_XFORM_FLAG_SCALE = (1 << 2), /* Scales */
109  ED_GIZMO_CAGE2D_XFORM_FLAG_SCALE_UNIFORM = (1 << 3), /* Scales uniformly */
110  ED_GIZMO_CAGE2D_XFORM_FLAG_SCALE_SIGNED = (1 << 4), /* Negative scale allowed */
111 };
112 
113 /* draw_style */
114 enum {
117 };
118 
119 /* draw_options */
120 enum {
124 };
125 
127 enum {
133  /* Corners */
138 
140 };
141 
143 enum {
144  /* ordered min/mid/max so we can loop over values (MIN/MID/MAX) on each axis. */
172 
174 
176 };
177 
178 /* -------------------------------------------------------------------- */
179 /* Dial Gizmo */
180 
181 /* draw_options */
182 enum {
189  /* Always show the angle value as an arc in the dial. */
191 };
192 
193 /* -------------------------------------------------------------------- */
194 /* Move Gizmo */
195 
196 /* draw_options */
197 enum {
199  /* only for solid shapes */
203 };
204 
205 enum {
208 };
209 
210 /* -------------------------------------------------------------------- */
211 /* Button Gizmo */
212 
213 enum {
221 };
222 
223 /* -------------------------------------------------------------------- */
224 /* Primitive Gizmo */
225 
226 enum {
228 };
229 
230 /* -------------------------------------------------------------------- */
231 /* Specific gizmos utils */
232 
233 /* dial3d_gizmo.c */
234 struct Dial3dParams {
236  float angle_ofs;
237  float angle_delta;
241  float *clip_plane;
242 };
243 void ED_gizmotypes_dial_3d_draw_util(const float matrix_basis[4][4],
244  const float matrix_final[4][4],
245  const float line_width,
246  const float color[4],
247  const bool select,
248  struct Dial3dParams *params);
249 
250 /* snap3d_gizmo.c */
251 #define USE_SNAP_DETECT_FROM_KEYMAP_HACK
253  const float loc_prev[3],
254  const float loc_curr[3],
255  const float normal[3],
256  const uchar color_line[4],
257  const uchar color_point[4],
258  const short snap_elem_type);
260  const struct ARegion *region,
261  const struct View3D *v3d,
262  struct wmGizmo *gz);
263 
264 typedef enum {
266 } eSnapGizmo;
267 
271 
274 
276  struct Depsgraph *depsgraph,
277  const struct ARegion *region,
278  const struct View3D *v3d,
279  const struct wmWindowManager *wm,
280  const float mval_fl[2]);
282  struct wmGizmo *gz, float r_loc[3], float r_nor[3], int r_elem_index[3], int *r_snap_elem);
283 
284 #ifdef __cplusplus
285 }
286 #endif
unsigned char uchar
Definition: BLI_sys_types.h:86
struct Depsgraph Depsgraph
Definition: DEG_depsgraph.h:51
bool ED_gizmotypes_snap_3d_flag_test(struct wmGizmo *gz, eSnapGizmo flag)
Definition: snap3d_gizmo.c:296
@ ED_GIZMO_MOVE_STYLE_CROSS_2D
@ ED_GIZMO_MOVE_STYLE_RING_2D
void ED_gizmo_draw_preset_circle(const struct wmGizmo *gz, float mat[4][4], int axis, int select_id)
void ED_gizmotypes_snap_3d_draw_util(struct RegionView3D *rv3d, const float loc_prev[3], const float loc_curr[3], const float normal[3], const uchar color_line[4], const uchar color_point[4], const short snap_elem_type)
Definition: snap3d_gizmo.c:181
void ED_gizmo_arrow3d_set_ui_range(struct wmGizmo *gz, const float min, const float max)
void ED_gizmotypes_facemap_3d(void)
@ ED_GIZMO_PRIMITIVE_STYLE_PLANE
void ED_gizmo_draw_preset_arrow(const struct wmGizmo *gz, float mat[4][4], int axis, int select_id)
@ ED_GIZMO_CAGE2D_PART_SCALE_MIN_X_MAX_Y
@ ED_GIZMO_CAGE2D_PART_TRANSLATE
@ ED_GIZMO_CAGE2D_PART_ROTATE
@ ED_GIZMO_CAGE2D_PART_SCALE_MAX_Y
@ ED_GIZMO_CAGE2D_PART_SCALE_MAX_X_MAX_Y
@ ED_GIZMO_CAGE2D_PART_SCALE_MIN_X
@ ED_GIZMO_CAGE2D_PART_SCALE_MAX_X_MIN_Y
@ ED_GIZMO_CAGE2D_PART_SCALE_MAX_X
@ ED_GIZMO_CAGE2D_PART_SCALE_MIN_X_MIN_Y
@ ED_GIZMO_CAGE2D_PART_SCALE_MIN_Y
bool ED_gizmotypes_snap_3d_invert_snap_get(struct wmGizmo *gz)
Definition: snap3d_gizmo.c:302
void ED_gizmotypes_move_3d(void)
Definition: move3d_gizmo.c:478
eSnapGizmo
@ ED_SNAPGIZMO_TOGGLE_ALWAYS_TRUE
@ ED_GIZMO_CAGE2D_STYLE_BOX
@ ED_GIZMO_CAGE2D_STYLE_CIRCLE
void ED_gizmotypes_primitive_3d(void)
void ED_gizmotypes_snap_3d_data_get(struct wmGizmo *gz, float r_loc[3], float r_nor[3], int r_elem_index[3], int *r_snap_elem)
Definition: snap3d_gizmo.c:412
@ ED_GIZMO_ARROW_XFORM_FLAG_CONSTRAINED
@ ED_GIZMO_ARROW_XFORM_FLAG_INVERTED
void ED_gizmotypes_blank_3d(void)
Definition: blank3d_gizmo.c:73
void ED_gizmo_arrow3d_set_range_fac(struct wmGizmo *gz, const float range_fac)
@ ED_GIZMO_ARROW_DRAW_FLAG_STEM
void ED_gizmotypes_arrow_3d(void)
void ED_gizmotypes_dial_3d_draw_util(const float matrix_basis[4][4], const float matrix_final[4][4], const float line_width, const float color[4], const bool select, struct Dial3dParams *params)
Definition: dial3d_gizmo.c:600
void ED_gizmotypes_snap_3d_flag_clear(struct wmGizmo *gz, eSnapGizmo flag)
Definition: snap3d_gizmo.c:290
void ED_gizmo_draw_preset_box(const struct wmGizmo *gz, float mat[4][4], int select_id)
void ED_gizmotypes_button_2d(void)
@ ED_GIZMO_CAGE2D_DRAW_FLAG_XFORM_CENTER_HANDLE
void ED_gizmotypes_preselect_3d(void)
short ED_gizmotypes_snap_3d_update(struct wmGizmo *gz, struct Depsgraph *depsgraph, const struct ARegion *region, const struct View3D *v3d, const struct wmWindowManager *wm, const float mval_fl[2])
void ED_gizmotypes_dial_3d(void)
Definition: dial3d_gizmo.c:706
void ED_gizmotypes_cage_3d(void)
Definition: cage3d_gizmo.c:697
void ED_gizmotypes_snap_3d(void)
Definition: snap3d_gizmo.c:768
bool ED_gizmotypes_snap_3d_is_enabled(struct wmGizmo *gz)
Definition: snap3d_gizmo.c:312
void ED_gizmotypes_snap_3d_flag_set(struct wmGizmo *gz, eSnapGizmo flag)
Definition: snap3d_gizmo.c:284
@ ED_GIZMO_MOVE_DRAW_FLAG_FILL_SELECT
@ ED_GIZMO_MOVE_DRAW_FLAG_FILL
@ ED_GIZMO_MOVE_DRAW_FLAG_ALIGN_VIEW
@ ED_GIZMO_MOVE_DRAW_FLAG_NOP
@ ED_GIZMO_ARROW_STYLE_CROSS
@ ED_GIZMO_ARROW_STYLE_BOX
@ ED_GIZMO_ARROW_STYLE_NORMAL
@ ED_GIZMO_ARROW_STYLE_CONE
void ED_gizmotypes_cage_2d(void)
@ ED_GIZMO_CAGE2D_XFORM_FLAG_TRANSLATE
@ ED_GIZMO_CAGE2D_XFORM_FLAG_SCALE_SIGNED
@ ED_GIZMO_CAGE2D_XFORM_FLAG_SCALE
@ ED_GIZMO_CAGE2D_XFORM_FLAG_ROTATE
@ ED_GIZMO_CAGE2D_XFORM_FLAG_SCALE_UNIFORM
@ ED_GIZMO_DIAL_DRAW_FLAG_ANGLE_MIRROR
@ ED_GIZMO_DIAL_DRAW_FLAG_FILL_SELECT
@ ED_GIZMO_DIAL_DRAW_FLAG_FILL
@ ED_GIZMO_DIAL_DRAW_FLAG_NOP
@ ED_GIZMO_DIAL_DRAW_FLAG_ANGLE_START_Y
@ ED_GIZMO_DIAL_DRAW_FLAG_ANGLE_VALUE
@ ED_GIZMO_DIAL_DRAW_FLAG_CLIP
@ ED_GIZMO_CAGE3D_PART_SCALE_MID_X_MID_Y_MIN_Z
@ ED_GIZMO_CAGE3D_PART_SCALE_MID_X_MAX_Y_MIN_Z
@ ED_GIZMO_CAGE3D_PART_SCALE_MID_X_MID_Y_MID_Z
@ ED_GIZMO_CAGE3D_PART_SCALE_MID_X_MAX_Y_MID_Z
@ ED_GIZMO_CAGE3D_PART_SCALE_MAX_X_MIN_Y_MAX_Z
@ ED_GIZMO_CAGE3D_PART_SCALE_MIN_X_MAX_Y_MIN_Z
@ ED_GIZMO_CAGE3D_PART_SCALE_MIN_X_MIN_Y_MID_Z
@ ED_GIZMO_CAGE3D_PART_SCALE_MIN_X_MIN_Y_MIN_Z
@ ED_GIZMO_CAGE3D_PART_SCALE_MIN_X_MAX_Y_MAX_Z
@ ED_GIZMO_CAGE3D_PART_SCALE_MID_X_MIN_Y_MAX_Z
@ ED_GIZMO_CAGE3D_PART_SCALE_MIN_X_MAX_Y_MID_Z
@ ED_GIZMO_CAGE3D_PART_SCALE_MIN_X_MID_Y_MAX_Z
@ ED_GIZMO_CAGE3D_PART_SCALE_MAX_X_MID_Y_MID_Z
@ ED_GIZMO_CAGE3D_PART_SCALE_MID_X_MIN_Y_MIN_Z
@ ED_GIZMO_CAGE3D_PART_SCALE_MID_X_MID_Y_MAX_Z
@ ED_GIZMO_CAGE3D_PART_SCALE_MAX_X_MIN_Y_MID_Z
@ ED_GIZMO_CAGE3D_PART_SCALE_MAX_X_MAX_Y_MIN_Z
@ ED_GIZMO_CAGE3D_PART_ROTATE
@ ED_GIZMO_CAGE3D_PART_SCALE_MAX_X_MAX_Y_MAX_Z
@ ED_GIZMO_CAGE3D_PART_TRANSLATE
@ ED_GIZMO_CAGE3D_PART_SCALE_MIN_X_MID_Y_MID_Z
@ ED_GIZMO_CAGE3D_PART_SCALE_MID_X_MAX_Y_MAX_Z
@ ED_GIZMO_CAGE3D_PART_SCALE_MID_X_MIN_Y_MID_Z
@ ED_GIZMO_CAGE3D_PART_SCALE_MIN_X_MIN_Y_MAX_Z
@ ED_GIZMO_CAGE3D_PART_SCALE_MAX_X_MID_Y_MIN_Z
@ ED_GIZMO_CAGE3D_PART_SCALE_MAX_X_MAX_Y_MID_Z
@ ED_GIZMO_CAGE3D_PART_SCALE_MAX_X_MID_Y_MAX_Z
@ ED_GIZMO_CAGE3D_PART_SCALE_MIN_X_MID_Y_MIN_Z
@ ED_GIZMO_CAGE3D_PART_SCALE_MAX_X_MIN_Y_MIN_Z
@ ED_GIZMO_BUTTON_SHOW_BACKDROP
@ ED_GIZMO_BUTTON_SHOW_OUTLINE
@ ED_GIZMO_BUTTON_SHOW_HELPLINE
void ED_gizmo_draw_preset_facemap(const struct bContext *C, const struct wmGizmo *gz, struct Object *ob, const int facemap, int select_id)
struct SnapObjectContext * ED_gizmotypes_snap_3d_context_ensure(struct Scene *scene, const struct ARegion *region, const struct View3D *v3d, struct wmGizmo *gz)
const int facemap[6][4]
Definition: Projections.cpp:57
#define C
Definition: RandGen.cpp:39
Scene scene
const Depsgraph * depsgraph
IconTextureDrawCall normal
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
#define min(a, b)
Definition: sort.c:51
const struct ARegion * region
const struct View3D * v3d
float max
__forceinline const avxb select(const avxb &m, const avxb &t, const avxb &f)
Definition: util_avxb.h:167