[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49156] branches/soc-2012-bratwurst/source /blender/editors/uvedit/uvedit_unwrap_ops.c: Mirrored unwrap

Antony Riakiotakis kalast at gmail.com
Mon Jul 23 23:09:13 CEST 2012


Revision: 49156
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49156
Author:   psy-fi
Date:     2012-07-23 21:09:13 +0000 (Mon, 23 Jul 2012)
Log Message:
-----------
Mirrored unwrap
================
* better support for regular unwrap, fixed incorrect indices of edges
when calculating seams, made it possible to take seam on mirror border
into account so that mirrored part can be "cut" during unwrapping.

Modified Paths:
--------------
    branches/soc-2012-bratwurst/source/blender/editors/uvedit/uvedit_unwrap_ops.c

Modified: branches/soc-2012-bratwurst/source/blender/editors/uvedit/uvedit_unwrap_ops.c
===================================================================
--- branches/soc-2012-bratwurst/source/blender/editors/uvedit/uvedit_unwrap_ops.c	2012-07-23 20:46:27 UTC (rev 49155)
+++ branches/soc-2012-bratwurst/source/blender/editors/uvedit/uvedit_unwrap_ops.c	2012-07-23 21:09:13 UTC (rev 49156)
@@ -213,12 +213,14 @@
                                            short correct_aspect, short mirrored)
 {
 	DerivedMesh *init_derived, *mirr_derived;
-	int tot_faces;
+	int tot_faces, tot_edges;
 	int *orig_verts;
+	int *orig_edges;
 	int *orig_faces;
 	MPoly *face_array;
 	MVert *vert_array;
 	MLoop *loop_array;
+	MEdge *edge_array;
 	BMEditMesh *em;
 	ScanFillContext sf_ctx;
 	ParamHandle *handle;
@@ -265,15 +267,18 @@
 			init_derived->release(init_derived);
 
 		tot_faces = mirr_derived->getNumPolys(mirr_derived);
+		tot_edges = mirr_derived->getNumEdges(mirr_derived);
 		orig_verts = CustomData_get_layer(&mirr_derived->vertData, CD_ORIGINDEX);
 		orig_faces = CustomData_get_layer(&mirr_derived->polyData, CD_ORIGINDEX);
+		orig_edges = CustomData_get_layer(&mirr_derived->edgeData, CD_ORIGINDEX);
 		face_array = mirr_derived->getPolyArray(mirr_derived);
 		loop_array = mirr_derived->getLoopArray(mirr_derived);
 		vert_array = mirr_derived->getVertArray(mirr_derived);
+		edge_array = mirr_derived->getEdgeArray(mirr_derived);
 	} else {
 		tot_faces = em->bm->totface;
 	}
-	EDBM_index_arrays_init(em, 0, 0, 1);
+	EDBM_index_arrays_init(em, 0, 1, 1);
 
 	BLI_srand(0);
 	
@@ -429,21 +434,33 @@
 	}
 
 	if (!implicit) {
-		BM_ITER_MESH (eed, &iter, em->bm, BM_EDGES_OF_MESH) {
-			if (BM_elem_flag_test(eed, BM_ELEM_SEAM)) {
-				ParamKey vkeys[2];
-				vkeys[0] = (ParamKey)BM_elem_index_get(eed->v1);
-				vkeys[1] = (ParamKey)BM_elem_index_get(eed->v2);
-				param_edge_set_seam(handle, vkeys);
+		if(!mirrored) {
+			BM_ITER_MESH (eed, &iter, em->bm, BM_EDGES_OF_MESH) {
+				if (BM_elem_flag_test(eed, BM_ELEM_SEAM)) {
+					ParamKey vkeys[2];
+					vkeys[0] = (ParamKey)BM_elem_index_get(eed->v1);
+					vkeys[1] = (ParamKey)BM_elem_index_get(eed->v2);
+					param_edge_set_seam(handle, vkeys);
+				}
 			}
+		} else {
+			for (fi = 0; fi < tot_edges; fi++) {
+				eed = EDBM_edge_at_index(em, orig_edges[fi]);
+				if (BM_elem_flag_test(eed, BM_ELEM_SEAM)) {
+					ParamKey vkeys[2];
+					vkeys[0] = (ParamKey)edge_array[fi].v1;
+					vkeys[1] = (ParamKey)edge_array[fi].v2;
+					param_edge_set_seam(handle, vkeys);
+				}
+			}
 		}
 	}
 
 	if(mirrored)
 		mirr_derived->release(mirr_derived);
-	else
-		EDBM_index_arrays_free(em);
 
+	EDBM_index_arrays_free(em);
+
 	param_construct_end(handle, fill, implicit);
 
 	return handle;




More information about the Bf-blender-cvs mailing list