Cleanup: remove redundant doxygen \file argument
[blender.git] / source / blender / editors / include / ED_transform_snap_object_context.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
17 /** \file \ingroup editors
18  */
19
20 #ifndef __ED_TRANSFORM_SNAP_OBJECT_CONTEXT_H__
21 #define __ED_TRANSFORM_SNAP_OBJECT_CONTEXT_H__
22
23 struct BMEdge;
24 struct BMFace;
25 struct BMVert;
26
27 struct ARegion;
28 struct Depsgraph;
29 struct ListBase;
30 struct Main;
31 struct Object;
32 struct Scene;
33 struct View3D;
34 struct ViewLayer;
35 struct bContext;
36
37 /* transform_snap_object.c */
38
39 /* ED_transform_snap_object_*** API */
40
41 typedef enum eSnapSelect {
42         SNAP_ALL = 0,
43         SNAP_NOT_SELECTED = 1,
44         SNAP_NOT_ACTIVE = 2,
45 } eSnapSelect;
46
47 /** used for storing multiple hits */
48 struct SnapObjectHitDepth {
49         struct SnapObjectHitDepth *next, *prev;
50
51         float depth;
52         float co[3];
53         float no[3];
54         int index;
55
56         struct Object *ob;
57         float obmat[4][4];
58
59         /* needed to tell which ray-cast this was part of,
60          * the same object may be part of many ray-casts when dupli's are used. */
61         unsigned int ob_uuid;
62 };
63
64 /** parameters that define which objects will be used to snap. */
65 struct SnapObjectParams {
66         /* special context sensitive handling for the active or selected object */
67         char snap_select;
68         /* use editmode cage */
69         unsigned int use_object_edit_cage : 1;
70         /* snap to the closest element, use when using more than one snap type */
71         unsigned int use_occlusion_test   : 1;
72 };
73
74 typedef struct SnapObjectContext SnapObjectContext;
75 SnapObjectContext *ED_transform_snap_object_context_create(
76         struct Main *bmain, struct Scene *scene, struct Depsgraph *depsgraph, int flag);
77 SnapObjectContext *ED_transform_snap_object_context_create_view3d(
78         struct Main *bmain, struct Scene *scene, struct Depsgraph *depsgraph, int flag,
79         /* extra args for view3d */
80         const struct ARegion *ar, const struct View3D *v3d);
81 void ED_transform_snap_object_context_destroy(SnapObjectContext *sctx);
82
83 /* callbacks to filter how snap works */
84 void ED_transform_snap_object_context_set_editmesh_callbacks(
85         SnapObjectContext *sctx,
86         bool (*test_vert_fn)(struct BMVert *, void *user_data),
87         bool (*test_edge_fn)(struct BMEdge *, void *user_data),
88         bool (*test_face_fn)(struct BMFace *, void *user_data),
89         void *user_data);
90
91 bool ED_transform_snap_object_project_ray_ex(
92         struct SnapObjectContext *sctx,
93         const struct SnapObjectParams *params,
94         const float ray_start[3], const float ray_normal[3], float *ray_depth,
95         /* return args */
96         float r_loc[3], float r_no[3], int *r_index,
97         struct Object **r_ob, float r_obmat[4][4]);
98 bool ED_transform_snap_object_project_ray(
99         SnapObjectContext *sctx,
100         const struct SnapObjectParams *params,
101         const float ray_origin[3], const float ray_direction[3], float *ray_depth,
102         float r_co[3], float r_no[3]);
103
104 bool ED_transform_snap_object_project_ray_all(
105         SnapObjectContext *sctx,
106         const struct SnapObjectParams *params,
107         const float ray_start[3], const float ray_normal[3],
108         float ray_depth, bool sort,
109         struct ListBase *r_hit_list);
110
111 bool ED_transform_snap_object_project_view3d_ex(
112         struct SnapObjectContext *sctx,
113         const unsigned short snap_to,
114         const struct SnapObjectParams *params,
115         const float mval[2], float *dist_px,
116         float r_loc[3], float r_no[3], int *r_index,
117         struct Object **r_ob, float r_obmat[4][4]);
118 bool ED_transform_snap_object_project_view3d(
119         struct SnapObjectContext *sctx,
120         const unsigned short snap_to,
121         const struct SnapObjectParams *params,
122         const float mval[2], float *dist_px,
123         /* return args */
124         float r_loc[3], float r_no[3]);
125
126 bool ED_transform_snap_object_project_all_view3d_ex(
127         SnapObjectContext *sctx,
128         const struct SnapObjectParams *params,
129         const float mval[2],
130         float ray_depth, bool sort,
131         ListBase *r_hit_list);
132
133 #endif  /* __ED_TRANSFORM_SNAP_OBJECT_CONTEXT_H__ */