55a7bf634103ee68a95bcd2efb5b959979721191
[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 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, struct BMLoop *l);
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         /* here we'll store the preview triangle indices of the mesh */
92         unsigned int *preview_tris;
93         /* here we store the actual uv vertices to display */
94         float *preview_coords;
95         /* preview data. These will be either the previewed vertices or edges depending on stitch mode settings */
96         float *preview_stitchable;
97         float *preview_unstitchable;
98         /* here we'll store the number of triangles and quads to be drawn */
99         unsigned int num_tris;
100         unsigned int num_stitchable;
101         unsigned int num_unstitchable;
102
103         /* ...and here we'll store the triangles*/
104         float *static_tris;
105         unsigned int num_static_tris;
106 } StitchPreviewer;
107
108 StitchPreviewer *uv_get_stitch_previewer(void);
109
110 /* operators */
111
112 void UV_OT_average_islands_scale(struct wmOperatorType *ot);
113 void UV_OT_cube_project(struct wmOperatorType *ot);
114 void UV_OT_cylinder_project(struct wmOperatorType *ot);
115 void UV_OT_from_view(struct wmOperatorType *ot);
116 void UV_OT_minimize_stretch(struct wmOperatorType *ot);
117 void UV_OT_pack_islands(struct wmOperatorType *ot);
118 void UV_OT_reset(struct wmOperatorType *ot);
119 void UV_OT_sphere_project(struct wmOperatorType *ot);
120 void UV_OT_unwrap(struct wmOperatorType *ot);
121 void UV_OT_stitch(struct wmOperatorType *ot);
122
123 #endif /* __UVEDIT_INTERN_H__ */
124