code cleanup:
[blender-staging.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 /* id can be from 0 to 3 */
50 #define TF_PIN_MASK(id) (TF_PIN1 << id)
51 #define TF_SEL_MASK(id) (TF_SEL1 << id)
52
53 /* visibility and selection */
54 int uvedit_face_visible_nolocal(struct Scene *scene, struct BMFace *efa);
55
56 /* geometric utilities */
57 float uv_poly_area(float uv[][2], int len);
58 void  uv_poly_copy_aspect(float uv_orig [][2], float uv[][2], float aspx, float aspy, int len);
59 void  uv_poly_center(struct BMEditMesh *em, struct BMFace *f, float r_cent[2]);
60
61 /* find nearest */
62
63 typedef struct NearestHit {
64         struct BMFace *efa;
65         struct MTexPoly *tf;
66         struct BMLoop *l, *nextl;
67         struct MLoopUV *luv, *nextluv;
68         int lindex; //index of loop within face
69         int vert1, vert2; //index in mesh of edge vertices
70 } NearestHit;
71
72 void uv_find_nearest_vert(struct Scene *scene, struct Image *ima, struct BMEditMesh *em,
73                           const float co[2], const float penalty[2], struct NearestHit *hit);
74 void uv_find_nearest_edge(struct Scene *scene, struct Image *ima, struct BMEditMesh *em,
75                           const float co[2], struct NearestHit *hit);
76
77 /* utility tool functions */
78
79 struct UvElement *ED_uv_element_get(struct UvElementMap *map, struct BMFace *efa, struct BMLoop *l);
80 void uvedit_live_unwrap_update(struct SpaceImage *sima, struct Scene *scene, struct Object *obedit);
81
82 /* smart stitch */
83
84 /* object that stores display data for previewing before accepting stitching */
85 typedef struct StitchPreviewer {
86         /* here we'll store the preview triangle indices of the mesh */
87         float *preview_polys;
88         /* uvs per polygon. */
89         unsigned int *uvs_per_polygon;
90         /*number of preview polygons */
91         unsigned int num_polys;
92         /* preview data. These will be either the previewed vertices or edges depending on stitch mode settings */
93         float *preview_stitchable;
94         float *preview_unstitchable;
95         /* here we'll store the number of elements to be drawn */
96         unsigned int num_stitchable;
97         unsigned int num_unstitchable;
98         unsigned int preview_uvs;
99         /* ...and here we'll store the triangles*/
100         float *static_tris;
101         unsigned int num_static_tris;
102 } StitchPreviewer;
103
104 StitchPreviewer *uv_get_stitch_previewer(void);
105
106 /* operators */
107
108 void UV_OT_average_islands_scale(struct wmOperatorType *ot);
109 void UV_OT_cube_project(struct wmOperatorType *ot);
110 void UV_OT_cylinder_project(struct wmOperatorType *ot);
111 void UV_OT_from_view(struct wmOperatorType *ot);
112 void UV_OT_minimize_stretch(struct wmOperatorType *ot);
113 void UV_OT_pack_islands(struct wmOperatorType *ot);
114 void UV_OT_reset(struct wmOperatorType *ot);
115 void UV_OT_sphere_project(struct wmOperatorType *ot);
116 void UV_OT_unwrap(struct wmOperatorType *ot);
117 void UV_OT_stitch(struct wmOperatorType *ot);
118
119 #endif /* __UVEDIT_INTERN_H__ */