[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44893] trunk/blender/source/blender: fixes for vertex color (found when brining X3D import back)
Campbell Barton
ideasman42 at gmail.com
Thu Mar 15 06:40:46 CET 2012
Revision: 44893
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44893
Author: campbellbarton
Date: 2012-03-15 05:40:33 +0000 (Thu, 15 Mar 2012)
Log Message:
-----------
fixes for vertex color (found when brining X3D import back)
- tessface vertex color had the wrong sized array passing to rna_iterator_array_begin
- re-calculating tessface's would clear them if they were already created (own mistake)
- ED_mesh_color_add initialized tessface vertex colors from the loop color array
also made rna's mesh.tessface_vertex_colors.new() work like tessface_uv_textures.new()
where layers can be added as long as polygons are not present.
Modified Paths:
--------------
trunk/blender/source/blender/editors/mesh/mesh_data.c
trunk/blender/source/blender/makesrna/intern/rna_mesh.c
Modified: trunk/blender/source/blender/editors/mesh/mesh_data.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/mesh_data.c 2012-03-15 04:08:57 UTC (rev 44892)
+++ trunk/blender/source/blender/editors/mesh/mesh_data.c 2012-03-15 05:40:33 UTC (rev 44893)
@@ -421,7 +421,7 @@
if(me->mloopcol) {
CustomData_add_layer_named(&me->ldata, CD_MLOOPCOL, CD_DUPLICATE, me->mloopcol, me->totloop, name);
- CustomData_add_layer_named(&me->fdata, CD_MCOL, CD_DUPLICATE, me->mloopcol, me->totface, name);
+ CustomData_add_layer_named(&me->fdata, CD_MCOL, CD_DUPLICATE, me->mcol, me->totface, name);
}
else {
CustomData_add_layer_named(&me->ldata, CD_MLOOPCOL, CD_DEFAULT, NULL, me->totloop, name);
@@ -757,12 +757,13 @@
{
int *polyindex = NULL;
float (*face_nors)[3];
+ int tessface_input = FALSE;
if(mesh->totface > 0 && mesh->totpoly == 0) {
convert_mfaces_to_mpolys(mesh);
/* would only be converting back again, dont bother */
- calc_tessface = FALSE;
+ tessface_input = TRUE;
/* it also happens that converting the faces calculates edges, skip this */
calc_edges = FALSE;
@@ -772,7 +773,9 @@
BKE_mesh_calc_edges(mesh, calc_edges);
if (calc_tessface) {
- BKE_mesh_tessface_calc(mesh);
+ if (tessface_input == FALSE) {
+ BKE_mesh_tessface_calc(mesh);
+ }
}
else {
/* default state is not to have tessface's so make sure this is the case */
Modified: trunk/blender/source/blender/makesrna/intern/rna_mesh.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_mesh.c 2012-03-15 04:08:57 UTC (rev 44892)
+++ trunk/blender/source/blender/makesrna/intern/rna_mesh.c 2012-03-15 05:40:33 UTC (rev 44893)
@@ -666,7 +666,7 @@
{
Mesh *me = rna_mesh(ptr);
CustomDataLayer *layer = (CustomDataLayer *)ptr->data;
- rna_iterator_array_begin(iter, layer->data, sizeof(CD_MCOL), me->totface, 0, NULL);
+ rna_iterator_array_begin(iter, layer->data, sizeof(MCol) * 4, me->totface, 0, NULL);
}
static int rna_MeshColorLayer_data_length(PointerRNA *ptr)
@@ -703,7 +703,7 @@
{
Mesh *me = rna_mesh(ptr);
CustomDataLayer *layer = (CustomDataLayer*)ptr->data;
- rna_iterator_array_begin(iter, layer->data, sizeof(CD_MLOOPCOL), me->totloop, 0, NULL);
+ rna_iterator_array_begin(iter, layer->data, sizeof(MLoopCol), me->totloop, 0, NULL);
}
static int rna_MeshLoopColorLayer_data_length(PointerRNA *ptr)
@@ -1178,6 +1178,35 @@
return ptr;
}
+static PointerRNA rna_Mesh_tessface_vertex_color_new(struct Mesh *me, struct bContext *C, ReportList *reports,
+ const char *name)
+{
+ PointerRNA ptr;
+ CustomData *fdata;
+ CustomDataLayer *cdl= NULL;
+ int index;
+
+ if (me->edit_btmesh) {
+ BKE_report(reports, RPT_ERROR, "Can't add tessface colors's in editmode");
+ return PointerRNA_NULL;
+ }
+
+ if (me->mpoly) {
+ BKE_report(reports, RPT_ERROR, "Can't add tessface colors's when MPoly's exist");
+ return PointerRNA_NULL;
+ }
+
+ index = ED_mesh_color_add(C, NULL, NULL, me, name, FALSE);
+
+ if(index != -1) {
+ fdata = rna_mesh_fdata_helper(me);
+ cdl = &fdata->layers[CustomData_get_layer_index_n(fdata, CD_MCOL, index)];
+ }
+
+ RNA_pointer_create(&me->id, &RNA_MeshColorLayer, cdl, &ptr);
+ return ptr;
+}
+
static PointerRNA rna_Mesh_int_property_new(struct Mesh *me, struct bContext *C, const char *name)
{
PointerRNA ptr;
@@ -1242,7 +1271,7 @@
/* while this is supposed to be readonly,
* keep it to support importers that only make tessfaces */
-static PointerRNA rna_Mesh_uv_tessface_texture_new(struct Mesh *me, struct bContext *C, ReportList *reports,
+static PointerRNA rna_Mesh_tessface_uv_texture_new(struct Mesh *me, struct bContext *C, ReportList *reports,
const char *name)
{
PointerRNA ptr;
@@ -1263,8 +1292,8 @@
index = ED_mesh_uv_texture_add(C, me, name, FALSE);
if(index != -1) {
- fdata= rna_mesh_fdata_helper(me);
- cdl= &fdata->layers[CustomData_get_layer_index_n(fdata, CD_MTFACE, index)];
+ fdata = rna_mesh_fdata_helper(me);
+ cdl = &fdata->layers[CustomData_get_layer_index_n(fdata, CD_MTFACE, index)];
}
RNA_pointer_create(&me->id, &RNA_MeshTextureFaceLayer, cdl, &ptr);
@@ -2192,14 +2221,23 @@
StructRNA *srna;
PropertyRNA *prop;
- /* FunctionRNA *func; */
- /* PropertyRNA *parm; */
+ FunctionRNA *func;
+ PropertyRNA *parm;
RNA_def_property_srna(cprop, "VertexColors");
srna = RNA_def_struct(brna, "VertexColors", NULL);
RNA_def_struct_sdna(srna, "Mesh");
RNA_def_struct_ui_text(srna, "Vertex Colors", "Collection of vertex colors");
+ /* eventually deprecate this */
+ func = RNA_def_function(srna, "new", "rna_Mesh_tessface_vertex_color_new");
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
+ RNA_def_function_ui_description(func, "Add a vertex color layer to Mesh");
+ RNA_def_string(func, "name", "Col", 0, "", "Vertex color name");
+ parm = RNA_def_pointer(func, "layer", "MeshColorLayer", "", "The newly created layer");
+ RNA_def_property_flag(parm, PROP_RNAPTR);
+ RNA_def_function_return(func, parm);
+
prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_UNSIGNED);
RNA_def_property_struct_type(prop, "MeshColorLayer");
RNA_def_property_pointer_funcs(prop, "rna_Mesh_tessface_vertex_color_active_get",
@@ -2366,7 +2404,7 @@
RNA_def_struct_ui_text(srna, "UV Maps", "Collection of UV maps for tessellated faces");
/* eventually deprecate this */
- func= RNA_def_function(srna, "new", "rna_Mesh_uv_tessface_texture_new");
+ func= RNA_def_function(srna, "new", "rna_Mesh_tessface_uv_texture_new");
RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Add a UV tessface-texture layer to Mesh (only for meshes with no polygons)");
RNA_def_string(func, "name", "UVMap", 0, "", "UV map name");
More information about the Bf-blender-cvs
mailing list