RNA: C API
[blender.git] / source / blender / makesrna / intern / rna_mesh.c
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL 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.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19  *
20  * Contributor(s): Blender Foundation (2008).
21  *
22  * ***** END GPL LICENSE BLOCK *****
23  */
24
25 #include <stdlib.h>
26
27 #include "RNA_define.h"
28 #include "RNA_types.h"
29
30 #include "rna_internal.h"
31
32 #include "DNA_material_types.h"
33 #include "DNA_mesh_types.h"
34 #include "DNA_meshdata_types.h"
35 #include "DNA_object_types.h"
36
37 #include "BKE_customdata.h"
38
39 #ifdef RNA_RUNTIME
40
41 /*static float rna_MeshVertex_no_get(PointerRNA *ptr, int index)
42 {
43         MVert *mvert= (MVert*)ptr->data;
44         return mvert->no[index]/32767.0f;
45 }*/
46
47 static float rna_MeshVertex_bevel_weight_get(PointerRNA *ptr)
48 {
49         MVert *mvert= (MVert*)ptr->data;
50         return mvert->bweight/255.0f;
51 }
52
53 static void rna_MeshVertex_bevel_weight_set(PointerRNA *ptr, float value)
54 {
55         MVert *mvert= (MVert*)ptr->data;
56         mvert->bweight= (char)(CLAMPIS(value*255.0f, 0, 255));
57 }
58
59 static float rna_MEdge_bevel_weight_get(PointerRNA *ptr)
60 {
61         MEdge *medge= (MEdge*)ptr->data;
62         return medge->bweight/255.0f;
63 }
64
65 static void rna_MEdge_bevel_weight_set(PointerRNA *ptr, float value)
66 {
67         MEdge *medge= (MEdge*)ptr->data;
68         medge->bweight= (char)(CLAMPIS(value*255.0f, 0, 255));
69 }
70
71 static float rna_MEdge_crease_get(PointerRNA *ptr)
72 {
73         MEdge *medge= (MEdge*)ptr->data;
74         return medge->crease/255.0f;
75 }
76
77 static void rna_MEdge_crease_set(PointerRNA *ptr, float value)
78 {
79         MEdge *medge= (MEdge*)ptr->data;
80         medge->crease= (char)(CLAMPIS(value*255.0f, 0, 255));
81 }
82
83 static void rna_MeshColor_color1_get(PointerRNA *ptr, float *values)
84 {
85         MCol *mcol= (MCol*)ptr->data;
86
87         values[0]= (&mcol[0].r)[0]/255.0f;
88         values[1]= (&mcol[0].r)[1]/255.0f;
89         values[2]= (&mcol[0].r)[2]/255.0f;
90 }
91
92 static void rna_MeshColor_color1_set(PointerRNA *ptr, const float *values)
93 {
94         MCol *mcol= (MCol*)ptr->data;
95
96         (&mcol[0].r)[0]= (char)(CLAMPIS(values[0]*255.0f, 0, 255));
97         (&mcol[0].r)[1]= (char)(CLAMPIS(values[1]*255.0f, 0, 255));
98         (&mcol[0].r)[2]= (char)(CLAMPIS(values[2]*255.0f, 0, 255));
99 }
100
101 static void rna_MeshColor_color2_get(PointerRNA *ptr, float *values)
102 {
103         MCol *mcol= (MCol*)ptr->data;
104
105         values[0]= (&mcol[1].r)[0]/255.0f;
106         values[1]= (&mcol[1].r)[1]/255.0f;
107         values[2]= (&mcol[1].r)[2]/255.0f;
108 }
109
110 static void rna_MeshColor_color2_set(PointerRNA *ptr, const float *values)
111 {
112         MCol *mcol= (MCol*)ptr->data;
113
114         (&mcol[1].r)[0]= (char)(CLAMPIS(values[0]*255.0f, 0, 255));
115         (&mcol[1].r)[1]= (char)(CLAMPIS(values[1]*255.0f, 0, 255));
116         (&mcol[1].r)[2]= (char)(CLAMPIS(values[2]*255.0f, 0, 255));
117 }
118
119 static void rna_MeshColor_color3_get(PointerRNA *ptr, float *values)
120 {
121         MCol *mcol= (MCol*)ptr->data;
122
123         values[0]= (&mcol[2].r)[0]/255.0f;
124         values[1]= (&mcol[2].r)[1]/255.0f;
125         values[2]= (&mcol[2].r)[2]/255.0f;
126 }
127
128 static void rna_MeshColor_color3_set(PointerRNA *ptr, const float *values)
129 {
130         MCol *mcol= (MCol*)ptr->data;
131
132         (&mcol[2].r)[0]= (char)(CLAMPIS(values[0]*255.0f, 0, 255));
133         (&mcol[2].r)[1]= (char)(CLAMPIS(values[1]*255.0f, 0, 255));
134         (&mcol[2].r)[2]= (char)(CLAMPIS(values[2]*255.0f, 0, 255));
135 }
136
137 static void rna_MeshColor_color4_get(PointerRNA *ptr, float *values)
138 {
139         MCol *mcol= (MCol*)ptr->data;
140
141         values[0]= (&mcol[3].r)[0]/255.0f;
142         values[1]= (&mcol[3].r)[1]/255.0f;
143         values[2]= (&mcol[3].r)[2]/255.0f;
144 }
145
146 static void rna_MeshColor_color4_set(PointerRNA *ptr, const float *values)
147 {
148         MCol *mcol= (MCol*)ptr->data;
149
150         (&mcol[3].r)[0]= (char)(CLAMPIS(values[0]*255.0f, 0, 255));
151         (&mcol[3].r)[1]= (char)(CLAMPIS(values[1]*255.0f, 0, 255));
152         (&mcol[3].r)[2]= (char)(CLAMPIS(values[2]*255.0f, 0, 255));
153 }
154
155 static int rna_Mesh_texspace_editable(PointerRNA *ptr)
156 {
157         Mesh *me= (Mesh*)ptr->data;
158         return (me->texflag & AUTOSPACE)? PROP_NOT_EDITABLE: 0;
159 }
160
161 static void rna_MeshVertex_groups_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
162 {
163         Mesh *me= (Mesh*)ptr->id.data;
164
165         if(me->dvert) {
166                 MVert *mvert= (MVert*)ptr->data;
167                 MDeformVert *dvert= me->dvert + (mvert-me->mvert);
168
169                 rna_iterator_array_begin(iter, (void*)dvert->dw, sizeof(MDeformWeight), dvert->totweight, NULL);
170         }
171         else
172                 rna_iterator_array_begin(iter, NULL, 0, 0, NULL);
173 }
174
175 static void rna_MeshMultires_level_range(PointerRNA *ptr, int *min, int *max)
176 {
177         Multires *mr= (Multires*)ptr->data;
178         *min= 1;
179         *max= mr->level_count;
180 }
181
182 static void rna_MeshFace_material_index_range(PointerRNA *ptr, int *min, int *max)
183 {
184         Mesh *me= (Mesh*)ptr->id.data;
185         *min= 0;
186         *max= me->totcol-1;
187 }
188
189 static int rna_CustomDataLayer_length(PointerRNA *ptr, int type)
190 {
191         Mesh *me= (Mesh*)ptr->id.data;
192         CustomDataLayer *layer;
193         int i, length= 0;
194
195         for(layer=me->fdata.layers, i=0; i<me->fdata.totlayer; layer++, i++)
196                 if(layer->type == type)
197                         length++;
198
199         return length;
200 }
201
202 static int rna_CustomDataLayer_active_get(PointerRNA *ptr, int type, int render)
203 {
204         Mesh *me= (Mesh*)ptr->id.data;
205         int n= ((CustomDataLayer*)ptr->data) - me->fdata.layers;
206
207         if(render) return (n == CustomData_get_render_layer_index(&me->fdata, type));
208         else return (n == CustomData_get_active_layer_index(&me->fdata, type));
209 }
210
211 static void rna_CustomDataLayer_active_set(PointerRNA *ptr, int value, int type, int render)
212 {
213         Mesh *me= (Mesh*)ptr->id.data;
214         int n= ((CustomDataLayer*)ptr->data) - me->fdata.layers;
215
216         if(value == 0)
217                 return;
218
219         if(render) CustomData_set_layer_render_index(&me->fdata, type, n);
220         else CustomData_set_layer_active_index(&me->fdata, type, n);
221 }
222
223 static int rna_uv_layer_check(CollectionPropertyIterator *iter, void *data)
224 {
225         CustomDataLayer *layer= (CustomDataLayer*)data;
226         return (layer->type != CD_MTFACE);
227 }
228
229 static void rna_Mesh_uv_layers_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
230 {
231         Mesh *me= (Mesh*)ptr->data;
232         rna_iterator_array_begin(iter, (void*)me->fdata.layers, sizeof(CustomDataLayer), me->fdata.totlayer, rna_uv_layer_check);
233 }
234
235 static int rna_Mesh_uv_layers_length(PointerRNA *ptr)
236 {
237         return rna_CustomDataLayer_length(ptr, CD_MTFACE);
238 }
239
240 static void rna_MeshTextureFace_uv1_get(PointerRNA *ptr, float *values)
241 {
242         MTFace *mtface= (MTFace*)ptr->data;
243         
244         values[0]= mtface->uv[0][0];
245         values[1]= mtface->uv[0][1];
246 }
247
248 static void rna_MeshTextureFace_uv1_set(PointerRNA *ptr, const float *values)
249 {
250         MTFace *mtface= (MTFace*)ptr->data;
251
252         mtface->uv[0][0]= values[0];
253         mtface->uv[0][1]= values[1];
254 }
255
256 static void rna_MeshTextureFace_uv2_get(PointerRNA *ptr, float *values)
257 {
258         MTFace *mtface= (MTFace*)ptr->data;
259
260         values[0]= mtface->uv[1][0];
261         values[1]= mtface->uv[1][1];
262 }
263
264 static void rna_MeshTextureFace_uv2_set(PointerRNA *ptr, const float *values)
265 {
266         MTFace *mtface= (MTFace*)ptr->data;
267
268         mtface->uv[1][0]= values[0];
269         mtface->uv[1][1]= values[1];
270 }
271
272 static void rna_MeshTextureFace_uv3_get(PointerRNA *ptr, float *values)
273 {
274         MTFace *mtface= (MTFace*)ptr->data;
275
276         values[0]= mtface->uv[2][0];
277         values[1]= mtface->uv[2][1];
278 }
279
280 static void rna_MeshTextureFace_uv3_set(PointerRNA *ptr, const float *values)
281 {
282         MTFace *mtface= (MTFace*)ptr->data;
283
284         mtface->uv[2][0]= values[0];
285         mtface->uv[2][1]= values[1];
286 }
287
288 static void rna_MeshTextureFace_uv4_get(PointerRNA *ptr, float *values)
289 {
290         MTFace *mtface= (MTFace*)ptr->data;
291
292         values[0]= mtface->uv[3][0];
293         values[1]= mtface->uv[3][1];
294 }
295
296 static void rna_MeshTextureFace_uv4_set(PointerRNA *ptr, const float *values)
297 {
298         MTFace *mtface= (MTFace*)ptr->data;
299
300         mtface->uv[3][0]= values[0];
301         mtface->uv[3][1]= values[1];
302 }
303
304 static void rna_MeshTextureFaceLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
305 {
306         Mesh *me= (Mesh*)ptr->id.data;
307         CustomDataLayer *layer= (CustomDataLayer*)ptr->data;
308         rna_iterator_array_begin(iter, layer->data, sizeof(MTFace), me->totface, NULL);
309 }
310
311 static int rna_MeshTextureFaceLayer_data_length(PointerRNA *ptr)
312 {
313         Mesh *me= (Mesh*)ptr->id.data;
314         return me->totface;
315 }
316
317 static int rna_MeshTextureFaceLayer_active_render_get(PointerRNA *ptr)
318 {
319         return rna_CustomDataLayer_active_get(ptr, CD_MTFACE, 1);
320 }
321
322 static int rna_MeshTextureFaceLayer_active_get(PointerRNA *ptr)
323 {
324         return rna_CustomDataLayer_active_get(ptr, CD_MTFACE, 0);
325 }
326
327 static void rna_MeshTextureFaceLayer_active_render_set(PointerRNA *ptr, int value)
328 {
329         rna_CustomDataLayer_active_set(ptr, value, CD_MTFACE, 1);
330 }
331
332 static void rna_MeshTextureFaceLayer_active_set(PointerRNA *ptr, int value)
333 {
334         rna_CustomDataLayer_active_set(ptr, value, CD_MTFACE, 0);
335 }
336
337 static int rna_vcol_layer_check(CollectionPropertyIterator *iter, void *data)
338 {
339         CustomDataLayer *layer= (CustomDataLayer*)data;
340         return (layer->type != CD_MCOL);
341 }
342
343 static void rna_Mesh_vcol_layers_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
344 {
345         Mesh *me= (Mesh*)ptr->data;
346         rna_iterator_array_begin(iter, (void*)me->fdata.layers, sizeof(CustomDataLayer), me->fdata.totlayer, rna_vcol_layer_check);
347 }
348
349 static int rna_Mesh_vcol_layers_length(PointerRNA *ptr)
350 {
351         return rna_CustomDataLayer_length(ptr, CD_MCOL);
352 }
353
354 static void rna_MeshColorLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
355 {
356         Mesh *me= (Mesh*)ptr->id.data;
357         CustomDataLayer *layer= (CustomDataLayer*)ptr->data;
358         rna_iterator_array_begin(iter, layer->data, sizeof(MCol)*4, me->totface, NULL);
359 }
360
361 static int rna_MeshColorLayer_data_length(PointerRNA *ptr)
362 {
363         Mesh *me= (Mesh*)ptr->id.data;
364         return me->totface;
365 }
366
367 static int rna_MeshColorLayer_active_render_get(PointerRNA *ptr)
368 {
369         return rna_CustomDataLayer_active_get(ptr, CD_MCOL, 1);
370 }
371
372 static int rna_MeshColorLayer_active_get(PointerRNA *ptr)
373 {
374         return rna_CustomDataLayer_active_get(ptr, CD_MCOL, 0);
375 }
376
377 static void rna_MeshColorLayer_active_render_set(PointerRNA *ptr, int value)
378 {
379         rna_CustomDataLayer_active_set(ptr, value, CD_MCOL, 1);
380 }
381
382 static void rna_MeshColorLayer_active_set(PointerRNA *ptr, int value)
383 {
384         rna_CustomDataLayer_active_set(ptr, value, CD_MCOL, 0);
385 }
386
387 static void rna_MeshFloatPropertyLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
388 {
389         Mesh *me= (Mesh*)ptr->id.data;
390         CustomDataLayer *layer= (CustomDataLayer*)ptr->data;
391         rna_iterator_array_begin(iter, layer->data, sizeof(MFloatProperty), me->totface, NULL);
392 }
393
394 static int rna_MeshFloatPropertyLayer_data_length(PointerRNA *ptr)
395 {
396         Mesh *me= (Mesh*)ptr->id.data;
397         return me->totface;
398 }
399
400 static int rna_float_layer_check(CollectionPropertyIterator *iter, void *data)
401 {
402         CustomDataLayer *layer= (CustomDataLayer*)data;
403         return (layer->type != CD_PROP_FLT);
404 }
405
406 static void rna_Mesh_float_layers_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
407 {
408         Mesh *me= (Mesh*)ptr->data;
409         rna_iterator_array_begin(iter, (void*)me->fdata.layers, sizeof(CustomDataLayer), me->fdata.totlayer, rna_float_layer_check);
410 }
411
412 static int rna_Mesh_float_layers_length(PointerRNA *ptr)
413 {
414         return rna_CustomDataLayer_length(ptr, CD_PROP_FLT);
415 }
416
417 static int rna_int_layer_check(CollectionPropertyIterator *iter, void *data)
418 {
419         CustomDataLayer *layer= (CustomDataLayer*)data;
420         return (layer->type != CD_PROP_INT);
421 }
422
423 static void rna_MeshIntPropertyLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
424 {
425         Mesh *me= (Mesh*)ptr->id.data;
426         CustomDataLayer *layer= (CustomDataLayer*)ptr->data;
427         rna_iterator_array_begin(iter, layer->data, sizeof(MIntProperty), me->totface, NULL);
428 }
429
430 static int rna_MeshIntPropertyLayer_data_length(PointerRNA *ptr)
431 {
432         Mesh *me= (Mesh*)ptr->id.data;
433         return me->totface;
434 }
435
436 static void rna_Mesh_int_layers_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
437 {
438         Mesh *me= (Mesh*)ptr->data;
439         rna_iterator_array_begin(iter, (void*)me->fdata.layers, sizeof(CustomDataLayer), me->fdata.totlayer, rna_int_layer_check);
440 }
441
442 static int rna_Mesh_int_layers_length(PointerRNA *ptr)
443 {
444         return rna_CustomDataLayer_length(ptr, CD_PROP_INT);
445 }
446
447 static int rna_string_layer_check(CollectionPropertyIterator *iter, void *data)
448 {
449         CustomDataLayer *layer= (CustomDataLayer*)data;
450         return (layer->type != CD_PROP_STR);
451 }
452
453 static void rna_MeshStringPropertyLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
454 {
455         Mesh *me= (Mesh*)ptr->id.data;
456         CustomDataLayer *layer= (CustomDataLayer*)ptr->data;
457         rna_iterator_array_begin(iter, layer->data, sizeof(MStringProperty), me->totface, NULL);
458 }
459
460 static int rna_MeshStringPropertyLayer_data_length(PointerRNA *ptr)
461 {
462         Mesh *me= (Mesh*)ptr->id.data;
463         return me->totface;
464 }
465
466 static void rna_Mesh_string_layers_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
467 {
468         Mesh *me= (Mesh*)ptr->data;
469         rna_iterator_array_begin(iter, (void*)me->fdata.layers, sizeof(CustomDataLayer), me->fdata.totlayer, rna_string_layer_check);
470 }
471
472 static int rna_Mesh_string_layers_length(PointerRNA *ptr)
473 {
474         return rna_CustomDataLayer_length(ptr, CD_PROP_STR);
475 }
476
477 #else
478
479 static void rna_def_mvert_group(BlenderRNA *brna)
480 {
481         StructRNA *srna;
482         PropertyRNA *prop;
483
484         srna= RNA_def_struct(brna, "VertexGroupElement", NULL);
485         RNA_def_struct_ui_text(srna, "Vertex Group Element", "Weight value of a vertex in a vertex group.");
486         RNA_def_struct_sdna(srna, "MDeformWeight");
487
488         /* we can't point to actual group, it is in the object and so
489          * there is no unique group to point to, hence the index */
490         prop= RNA_def_property(srna, "group", PROP_INT, PROP_UNSIGNED);
491         RNA_def_property_int_sdna(prop, NULL, "def_nr");
492         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
493         RNA_def_property_ui_text(prop, "Group Index", "");
494
495         prop= RNA_def_property(srna, "weight", PROP_FLOAT, PROP_NONE);
496         RNA_def_property_range(prop, 0.0f, 1.0f);
497         RNA_def_property_ui_text(prop, "Weight", "Vertex Weight");
498 }
499
500 static void rna_def_mvert(BlenderRNA *brna)
501 {
502         StructRNA *srna;
503         PropertyRNA *prop;
504
505         srna= RNA_def_struct(brna, "MeshVertex", NULL);
506         RNA_def_struct_sdna(srna, "MVert");
507         RNA_def_struct_ui_text(srna, "Mesh Vertex", "Vertex in a Mesh datablock.");
508
509         prop= RNA_def_property(srna, "co", PROP_FLOAT, PROP_VECTOR);
510         RNA_def_property_ui_text(prop, "Location", "");
511
512         /*prop= RNA_def_property(srna, "no", PROP_FLOAT, PROP_VECTOR);
513         RNA_def_property_float_funcs(prop, "rna_MeshVertex_no_get", NULL, NULL);
514         RNA_def_property_ui_text(prop, "Normal", "Vertex Normal");
515         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);*/
516
517         prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
518         RNA_def_property_boolean_sdna(prop, NULL, "flag", SELECT);
519         RNA_def_property_ui_text(prop, "Selected", "");
520
521         prop= RNA_def_property(srna, "hidden", PROP_BOOLEAN, PROP_NONE);
522         RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_HIDE);
523         RNA_def_property_ui_text(prop, "Hidden", "");
524
525         prop= RNA_def_property(srna, "bevel_weight", PROP_FLOAT, PROP_NONE);
526         RNA_def_property_float_funcs(prop, "rna_MeshVertex_bevel_weight_get", "rna_MeshVertex_bevel_weight_set", NULL);
527         RNA_def_property_ui_text(prop, "Bevel Weight", "Weight used by the Bevel modifier 'Only Vertices' option");
528
529         prop= RNA_def_property(srna, "groups", PROP_COLLECTION, PROP_NONE);
530         RNA_def_property_collection_funcs(prop, "rna_MeshVertex_groups_begin", "rna_iterator_array_next", "rna_iterator_array_end", "rna_iterator_array_get", 0, 0, 0);
531         RNA_def_property_struct_type(prop, "VertexGroupElement");
532         RNA_def_property_ui_text(prop, "Groups", "Weights for the vertex groups this vertex is member of.");
533 }
534
535 static void rna_def_medge(BlenderRNA *brna)
536 {
537         StructRNA *srna;
538         PropertyRNA *prop;
539
540         srna= RNA_def_struct(brna, "MeshEdge", NULL);
541         RNA_def_struct_sdna(srna, "MEdge");
542         RNA_def_struct_ui_text(srna, "Mesh Edge", "Edge in a Mesh datablock.");
543
544         prop= RNA_def_property(srna, "verts", PROP_INT, PROP_UNSIGNED);
545         RNA_def_property_int_sdna(prop, NULL, "v1");
546         RNA_def_property_array(prop, 2);
547         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
548         RNA_def_property_ui_text(prop, "Vertices", "Vertex indices");
549
550         prop= RNA_def_property(srna, "crease", PROP_FLOAT, PROP_NONE);
551         RNA_def_property_float_funcs(prop, "rna_MEdge_crease_get", "rna_MEdge_crease_set", NULL);
552         RNA_def_property_ui_text(prop, "Crease", "Weight used by the Subsurf modifier for creasing");
553
554         prop= RNA_def_property(srna, "bevel_weight", PROP_FLOAT, PROP_NONE);
555         RNA_def_property_float_funcs(prop, "rna_MEdge_bevel_weight_get", "rna_MEdge_bevel_weight_set", NULL);
556         RNA_def_property_ui_text(prop, "Bevel Weight", "Weight used by the Bevel modifier");
557
558         prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
559         RNA_def_property_boolean_sdna(prop, NULL, "flag", SELECT);
560         RNA_def_property_ui_text(prop, "Selected", "");
561
562         prop= RNA_def_property(srna, "hidden", PROP_BOOLEAN, PROP_NONE);
563         RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_HIDE);
564         RNA_def_property_ui_text(prop, "Hidden", "");
565
566         prop= RNA_def_property(srna, "seam", PROP_BOOLEAN, PROP_NONE);
567         RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_SEAM);
568         RNA_def_property_ui_text(prop, "Seam", "Seam edge for UV unwrapping");
569
570         prop= RNA_def_property(srna, "sharp", PROP_BOOLEAN, PROP_NONE);
571         RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_SHARP);
572         RNA_def_property_ui_text(prop, "Sharp", "Sharp edge for the EdgeSplit modifier");
573 }
574
575 static void rna_def_mface(BlenderRNA *brna)
576 {
577         StructRNA *srna;
578         PropertyRNA *prop;
579
580         srna= RNA_def_struct(brna, "MeshFace", NULL);
581         RNA_def_struct_sdna(srna, "MFace");
582         RNA_def_struct_ui_text(srna, "Mesh Face", "Face in a Mesh datablock.");
583
584         prop= RNA_def_property(srna, "verts", PROP_INT, PROP_UNSIGNED);
585         RNA_def_property_int_sdna(prop, NULL, "v1");
586         RNA_def_property_array(prop, 4);
587         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
588         RNA_def_property_ui_text(prop, "Vertices", "Vertex indices");
589
590         prop= RNA_def_property(srna, "material_index", PROP_INT, PROP_UNSIGNED);
591         RNA_def_property_int_sdna(prop, NULL, "mat_nr");
592         RNA_def_property_ui_text(prop, "Material Index", "");
593         RNA_def_property_range(prop, 0, MAXMAT-1);
594         RNA_def_property_int_funcs(prop, NULL, NULL, "rna_MeshFace_material_index_range");
595
596         prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
597         RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_FACE_SEL);
598         RNA_def_property_ui_text(prop, "Selected", "");
599
600         prop= RNA_def_property(srna, "hidden", PROP_BOOLEAN, PROP_NONE);
601         RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_HIDE);
602         RNA_def_property_ui_text(prop, "Hidden", "");
603
604         prop= RNA_def_property(srna, "smooth", PROP_BOOLEAN, PROP_NONE);
605         RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_SMOOTH);
606         RNA_def_property_ui_text(prop, "Smooth", "");
607 }
608
609 static void rna_def_mtface(BlenderRNA *brna)
610 {
611         StructRNA *srna;
612         PropertyRNA *prop;
613         static const EnumPropertyItem transp_items[]= {
614                 {TF_SOLID, "OPAQUE", "Opaque", "Render color of textured face as color"},
615                 {TF_ADD, "ADD", "Add", "Render face transparent and add color of face"},
616                 {TF_ALPHA, "ALPHA", "Alpha", "Render polygon transparent, depending on alpha channel of the texture"},
617                 {TF_CLIP, "CLIPALPHA", "Clip Alpha", "Use the images alpha values clipped with no blending (binary alpha)"},
618                 {0, NULL, NULL, NULL}};
619
620         srna= RNA_def_struct(brna, "MeshTextureFaceLayer", NULL);
621         RNA_def_struct_ui_text(srna, "Mesh Texture Face Layer", "Layer of texture faces in a Mesh datablock.");
622         RNA_def_struct_sdna(srna, "CustomDataLayer");
623
624         prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
625         RNA_def_struct_name_property(srna, prop);
626         RNA_def_property_ui_text(prop, "Name", "");
627
628         prop= RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE);
629         RNA_def_property_boolean_funcs(prop, "rna_MeshTextureFaceLayer_active_get", "rna_MeshTextureFaceLayer_active_set");
630         RNA_def_property_ui_text(prop, "Active", "Sets the layer as active for display and editing");
631
632         prop= RNA_def_property(srna, "active_render", PROP_BOOLEAN, PROP_NONE);
633         RNA_def_property_boolean_sdna(prop, NULL, "active_rnd", 0);
634         RNA_def_property_boolean_funcs(prop, "rna_MeshTextureFaceLayer_active_render_get", "rna_MeshTextureFaceLayer_active_render_set");
635         RNA_def_property_ui_text(prop, "Active Render", "Sets the layer as active for rendering");
636
637         prop= RNA_def_property(srna, "data", PROP_COLLECTION, PROP_NONE);
638         RNA_def_property_struct_type(prop, "MeshTextureFace");
639         RNA_def_property_ui_text(prop, "Data", "");
640         RNA_def_property_collection_funcs(prop, "rna_MeshTextureFaceLayer_data_begin", "rna_iterator_array_next", "rna_iterator_array_end", "rna_iterator_array_get", "rna_MeshTextureFaceLayer_data_length", 0, 0);
641
642         srna= RNA_def_struct(brna, "MeshTextureFace", NULL);
643         RNA_def_struct_sdna(srna, "MTFace");
644         RNA_def_struct_ui_text(srna, "Mesh Texture Face", "UV mapping, texturing and game engine data for a face.");
645
646         /* prop= RNA_def_property(srna, "image", PROP_POINTER, PROP_NONE);
647         RNA_def_property_pointer_sdna(prop, NULL, "tpage");
648         RNA_def_property_ui_text(prop, "Image", ""); */
649
650         prop= RNA_def_property(srna, "tex", PROP_BOOLEAN, PROP_NONE);
651         RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_TEX);
652         RNA_def_property_ui_text(prop, "Tex", "Render face with texture");
653
654         prop= RNA_def_property(srna, "tiles", PROP_BOOLEAN, PROP_NONE);
655         RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_TILES);
656         RNA_def_property_ui_text(prop, "Tiles", "Use tilemode for face");
657
658         prop= RNA_def_property(srna, "light", PROP_BOOLEAN, PROP_NONE);
659         RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_LIGHT);
660         RNA_def_property_ui_text(prop, "Light", "Use light for face");
661
662         prop= RNA_def_property(srna, "invisible", PROP_BOOLEAN, PROP_NONE);
663         RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_INVISIBLE);
664         RNA_def_property_ui_text(prop, "Invisible", "Make face invisible");
665
666         prop= RNA_def_property(srna, "collision", PROP_BOOLEAN, PROP_NONE);
667         RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_DYNAMIC);
668         RNA_def_property_ui_text(prop, "Collision", "Use face for collision and ray-sensor detection");
669
670         prop= RNA_def_property(srna, "shared", PROP_BOOLEAN, PROP_NONE);
671         RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_SHAREDCOL);
672         RNA_def_property_ui_text(prop, "Shared", "Blend vertex colors across face when vertices are shared");
673
674         prop= RNA_def_property(srna, "twoside", PROP_BOOLEAN, PROP_NONE);
675         RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_TWOSIDE);
676         RNA_def_property_ui_text(prop, "Twoside", "Render face twosided");
677
678         prop= RNA_def_property(srna, "object_color", PROP_BOOLEAN, PROP_NONE);
679         RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_OBCOL);
680         RNA_def_property_ui_text(prop, "Object Color", "Use ObColor instead of vertex colors");
681
682         prop= RNA_def_property(srna, "halo", PROP_BOOLEAN, PROP_NONE);
683         RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_BILLBOARD);
684         RNA_def_property_ui_text(prop, "Halo", "Screen aligned billboard");
685
686         prop= RNA_def_property(srna, "billboard", PROP_BOOLEAN, PROP_NONE);
687         RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_BILLBOARD2);
688         RNA_def_property_ui_text(prop, "Billboard", "Billboard with Z-axis constraint");
689
690         prop= RNA_def_property(srna, "shadow", PROP_BOOLEAN, PROP_NONE);
691         RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_SHADOW);
692         RNA_def_property_ui_text(prop, "Shadow", "Face is used for shadow");
693
694         prop= RNA_def_property(srna, "text", PROP_BOOLEAN, PROP_NONE);
695         RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_BMFONT);
696         RNA_def_property_ui_text(prop, "Text", "Enable bitmap text on face");
697
698         prop= RNA_def_property(srna, "alpha_sort", PROP_BOOLEAN, PROP_NONE);
699         RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_ALPHASORT);
700         RNA_def_property_ui_text(prop, "Alpha Sort", "Enable sorting of faces for correct alpha drawing (slow, use Clip Alpha instead when possible)");
701
702         prop= RNA_def_property(srna, "transp", PROP_ENUM, PROP_NONE);
703         RNA_def_property_enum_items(prop, transp_items);
704         RNA_def_property_ui_text(prop, "Transparency", "Transparency blending mode");
705
706         prop= RNA_def_property(srna, "uv_selected", PROP_BOOLEAN, PROP_NONE);
707         RNA_def_property_boolean_sdna(prop, NULL, "flag", TF_SEL1);
708         RNA_def_property_array(prop, 4);
709         RNA_def_property_ui_text(prop, "UV Selected", "");
710
711         prop= RNA_def_property(srna, "uv_pinned", PROP_BOOLEAN, PROP_NONE);
712         RNA_def_property_boolean_sdna(prop, NULL, "unwrap", TF_PIN1);
713         RNA_def_property_array(prop, 4);
714         RNA_def_property_ui_text(prop, "UV Pinned", "");
715
716         prop= RNA_def_property(srna, "uv1", PROP_FLOAT, PROP_VECTOR);
717         RNA_def_property_array(prop, 2);
718         RNA_def_property_float_funcs(prop, "rna_MeshTextureFace_uv1_get", "rna_MeshTextureFace_uv1_set", NULL);
719         RNA_def_property_ui_text(prop, "UV 1", "");
720
721         prop= RNA_def_property(srna, "uv2", PROP_FLOAT, PROP_VECTOR);
722         RNA_def_property_array(prop, 2);
723         RNA_def_property_float_funcs(prop, "rna_MeshTextureFace_uv2_get", "rna_MeshTextureFace_uv2_set", NULL);
724         RNA_def_property_ui_text(prop, "UV 2", "");
725
726         prop= RNA_def_property(srna, "uv3", PROP_FLOAT, PROP_VECTOR);
727         RNA_def_property_array(prop, 2);
728         RNA_def_property_float_funcs(prop, "rna_MeshTextureFace_uv3_get", "rna_MeshTextureFace_uv3_set", NULL);
729         RNA_def_property_ui_text(prop, "UV 3", "");
730
731         prop= RNA_def_property(srna, "uv4", PROP_FLOAT, PROP_VECTOR);
732         RNA_def_property_array(prop, 2);
733         RNA_def_property_float_funcs(prop, "rna_MeshTextureFace_uv4_get", "rna_MeshTextureFace_uv4_set", NULL);
734         RNA_def_property_ui_text(prop, "UV 4", "");
735 }
736
737 static void rna_def_msticky(BlenderRNA *brna)
738 {
739         StructRNA *srna;
740         PropertyRNA *prop;
741
742         srna= RNA_def_struct(brna, "MeshSticky", NULL);
743         RNA_def_struct_sdna(srna, "MSticky");
744         RNA_def_struct_ui_text(srna, "Mesh Vertex Sticky Texture Coordinate", "Stricky texture coordinate.");
745
746         prop= RNA_def_property(srna, "co", PROP_FLOAT, PROP_VECTOR);
747         RNA_def_property_ui_text(prop, "Location", "Sticky texture coordinate location.");
748 }
749
750 static void rna_def_mcol(BlenderRNA *brna)
751 {
752         StructRNA *srna;
753         PropertyRNA *prop;
754
755         srna= RNA_def_struct(brna, "MeshColorLayer", NULL);
756         RNA_def_struct_ui_text(srna, "Mesh Vertex Color Layer", "Layer of vertex colors in a Mesh datablock.");
757         RNA_def_struct_sdna(srna, "CustomDataLayer");
758
759         prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
760         RNA_def_struct_name_property(srna, prop);
761         RNA_def_property_ui_text(prop, "Name", "");
762
763         prop= RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE);
764         RNA_def_property_boolean_funcs(prop, "rna_MeshColorLayer_active_get", "rna_MeshColorLayer_active_set");
765         RNA_def_property_ui_text(prop, "Active", "Sets the layer as active for display and editing");
766
767         prop= RNA_def_property(srna, "active_render", PROP_BOOLEAN, PROP_NONE);
768         RNA_def_property_boolean_sdna(prop, NULL, "active_rnd", 0);
769         RNA_def_property_boolean_funcs(prop, "rna_MeshColorLayer_active_render_get", "rna_MeshColorLayer_active_render_set");
770         RNA_def_property_ui_text(prop, "Active Render", "Sets the layer as active for rendering");
771
772         prop= RNA_def_property(srna, "data", PROP_COLLECTION, PROP_NONE);
773         RNA_def_property_struct_type(prop, "MeshColor");
774         RNA_def_property_ui_text(prop, "Data", "");
775         RNA_def_property_collection_funcs(prop, "rna_MeshColorLayer_data_begin", "rna_iterator_array_next", "rna_iterator_array_end", "rna_iterator_array_get", "rna_MeshColorLayer_data_length", 0, 0);
776
777         srna= RNA_def_struct(brna, "MeshColor", NULL);
778         RNA_def_struct_sdna(srna, "MCol");
779         RNA_def_struct_ui_text(srna, "Mesh Vertex Color", "Vertex colors for a face in a Mesh.");
780
781         prop= RNA_def_property(srna, "color1", PROP_FLOAT, PROP_COLOR);
782         RNA_def_property_array(prop, 3);
783         RNA_def_property_float_funcs(prop, "rna_MeshColor_color1_get", "rna_MeshColor_color1_set", NULL);
784         RNA_def_property_ui_text(prop, "Color 1", "");
785
786         prop= RNA_def_property(srna, "color2", PROP_FLOAT, PROP_COLOR);
787         RNA_def_property_array(prop, 3);
788         RNA_def_property_float_funcs(prop, "rna_MeshColor_color2_get", "rna_MeshColor_color2_set", NULL);
789         RNA_def_property_ui_text(prop, "Color 2", "");
790
791         prop= RNA_def_property(srna, "color3", PROP_FLOAT, PROP_COLOR);
792         RNA_def_property_array(prop, 3);
793         RNA_def_property_float_funcs(prop, "rna_MeshColor_color3_get", "rna_MeshColor_color3_set", NULL);
794         RNA_def_property_ui_text(prop, "Color 3", "");
795
796         prop= RNA_def_property(srna, "color4", PROP_FLOAT, PROP_COLOR);
797         RNA_def_property_array(prop, 3);
798         RNA_def_property_float_funcs(prop, "rna_MeshColor_color4_get", "rna_MeshColor_color4_set", NULL);
799         RNA_def_property_ui_text(prop, "Color 4", "");
800 }
801
802 static void rna_def_mproperties(BlenderRNA *brna)
803 {
804         StructRNA *srna;
805         PropertyRNA *prop;
806
807         /* Float */
808         srna= RNA_def_struct(brna, "MeshFloatPropertyLayer", NULL);
809         RNA_def_struct_sdna(srna, "CustomDataLayer");
810         RNA_def_struct_ui_text(srna, "Mesh Float Property Layer", "User defined layer of floating pointer number values.");
811
812         prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
813         RNA_def_struct_name_property(srna, prop);
814         RNA_def_property_ui_text(prop, "Name", "");
815
816         prop= RNA_def_property(srna, "data", PROP_COLLECTION, PROP_NONE);
817         RNA_def_property_struct_type(prop, "MeshFloatProperty");
818         RNA_def_property_ui_text(prop, "Data", "");
819         RNA_def_property_collection_funcs(prop, "rna_MeshFloatPropertyLayer_data_begin", "rna_iterator_array_next", "rna_iterator_array_end", "rna_iterator_array_get", "rna_MeshFloatPropertyLayer_data_length", 0, 0);
820
821         srna= RNA_def_struct(brna, "MeshFloatProperty", NULL);
822         RNA_def_struct_sdna(srna, "MFloatProperty");
823         RNA_def_struct_ui_text(srna, "Mesh Float Property", "User defined floating point number value in a float properties layer.");
824
825         prop= RNA_def_property(srna, "value", PROP_FLOAT, PROP_NONE);
826         RNA_def_property_float_sdna(prop, NULL, "f");
827         RNA_def_property_ui_text(prop, "Value", "");
828
829         /* Int */
830         srna= RNA_def_struct(brna, "MeshIntPropertyLayer", NULL);
831         RNA_def_struct_sdna(srna, "CustomDataLayer");
832         RNA_def_struct_ui_text(srna, "Mesh Int Property Layer", "User defined layer of integer number values.");
833
834         prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
835         RNA_def_struct_name_property(srna, prop);
836         RNA_def_property_ui_text(prop, "Name", "");
837
838         prop= RNA_def_property(srna, "data", PROP_COLLECTION, PROP_NONE);
839         RNA_def_property_struct_type(prop, "MeshIntProperty");
840         RNA_def_property_ui_text(prop, "Data", "");
841         RNA_def_property_collection_funcs(prop, "rna_MeshIntPropertyLayer_data_begin", "rna_iterator_array_next", "rna_iterator_array_end", "rna_iterator_array_get", "rna_MeshIntPropertyLayer_data_length", 0, 0);
842
843         srna= RNA_def_struct(brna, "MeshIntProperty", NULL);
844         RNA_def_struct_sdna(srna, "MIntProperty");
845         RNA_def_struct_ui_text(srna, "Mesh Int Property", "User defined integer number value in an integer properties layer.");
846
847         prop= RNA_def_property(srna, "value", PROP_INT, PROP_NONE);
848         RNA_def_property_int_sdna(prop, NULL, "i");
849         RNA_def_property_ui_text(prop, "Value", "");
850
851         /* String */
852         srna= RNA_def_struct(brna, "MeshStringPropertyLayer", NULL);
853         RNA_def_struct_sdna(srna, "CustomDataLayer");
854         RNA_def_struct_ui_text(srna, "Mesh String Property Layer", "User defined layer of string text values.");
855
856         prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
857         RNA_def_struct_name_property(srna, prop);
858         RNA_def_property_ui_text(prop, "Name", "");
859
860         prop= RNA_def_property(srna, "data", PROP_COLLECTION, PROP_NONE);
861         RNA_def_property_struct_type(prop, "MeshStringProperty");
862         RNA_def_property_ui_text(prop, "Data", "");
863         RNA_def_property_collection_funcs(prop, "rna_MeshStringPropertyLayer_data_begin", "rna_iterator_array_next", "rna_iterator_array_end", "rna_iterator_array_get", "rna_MeshStringPropertyLayer_data_length", 0, 0);
864
865         srna= RNA_def_struct(brna, "MeshStringProperty", NULL);
866         RNA_def_struct_sdna(srna, "MStringProperty");
867         RNA_def_struct_ui_text(srna, "Mesh String Property", "User defined string text value in a string properties layer.");
868
869         prop= RNA_def_property(srna, "value", PROP_STRING, PROP_NONE);
870         RNA_def_property_string_sdna(prop, NULL, "s");
871         RNA_def_property_ui_text(prop, "Value", "");
872 }
873
874 static void rna_def_mmultires(BlenderRNA *brna)
875 {
876         StructRNA *srna;
877         PropertyRNA *prop;
878
879         srna= RNA_def_struct(brna, "MeshMultires", NULL);
880         RNA_def_struct_sdna(srna, "Multires");
881         RNA_def_struct_ui_text(srna, "Mesh Multires", "Multiresolution mesh levels data in a Mesh datablock.");
882
883         prop= RNA_def_property(srna, "level", PROP_INT, PROP_NONE);
884         RNA_def_property_int_sdna(prop, NULL, "newlvl");
885         RNA_def_property_int_funcs(prop, NULL, NULL, "rna_MeshMultires_level_range");
886         RNA_def_property_ui_text(prop, "Level", "");
887
888         prop= RNA_def_property(srna, "edge_level", PROP_INT, PROP_NONE);
889         RNA_def_property_int_sdna(prop, NULL, "edgelvl");
890         RNA_def_property_int_funcs(prop, NULL, NULL, "rna_MeshMultires_level_range");
891         RNA_def_property_ui_text(prop, "Edge Level", "");
892
893         prop= RNA_def_property(srna, "pin_level", PROP_INT, PROP_NONE);
894         RNA_def_property_int_sdna(prop, NULL, "pinlvl");
895         RNA_def_property_int_funcs(prop, NULL, NULL, "rna_MeshMultires_level_range");
896         RNA_def_property_ui_text(prop, "Pin Level", "Set level to apply modifiers to during render.");
897
898         prop= RNA_def_property(srna, "render_level", PROP_INT, PROP_NONE);
899         RNA_def_property_int_sdna(prop, NULL, "renderlvl");
900         RNA_def_property_int_funcs(prop, NULL, NULL, "rna_MeshMultires_level_range");
901         RNA_def_property_ui_text(prop, "Render Level", "Set level to render.");
902 }
903
904 void rna_def_texmat_common(StructRNA *srna, const char *texspace_editable)
905 {
906         PropertyRNA *prop;
907
908         /* texture space */
909         prop= RNA_def_property(srna, "auto_texspace", PROP_BOOLEAN, PROP_NONE);
910         RNA_def_property_boolean_sdna(prop, NULL, "texflag", AUTOSPACE);
911         RNA_def_property_ui_text(prop, "Auto Texture Space", "Adjusts active object's texture space automatically when transforming object.");
912
913         prop= RNA_def_property(srna, "texspace_loc", PROP_FLOAT, PROP_VECTOR);
914         RNA_def_property_float_sdna(prop, NULL, "loc");
915         RNA_def_property_ui_text(prop, "Texure Space Location", "Texture space location.");
916         RNA_def_property_editable_func(prop, texspace_editable);
917
918         prop= RNA_def_property(srna, "texspace_size", PROP_FLOAT, PROP_VECTOR);
919         RNA_def_property_float_sdna(prop, NULL, "size");
920         RNA_def_property_ui_text(prop, "Texture Space Size", "Texture space size.");
921         RNA_def_property_editable_func(prop, texspace_editable);
922
923         /* not supported yet
924         prop= RNA_def_property(srna, "texspace_rot", PROP_FLOAT, PROP_ROTATION);
925         RNA_def_property_float(prop, NULL, "rot");
926         RNA_def_property_ui_text(prop, "Texture Space Rotation", "Texture space rotation");
927         RNA_def_property_editable_func(prop, texspace_editable);*/
928
929         /* materials */
930         prop= RNA_def_property(srna, "materials", PROP_COLLECTION, PROP_NONE);
931         RNA_def_property_collection_sdna(prop, NULL, "mat", "totcol");
932         RNA_def_property_struct_type(prop, "Material");
933         RNA_def_property_ui_text(prop, "Materials", "");
934 }
935
936
937 static void rna_def_mesh(BlenderRNA *brna)
938 {
939         StructRNA *srna;
940         PropertyRNA *prop;
941
942         srna= RNA_def_struct(brna, "Mesh", "ID");
943         RNA_def_struct_ui_text(srna, "Mesh", "Mesh datablock to define geometric surfaces.");
944
945         prop= RNA_def_property(srna, "verts", PROP_COLLECTION, PROP_NONE);
946         RNA_def_property_collection_sdna(prop, NULL, "mvert", "totvert");
947         RNA_def_property_struct_type(prop, "MeshVertex");
948         RNA_def_property_ui_text(prop, "Vertices", "Vertices of the mesh.");
949
950         prop= RNA_def_property(srna, "edges", PROP_COLLECTION, PROP_NONE);
951         RNA_def_property_collection_sdna(prop, NULL, "medge", "totedge");
952         RNA_def_property_struct_type(prop, "MeshEdge");
953         RNA_def_property_ui_text(prop, "Edges", "Edges of the mesh.");
954
955         prop= RNA_def_property(srna, "faces", PROP_COLLECTION, PROP_NONE);
956         RNA_def_property_collection_sdna(prop, NULL, "mface", "totface");
957         RNA_def_property_struct_type(prop, "MeshFace");
958         RNA_def_property_ui_text(prop, "Faces", "Faces of the mesh.");
959
960         prop= RNA_def_property(srna, "sticky", PROP_COLLECTION, PROP_NONE);
961         RNA_def_property_collection_sdna(prop, NULL, "msticky", "totvert");
962         RNA_def_property_struct_type(prop, "MeshSticky");
963         RNA_def_property_ui_text(prop, "Sticky", "Sticky texture coordinates.");
964
965         prop= RNA_def_property(srna, "uv_layers", PROP_COLLECTION, PROP_NONE);
966         RNA_def_property_collection_sdna(prop, NULL, "fdata.layers", "fdata.totlayer");
967         RNA_def_property_collection_funcs(prop, "rna_Mesh_uv_layers_begin", 0, 0, 0, "rna_Mesh_uv_layers_length", 0, 0);
968         RNA_def_property_struct_type(prop, "MeshTextureFaceLayer");
969         RNA_def_property_ui_text(prop, "UV Layers", "");
970
971         prop= RNA_def_property(srna, "vcol_layers", PROP_COLLECTION, PROP_NONE);
972         RNA_def_property_collection_sdna(prop, NULL, "fdata.layers", "fdata.totlayer");
973         RNA_def_property_collection_funcs(prop, "rna_Mesh_vcol_layers_begin", 0, 0, 0, "rna_Mesh_vcol_layers_length", 0, 0);
974         RNA_def_property_struct_type(prop, "MeshColorLayer");
975         RNA_def_property_ui_text(prop, "Vertex Color Layers", "");
976
977         prop= RNA_def_property(srna, "float_layers", PROP_COLLECTION, PROP_NONE);
978         RNA_def_property_collection_sdna(prop, NULL, "fdata.layers", "fdata.totlayer");
979         RNA_def_property_collection_funcs(prop, "rna_Mesh_float_layers_begin", 0, 0, 0, "rna_Mesh_float_layers_length", 0, 0);
980         RNA_def_property_struct_type(prop, "MeshFloatPropertyLayer");
981         RNA_def_property_ui_text(prop, "Float Property Layers", "");
982
983         prop= RNA_def_property(srna, "int_layers", PROP_COLLECTION, PROP_NONE);
984         RNA_def_property_collection_sdna(prop, NULL, "fdata.layers", "fdata.totlayer");
985         RNA_def_property_collection_funcs(prop, "rna_Mesh_int_layers_begin", 0, 0, 0, "rna_Mesh_int_layers_length", 0, 0);
986         RNA_def_property_struct_type(prop, "MeshIntPropertyLayer");
987         RNA_def_property_ui_text(prop, "Int Property Layers", "");
988
989         prop= RNA_def_property(srna, "string_layers", PROP_COLLECTION, PROP_NONE);
990         RNA_def_property_collection_sdna(prop, NULL, "fdata.layers", "fdata.totlayer");
991         RNA_def_property_collection_funcs(prop, "rna_Mesh_string_layers_begin", 0, 0, 0, "rna_Mesh_string_layers_length", 0, 0);
992         RNA_def_property_struct_type(prop, "MeshStringPropertyLayer");
993         RNA_def_property_ui_text(prop, "String Property Layers", "");
994
995         prop= RNA_def_property(srna, "autosmooth", PROP_BOOLEAN, PROP_NONE);
996         RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_AUTOSMOOTH);
997         RNA_def_property_ui_text(prop, "Auto Smooth", "Treats all set-smoothed faces with angles less than the specified angle as 'smooth' during render");
998
999         prop= RNA_def_property(srna, "autosmooth_angle", PROP_INT, PROP_NONE);
1000         RNA_def_property_int_sdna(prop, NULL, "smoothresh");
1001         RNA_def_property_range(prop, 1, 80);
1002         RNA_def_property_ui_text(prop, "Auto Smooth Angle", "Defines maximum angle between face normals that 'Auto Smooth' will operate on");
1003
1004         prop= RNA_def_property(srna, "vertex_normal_flip", PROP_BOOLEAN, PROP_NONE);
1005         RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", ME_NOPUNOFLIP);
1006         RNA_def_property_ui_text(prop, "Vertex Normal Flip", "Flip vertex normals towards the camera during render");
1007
1008         prop= RNA_def_property(srna, "double_sided", PROP_BOOLEAN, PROP_NONE);
1009         RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_TWOSIDED);
1010         RNA_def_property_ui_text(prop, "Double Sided", "Render/display the mesh with double or single sided lighting");
1011
1012         prop= RNA_def_property(srna, "texco_mesh", PROP_POINTER, PROP_NONE);
1013         RNA_def_property_pointer_sdna(prop, NULL, "texcomesh");
1014         RNA_def_property_ui_text(prop, "Texture Space Mesh", "Derive texture coordinates from another mesh");
1015
1016         prop= RNA_def_property(srna, "multires", PROP_POINTER, PROP_NONE);
1017         RNA_def_property_pointer_sdna(prop, NULL, "mr");
1018         RNA_def_property_ui_text(prop, "Multires", "");
1019
1020         prop= RNA_def_property(srna, "shape_keys", PROP_POINTER, PROP_NONE);
1021         RNA_def_property_pointer_sdna(prop, NULL, "key");
1022         RNA_def_property_ui_text(prop, "Shape Keys", "");
1023
1024         rna_def_texmat_common(srna, "rna_Mesh_texspace_editable");
1025 }
1026
1027 void RNA_def_mesh(BlenderRNA *brna)
1028 {
1029         rna_def_mesh(brna);
1030         rna_def_mvert(brna);
1031         rna_def_mvert_group(brna);
1032         rna_def_medge(brna);
1033         rna_def_mface(brna);
1034         rna_def_mtface(brna);
1035         rna_def_msticky(brna);
1036         rna_def_mcol(brna);
1037         rna_def_mproperties(brna);
1038         rna_def_mmultires(brna);
1039 }
1040
1041 #endif
1042