Merge branch 'master' into blender2.8
This commit is contained in:
commit
88c2193d16
|
@ -50,8 +50,12 @@ typedef struct UvVertMap {
|
|||
|
||||
typedef struct UvMapVert {
|
||||
struct UvMapVert *next;
|
||||
unsigned int f;
|
||||
unsigned char tfindex, separate, flag;
|
||||
unsigned int poly_index;
|
||||
unsigned short loop_of_poly_index;
|
||||
bool separate;
|
||||
/* Zero-ed by map creation, left for use by specific areas. Is not
|
||||
* initialized to anything. */
|
||||
unsigned char flag;
|
||||
} UvMapVert;
|
||||
|
||||
/* UvElement stores per uv information so that we can quickly access information for a uv.
|
||||
|
@ -63,9 +67,9 @@ typedef struct UvElement {
|
|||
/* Face the element belongs to */
|
||||
struct BMLoop *l;
|
||||
/* index in loop. */
|
||||
unsigned short tfindex;
|
||||
unsigned short loop_of_poly_index;
|
||||
/* Whether this element is the first of coincident elements */
|
||||
unsigned char separate;
|
||||
bool separate;
|
||||
/* general use flag */
|
||||
unsigned char flag;
|
||||
/* If generating element map with island sorting, this stores the island index */
|
||||
|
|
|
@ -103,8 +103,8 @@ UvVertMap *BKE_mesh_uv_vert_map_create(
|
|||
nverts = mp->totloop;
|
||||
|
||||
for (i = 0; i < nverts; i++) {
|
||||
buf->tfindex = (unsigned char)i;
|
||||
buf->f = a;
|
||||
buf->loop_of_poly_index = (unsigned short)i;
|
||||
buf->poly_index = a;
|
||||
buf->separate = 0;
|
||||
buf->next = vmap->vert[mloop[mp->loopstart + i].v];
|
||||
vmap->vert[mloop[mp->loopstart + i].v] = buf;
|
||||
|
@ -134,19 +134,19 @@ UvVertMap *BKE_mesh_uv_vert_map_create(
|
|||
v->next = newvlist;
|
||||
newvlist = v;
|
||||
|
||||
uv = mloopuv[mpoly[v->f].loopstart + v->tfindex].uv;
|
||||
uv = mloopuv[mpoly[v->poly_index].loopstart + v->loop_of_poly_index].uv;
|
||||
lastv = NULL;
|
||||
iterv = vlist;
|
||||
|
||||
while (iterv) {
|
||||
next = iterv->next;
|
||||
|
||||
uv2 = mloopuv[mpoly[iterv->f].loopstart + iterv->tfindex].uv;
|
||||
uv2 = mloopuv[mpoly[iterv->poly_index].loopstart + iterv->loop_of_poly_index].uv;
|
||||
sub_v2_v2v2(uvdiff, uv2, uv);
|
||||
|
||||
|
||||
if (fabsf(uv[0] - uv2[0]) < limit[0] && fabsf(uv[1] - uv2[1]) < limit[1] &&
|
||||
(!use_winding || winding[iterv->f] == winding[v->f]))
|
||||
(!use_winding || winding[iterv->poly_index] == winding[v->poly_index]))
|
||||
{
|
||||
if (lastv) lastv->next = next;
|
||||
else vlist = next;
|
||||
|
|
|
@ -280,11 +280,11 @@ static void get_face_uv_map_vert(UvVertMap *vmap, struct MPoly *mpoly, struct ML
|
|||
for (nv = v = BKE_mesh_uv_vert_map_get_vert(vmap, ml[j].v); v; v = v->next) {
|
||||
if (v->separate)
|
||||
nv = v;
|
||||
if (v->f == fi)
|
||||
if (v->poly_index == fi)
|
||||
break;
|
||||
}
|
||||
|
||||
fverts[j] = SET_UINT_IN_POINTER(mpoly[nv->f].loopstart + nv->tfindex);
|
||||
fverts[j] = SET_UINT_IN_POINTER(mpoly[nv->poly_index].loopstart + nv->loop_of_poly_index);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -332,7 +332,7 @@ static int ss_sync_from_uv(CCGSubSurf *ss, CCGSubSurf *origss, DerivedMesh *dm,
|
|||
for (v = BKE_mesh_uv_vert_map_get_vert(vmap, i); v; v = v->next) {
|
||||
if (v->separate) {
|
||||
CCGVert *ssv;
|
||||
int loopid = mpoly[v->f].loopstart + v->tfindex;
|
||||
int loopid = mpoly[v->poly_index].loopstart + v->loop_of_poly_index;
|
||||
CCGVertHDL vhdl = SET_INT_IN_POINTER(loopid);
|
||||
|
||||
copy_v2_v2(uv, mloopuv[loopid].uv);
|
||||
|
|
|
@ -565,8 +565,8 @@ UvVertMap *BM_uv_vert_map_create(
|
|||
}
|
||||
|
||||
BM_ITER_ELEM_INDEX(l, &liter, efa, BM_LOOPS_OF_FACE, i) {
|
||||
buf->tfindex = i;
|
||||
buf->f = a;
|
||||
buf->loop_of_poly_index = i;
|
||||
buf->poly_index = a;
|
||||
buf->separate = 0;
|
||||
|
||||
buf->next = vmap->vert[BM_elem_index_get(l->v)];
|
||||
|
@ -597,9 +597,9 @@ UvVertMap *BM_uv_vert_map_create(
|
|||
v->next = newvlist;
|
||||
newvlist = v;
|
||||
|
||||
efa = BM_face_at_index(bm, v->f);
|
||||
efa = BM_face_at_index(bm, v->poly_index);
|
||||
|
||||
l = BM_iter_at_index(bm, BM_LOOPS_OF_FACE, efa, v->tfindex);
|
||||
l = BM_iter_at_index(bm, BM_LOOPS_OF_FACE, efa, v->loop_of_poly_index);
|
||||
luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
|
||||
uv = luv->uv;
|
||||
|
||||
|
@ -608,15 +608,15 @@ UvVertMap *BM_uv_vert_map_create(
|
|||
|
||||
while (iterv) {
|
||||
next = iterv->next;
|
||||
efa = BM_face_at_index(bm, iterv->f);
|
||||
l = BM_iter_at_index(bm, BM_LOOPS_OF_FACE, efa, iterv->tfindex);
|
||||
efa = BM_face_at_index(bm, iterv->poly_index);
|
||||
l = BM_iter_at_index(bm, BM_LOOPS_OF_FACE, efa, iterv->loop_of_poly_index);
|
||||
luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
|
||||
uv2 = luv->uv;
|
||||
|
||||
sub_v2_v2v2(uvdiff, uv2, uv);
|
||||
|
||||
if (fabsf(uvdiff[0]) < limit[0] && fabsf(uvdiff[1]) < limit[1] &&
|
||||
(!use_winding || winding[iterv->f] == winding[v->f]))
|
||||
(!use_winding || winding[iterv->poly_index] == winding[v->poly_index]))
|
||||
{
|
||||
if (lastv) lastv->next = next;
|
||||
else vlist = next;
|
||||
|
@ -713,7 +713,7 @@ UvElementMap *BM_uv_element_map_create(
|
|||
buf->l = l;
|
||||
buf->separate = 0;
|
||||
buf->island = INVALID_ISLAND;
|
||||
buf->tfindex = i;
|
||||
buf->loop_of_poly_index = i;
|
||||
|
||||
buf->next = element_map->vert[BM_elem_index_get(l->v)];
|
||||
element_map->vert[BM_elem_index_get(l->v)] = buf;
|
||||
|
@ -826,7 +826,7 @@ UvElementMap *BM_uv_element_map_create(
|
|||
map[element - element_map->buf] = islandbufsize;
|
||||
islandbuf[islandbufsize].l = element->l;
|
||||
islandbuf[islandbufsize].separate = element->separate;
|
||||
islandbuf[islandbufsize].tfindex = element->tfindex;
|
||||
islandbuf[islandbufsize].loop_of_poly_index = element->loop_of_poly_index;
|
||||
islandbuf[islandbufsize].island = nislands;
|
||||
islandbufsize++;
|
||||
|
||||
|
|
|
@ -971,7 +971,7 @@ static UvMapVert *uv_select_edgeloop_vertex_map_get(UvVertMap *vmap, BMFace *efa
|
|||
for (iterv = first; iterv; iterv = iterv->next) {
|
||||
if (iterv->separate)
|
||||
first = iterv;
|
||||
if (iterv->f == BM_elem_index_get(efa))
|
||||
if (iterv->poly_index == BM_elem_index_get(efa))
|
||||
return first;
|
||||
}
|
||||
|
||||
|
@ -993,9 +993,9 @@ static bool uv_select_edgeloop_edge_tag_faces(BMEditMesh *em, UvMapVert *first1,
|
|||
if (iterv2->separate && iterv2 != first2)
|
||||
break;
|
||||
|
||||
if (iterv1->f == iterv2->f) {
|
||||
if (iterv1->poly_index == iterv2->poly_index) {
|
||||
/* if face already tagged, don't do this edge */
|
||||
efa = BM_face_at_index(em->bm, iterv1->f);
|
||||
efa = BM_face_at_index(em->bm, iterv1->poly_index);
|
||||
if (BM_elem_flag_test(efa, BM_ELEM_TAG))
|
||||
return false;
|
||||
|
||||
|
@ -1019,8 +1019,8 @@ static bool uv_select_edgeloop_edge_tag_faces(BMEditMesh *em, UvMapVert *first1,
|
|||
if (iterv2->separate && iterv2 != first2)
|
||||
break;
|
||||
|
||||
if (iterv1->f == iterv2->f) {
|
||||
efa = BM_face_at_index(em->bm, iterv1->f);
|
||||
if (iterv1->poly_index == iterv2->poly_index) {
|
||||
efa = BM_face_at_index(em->bm, iterv1->poly_index);
|
||||
BM_elem_flag_enable(efa, BM_ELEM_TAG);
|
||||
break;
|
||||
}
|
||||
|
@ -1231,18 +1231,19 @@ static void uv_select_linked_multi(
|
|||
for (iterv = vlist; iterv; iterv = iterv->next) {
|
||||
if (iterv->separate)
|
||||
startv = iterv;
|
||||
if (iterv->f == a)
|
||||
if (iterv->poly_index == a)
|
||||
break;
|
||||
}
|
||||
|
||||
for (iterv = startv; iterv; iterv = iterv->next) {
|
||||
if ((startv != iterv) && (iterv->separate))
|
||||
break;
|
||||
else if (!flag[iterv->f]) {
|
||||
flag[iterv->f] = 1;
|
||||
stack[stacksize] = iterv->f;
|
||||
else if (!flag[iterv->poly_index]) {
|
||||
flag[iterv->poly_index] = 1;
|
||||
stack[stacksize] = iterv->poly_index;
|
||||
stacksize++;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2742,7 +2743,7 @@ static void uv_select_flush_from_tag_sticky_loc_internal(
|
|||
if (vlist_iter->separate)
|
||||
start_vlist = vlist_iter;
|
||||
|
||||
if (efa_index == vlist_iter->f)
|
||||
if (efa_index == vlist_iter->poly_index)
|
||||
break;
|
||||
|
||||
vlist_iter = vlist_iter->next;
|
||||
|
@ -2754,12 +2755,12 @@ static void uv_select_flush_from_tag_sticky_loc_internal(
|
|||
if (vlist_iter != start_vlist && vlist_iter->separate)
|
||||
break;
|
||||
|
||||
if (efa_index != vlist_iter->f) {
|
||||
if (efa_index != vlist_iter->poly_index) {
|
||||
BMLoop *l_other;
|
||||
efa_vlist = BM_face_at_index(em->bm, vlist_iter->f);
|
||||
efa_vlist = BM_face_at_index(em->bm, vlist_iter->poly_index);
|
||||
/* tf_vlist = BM_ELEM_CD_GET_VOID_P(efa_vlist, cd_poly_tex_offset); */ /* UNUSED */
|
||||
|
||||
l_other = BM_iter_at_index(em->bm, BM_LOOPS_OF_FACE, efa_vlist, vlist_iter->tfindex);
|
||||
l_other = BM_iter_at_index(em->bm, BM_LOOPS_OF_FACE, efa_vlist, vlist_iter->loop_of_poly_index);
|
||||
|
||||
uvedit_uv_select_set(em, scene, l_other, select, false, cd_loop_uv_offset);
|
||||
}
|
||||
|
@ -4178,14 +4179,14 @@ static int uv_seams_from_islands_exec(bContext *C, wmOperator *op)
|
|||
v1coincident = 0;
|
||||
|
||||
separated2 = 0;
|
||||
efa1 = BM_face_at_index(bm, mv1->f);
|
||||
efa1 = BM_face_at_index(bm, mv1->poly_index);
|
||||
mvinit2 = vmap->vert[BM_elem_index_get(editedge->v2)];
|
||||
|
||||
for (mv2 = mvinit2; mv2; mv2 = mv2->next) {
|
||||
if (mv2->separate)
|
||||
mv2sep = mv2;
|
||||
|
||||
efa2 = BM_face_at_index(bm, mv2->f);
|
||||
efa2 = BM_face_at_index(bm, mv2->poly_index);
|
||||
if (efa1 == efa2) {
|
||||
/* if v1 is not coincident no point in comparing */
|
||||
if (v1coincident) {
|
||||
|
|
|
@ -489,9 +489,10 @@ static void stitch_calculate_island_snapping(
|
|||
int face_preview_pos = preview_position[BM_elem_index_get(element->l->f)].data_position;
|
||||
|
||||
stitch_uv_rotate(rotation_mat, island_stitch_data[i].medianPoint,
|
||||
preview->preview_polys + face_preview_pos + 2 * element->tfindex, state->aspect);
|
||||
preview->preview_polys + face_preview_pos + 2 * element->loop_of_poly_index,
|
||||
state->aspect);
|
||||
|
||||
add_v2_v2(preview->preview_polys + face_preview_pos + 2 * element->tfindex,
|
||||
add_v2_v2(preview->preview_polys + face_preview_pos + 2 * element->loop_of_poly_index,
|
||||
island_stitch_data[i].translation);
|
||||
}
|
||||
}
|
||||
|
@ -907,7 +908,7 @@ static void stitch_propagate_uv_final_position(
|
|||
else {
|
||||
int face_preview_pos = preview_position[BM_elem_index_get(element_iter->l->f)].data_position;
|
||||
if (face_preview_pos != STITCH_NO_PREVIEW) {
|
||||
copy_v2_v2(preview->preview_polys + face_preview_pos + 2 * element_iter->tfindex,
|
||||
copy_v2_v2(preview->preview_polys + face_preview_pos + 2 * element_iter->loop_of_poly_index,
|
||||
final_position[index].uv);
|
||||
}
|
||||
}
|
||||
|
@ -2083,7 +2084,7 @@ static void stitch_exit(bContext *C, wmOperator *op, int finished)
|
|||
RNA_collection_add(op->ptr, "selection", &itemptr);
|
||||
|
||||
RNA_int_set(&itemptr, "face_index", BM_elem_index_get(element->l->f));
|
||||
RNA_int_set(&itemptr, "element_index", element->tfindex);
|
||||
RNA_int_set(&itemptr, "element_index", element->loop_of_poly_index);
|
||||
}
|
||||
|
||||
uvedit_live_unwrap_update(sima, scene, obedit);
|
||||
|
|
Loading…
Reference in New Issue