[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37565] branches/soc-2011-onion/source/ blender/editors/uvedit/uvedit_unwrap_ops.c: Fix for subsurfed unwrapper.

Ryakiotakis Antonis kalast at gmail.com
Thu Jun 16 20:27:20 CEST 2011


Revision: 37565
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37565
Author:   psy-fi
Date:     2011-06-16 18:27:20 +0000 (Thu, 16 Jun 2011)
Log Message:
-----------
Fix for subsurfed unwrapper. Subsurfed vertices now sample the pin and selected flags of the originals, if they exist

Modified Paths:
--------------
    branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_unwrap_ops.c

Modified: branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_unwrap_ops.c
===================================================================
--- branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_unwrap_ops.c	2011-06-16 18:25:41 UTC (rev 37564)
+++ branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_unwrap_ops.c	2011-06-16 18:27:20 UTC (rev 37565)
@@ -248,17 +248,28 @@
 }
 
 
-static float *get_TexFace_UV_from_Index(EditFace *editFace, MTFace *texFace, int index)
+static void get_TexFace_Attributes_from_Index(EditFace *editFace, MTFace *texFace, int index, float **uv, ParamBool *pin, ParamBool *select, Scene *scene)
 {
-	if(editFace->v1->tmp.t == index)
-		return texFace->uv[0];
-	else if(editFace->v2->tmp.t == index)
-		return texFace->uv[1];
-	else if(editFace->v3->tmp.t == index)
-			return texFace->uv[2];
-	else if(editFace->v4 && editFace->v4->tmp.t == index)
-			return texFace->uv[3];
-	return NULL;
+	if(editFace->v1->tmp.t == index){
+		*uv = texFace->uv[0];
+		*pin = ((texFace->unwrap & TF_PIN1) != 0);
+		*select = (uvedit_uv_selected(scene, editFace, texFace, 0) != 0);
+	}
+	else if(editFace->v2->tmp.t == index){
+		*uv = texFace->uv[1];
+		*pin = ((texFace->unwrap & TF_PIN2) != 0);
+		*select = (uvedit_uv_selected(scene, editFace, texFace, 1) != 0);
+	}
+	else if(editFace->v3->tmp.t == index){
+		*uv = texFace->uv[2];
+		*pin = ((texFace->unwrap & TF_PIN3) != 0);
+		*select = (uvedit_uv_selected(scene, editFace, texFace, 2) != 0);
+	}
+	else if(editFace->v4 && editFace->v4->tmp.t == index){
+		*uv = texFace->uv[3];
+		*pin = ((texFace->unwrap & TF_PIN4) != 0);
+		*select = (uvedit_uv_selected(scene, editFace, texFace, 3) != 0);
+	}
 }
 
 
@@ -412,24 +423,11 @@
 			!(	uvedit_uv_selected(scene, origFace, origtexface, 0) ||
 				uvedit_uv_selected(scene, origFace, origtexface, 1) ||
 				uvedit_uv_selected(scene, origFace, origtexface, 2) ||
-				(faceMap[i]->v4 && uvedit_uv_selected(scene, origFace, origtexface, 3)) )
+				(origFace->v4 && uvedit_uv_selected(scene, origFace, origtexface, 3)) )
 		) {
 			continue;
 		}
 
-		select[0] = (uvedit_uv_selected(scene, origFace, origtexface, 0) != 0);
-		select[1] = (uvedit_uv_selected(scene, origFace, origtexface, 1) != 0);
-		select[2] = (uvedit_uv_selected(scene, origFace, origtexface, 2) != 0);
-
-		/* pinning is based upon original face */
-		pin[0] = ((texface->unwrap & TF_PIN1) != 0);
-		pin[1] = ((texface->unwrap & TF_PIN2) != 0);
-		pin[2] = ((texface->unwrap & TF_PIN3) != 0);
-		if(origFace->v4){
-			select[3] = (uvedit_uv_selected(scene, origFace, texface, 3) != 0);
-			pin[3] = ((texface->unwrap & TF_PIN4) != 0);
-		}
-
 		/* Now we feed the rest of the data from the subsurfed faces */
 		texface= subsurfedTexfaces+i;
 
@@ -449,24 +447,32 @@
 		 * flushing the solution to the edit mesh. */
 		if(origVertIndices[face->v1] == -1){
 			uv[0] = texface->uv[0];
+			pin[0] = 0;
+			select[0] = !!1;
 		}
 		else{
-			uv[0] = get_TexFace_UV_from_Index(origFace, origtexface, origVertIndices[face->v1]);
+			 get_TexFace_Attributes_from_Index(origFace, origtexface, origVertIndices[face->v1], &uv[0], &pin[0], &select[0], scene);
 		}
 		if(origVertIndices[face->v2] == -1){
 			uv[1] = texface->uv[1];
+			pin[1] = 0;
+			select[1] = !!1;
 		} else{
-			uv[1] = get_TexFace_UV_from_Index(origFace, origtexface, origVertIndices[face->v2]);
+			get_TexFace_Attributes_from_Index(origFace, origtexface, origVertIndices[face->v2], &uv[1], &pin[1], &select[1], scene);
 		}
 		if(origVertIndices[face->v3] == -1){
 			uv[2] = texface->uv[2];
+			pin[2] = 0;
+			select[2] = !!1;
 		} else{
-			uv[2] = get_TexFace_UV_from_Index(origFace, origtexface, origVertIndices[face->v3]);
+			get_TexFace_Attributes_from_Index(origFace, origtexface, origVertIndices[face->v3], &uv[2], &pin[2], &select[2], scene);
 		}
 		if(origVertIndices[face->v4] == -1){
 			uv[3] = texface->uv[3];
+			pin[3] = 0;
+			select[3] = !!1;
 		} else{
-			uv[3] = get_TexFace_UV_from_Index(origFace, origtexface, origVertIndices[face->v4]);
+			get_TexFace_Attributes_from_Index(origFace, origtexface, origVertIndices[face->v4], &uv[3], &pin[3], &select[3], scene);
 		}
 
 		param_face_add(handle, key, 4, vkeys, co, uv, pin, select);




More information about the Bf-blender-cvs mailing list