[Bf-blender-cvs] [76036cd] soc-2016-uv_tools: Fix for "face stepping" behaviour of path calculation
Phil Gosch
noreply at git.blender.org
Tue Jun 7 14:02:04 CEST 2016
Commit: 76036cd1305cb2119f8b319ea4c8e24aed029cb5
Author: Phil Gosch
Date: Tue Jun 7 14:01:30 2016 +0200
Branches: soc-2016-uv_tools
https://developer.blender.org/rB76036cd1305cb2119f8b319ea4c8e24aed029cb5
Fix for "face stepping" behaviour of path calculation
Since parametrizer operates on triangles, diagonal edges of quads have to be tagged and not taken into calculation of shortest path
===================================================================
M source/blender/editors/uvedit/uvedit_ops.c
M source/blender/editors/uvedit/uvedit_parametrizer.c
===================================================================
diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c
index c720834..a559fe2 100644
--- a/source/blender/editors/uvedit/uvedit_ops.c
+++ b/source/blender/editors/uvedit/uvedit_ops.c
@@ -1605,13 +1605,12 @@ static void UV_OT_select_shortest_path(wmOperatorType *ot)
{
/* identifiers */
ot->name = "Select Shortest Path";
- ot->description = "Select the shortest path between the current selection";
+ ot->description = "Select the shortest path between the current selected vertices";
ot->idname = "UV_OT_select_shortest_path";
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
/* api callbacks */
ot->exec = uv_shortest_path_exec;
- //ot->poll = ED_operator_uvedit_space_image;
ot->poll = ED_operator_uvedit;
}
diff --git a/source/blender/editors/uvedit/uvedit_parametrizer.c b/source/blender/editors/uvedit/uvedit_parametrizer.c
index 9e55217..9236edf 100644
--- a/source/blender/editors/uvedit/uvedit_parametrizer.c
+++ b/source/blender/editors/uvedit/uvedit_parametrizer.c
@@ -684,7 +684,7 @@ static void p_flush_uvs(PHandle *handle, PChart *chart)
/* ToDo (SaphireS): Find sensible variable names*/
int MLOOPEDGE_SELECTED = (1 << 0); /* MLOOPUV_EDGESEL*/
int MLOOPVERT_SELECTED = (1 << 1); /* MLOOPUV_VERTSEL*/
- printf("--- DEBUG (SaphireS): p_flush_uvs() reached\n");
+
for (e = chart->edges; e; e = e->nextlink) {
if (e->orig_uv) {
e->orig_uv[0] = e->vert->uv[0] / handle->aspx;
@@ -693,16 +693,10 @@ static void p_flush_uvs(PHandle *handle, PChart *chart)
/* ToDo (SaphireS): Move to own p_flush_uvs_selection() function ?*/
if (e->flag & PEDGE_SELECT) {
- //if (e->orig_flag) {
- printf("--- DEBUG (SaphireS): PEDGE_SELECT tagged edge found\n");
- //printf("---param_flush_uvs: orig_flag found\n");
- sel_flag = *e->orig_flag;
- sel_flag |= MLOOPEDGE_SELECTED;/* MLOOPUV_EDGESEL*/
- sel_flag |= MLOOPVERT_SELECTED; /* MLOOPUV_VERTSEL*/
- printf("--- DEBUG (SaphireS): before *(e->orig_flag) = sel_flag;\n");
- *(e->orig_flag) = sel_flag; //sel_flag
- printf("--- DEBUG (SaphireS): after *(e->orig_flag) = sel_flag;\n");
- //}
+ sel_flag = *e->orig_flag;
+ sel_flag |= MLOOPEDGE_SELECTED;/* MLOOPUV_EDGESEL*/
+ sel_flag |= MLOOPVERT_SELECTED; /* MLOOPUV_VERTSEL*/
+ *(e->orig_flag) = sel_flag;
}
}
}
@@ -4766,15 +4760,13 @@ void p_verttag_add_adjacent(Heap *heap, PChart *chart, PVert *v_a, PVert **v_pre
lastwe = e;
for (we = p_wheel_edge_prev(e); we && (we != e); we = p_wheel_edge_prev(we)) {
lastwe = we;
- //printf("rewind to edge of vert: %i\n", we->vert->u.id);
}
we = lastwe;
- //for (we = lastwe; we; we = p_wheel_edge_next(we)) {
do {
PVert *v_b = we->next->vert;
//printf("----add_adjacent considering v_b: %i\n", v_b->u.id);
- if (!(v_b->flag & PVERT_MARKED)) {
+ if (!(v_b->flag & PVERT_MARKED) && !(we->flag & PEDGE_DIAG )) {
/* v_b not visited yet, check it out! */
const int v_b_index = v_b->u.id;
const float cost_cut = len_v2v2(v_a->uv, v_b->uv); /* params->use_topology_distance ? 1.0f : len_v2v2(v_a->uv, v_b->uv); */
@@ -4789,7 +4781,6 @@ void p_verttag_add_adjacent(Heap *heap, PChart *chart, PVert *v_a, PVert **v_pre
we = p_wheel_edge_next(we);
} while (we && (we != lastwe));
- //}
}
LinkNode* p_calc_path_vert(PChart *chart, PVert *src, PVert *dst)
@@ -4804,7 +4795,7 @@ LinkNode* p_calc_path_vert(PChart *chart, PVert *src, PVert *dst)
/* Clear flags */
for (vert = chart->verts, index = 0; vert; vert = vert->nextlink, index++) {
vert->flag &= ~PVERT_MARKED;
- vert->u.id = index; /* Abuse lscm id field */
+ vert->u.id = index; /* Re-use lscm id field */
}
/* alloc */
@@ -4845,8 +4836,10 @@ LinkNode* p_calc_path_vert(PChart *chart, PVert *src, PVert *dst)
return path;
}
-void p_vert_select_edges(PVert* v)
+void p_vert_select_edges(PVert* v, bool recursive)
{
+ //printf("reached p_vert_select_edges() for %i --\n", v->u.id);
+
v->flag |= PVERT_SELECT;
PEdge *e = v->edge;
e->flag |= PEDGE_SELECT;
@@ -4899,8 +4892,6 @@ void param_shortest_path(ParamHandle *handle, bool *p_found)
//}
}
}
-
- /* ToDo (SaphireS): Possible that more than one instance of src selected in different charts */
}
}
@@ -4910,14 +4901,15 @@ void param_shortest_path(ParamHandle *handle, bool *p_found)
//printf("start path computation!\n");
path = p_calc_path_vert(current_chart, vert_src, vert_dst);
if (path) {
- //printf("--- DEBUG (SaphireS): path found\n");
LinkNode *node = NULL;
node = path;
+
do {
- //printf("---tagging vert/edge for selection\n");
PVert *v = node->link;
- p_vert_select_edges(v);
+ p_vert_select_edges(v, false);
+
} while (node = node->next);
+
success = true;
BLI_linklist_free(path, NULL);
}
More information about the Bf-blender-cvs
mailing list