Quite a large one this time... but now we have:
[blender.git] / source / blender / include / BIF_editmesh.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 #ifndef BIF_EDITMESH_H
34 #define BIF_EDITMESH_H
35
36 struct EditVlak;
37 struct EditEdge;
38 struct EditVert;
39 struct Mesh;
40 struct bDeformGroup;
41 struct View3D;
42
43 void free_hashedgetab(void);
44 void fasterdraw(void);
45 void slowerdraw(void);
46 void vertexnoise(void);
47 void vertexsmooth(void);
48 void make_sticky(void);
49 void deselectall_mesh(void);
50
51 /* For Knife subdivide */
52 typedef struct CutCurve {
53         short  x; 
54         short  y;
55 } CutCurve;
56
57 void KnifeSubdivide(char mode);
58 #define KNIFE_PROMPT 0
59 #define KNIFE_EXACT 1
60 #define KNIFE_MIDPOINT 2
61
62 CutCurve *get_mouse_trail(int * length, char mode);
63 #define TRAIL_POLYLINE 1 /* For future use, They don't do anything yet */
64 #define TRAIL_FREEHAND 2
65 #define TRAIL_MIXED    3 /* (1|2) */
66 #define TRAIL_AUTO     4 
67 #define TRAIL_MIDPOINTS 8
68
69 short seg_intersect(struct EditEdge * e, CutCurve *c, int len);
70
71 void LoopMenu(void);
72 /* End Knife Subdiv */
73
74         /** Aligns the selected TFace's of @a me to the @a v3d,
75          * using the given axis (0-2). Can give a user error.
76          */
77 void faceselect_align_view_to_selected(struct View3D *v3d, struct Mesh *me, int axis);
78         /** Aligns the selected faces or vertices of @a me to the @a v3d,
79          * using the given axis (0-2). Can give a user error.
80          */
81 void editmesh_align_view_to_selected(struct View3D *v3d, int axis);
82
83 struct EditVert *addvertlist(float *vec);
84 struct EditEdge *addedgelist(struct EditVert *v1, struct EditVert *v2, struct EditEdge *example);
85 struct EditVlak *addvlaklist(struct EditVert *v1, struct EditVert *v2, struct EditVert *v3, struct EditVert *v4, struct EditVlak *example);
86 struct EditEdge *findedgelist(struct EditVert *v1, struct EditVert *v2);
87
88 void remedge(struct EditEdge *eed);
89
90 int vlakselectedAND(struct EditVlak *evl, int flag);
91
92 void recalc_editnormals(void);
93 void flip_editnormals(void);
94 void vertexnormals(int testflip);
95 /* this is currently only used by the python NMesh module: */
96 void vertexnormals_mesh(struct Mesh *me, float *extverts);
97
98 void make_editMesh(void);
99 void load_editMesh(void);
100 void free_editMesh(void);
101 void remake_editMesh(void);
102
103 void convert_to_triface(int all);
104
105 void righthandfaces(int select);
106
107 void mouse_mesh(void);
108
109 void selectconnected_mesh(int qual);
110 short extrudeflag(short flag,short type);
111 void rotateflag(short flag, float *cent, float rotmat[][3]);
112 void translateflag(short flag, float *vec);
113 short removedoublesflag(short flag, float limit);
114 void xsortvert_flag(int flag);
115 void hashvert_flag(int flag);
116 void subdivideflag(int flag, float rad, int beauty);
117 void adduplicateflag(int flag);
118 void extrude_mesh(void);
119 void adduplicate_mesh(void);
120 void split_mesh(void);
121
122 void separatemenu(void);
123 void separate_mesh(void);
124 void separate_mesh_loose(void);
125
126 void loopoperations(char mode);
127 #define LOOP_SELECT     1
128 #define LOOP_CUT        2
129
130 void vertex_loop_select(void); 
131 void edge_select(void);
132
133 void extrude_repeat_mesh(int steps, float offs);
134 void spin_mesh(int steps,int degr,float *dvec, int mode);
135 void screw_mesh(int steps,int turns);
136 void selectswap_mesh(void);
137 void addvert_mesh(void);
138 void addedgevlak_mesh(void);
139 void delete_mesh(void);
140 void add_primitiveMesh(int type);
141 void hide_mesh(int swap);
142 void reveal_mesh(void);
143 void beauty_fill(void);
144 void join_triangles(void);
145 void edge_flip(void);
146 void join_mesh(void);
147 void clever_numbuts_mesh(void);
148 void sort_faces(void);
149 void vertices_to_sphere(void);
150 void fill_mesh(void);
151
152 void bevel_menu();
153
154 /* Editmesh Undo code */
155 void undo_free_mesh(struct Mesh *me);
156 void undo_push_mesh(char *name);
157 void undo_pop_mesh(int steps);
158 void undo_redo_mesh(void);
159 void undo_clear_mesh(void);
160 void undo_menu_mesh(void);
161
162 /* Selection */
163 void select_non_manifold(void);
164 void select_more(void);
165 void select_less(void);
166 void selectrandom_mesh(void);
167
168 void editmesh_select_by_material(int index);
169 void editmesh_deselect_by_material(int index);
170
171 #endif
172