[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37683] branches/soc-2011-onion/source/ blender/editors/uvedit/uvedit_ops.c: smart welding - add vertices with v( subject to change).

Antony Riakiotakis kalast at gmail.com
Tue Jun 21 04:02:20 CEST 2011


Revision: 37683
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37683
Author:   psy-fi
Date:     2011-06-21 02:02:16 +0000 (Tue, 21 Jun 2011)
Log Message:
-----------
smart welding - add vertices with v(subject to change). There are issues with vertices not registered right will correct ASAP

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

Modified: branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_ops.c
===================================================================
--- branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_ops.c	2011-06-21 01:41:39 UTC (rev 37682)
+++ branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_ops.c	2011-06-21 02:02:16 UTC (rev 37683)
@@ -1221,7 +1221,7 @@
 	StitchPreviewer *preview = uv_get_stitch_previewer();
 	UVVertAverage *uv_average;
 	GHash *vertices = state->vertices;
-	GHash *faces = state->faces;
+	GHash *faces = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "stitch_operator_faces");
 	UvVertMap *vmap = state->vmap;
 	int numOfPoints = 0;
 	GHashIterator *ghiter;
@@ -1229,30 +1229,19 @@
 	int averageBufferIterator = 0;
 	EditFace *efa;
 	MTFace *mt;
+	short preview_enabled = preview->enabled;
 
 	/* cleanup previous preview(if any) */
-	if(preview->previewQuads){
-		MEM_freeN(preview->previewQuads);
-		preview->previewQuads = NULL;
-	}
-	if(preview->previewTris){
-		MEM_freeN(preview->previewTris);
-		preview->previewTris = NULL;
-	}
-	if(preview->previewPoints){
-		MEM_freeN(preview->previewPoints);
-		preview->previewPoints = NULL;
-	}
-	if(preview->previewPointColors){
-		MEM_freeN(preview->previewPointColors);
-		preview->previewPointColors = NULL;
-	}
-	ghiter = BLI_ghashIterator_new(faces);
+	stitch_preview_delete();
+	preview = stitch_preview_init();
+	preview->enabled = preview_enabled;
 
-	uv_average = MEM_callocN(sizeof(UVVertAverage)*BLI_ghash_size(vertices), "stitch_averages");
+	EM_init_index_arrays(state->em, 0, 0, 1);
 
-	BLI_ghashIterator_init(ghiter, vertices);
+	ghiter = BLI_ghashIterator_new(vertices);
 
+	uv_average = MEM_callocN(sizeof(UVVertAverage)*BLI_ghash_size(vertices), "stitch_averages");
+
 	/* Count number of points/faces so that we allocate appropriate buffer */
 	for( ; !BLI_ghashIterator_isDone(ghiter); BLI_ghashIterator_step(ghiter), averageBufferIterator++){
 		EditVert *editVert =  BLI_ghashIterator_getKey(ghiter);
@@ -1262,18 +1251,15 @@
 			efa = EM_get_face_for_index(mapVert->f);
 			mt = CustomData_em_get(&state->em->fdata, efa->data, CD_MTFACE);
 
-			efa = EM_get_face_for_index(mapVert->f);
-			mt = CustomData_em_get(&state->em->fdata, efa->data, CD_MTFACE);
-
 			uv_average[averageBufferIterator].count++;
 			uv_average[averageBufferIterator].uv[0] += mt->uv[mapVert->tfindex][0];
 			uv_average[averageBufferIterator].uv[1] += mt->uv[mapVert->tfindex][1];
 
 			mapVert = mapVert->next;
 			numOfPoints++;
-			if(!BLI_ghash_haskey(faces, efa))
-			{
+			if(!BLI_ghash_haskey(faces, efa)){
 				BLI_ghash_insert(faces, efa, NULL);
+
 				/* store position in the preview buffer */
 				if(efa->v4)
 				{
@@ -1291,8 +1277,8 @@
 		/* Initialize the preview buffers */
 	preview->previewQuads = (float *)MEM_mallocN(preview->numOfQuads*sizeof(float)*8, "quad_uv_stitch_prev");
 	preview->previewTris = (float *)MEM_mallocN(preview->numOfTris*sizeof(float)*6, "tri_uv_stitch_prev");
-	preview->previewPoints = MEM_mallocN(numOfPoints*sizeof(float)*2, "stitch_preview_points");
-	preview->previewPointColors = MEM_mallocN(numOfPoints*sizeof(unsigned int)*2, "stitch_preview_point_colors");
+	preview->previewPoints = (float *)MEM_mallocN(numOfPoints*sizeof(float)*2, "stitch_preview_points");
+	preview->previewPointColors = (float *)MEM_mallocN(numOfPoints*sizeof(unsigned int), "stitch_preview_point_colors");
 
 	BLI_ghashIterator_init(ghiter, faces);
 
@@ -1310,6 +1296,8 @@
 		}
 	}
 
+	BLI_ghash_free(faces, NULL, NULL);
+
 	BLI_ghashIterator_init(ghiter, vertices);
 	for(averageBufferIterator = 0; !BLI_ghashIterator_isDone(ghiter); BLI_ghashIterator_step(ghiter), averageBufferIterator++){
 			short stitchable;
@@ -1342,6 +1330,8 @@
 
 	MEM_freeN(uv_average);
 
+	EM_free_index_arrays();
+
 	BLI_ghashIterator_free(ghiter);
 }
 
@@ -1365,7 +1355,6 @@
 	stitch_state->use_limit = RNA_boolean_get(op->ptr, "use_limit");
 	stitch_state->limitDist = RNA_float_get(op->ptr, "limit");
 	stitch_state->vertices = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "stitch_operator_vertices");
-	stitch_state->faces = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "stitch_operator_faces");
 	stitch_state->em = em = BKE_mesh_get_editmesh((Mesh*)obedit->data);
 
 	EM_init_index_arrays(stitch_state->em, 0, 0, 1);
