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
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
48 // edge and face flag both
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
,
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
);
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
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);
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);