[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33200] trunk/blender/source/blender/ blenkernel/intern/multires.c: == Multires ==

Nicholas Bishop nicholasbishop at gmail.com
Sat Nov 20 19:54:58 CET 2010


Revision: 33200
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33200
Author:   nicholasbishop
Date:     2010-11-20 19:54:58 +0100 (Sat, 20 Nov 2010)

Log Message:
-----------
== Multires ==

Fixed bug #20620, "VertColors and Flat/Soft imported from 2.49 are wrong
(MultiRes)" reported by Manuel R.

* Added function to load level-0 vertex colors
* Added function to load level-0 face flags
* Warning: the 2.5 multires modifier doesn't support multires vertex colors
  or multires face flags; that data will be lost if you import it into 2.5.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/multires.c

Modified: trunk/blender/source/blender/blenkernel/intern/multires.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/multires.c	2010-11-20 18:46:36 UTC (rev 33199)
+++ trunk/blender/source/blender/blenkernel/intern/multires.c	2010-11-20 18:54:58 UTC (rev 33200)
@@ -1325,7 +1325,53 @@
 	multires_mvert_to_ss(dm, vdst);
 }
 
+/* Copy the first-level vcol data to the mesh, if it exists */
+/* Warning: higher-level vcol data will be lost */
+static void multires_load_old_vcols(Mesh *me)
+{
+	MultiresLevel *lvl;
+	MultiresColFace *colface;
+	MCol *mcol;
+	int i, j;
 
+	if(!(lvl = me->mr->levels.first))
+		return;
+
+	if(!(colface = lvl->colfaces))
+		return;
+
+	/* older multires format never supported multiple vcol layers,
+	   so we can assume the active vcol layer is the correct one */
+	if(!(mcol = CustomData_get_layer(&me->fdata, CD_MCOL)))
+		return;
+	
+	for(i = 0; i < me->totface; ++i) {
+		for(j = 0; j < 4; ++j) {
+			mcol[i*4 + j].a = colface[i].col[j].a;
+			mcol[i*4 + j].r = colface[i].col[j].r;
+			mcol[i*4 + j].g = colface[i].col[j].g;
+			mcol[i*4 + j].b = colface[i].col[j].b;
+		}
+	}
+}
+
+/* Copy the first-level face-flag data to the mesh */
+static void multires_load_old_face_flags(Mesh *me)
+{
+	MultiresLevel *lvl;
+	MultiresFace *faces;
+	int i;
+
+	if(!(lvl = me->mr->levels.first))
+		return;
+
+	if(!(faces = lvl->faces))
+		return;
+
+	for(i = 0; i < me->totface; ++i)
+		me->mface[i].flag = faces[i].flag;
+}
+
 void multires_load_old(Object *ob, Mesh *me)
 {
 	MultiresLevel *lvl;
@@ -1386,6 +1432,9 @@
 	memset(&me->mr->vdata, 0, sizeof(CustomData));
 	memset(&me->mr->fdata, 0, sizeof(CustomData));
 
+	multires_load_old_vcols(me);
+	multires_load_old_face_flags(me);
+
 	/* Remove the old multires */
 	multires_free(me->mr);
 	me->mr= NULL;





More information about the Bf-blender-cvs mailing list