Fix for bug #8713: edge loop delete did an undo push too much.
[plumiferos.git] / source / blender / include / BIF_editmesh.h
bloba60a71f5bb58611ebb82586fa81dd56bab1bb416
1 /**
2 * $Id: BIF_editmesh.h 10403 2007-03-28 15:25:07Z campbellbarton $
4 * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
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.
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.
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.
23 * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
24 * All rights reserved.
26 * The Original Code is: all of this file.
28 * Contributor(s): none yet.
30 * ***** END GPL/BL DUAL LICENSE BLOCK *****
33 /* External for editmesh_xxxx.c functions */
35 #ifndef BIF_EDITMESH_H
36 #define BIF_EDITMESH_H
38 struct EditMesh;
39 struct EditFace;
40 struct EditEdge;
41 struct EditVert;
42 struct Mesh;
43 struct bDeformGroup;
44 struct View3D;
45 struct EditSelection;
46 struct CustomData;
48 // edge and face flag both
49 #define EM_FGON 2
50 // face flag
51 #define EM_FGON_DRAW 1
53 extern unsigned int em_vertoffs, em_solidoffs, em_wireoffs;
55 /* ******************* editmesh.c */
56 extern void make_editMesh(void);
57 extern void load_editMesh(void);
58 extern void free_editMesh(struct EditMesh *);
59 extern void remake_editMesh(void);
61 /* Editmesh Undo code */
62 extern void undo_push_mesh(char *name);
64 extern void separatemenu(void);
65 extern void separate_mesh(void);
66 extern void separate_mesh_loose(void);
67 extern void separate_material(void);
69 /* ******************* editmesh_add.c */
70 extern void make_prim(int type, float imat[3][3], int tot, int seg,
71 int subdiv, float dia, float d, int ext, int fill,
72 float cent[3] );
73 extern void add_primitiveMesh(int type);
74 extern void adduplicate_mesh(void);
75 extern void add_click_mesh(void);
76 extern void addedgeface_mesh(void);
77 void addfaces_from_edgenet();
79 /* ******************* editmesh_lib.c */
81 extern void EM_set_flag_all(int flag);
82 extern void EM_clear_flag_all(int flag);
84 extern void EM_select_face(struct EditFace *efa, int sel);
85 extern void EM_select_edge(struct EditEdge *eed, int sel);
86 extern float EM_face_area(struct EditFace *efa);
87 extern float EM_face_perimeter(struct EditFace *efa);
88 extern void EM_editselection_center(float *center, struct EditSelection *ese);
89 extern void EM_editselection_normal(float *normal, struct EditSelection *ese);
90 extern void EM_editselection_plane(float *plane, struct EditSelection *ese);
92 extern void EM_deselect_flush(void); // vertices to edges/faces (exception!)
93 extern void EM_select_flush(void); // vertices to edges/faces (exception!)
94 extern void EM_selectmode_set(void); // when mode changes
95 extern void EM_selectmode_flush(void); // when selection changes
96 extern void EM_convertsel(short oldmode, short selectmode);
97 extern void EM_remove_selection(void *data, int type);
98 extern void EM_store_selection(void *data, int type);
99 extern void EM_validate_selections(void);
101 extern int EM_nfaces_selected(void);
102 extern int EM_nvertices_selected(void);
104 extern int faceselectedAND(struct EditFace *efa, int flag);
105 extern void recalc_editnormals(void);
106 extern void flip_editnormals(void);
108 extern void EM_data_interp_from_verts(struct EditVert *v1,
109 struct EditVert *v2, struct EditVert *eve, float fac);
110 extern struct EditFace *EM_face_from_faces(struct EditFace *efa1,
111 struct EditFace *efa2, int i1, int i2, int i3, int i4);
112 extern void EM_data_interp_from_faces(struct EditFace *efa1,
113 struct EditFace *efa2, struct EditFace *efan, int i1, int i2, int i3, int i4);
115 void EM_add_data_layer(struct CustomData *data, int type);
116 void EM_free_data_layer(struct CustomData *data, int type);
118 /* ******************* editmesh_mods.c */
120 extern void EM_init_index_arrays(int forVert, int forEdge, int forFace);
121 extern void EM_free_index_arrays(void);
123 extern struct EditVert *EM_get_vert_for_index(int index);
124 extern struct EditEdge *EM_get_edge_for_index(int index);
125 extern struct EditFace *EM_get_face_for_index(int index);
127 extern void EM_select_face_fgon(struct EditFace *efa, int sel);
129 extern int EM_init_backbuf_border(short xmin, short ymin, short xmax, short ymax);
130 extern int EM_mask_init_backbuf_border(short mcords[][2], short tot, short xmin, short ymin, short xmax, short ymax);
131 extern int EM_init_backbuf_circle(short xs, short ys, short rads);
132 extern int EM_check_backbuf(unsigned int index);
133 extern void EM_free_backbuf(void);
135 extern void EM_selectmode_menu(void);
138 extern void vertexnoise(void);
139 extern void vertexsmooth(void);
140 extern void righthandfaces(int select);
141 extern void mouse_mesh(void);
143 extern void deselectall_mesh(void);
144 extern void selectconnected_mesh(int qual);
145 extern void selectswap_mesh(void);
147 extern void hide_mesh(int swap);
148 extern void reveal_mesh(void);
150 extern void vertices_to_sphere(void);
152 /** Aligns the selected MTFace's of @a me to the @a v3d,
153 * using the given axis (0-2). Can give a user error.
155 extern void faceselect_align_view_to_selected(struct View3D *v3d, struct Mesh *me, int axis);
156 /** Aligns the selected faces or vertices of @a me to the @a v3d,
157 * using the given axis (0-2). Can give a user error.
159 extern void editmesh_align_view_to_selected(struct View3D *v3d, int axis);
161 /* Selection */
162 extern void select_non_manifold(void);
163 extern void select_sharp_edges(void);
164 extern void select_linked_flat_faces(void);
165 extern void select_faces_by_numverts(int numverts);
166 extern void select_more(void);
167 extern void select_less(void);
168 extern void selectrandom_mesh(void);
169 extern void editmesh_select_by_material(int index);
170 extern void editmesh_deselect_by_material(int index);
172 extern void Edge_Menu(void);
173 extern void select_mesh_group_menu(void);
174 extern void editmesh_mark_seam(int clear);
175 extern void loop_multiselect(int looptype);
177 extern void EM_select_more(void);
178 extern void EM_select_less(void);
180 /* ******************* editmesh_loop.c */
182 #define KNIFE_PROMPT 0
183 #define KNIFE_EXACT 1
184 #define KNIFE_MIDPOINT 2
185 #define KNIFE_MULTICUT 3
187 extern void CutEdgeloop(int numcuts);
188 extern void KnifeSubdivide(char mode);
189 extern void LoopMenu(void);
191 #define LOOP_SELECT 1
192 #define LOOP_CUT 2
194 extern short sharesFace(struct EditEdge* e1, struct EditEdge* e2);
196 /* ******************* editmesh_tools.c */
198 #define SUBDIV_SELECT_ORIG 0
199 #define SUBDIV_SELECT_INNER 1
200 #define SUBDIV_SELECT_INNER_SEL 2
201 #define SUBDIV_SELECT_LOOPCUT 3
203 extern void convert_to_triface(int direction);
204 extern int removedoublesflag(short flag, float limit);
205 extern void xsortvert_flag(int flag);
206 extern void hashvert_flag(int flag);
208 extern void esubdivideflag(int flag, float rad, int beauty, int numcuts, int selecttype);
210 extern void extrude_mesh(void);
211 extern void split_mesh(void);
212 extern void extrude_repeat_mesh(int steps, float offs);
213 extern void spin_mesh(int steps,float degr,float *dvec, int mode);
214 extern void screw_mesh(int steps,int turns);
215 extern void delete_mesh(void);
216 extern void beauty_fill(void);
217 extern void join_triangles(void);
218 extern void edge_flip(void);
219 extern void fill_mesh(void);
220 extern void bevel_menu();
221 extern void mesh_set_smooth_faces(short event);
222 void edge_rotate_selected(int dir);
223 int EdgeSlide(short immediate, float imperc);
224 int EdgeLoopDelete(void);
225 void mesh_rip(void);
227 struct EditVert *editedge_getOtherVert(struct EditEdge *eed, struct EditVert *ev);
228 struct EditVert *editedge_getSharedVert(struct EditEdge *eed, struct EditEdge *eed2);
229 int editedge_containsVert(struct EditEdge *eed, struct EditVert *eve);
230 int editface_containsVert(struct EditFace *efa, struct EditVert *eve);
231 int editface_containsEdge(struct EditFace *efa, struct EditEdge *eed);
233 void shape_copy_select_from(void);
234 void shape_propagate(void);
236 int collapseEdges(void);
237 int merge_firstlast(int first, int uvmerge);
238 int merge_target( int target, int uvmerge);
240 void pathselect(void);
241 void loop_to_region(void);
242 void region_to_loop(void);
243 #endif