[Bf-blender-cvs] [5f6c7a9eb65] soc-2017-sculpting_improvements: Fixed some normal orientation issues. B-Ring normals are now aligned A-ring still needs normal alignment.
Sebastian Witt
noreply at git.blender.org
Fri Aug 25 10:30:41 CEST 2017
Commit: 5f6c7a9eb650510d2060d1877474dfca577f07f4
Author: Sebastian Witt
Date: Fri Aug 25 10:28:25 2017 +0200
Branches: soc-2017-sculpting_improvements
https://developer.blender.org/rB5f6c7a9eb650510d2060d1877474dfca577f07f4
Fixed some normal orientation issues. B-Ring normals are now aligned A-ring still needs normal alignment.
===================================================================
M source/blender/editors/sculpt_paint/sculpt.c
===================================================================
diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c
index 2b3a47c0f31..de1b55854d5 100644
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@ -8265,7 +8265,7 @@ static void gen_fillet_velp(Mesh *me,
int *a_verts, int *b_verts,
int *a_edges, int *b_edges,
int a_size, int b_size,
- int *map, bool inverse)
+ int *map, bool inverse, bool subtract)
{
/*If aligned exact points are aligned to a*/
float v1[3], v2[3];
@@ -8334,14 +8334,14 @@ static void gen_fillet_velp(Mesh *me,
me->mloop[l_pos].v = a_verts[i];
me->mloop[l_pos].e = e_start + 3 * i;
l_pos ++;
- me->mloop[l_pos].v = v_start + i;
- me->mloop[l_pos].e = e_start + 3 * i + 1;
+ me->mloop[l_pos + (inverse != subtract ? 2 : 0)].v = v_start + i;
+ me->mloop[l_pos + (inverse != subtract ? 2 : 0)].e = e_start + 3 * i + 1;
l_pos ++;
me->mloop[l_pos].v = v_start + next_i;
me->mloop[l_pos].e = e_start + 3 * next_i;
l_pos ++;
- me->mloop[l_pos].v = a_verts[next_i];
- me->mloop[l_pos].e = a_edges[(i + aoff) % a_size];
+ me->mloop[l_pos - (inverse != subtract ? 2 : 0)].v = a_verts[next_i];
+ me->mloop[l_pos - (inverse != subtract ? 2 : 0)].e = a_edges[(i + aoff) % a_size];
l_pos ++;
me->mpoly[p_pos].loopstart = l_pos - 4;
@@ -8356,11 +8356,11 @@ static void gen_fillet_velp(Mesh *me,
me->mloop[l_pos].v = v_start + i;
me->mloop[l_pos].e = e_start + 3 * i + 2;
l_pos ++;
- me->mloop[l_pos].v = b_verts[map[i]];
- me->mloop[l_pos].e = e_start + 3 * next_i + 2;
+ me->mloop[l_pos + (inverse != subtract ? 1 : 0)].v = b_verts[map[i]];
+ me->mloop[l_pos + (inverse != subtract ? 1 : 0)].e = e_start + 3 * next_i + 2;
l_pos ++;
- me->mloop[l_pos].v = v_start + next_i;
- me->mloop[l_pos].e = e_start + 3 * i + 1;
+ me->mloop[l_pos - (inverse != subtract ? 1 : 0)].v = v_start + next_i;
+ me->mloop[l_pos - (inverse != subtract ? 1 : 0)].e = e_start + 3 * i + 1;
l_pos ++;
me->mpoly[p_pos].loopstart = l_pos - 3;
@@ -8375,14 +8375,14 @@ static void gen_fillet_velp(Mesh *me,
me->mloop[l_pos].v = v_start + i;
me->mloop[l_pos].e = e_start + 3 * i + 2;
l_pos ++;
- me->mloop[l_pos].v = b_verts[map[i]];
- me->mloop[l_pos].e = b_edges[(map[i] + boff) % b_size];
+ me->mloop[l_pos + (inverse != subtract ? 2 : 0)].v = b_verts[map[i]];
+ me->mloop[l_pos + (inverse != subtract ? 2 : 0)].e = b_edges[(map[i] + boff) % b_size];
l_pos ++;
me->mloop[l_pos].v = b_verts[map[next_i]];
me->mloop[l_pos].e = e_start + 3 * next_i + 2;
l_pos ++;
- me->mloop[l_pos].v = v_start + next_i;
- me->mloop[l_pos].e = e_start + 3 * i + 1;
+ me->mloop[l_pos - (inverse != subtract ? 2 : 0)].v = v_start + next_i;
+ me->mloop[l_pos - (inverse != subtract ? 2 : 0)].e = e_start + 3 * i + 1;
l_pos ++;
me->mpoly[p_pos].loopstart = l_pos - 4;
@@ -8412,8 +8412,8 @@ static void gen_fillet_velp(Mesh *me,
me->mloop[l_pos].e = ae;
l_pos ++;
- me->mloop[l_pos].v = cv;
- me->mloop[l_pos].e = be;
+ me->mloop[l_pos + (inverse != subtract ? 1 : 0)].v = cv;
+ me->mloop[l_pos + (inverse != subtract ? 1 : 0)].e = be;
l_pos ++;
av = me->medge[be].v1 == cv ? me->medge[be].v2 : me->medge[be].v1;
@@ -8426,8 +8426,8 @@ static void gen_fillet_velp(Mesh *me,
ce = e_pos;
e_pos ++;
- me->mloop[l_pos].v = av;
- me->mloop[l_pos].e = ce;
+ me->mloop[l_pos - (inverse != subtract ? 1 : 0)].v = av;
+ me->mloop[l_pos - (inverse != subtract ? 1 : 0)].e = ce;
l_pos ++;
me->mpoly[p_pos].loopstart = l_pos - 3;
@@ -8446,16 +8446,16 @@ static void gen_fillet_velp(Mesh *me,
me->mloop[l_pos].e = ae;
l_pos ++;
- me->mloop[l_pos].v = av;
- me->mloop[l_pos].e = be;
+ me->mloop[l_pos + (inverse != subtract ? 2 : 0)].v = av;
+ me->mloop[l_pos + (inverse != subtract ? 2 : 0)].e = be;
l_pos ++;
me->mloop[l_pos].v = me->medge[e_start + 3 * ((hole_pos[i] + 1) % a_size) + 2].v2;
me->mloop[l_pos].e = e_start + 3 * ((hole_pos[i] + 1) % a_size) + 2;
l_pos ++;
- me->mloop[l_pos].v = me->medge[e_start + 3 * ((hole_pos[i] + 1) % a_size) + 2].v1;
- me->mloop[l_pos].e = e_start + 3 * hole_pos[i] + 1;
+ me->mloop[l_pos - (inverse != subtract ? 2 : 0)].v = me->medge[e_start + 3 * ((hole_pos[i] + 1) % a_size) + 2].v1;
+ me->mloop[l_pos - (inverse != subtract ? 2 : 0)].e = e_start + 3 * hole_pos[i] + 1;
l_pos ++;
me->mpoly[p_pos].loopstart = l_pos - 4;
@@ -8569,7 +8569,7 @@ static void generate_fillet_topology(Mesh *me, SilhouetteData *sil)
a_verts, b_verts,
a_data, b_data,
a_size, b_size,
- triangulation_map, invert);
+ triangulation_map, invert, sil->do_subtract);
#ifdef DEBUG_DRAW
@@ -8640,6 +8640,7 @@ static void silhouette_create_shape_mesh(bContext *C, Mesh *me, SilhouetteData *
int v_steps = (1 << ss_level) + 2;
bool n_ori = false;
int e_start;
+ bool subtract = sil->do_subtract;
/* TODO: RNA Init*/
copy_v3_v3(z_vec, sil->z_vec);
@@ -8664,22 +8665,22 @@ static void silhouette_create_shape_mesh(bContext *C, Mesh *me, SilhouetteData *
e_start = me->totedge;
switch (r_forks) {
case 1:
- add_ss_cap(sil, a_branch, me, z_vec, depth, v_steps, w_steps, smoothness, n_ori, false);
- add_ss_cap(sil, a_branch, me, inv_z_vec, depth, v_steps, w_steps, smoothness, !n_ori, true);
+ add_ss_cap(sil, a_branch, me, z_vec, depth, v_steps, w_steps, smoothness, n_ori != subtract, false);
+ add_ss_cap(sil, a_branch, me, inv_z_vec, depth, v_steps, w_steps, smoothness, !n_ori != subtract, true);
#ifdef DEBUG_DRAW
/*debug_branch(a_branch, 0x00ff00);*/
#endif
break;
case 2:
- add_ss_tube(sil, a_branch, me, z_vec, depth, v_steps, w_steps, smoothness, n_ori, false);
- add_ss_tube(sil, a_branch, me, inv_z_vec, depth, v_steps, w_steps, smoothness, !n_ori, true);
+ add_ss_tube(sil, a_branch, me, z_vec, depth, v_steps, w_steps, smoothness, n_ori != subtract, false);
+ add_ss_tube(sil, a_branch, me, inv_z_vec, depth, v_steps, w_steps, smoothness, !n_ori != subtract, true);
#ifdef DEBUG_DRAW
/*debug_branch(a_branch, 0xff0000);*/
#endif
break;
case 3:
- add_ss_tinter(sil, spine, a_branch, me, z_vec, depth, v_steps, w_steps, smoothness, n_ori, false);
- add_ss_tinter(sil, spine, a_branch, me, inv_z_vec, depth, v_steps, w_steps, smoothness, !n_ori, true);
+ add_ss_tinter(sil, spine, a_branch, me, z_vec, depth, v_steps, w_steps, smoothness, n_ori != subtract, false);
+ add_ss_tinter(sil, spine, a_branch, me, inv_z_vec, depth, v_steps, w_steps, smoothness, !n_ori != subtract, true);
#ifdef DEBUG_DRAW
/*debug_branch(a_branch, 0x0000ff);*/
#endif
@@ -8691,7 +8692,7 @@ static void silhouette_create_shape_mesh(bContext *C, Mesh *me, SilhouetteData *
}
e_start = me->totedge;
- bridge_all_parts(me, spine, v_steps * 2 + w_steps, n_ori);
+ bridge_all_parts(me, spine, v_steps * 2 + w_steps, n_ori != subtract);
check_preceding_intersecting_edges(ob, sil, NULL, nodes, me->totedge - e_start);
printf("Total %i nodes.\n", sil->num_inter_nodes);
if (sil->num_inter_nodes) {
More information about the Bf-blender-cvs
mailing list