svn merge ^/trunk/blender -r43611:43616
[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 ED_UVEDIT_INTERN_H
33 #define ED_UVEDIT_INTERN_H
34
35 struct EditFace;
36 struct EditMesh;
37 struct MTexPoly;
38 struct Image;
39 struct MTFace;
40 struct Object;
41 struct Scene;
42 struct SpaceImage;
43 struct UvElementMap;
44 struct wmOperatorType;
45 struct BMEditMesh;
46 struct BMFace;
47 struct BMLoop;
48 struct BMEdge;
49 struct BMVert;
50
51 /* id can be from 0 to 3 */
52 #define TF_PIN_MASK(id) (TF_PIN1 << id)
53 #define TF_SEL_MASK(id) (TF_SEL1 << id)
54
55 /* visibility and selection */
56 int uvedit_face_visible_nolocal(struct Scene *scene, struct BMFace *efa);
57
58 /* geometric utilities */
59
60 void uv_center(float uv[][2], float cent[2], int quad);
61 float uv_area(float uv[][2], int quad);
62 void uv_copy_aspect(float uv_orig[][2], float uv[][2], float aspx, float aspy);
63
64 float poly_uv_area(float uv[][2], int len);
65 void poly_copy_aspect(float uv_orig[][2], float uv[][2], float aspx, float aspy, int len);
66 void poly_uv_center(struct BMEditMesh *em, struct BMFace *f, float cent[2]);
67
68 /* find nearest */
69
70 typedef struct NearestHit {
71         struct BMFace *efa;
72         struct MTexPoly *tf;
73         struct BMLoop *l, *nextl;
74         struct MLoopUV *luv, *nextluv;
75         int lindex; //index of loop within face
76         int vert1, vert2; //index in mesh of edge vertices
77 } NearestHit;
78
79 void uv_find_nearest_vert(struct Scene *scene, struct Image *ima, struct BMEditMesh *em, float co[2], float penalty[2], struct NearestHit *hit);
80 void uv_find_nearest_edge(struct Scene *scene, struct Image *ima, struct BMEditMesh *em, float co[2], struct NearestHit *hit);
81
82 /* utility tool functions */
83
84 struct UvElement *ED_get_uv_element(struct UvElementMap *map, struct BMFace *efa, int index);
85 void uvedit_live_unwrap_update(struct SpaceImage *sima, struct Scene *scene, struct Object *obedit);
86
87 /* smart stitch */
88
89 /* object that stores display data for previewing before accepting stitching */
90 typedef struct StitchPreviewer {
91         /* OpenGL requires different calls for Triangles and Quads.
92          * here we'll store the quads of the mesh */
93         float *preview_quads;
94         /* ...and here we'll store the triangles*/
95         float *preview_tris;
96         /* preview data. These will be either the previewed vertices or edges depending on stitch mode settings */
97         float *preview_stitchable;
98         float *preview_unstitchable;
99         /* here we'll store the number of triangles and quads to be drawn */
100         unsigned int num_tris;
101         unsigned int num_quads;
102         unsigned int num_stitchable;
103         unsigned int num_unstitchable;
104
105         /* store static island Quads */
106         float *static_quads;
107         /* ...and here we'll store the triangles*/
108         float *static_tris;
109         unsigned int num_static_tris;
110         unsigned int num_static_quads;
111 } StitchPreviewer;
112
113 StitchPreviewer *uv_get_stitch_previewer(void);
114
115 /* operators */
116
117 void UV_OT_average_islands_scale(struct wmOperatorType *ot);
118 void UV_OT_cube_project(struct wmOperatorType *ot);
119 void UV_OT_cylinder_project(struct wmOperatorType *ot);
120 void UV_OT_from_view(struct wmOperatorType *ot);
121 void UV_OT_minimize_stretch(struct wmOperatorType *ot);
122 void UV_OT_pack_islands(struct wmOperatorType *ot);
123 void UV_OT_reset(struct wmOperatorType *ot);
124 void UV_OT_sphere_project(struct wmOperatorType *ot);
125 void UV_OT_unwrap(struct wmOperatorType *ot);
126 void UV_OT_stitch(struct wmOperatorType *ot);
127
128 #endif /* ED_UVEDIT_INTERN_H */
129