[Bf-blender-cvs] [d5647a3] master: BoxPack: flag verts used in packed boxes

Campbell Barton noreply at git.blender.org
Thu Apr 24 19:24:07 CEST 2014


Commit: d5647a37b4ba74f4d3255257e35b8fa2049ded92
Author: Campbell Barton
Date:   Fri Apr 25 01:31:52 2014 +1000
https://developer.blender.org/rBd5647a37b4ba74f4d3255257e35b8fa2049ded92

BoxPack: flag verts used in packed boxes

===================================================================

M	source/blender/blenlib/intern/boxpack2d.c

===================================================================

diff --git a/source/blender/blenlib/intern/boxpack2d.c b/source/blender/blenlib/intern/boxpack2d.c
index aa90b5e..1d9d040 100644
--- a/source/blender/blenlib/intern/boxpack2d.c
+++ b/source/blender/blenlib/intern/boxpack2d.c
@@ -45,8 +45,9 @@ typedef struct BoxVert {
 	float x;
 	float y;
 
-	int free : 8;  /* vert status */
-	int pad  : 24;
+	int          free : 8;  /* vert status */
+	unsigned int used : 1;
+	unsigned int _pad : 23;
 	unsigned int index;
 
 	struct BoxPack *trb; /* top right box */
@@ -199,6 +200,7 @@ void BLI_box_pack_2d(BoxPack *boxarray, const unsigned int len, float *tot_width
 		            vert->isect_cache[2] = vert->isect_cache[3] = NULL;
 		vert->free = CORNERFLAGS & ~TRF;
 		vert->trb = box;
+		vert->used = false;
 		vert->index = i++;
 		box->v[BL] = vert; vert++;
 		
@@ -207,6 +209,7 @@ void BLI_box_pack_2d(BoxPack *boxarray, const unsigned int len, float *tot_width
 		            vert->isect_cache[2] = vert->isect_cache[3] = NULL;
 		vert->free = CORNERFLAGS & ~BLF;
 		vert->blb = box;
+		vert->used = false;
 		vert->index = i++;
 		box->v[TR] = vert; vert++;
 		
@@ -215,6 +218,7 @@ void BLI_box_pack_2d(BoxPack *boxarray, const unsigned int len, float *tot_width
 		            vert->isect_cache[2] = vert->isect_cache[3] = NULL;
 		vert->free = CORNERFLAGS & ~BRF;
 		vert->brb = box;
+		vert->used = false;
 		vert->index = i++;
 		box->v[TL] = vert; vert++;
 		
@@ -222,7 +226,8 @@ void BLI_box_pack_2d(BoxPack *boxarray, const unsigned int len, float *tot_width
 		            vert->isect_cache[0] = vert->isect_cache[1] =
 		            vert->isect_cache[2] = vert->isect_cache[3] = NULL;
 		vert->free = CORNERFLAGS & ~TLF;
-		vert->tlb = box; 
+		vert->tlb = box;
+		vert->used = false;
 		vert->index = i++;
 		box->v[BR] = vert; vert++;
 	}
@@ -245,6 +250,10 @@ void BLI_box_pack_2d(BoxPack *boxarray, const unsigned int len, float *tot_width
 	SET_BOXBOTTOM(box, 0.0f);
 	box->x = box->y = 0.0f;
 
+	for (i = 0; i < 4; i++) {
+		box->v[i]->used = true;
+	}
+
 	for (i = 0; i < 3; i++)
 		vertex_pack_indices[i] = box->v[i + 1]->index;
 	verts_pack_len = 3;
@@ -428,7 +437,8 @@ void BLI_box_pack_2d(BoxPack *boxarray, const unsigned int len, float *tot_width
 						/* End logical check */
 
 						for (k = 0; k < 4; k++) {
-							if (box->v[k] != vert) {
+							if (box->v[k]->used == false) {
+								box->v[k]->used = true;
 								vertex_pack_indices[verts_pack_len] = box->v[k]->index;
 								verts_pack_len++;
 							}




More information about the Bf-blender-cvs mailing list