made sticky UV editing options more accessible by adding them to a popup in the header.
[blender.git] / source / blender / include / BIF_editsima.h
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version. The Blender
10  * Foundation also sells licenses for use in proprietary software under
11  * the Blender License.  See http://www.blender.org/BL/ for information
12  * about this.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software Foundation,
21  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22  *
23  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
24  * All rights reserved.
25  *
26  * The Original Code is: all of this file.
27  *
28  * Contributor(s): none yet.
29  *
30  * ***** END GPL/BL DUAL LICENSE BLOCK *****
31  */
32
33 struct Mesh;
34 struct EditMesh;
35 struct SpaceImage;
36
37 /* id can be from 0 to 3 */
38 #define TF_PIN_MASK(id) (TF_PIN1 << id)
39 #define TF_SEL_MASK(id) (TF_SEL1 << id)
40
41   
42 /* this checks weather a face is drarn without the local image check
43  * - warning - no check for G.sima->flag, use SIMA_FACEDRAW_CHECK
44  */
45 #define SIMA_FACEDRAW_CHECK_NOLOCAL(efa) \
46         ((G.sima->flag & SI_SYNC_UVSEL) ? (efa->h==0) : (efa->h==0 && efa->f & SELECT))
47
48 /* this check includes the local image check - (does the faces image match the space image?) */
49 #define SIMA_FACEDRAW_CHECK(efa, tf) \
50         ((G.sima && G.sima->flag & SI_LOCAL_UV) ? ((tf->tpage==G.sima->image) ? SIMA_FACEDRAW_CHECK_NOLOCAL(efa):0) : (SIMA_FACEDRAW_CHECK_NOLOCAL(efa)))
51
52 #define SIMA_FACESEL_CHECK(efa, tf) \
53         ((G.sima && G.sima->flag & SI_SYNC_UVSEL) ? (efa->f & SELECT) : (!(~tf->flag & (TF_SEL1|TF_SEL2|TF_SEL3)) &&(!efa->v4 || tf->flag & TF_SEL4)))
54 #define SIMA_FACESEL_SET(efa, tf) \
55         ((G.sima && G.sima->flag & SI_SYNC_UVSEL) ? (EM_select_face(efa, 1))    : (tf->flag |=  (TF_SEL1|TF_SEL2|TF_SEL3|TF_SEL4)))
56 #define SIMA_FACESEL_UNSET(efa, tf) \
57         ((G.sima && G.sima->flag & SI_SYNC_UVSEL) ? (EM_select_face(efa, 0))    : (tf->flag &= ~(TF_SEL1|TF_SEL2|TF_SEL3|TF_SEL4)))
58
59 #define SIMA_UVSEL_CHECK(efa, tf, i)    ((G.sima && G.sima->flag & SI_SYNC_UVSEL) ? \
60         (G.scene->selectmode == SCE_SELECT_FACE ? efa->f & SELECT :             ((*(&efa->v1 + i))->f & SELECT) )       : (tf->flag &   TF_SEL_MASK(i) ))
61 #define SIMA_UVSEL_SET(efa, tf, i)              ((G.sima && G.sima->flag & SI_SYNC_UVSEL) ? \
62         (G.scene->selectmode == SCE_SELECT_FACE ? EM_select_face(efa, 1) : ((*(&efa->v1 + i))->f |=  SELECT) ) : (tf->flag |=  TF_SEL_MASK(i) ))
63 #define SIMA_UVSEL_UNSET(efa, tf, i)    ((G.sima && G.sima->flag & SI_SYNC_UVSEL) ? \
64         (G.scene->selectmode == SCE_SELECT_FACE ? EM_select_face(efa, 0) : ((*(&efa->v1 + i))->f &= ~SELECT) ) : (tf->flag &= ~TF_SEL_MASK(i) ))
65
66 struct Object;
67
68 void object_uvs_changed(struct Object *ob);
69 void object_tface_flags_changed(struct Object *ob, int updateButtons);
70
71 int is_uv_tface_editing_allowed(void);
72 int is_uv_tface_editing_allowed_silent(void);
73
74 void get_connected_limit_tface_uv(float *limit);
75 int minmax_tface_uv(float *min, float *max);
76 int cent_tface_uv(float *cent, int mode);
77
78 void transform_width_height_tface_uv(int *width, int *height);
79 void transform_aspect_ratio_tface_uv(float *aspx, float *aspy);
80
81 void mouseco_to_cursor_sima(void);
82 void borderselect_sima(short whichuvs);
83 void mouseco_to_curtile(void);
84 void mouse_select_sima(void);
85 void snap_menu_sima(void);
86 void aspect_sima(struct SpaceImage *sima, float *x, float *y);
87
88 void select_invert_tface_uv(void);
89 void select_swap_tface_uv(void);
90 void mirrormenu_tface_uv(void);
91 void mirror_tface_uv(char mirroraxis);
92 void hide_tface_uv(int swap);
93 void reveal_tface_uv(void);
94 void stitch_uv_tface(int mode);
95 void unlink_selection(void);
96 void select_linked_tface_uv(int mode);
97 void pin_tface_uv(int mode);
98 void weld_align_menu_tface_uv(void);
99 void weld_align_tface_uv(char tool);
100 void be_square_tface_uv(struct EditMesh *em);
101 void select_pinned_tface_uv(void);
102
103 void sima_sample_color(void);
104
105 #define UV_SELECT_ALL           1
106 #define UV_SELECT_PINNED        2
107
108 void new_image_sima(void);
109 void reload_image_sima(void);
110 void save_image_sima(void);
111 void save_as_image_sima(void);
112 void save_image_sequence_sima(void);
113 void replace_image_sima(short imageselect);
114 void open_image_sima(short imageselect);
115 void pack_image_sima(void);
116
117 /* checks images for forced updates on frame change */
118 void BIF_image_update_frame(void);
119
120