@@ -1397,15 +1386,15 @@
 	for(; !BLI_ghashIterator_isDone(ghiter); BLI_ghashIterator_step(ghiter)){
 		EditVert *vert = BLI_ghashIterator_getKey(ghiter);
 		if(!BLI_ghash_haskey(stitch_state->vertices, vert));
-		BLI_ghash_insert(stitch_state->vertices, vert, NULL);
+			BLI_ghash_insert(stitch_state->vertices, vert, NULL);
 	}
 	BLI_ghashIterator_free(ghiter);
 
 	BLI_ghash_free(tempHash, NULL, NULL);
+	EM_free_index_arrays();
 
 	stitch_prepare_preview_data(stitch_state);
 
-	EM_free_index_arrays();
 	stitch_update_header(stitch_state, C);
 	return 1;
 }
@@ -1691,7 +1680,6 @@
 	EM_free_uv_vert_map(stitch_state->vmap);
 
 	BLI_ghash_free(stitch_state->vertices, NULL, NULL);
-	BLI_ghash_free(stitch_state->faces, NULL, NULL);
 	BKE_mesh_end_editmesh(obedit->data, stitch_state->em);
 
 	if(sa)
@@ -1774,7 +1762,6 @@
 			if(event->val == KM_PRESS){
 				/* add uv under mouse to processed uv's */
 				float co[2];
-				//EditVert *vert;
 				NearestHit hit;
 				ARegion *ar= CTX_wm_region(C);
 				Image *ima= CTX_data_edit_image(C);
@@ -1784,13 +1771,15 @@
 				find_nearest_uv_vert(scene, ima, stitch_state->em, co, NULL, &hit);
 				if(hit.efa)
 				{
-					/*todo add display update for selected verts */
-					/*todo add to preview faces too*/
-					BLI_ghash_insert(stitch_state->vertices, &((hit.efa->v1+hit.vert)->tmp.l), NULL);
-					BLI_ghash_insert(stitch_state->faces, hit.efa, NULL);
+					EditVert *vert = hit.efa->v1+hit.uv;
+					/* This looks like recipe for trouble...sigh! */
+					vert->tmp.l = hit.vert;
+					if(!BLI_ghash_haskey(stitch_state->vertices, vert))
+						BLI_ghash_insert(stitch_state->vertices, vert, NULL);
 				}
+				stitch_prepare_preview_data(stitch_state);
 			}
-			return OPERATOR_RUNNING_MODAL;
+			break;
 
 		/* turn preview on/off */
 		case PKEY:




More information about the Bf-blender-cvs mailing list