[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [39239] branches/soc-2011-onion/source/ blender/editors/sculpt_paint/paint_uv.c: adaptations on relaxation functions

Antony Riakiotakis kalast at gmail.com
Wed Aug 10 01:07:00 CEST 2011


Revision: 39239
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39239
Author:   psy-fi
Date:     2011-08-09 23:06:59 +0000 (Tue, 09 Aug 2011)
Log Message:
-----------
adaptations on relaxation functions

Modified Paths:
--------------
    branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_uv.c

Modified: branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_uv.c
===================================================================
--- branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_uv.c	2011-08-09 22:55:10 UTC (rev 39238)
+++ branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_uv.c	2011-08-09 23:06:59 UTC (rev 39239)
@@ -73,6 +73,8 @@
 	float *uv[2];
 	/* similar to uvvertmaps, holds the next uv corresponding to the vertex */
 	struct UvAdjacencyElement *next;
+	/* general use flag  */
+	char flag;
 } UvAdjacencyElement;
 
 typedef struct UvAdjacencyEdge {
@@ -87,8 +89,8 @@
  * adapted to uv smoothing by Antony Riakiatakis
  */
 
-typedef struct Temp_VertexData{
-	float sum_co[3], p[3], b[3], sum_b[3];
+typedef struct Temp_UvData{
+	float sum_co[2], p[2], b[2], sum_b[2];
 	int ncounter;
 }Temp_VertexData;
 
@@ -126,13 +128,13 @@
 }
 
 
-void HC_relaxation(bContext *C, wmOperator *op, int edges){
+void HC_relaxation(bContext *C, int edges){
 	Object *obedit= CTX_data_edit_object(C);
 	EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
-	EditVert *eve, *eve_mir = NULL;
+	EditVert *eve;
 	EditEdge *eed;
 	Temp_VertexData *adr, *adror, *data;
-	float fvec[3], diff[3], end[3], delta[3], prev_co[3];
+	float diff[2];
 	int index;
 
 	if (edges) set_border_flag(em);
@@ -147,34 +149,21 @@
 		eve= eve->next;
 	}
 
-	/* clear editvert old_co */
-	eve= em->verts.first;
-	while(eve){
-		data = ((Temp_VertexData *)eve->tmp.p);
-		zero_v3(data->sum_co);
-		zero_v3(data->sum_b);
-		zero_v3(data->p);
-
-		data->ncounter = 0; //count
-
-		eve= eve->next;
-	}
-
 	/* counting neighbors */
 	for (eed = em->edges.first; eed; eed = eed->next){
 		((Temp_VertexData *)eed->v1->tmp.p)->ncounter++;
 		((Temp_VertexData *)eed->v2->tmp.p)->ncounter++;
 
-		add_v3_v3(((Temp_VertexData *)eed->v2->tmp.p)->sum_co, eed->v1->co);
-		add_v3_v3(((Temp_VertexData *)eed->v1->tmp.p)->sum_co, eed->v2->co);
+		add_v2_v2(((Temp_VertexData *)eed->v2->tmp.p)->sum_co, eed->v1->co);
+		add_v2_v2(((Temp_VertexData *)eed->v1->tmp.p)->sum_co, eed->v2->co);
 	}
 
 	for (eve = em->verts.first; eve; eve = eve->next){
 		data = ((Temp_VertexData *)eve->tmp.p);
 
-		copy_v3_v3(diff,data->sum_co);
-		mul_v3_fl(diff,1.f/data->ncounter);
-		copy_v3_v3(data->p,diff);
+		copy_v2_v2(diff,data->sum_co);
+		mul_v2_fl(diff,1.f/data->ncounter);
+		copy_v2_v2(data->p,diff);
 
 		data->b[0] = diff[0] - eve->co[0];
 		data->b[1] = diff[1] - eve->co[1];
@@ -182,8 +171,8 @@
 	}
 
 	for (eed = em->edges.first; eed; eed = eed->next){
-		add_v3_v3(((Temp_VertexData *)eed->v1->tmp.p)->sum_b, ((Temp_VertexData *)eed->v2->tmp.p)->b);
-		add_v3_v3(((Temp_VertexData *)eed->v2->tmp.p)->sum_b, ((Temp_VertexData *)eed->v1->tmp.p)->b);
+		add_v2_v2(((Temp_VertexData *)eed->v1->tmp.p)->sum_b, ((Temp_VertexData *)eed->v2->tmp.p)->b);
+		add_v2_v2(((Temp_VertexData *)eed->v2->tmp.p)->sum_b, ((Temp_VertexData *)eed->v1->tmp.p)->b);
 	}
 
 	for (eve = em->verts.first; eve; eve = eve->next){
@@ -218,17 +207,17 @@
 	DAG_id_tag_update(obedit->data, 0);
 	WM_event_add_notifier(C, NC_GEOM|ND_DATA, obedit->data);
 
-	return OPERATOR_FINISHED;
+	return;
 }
 
-static int smooth_laplacian_uv(bContext *C, wmOperator *op, int edges)
+static int smooth_laplacian_uv(bContext *C, int edges)
 {
 	Object *obedit= CTX_data_edit_object(C);
 	EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
-	EditVert *eve, *eve_mir = NULL;
+	EditVert *eve;
 	EditEdge *eed;
 	Temp_VertexData *adr, *adror, *data;
-	float fvec[3], diff[3], end[3], delta[3], prev_co[3];
+	float delta[2], prev_co[2];
 	int index =0;
 
 	adr=adror=(Temp_VertexData *)MEM_callocN((em->totvert)* sizeof(Temp_VertexData), "Temporal data");
@@ -242,23 +231,13 @@
 	}
 	if (edges) set_border_flag(em);
 
-	/* clear editvert old_co */
-	eve= em->verts.first;
-	while(eve){
-		data = ((Temp_VertexData *)eve->tmp.p);
-		zero_v3(data->sum_co);
-		data->ncounter = 0;
-
-		eve= eve->next;
-	}
-
 	eed= em->edges.first;
 	while(eed){
 		((Temp_VertexData *)eed->v1->tmp.p)->ncounter++;
 		((Temp_VertexData *)eed->v2->tmp.p)->ncounter++;
 
-		add_v3_v3(((Temp_VertexData *)eed->v2->tmp.p)->sum_co, eed->v1->co);
-		add_v3_v3(((Temp_VertexData *)eed->v1->tmp.p)->sum_co, eed->v2->co);
+		add_v2_v2(((Temp_VertexData *)eed->v2->tmp.p)->sum_co, eed->v1->co);
+		add_v2_v2(((Temp_VertexData *)eed->v1->tmp.p)->sum_co, eed->v2->co);
 
 		eed = eed->next;
 	}
@@ -268,29 +247,16 @@
 	while(eve){
 		if (!eve->f2 && (eve->f & SELECT)){
 			data = ((Temp_VertexData *)eve->tmp.p);
-			copy_v3_v3(prev_co,eve->co);
-			mul_v3_fl(data->sum_co, 1.f/data->ncounter);
-			copy_v3_v3(eve->co, data->sum_co);
+			copy_v2_v2(prev_co,eve->co);
+			mul_v2_fl(data->sum_co, 1.f/data->ncounter);
+			copy_v2_v2(eve->co, data->sum_co);
 
 			/* remove movement along vertex normal */
-			sub_v3_v3v3(delta, eve->co,prev_co);
-			project_v3_v3v3(delta, delta, eve->no);
-			sub_v3_v3v3(eve->co,eve->co,delta);
+			sub_v2_v2v2(delta, eve->co,prev_co);
+			project_v2_v2v2(delta, delta, eve->no);
+			sub_v2_v2v2(eve->co,eve->co,delta);
 		}
 
-		/* clip if needed by mirror modifier */
-		if (eve->f2) {
-			if (eve->f2 & 4) {
-				eve->co[0]= 0.0f;
-			}
-			if (eve->f2 & 8) {
-				eve->co[1]= 0.0f;
-			}
-			if (eve->f2 & 16) {
-				eve->co[2]= 0.0f;
-			}
-		}
-
 		eve->tmp.p= NULL;
 		eve= eve->next;
 		index++;
@@ -315,8 +281,8 @@
 	if (!repeat) repeat = 1;
 
 	for (i=0; i<repeat; i++) {
-		if (relax == 1) HC_relaxation(C, op, edges);
-		else smooth_laplacian_uv(C, op, edges); //default
+		if (relax == 1) HC_relaxation(C, edges);
+		else smooth_laplacian_uv(C, edges); //default
 	}
 
 	return OPERATOR_FINISHED;
@@ -460,7 +426,7 @@
 
 static int uv_smooth_stroke_exec(bContext *C, wmOperator *op)
 {
-	Object *obedit = CTX_data_edit_object(C);
+//	Object *obedit = CTX_data_edit_object(C);
 
 	if(!uv_smooth_stroke_init(C, op)) {
 		return OPERATOR_CANCELLED;




More information about the Bf-blender-cvs mailing list