864789124a511181ec97be62dc66474dfd6235fd
[blender.git] / source / blender / editors / uvedit / uvedit_intern.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version. 
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2008 Blender Foundation.
19  * All rights reserved.
20  *
21  * 
22  * Contributor(s): Blender Foundation
23  *
24  * ***** END GPL LICENSE BLOCK *****
25  */
26
27 /** \file blender/editors/uvedit/uvedit_intern.h
28  *  \ingroup eduv
29  */
30
31
32 #ifndef __UVEDIT_INTERN_H__
33 #define __UVEDIT_INTERN_H__
34
35 struct MTexPoly;
36 struct Image;
37 struct MTFace;
38 struct Object;
39 struct Scene;
40 struct SpaceImage;
41 struct UvElementMap;
42 struct wmOperatorType;
43 struct BMEditMesh;
44 struct BMFace;
45 struct BMLoop;
46 struct BMEdge;
47 struct BMVert;
48
49 /* visibility and selection */
50 bool uvedit_face_visible_nolocal(struct Scene *scene, struct BMFace *efa);
51
52 /* geometric utilities */
53 void  uv_poly_copy_aspect(float uv_orig[][2], float uv[][2], float aspx, float aspy, int len);
54 void  uv_poly_center(struct BMFace *f, float r_cent[2], const int cd_loop_uv_offset);
55
56 /* find nearest */
57
58 typedef struct NearestHit {
59         struct BMFace *efa;
60         struct MTexPoly *tf;
61         struct BMLoop *l, *nextl;
62         struct MLoopUV *luv, *luv_next;
63         int lindex; //index of loop within face
64         int vert1, vert2; //index in mesh of edge vertices
65 } NearestHit;
66
67 void uv_find_nearest_vert(struct Scene *scene, struct Image *ima, struct BMEditMesh *em,
68                           const float co[2], const float penalty[2], struct NearestHit *hit);
69 void uv_find_nearest_edge(struct Scene *scene, struct Image *ima, struct BMEditMesh *em,
70                           const float co[2], struct NearestHit *hit);
71
72 /* utility tool functions */
73
74 void uvedit_live_unwrap_update(struct SpaceImage *sima, struct Scene *scene, struct Object *obedit);
75 void uvedit_get_aspect(struct Scene *scene, struct Object *ob, struct BMEditMesh *em, float *aspx, float *aspy);
76
77 /* operators */
78
79 void UV_OT_average_islands_scale(struct wmOperatorType *ot);
80 void UV_OT_cube_project(struct wmOperatorType *ot);
81 void UV_OT_cylinder_project(struct wmOperatorType *ot);
82 void UV_OT_project_from_view(struct wmOperatorType *ot);
83 void UV_OT_minimize_stretch(struct wmOperatorType *ot);
84 void UV_OT_pack_islands(struct wmOperatorType *ot);
85 void UV_OT_reset(struct wmOperatorType *ot);
86 void UV_OT_sphere_project(struct wmOperatorType *ot);
87 void UV_OT_unwrap(struct wmOperatorType *ot);
88 void UV_OT_stitch(struct wmOperatorType *ot);
89
90 #endif /* __UVEDIT_INTERN_H__ */