[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