Commit: b6ab20876b08bb8e6f85253f6c569a3e5630c5ce
Author: Aurel Gruber
Date:   Thu Jan 19 16:03:34 2017 +0100
Branches: uv_unwrapping_slim_algorithm
https://developer.blender.org/rBb6ab20876b08bb8e6f85253f6c569a3e5630c5ce

Category: UV Unwrapping SLIM Algorithm Integration

preserving vertex ids and gathering weights

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

M       intern/SLIM
M       source/blender/editors/uvedit/uvedit_parametrizer.c
M       source/blender/editors/uvedit/uvedit_parametrizer.h
M       source/blender/editors/uvedit/uvedit_unwrap_ops.c

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

diff --git a/intern/SLIM b/intern/SLIM
index e897ae04d5..62a96ad0e8 160000
--- a/intern/SLIM
+++ b/intern/SLIM
@@ -1 +1 @@
-Subproject commit e897ae04d52607970344a601fc85c1329f2314ed
+Subproject commit 62a96ad0e853e1008bd971272e5f79231cd4308c
diff --git a/source/blender/editors/uvedit/uvedit_parametrizer.c 
b/source/blender/editors/uvedit/uvedit_parametrizer.c
index 759af69fd3..0e3d343401 100644
--- a/source/blender/editors/uvedit/uvedit_parametrizer.c
+++ b/source/blender/editors/uvedit/uvedit_parametrizer.c
@@ -744,7 +744,7 @@ static void p_face_restore_uvs(PFace *f)
 
 /* Construction (use only during construction, relies on u.key being set */
 
-static PVert *p_vert_add(PHandle *handle, PHashKey key, const float co[3], 
PEdge *e)
+static PVert *p_vert_add(PHandle *handle, PHashKey key, const float co[3], 
float id, PEdge *e)
 {
        PVert *v = (PVert *)BLI_memarena_alloc(handle->arena, sizeof(*v));
        copy_v3_v3(v->co, co);
@@ -761,20 +761,21 @@ static PVert *p_vert_add(PHandle *handle, PHashKey key, 
const float co[3], PEdge
        v->u.key = key;
        v->edge = e;
        v->flag = 0;
+       v->slimId = id;
 
        phash_insert(handle->hash_verts, (PHashLink *)v);
 
        return v;
 }
 
-static PVert *p_vert_lookup(PHandle *handle, PHashKey key, const float co[3], 
PEdge *e)
+static PVert *p_vert_lookup(PHandle *handle, PHashKey key, const float co[3], 
float id, PEdge *e)
 {
        PVert *v = (PVert *)phash_lookup(handle->hash_verts, key);
 
        if (v)
                return v;
        else
-               return p_vert_add(handle, key, co, e);
+               return p_vert_add(handle, key, co, id, e);
 }
 
 static PVert *p_vert_copy(PChart *chart, PVert *v)
@@ -1115,15 +1116,15 @@ static PFace *p_face_add(PHandle *handle)
 }
 
 static PFace *p_face_add_construct(PHandle *handle, ParamKey key, ParamKey 
*vkeys,
-                                   float *co[4], float *uv[4], int i1, int i2, 
int i3,
+                                   float *co[4], float *uv[4], float id[4], 
int i1, int i2, int i3,
                                    ParamBool *pin, ParamBool *select)
 {
        PFace *f = p_face_add(handle);
        PEdge *e1 = f->edge, *e2 = e1->next, *e3 = e2->next;
 
-       e1->vert = p_vert_lookup(handle, vkeys[i1], co[i1], e1);
-       e2->vert = p_vert_lookup(handle, vkeys[i2], co[i2], e2);
-       e3->vert = p_vert_lookup(handle, vkeys[i3], co[i3], e3);
+       e1->vert = p_vert_lookup(handle, vkeys[i1], co[i1], id[i1], e1);
+       e2->vert = p_vert_lookup(handle, vkeys[i2], co[i2], id[i2], e2);
+       e3->vert = p_vert_lookup(handle, vkeys[i3], co[i3], id[i3], e3);
 
        e1->orig_uv = uv[i1];
        e2->orig_uv = uv[i2];
@@ -4174,7 +4175,7 @@ void param_delete(ParamHandle *handle)
 }
 
 static void p_add_ngon(ParamHandle *handle, ParamKey key, int nverts,
-                       ParamKey *vkeys, float **co, float **uv,
+                       ParamKey *vkeys, float **co, float **uv, float *id,
                        ParamBool *pin, ParamBool *select, const float 
normal[3])
 {
        int *boundary = BLI_array_alloca(boundary, nverts);
@@ -4229,10 +4230,11 @@ static void p_add_ngon(ParamHandle *handle, ParamKey 
key, int nverts,
                        ParamKey tri_vkeys[3] = {vkeys[v0], vkeys[v1], 
vkeys[v2]};
                        float *tri_co[3] = {co[v0], co[v1], co[v2]};
                        float *tri_uv[3] = {uv[v0], uv[v1], uv[v2]};
+                       float tri_id[3] = {id[v0], id[v1], id[v2]};
                        ParamBool tri_pin[3] = {pin[v0], pin[v1], pin[v2]};
                        ParamBool tri_select[3] = {select[v0], select[v1], 
select[v2]};
 
-                       param_face_add(handle, key, 3, tri_vkeys, tri_co, 
tri_uv, tri_pin, tri_select, NULL);
+                       param_face_add(handle, key, 3, tri_vkeys, tri_co, 
tri_uv, tri_id, tri_pin, tri_select, NULL);
                }
 
                /* remove corner */
@@ -4244,7 +4246,7 @@ static void p_add_ngon(ParamHandle *handle, ParamKey key, 
int nverts,
 }
 
 void param_face_add(ParamHandle *handle, ParamKey key, int nverts,
-                    ParamKey *vkeys, float *co[4], float *uv[4],
+                    ParamKey *vkeys, float *co[4], float *uv[4], float id[4],
                     ParamBool *pin, ParamBool *select, float normal[3])
 {
        PHandle *phandle = (PHandle *)handle;
@@ -4255,22 +4257,22 @@ void param_face_add(ParamHandle *handle, ParamKey key, 
int nverts,
 
        if (nverts > 4) {
                /* ngon */
-               p_add_ngon(handle, key, nverts, vkeys, co, uv, pin, select, 
normal);
+               p_add_ngon(handle, key, nverts, vkeys, co, uv, id, pin, select, 
normal);
        }
        else if (nverts == 4) {
                /* quad */
                if (p_quad_split_direction(phandle, co, vkeys)) {
-                       p_face_add_construct(phandle, key, vkeys, co, uv, 0, 1, 
2, pin, select);
-                       p_face_add_construct(phandle, key, vkeys, co, uv, 0, 2, 
3, pin, select);
+                       p_face_add_construct(phandle, key, vkeys, co, uv, id, 
0, 1, 2, pin, select);
+                       p_face_add_construct(phandle, key, vkeys, co, uv, id, 
0, 2, 3, pin, select);
                }
                else {
-                       p_face_add_construct(phandle, key, vkeys, co, uv, 0, 1, 
3, pin, select);
-                       p_face_add_construct(phandle, key, vkeys, co, uv, 1, 2, 
3, pin, select);
+                       p_face_add_construct(phandle, key, vkeys, co, uv, id, 
0, 1, 3, pin, select);
+                       p_face_add_construct(phandle, key, vkeys, co, uv, id, 
1, 2, 3, pin, select);
                }
        }
        else if (!p_face_exists(phandle, vkeys, 0, 1, 2)) {
                /* triangle */
-               p_face_add_construct(phandle, key, vkeys, co, uv, 0, 1, 2, pin, 
select);
+               p_face_add_construct(phandle, key, vkeys, co, uv, id, 0, 1, 2, 
pin, select);
        }
 }
 
@@ -4740,7 +4742,6 @@ void convert_blender_slim(ParamHandle *handle, 
matrix_transfer *mt, bool selecti
 
        /*For each chart, fill up matrices*/
 
-       //printf("number of charts: %d \n", mt->nCharts);
        for (chartNr = 0; chartNr < phandle->ncharts; chartNr++) {
                mt->nPinnedVertices[chartNr] = 0;
                mt->nBoundaryVertices[chartNr] = 0;
@@ -4818,13 +4819,11 @@ void create_weight_matrix(const int chartNr, const 
PHandle *phandle, matrix_tran
        int i;
        double weight;
 
-       /*
+
        BM_ITER_MESH_INDEX(vert, &iter, em->bm, BM_VERTS_OF_MESH, i){
                weight = defvert_find_weight(dvert + i, defgrp_index);
                tempW[i] = weight;
-               //printf("tempW[%d] = %f \n",i, weight);
-       }*/
-
+       }
 }
 
 /*     AUREL THESIS    Transfer edges and edge lengths */
@@ -4891,10 +4890,9 @@ void transfer_vertices(const int chartNr, const PHandle 
*phandle, matrix_transfe
        for (v = chart->verts; v; v = v->nextlink){
 
                if (!v->on_boundary_flag){
-                       //weight = tempW[v->slimId];
-                       //printf("weights as used internal verts: %f  id, 
x,y,z: %d, %f, %f, %f \n", weight, v->slimId, v->co[0], v->co[1], v->co[2]);
+                       weight = tempW[v->slimId];
                        v->slimId = vid;
-                       W[v->slimId] = 0;
+                       W[v->slimId] = weight;
                        vid++;
                }
 
@@ -4952,7 +4950,7 @@ void transfer_boundary_vertices(const int chartNr, const 
PHandle *phandle, const
        p_chart_boundaries(chart, NULL, &outer);
        PEdge *be = outer;
        do{
-               weight = 0; //tempW[be->vert->slimId];
+               weight = tempW[be->vert->slimId];
 
                mt->nBoundaryVertices[chartNr] += 1;
                be->vert->slimId = vid;
diff --git a/source/blender/editors/uvedit/uvedit_parametrizer.h 
b/source/blender/editors/uvedit/uvedit_parametrizer.h
index 1ca9e8b6df..37f66af7c6 100644
--- a/source/blender/editors/uvedit/uvedit_parametrizer.h
+++ b/source/blender/editors/uvedit/uvedit_parametrizer.h
@@ -71,6 +71,7 @@ void param_face_add(ParamHandle *handle,
                     ParamKey *vkeys,
                     float *co[4],
                     float *uv[4],
+                                       float id[4],
                     ParamBool *pin,
                     ParamBool *select,
                     float face_normal[3]);
diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c 
b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
index 7162d51ddc..a7377691cc 100644
--- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c
+++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
@@ -83,7 +83,7 @@
 #include "uvedit_parametrizer.h"
 
 #include "matrix_transfer.h"
-#include "slim_parametrizer.h"
+#include "slim_C_interface.h"
 
 #define max(x, y) (((x) > (y)) ? (x) : (y))
 #define min(x, y) (((x) < (y)) ? (x) : (y))
@@ -241,6 +241,7 @@ static void construct_param_handle_face_add(ParamHandle 
*handle, Scene *scene,
        ParamBool *select = BLI_array_alloca(select, efa->len);
        float **co = BLI_array_alloca(co, efa->len);
        float **uv = BLI_array_alloca(uv, efa->len);
+       float *id = BLI_array_alloca(id, efa->len);
        int i;
 
        BMIter liter;
@@ -256,11 +257,12 @@ static void construct_param_handle_face_add(ParamHandle 
*handle, Scene *scene,
                vkeys[i] = (ParamKey)BM_elem_index_get(l->v);
                co[i] = l->v->co;
                uv[i] = luv->uv;
+               id[i] = l->v->id;
                pin[i] = (luv->flag & MLOOPUV_PINNED) != 0;
                select[i] = uvedit_uv_select_test(scene, l, cd_loop_uv_offset);
        }
 
-       param_face_add(handle, key, i, vkeys, co, uv, pin, select, efa->no);
+       param_face_add(handle, key, i, vkeys, co, uv, id, pin, select, efa->no);
 }
 
 static ParamHandle *construct_param_handle(Scene *scene, Object *ob, BMesh *bm,
@@ -330,8 +332,7 @@ static ParamHandle *construct_param_handle(Scene *scene, 
Object *ob, BMesh *bm,
 }
 
 
-static void texface_from_original_index(BMFace *efa, int index, float **uv, 
ParamBool *pin, ParamBool *select,
-                                        Scene *scene, const int 
cd_loop_uv_offset)
+static void texface_from_original_index(BMFace *efa, int index, float **uv, 
ParamBool *pin, ParamBool *select, float *id, Scene *scene, const int 
cd_loop_uv_offset)
 {
        BMLoop *l;
        BMIter liter;
@@ -340,6 +341,7 @@ static void texface_from_original_index(BMFace *efa, int 
index, float **uv, Para
        *uv = NULL;
        *pin = 0;
        *select = 1;
+       *id = 0;
 
        if (index == ORIGINDEX_NONE)
                return;
@@ -348,6 +350,7 @@ static void texface_from_original_index(BMFace *efa, int 
index, float **uv, Para
                if (BM_elem_index_get(l->v) == index) {
                        luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
                        *uv = luv->uv;
+                       *id = l->v->id;
                        *pin = (luv->flag & MLOOPUV_PINNED) ? 1 : 0;
                        *select = uvedit_uv_select_test(scene, l, 
cd_loop_uv_offset);
                        break;
@@ -451,6 +454,7 @@ static ParamHandle *construct_param_handle_subsurfed(Scene 
*scene, Object *ob, B
                ParamBool pin[4], select[4];
                float *co[4];
                float *uv[4];
+               float *id[4];
                BMFace *origFace = faceMap[i];
 
                if (scene->toolsettings->uv_flag & UV_SYNC_SELECTION) {
@@ -479,12 +483,12 @@ static ParamHandle 
*construct_param_handle_subsurfed(Scene *scene, Object *ob, B
                
                /* This

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to