Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHoward Trickey <howard.trickey@gmail.com>2014-01-28 16:01:55 +0400
committerHoward Trickey <howard.trickey@gmail.com>2014-01-28 16:03:25 +0400
commit37f1b717eb4680ab5b3cab482fb5c6f200d1eb9e (patch)
tree4079fb9b55ed48a3ecbedc9a2396a80b195762b1 /source/blender/bmesh
parentbe6643b5ec01c8f64a1065762c38ce8803b717c0 (diff)
Bevel code cleanup: get rid of old 'ADJ' code.
The new subdiv 'adj' pattern is working well, so removing the old code and taking opportunity to remove 'subdiv' from a number of names.
Diffstat (limited to 'source/blender/bmesh')
-rw-r--r--source/blender/bmesh/tools/bmesh_bevel.c488
1 files changed, 14 insertions, 474 deletions
diff --git a/source/blender/bmesh/tools/bmesh_bevel.c b/source/blender/bmesh/tools/bmesh_bevel.c
index fa2c9b182e3..39e43dbb296 100644
--- a/source/blender/bmesh/tools/bmesh_bevel.c
+++ b/source/blender/bmesh/tools/bmesh_bevel.c
@@ -49,9 +49,6 @@
#include "./intern/bmesh_private.h"
-/* use new way of doing ADJ pattern */
-#define USE_ADJ_SUBDIV
-
#define BEVEL_EPSILON_D 1e-6
#define BEVEL_EPSILON 1e-6f
#define BEVEL_EPSILON_SQ 1e-12f
@@ -151,7 +148,6 @@ typedef struct VMesh {
M_NONE, /* no polygon mesh needed */
M_POLY, /* a simple polygon */
M_ADJ, /* "adjacent edges" mesh pattern */
- M_ADJ_SUBDIV, /* like M_ADJ, but using subdivision */
M_TRI_FAN, /* a simple polygon - fan filled */
M_QUAD_STRIP, /* a simple polygon - cut into parallel strips */
} mesh_kind;
@@ -1081,37 +1077,6 @@ static void make_unit_cube_map(const float va[3], const float vb[3], const float
r_mat[3][3] = 1.0f;
}
-#ifndef USE_ADJ_SUBDIV
-/*
- * Find the point (/n) of the way around the round profile for e,
- * where start point is va, midarc point is vmid, and end point is vb.
- * Return the answer in r_co.
- * If va -- vmid -- vb is approximately a straight line, just
- * interpolate along the line.
- */
-static void get_point_on_round_edge(EdgeHalf *e, int k,
- const float va[3], const float vmid[3], const float vb[3],
- float r_co[3])
-{
- float p[3], angle;
- float m[4][4];
- int n = e->seg;
-
- if (make_unit_square_map(va, vmid, vb, m)) {
- /* Find point k/(e->seg) along quarter circle from (0,1,0) to (1,0,0) */
- angle = (float)M_PI * (float)k / (2.0f * (float)n); /* angle from y axis */
- p[0] = sinf(angle);
- p[1] = cosf(angle);
- p[2] = 0.0f;
- mul_v3_m4v3(r_co, m, p);
- }
- else {
- /* degenerate case: profile is a line */
- interp_v3_v3v3(r_co, va, vb, (float)k / (float)n);
- }
-}
-#endif
-
/* Get the coordinate on the superellipse (exponent r),
* at parameter value u. u goes from u to 2 as the
* superellipse moves on the quadrant (0,1) to (1,0). */
@@ -1202,7 +1167,7 @@ static void get_profile_point(BevelParams *bp, const Profile *pro, int i, int n,
* Allocate the space for them if that hasn't been done already.
* If bp->seg is not a power of 2, also need to calculate
* the coordinate values for the power of 2 >= bp->seg,
- * because the ADJ_SUBDIV pattern needs power-of-2 boundaries
+ * because the ADJ pattern needs power-of-2 boundaries
* during construction. */
static void calculate_profile(BevelParams *bp, BoundVert *bndv)
{
@@ -1275,45 +1240,6 @@ static void calculate_profile(BevelParams *bp, BoundVert *bndv)
}
}
-#ifndef USE_ADJ_SUBDIV
-/* Calculate a snapped point to the transformed profile of edge e, extended as
- * in a cylinder-like surface in the direction of e.
- * co is the point to snap and is modified in place.
- * va and vb are the limits of the profile (with peak on e). */
-static void snap_to_edge_profile(EdgeHalf *e, const float va[3], const float vb[3],
- float co[3])
-{
- float m[4][4], minv[4][4];
- float edir[3], va0[3], vb0[3], vmid0[3], p[3], snap[3], plane[4];
-
- sub_v3_v3v3(edir, e->e->v1->co, e->e->v2->co);
-
- /* project va and vb onto plane P, with normal edir and containing co */
- plane_from_point_normal_v3(plane, co, edir);
- closest_to_plane_v3(va0, plane, va);
- closest_to_plane_v3(vb0, plane, vb);
- project_to_edge(e->e, va0, vb0, vmid0);
- if (make_unit_square_map(va0, vmid0, vb0, m)) {
- /* Transform co and project it onto the unit circle.
- * Projecting is in fact just normalizing the transformed co */
- if (!invert_m4_m4(minv, m)) {
- /* shouldn't happen, by angle test and construction of vd */
- BLI_assert(!"failed inverse during profile snap");
- return;
- }
- mul_v3_m4v3(p, minv, co);
- normalize_v3(p);
- mul_v3_m4v3(snap, m, p);
- copy_v3_v3(co, snap);
- }
- else {
- /* planar case: just snap to line va--vb */
- closest_to_line_segment_v3(p, co, va, vb);
- copy_v3_v3(co, p);
- }
-}
-#endif
-
/* Snap a direction co to a superellipsoid with parameter super_r */
static void snap_to_superellipsoid(float co[3], const float super_r)
{
@@ -1613,7 +1539,7 @@ static void build_boundary(BevelParams *bp, BevVert *bv, bool construct)
if (vm->count == 2)
vm->mesh_kind = M_NONE;
else if (bp->seg > 1)
- vm->mesh_kind = M_ADJ_SUBDIV;
+ vm->mesh_kind = M_ADJ;
else
vm->mesh_kind = M_POLY;
}
@@ -1632,11 +1558,7 @@ static void build_boundary(BevelParams *bp, BevVert *bv, bool construct)
}
}
else {
-#ifdef USE_ADJ_SUBDIV
- vm->mesh_kind = M_ADJ_SUBDIV;
-#else
vm->mesh_kind = M_ADJ;
-#endif
}
}
}
@@ -1747,362 +1669,7 @@ static EdgeHalf *pipe_test(BevVert *bv)
return epipe;
}
-#ifndef USE_ADJ_SUBDIV
-/*
- * Given that the boundary is built and the boundary BMVerts have been made,
- * calculate the positions of the interior mesh points for the M_ADJ pattern,
- * then make the BMVerts and the new faces. */
-static void bevel_build_rings(BMesh *bm, BevVert *bv)
-{
- int k, ring, i, n, ns, ns2, nn, odd;
- VMesh *vm = bv->vmesh;
- BoundVert *v, *vprev, *vnext;
- NewVert *nv, *nvprev, *nvnext;
- EdgeHalf *epipe;
- BMVert *bmv, *bmv1, *bmv2, *bmv3, *bmv4;
- BMFace *f, *f2, *f23;
- float co[3], coa[3], cob[3], midco[3];
- float va_pipe[3], vb_pipe[3];
-
- n = vm->count;
- ns = vm->seg;
- ns2 = ns / 2;
- odd = (ns % 2) != 0;
- BLI_assert(n > 2 && ns > 1);
-
- epipe = pipe_test(bv);
-
- /* Make initial rings, going between points on neighbors.
- * After this loop, will have coords for all (i, r, k) where
- * BoundVert for i has a bevel, 0 <= r <= ns2, 0 <= k <= ns */
- for (ring = 1; ring <= ns2; ring++) {
- v = vm->boundstart;
-
- do {
- i = v->index;
- if (v->ebev) {
- /* get points coords of points a and b, on outer rings
- * of prev and next edges, k away from this edge */
- vprev = v->prev;
- vnext = v->next;
-
- if (vprev->ebev)
- nvprev = mesh_vert(vm, vprev->index, 0, ns - ring);
- else
- nvprev = mesh_vert(vm, vprev->index, 0, ns);
- copy_v3_v3(coa, nvprev->co);
- nv = mesh_vert(vm, i, ring, 0);
- copy_v3_v3(nv->co, coa);
- nv->v = nvprev->v;
-
- if (vnext->ebev)
- nvnext = mesh_vert(vm, vnext->index, 0, ring);
- else
- nvnext = mesh_vert(vm, vnext->index, 0, 0);
- copy_v3_v3(cob, nvnext->co);
- nv = mesh_vert(vm, i, ring, ns);
- copy_v3_v3(nv->co, cob);
- nv->v = nvnext->v;
-
- /* TODO: better calculation of new midarc point? */
- project_to_edge(v->ebev->e, coa, cob, midco);
-
- for (k = 1; k < ns; k++) {
- get_point_on_round_edge(v->ebev, k, coa, midco, cob, co);
- copy_v3_v3(mesh_vert(vm, i, ring, k)->co, co);
- }
-
- if (v->ebev == epipe) {
- /* save profile extremes for later snapping */
- copy_v3_v3(va_pipe, mesh_vert(vm, i, 0, 0)->co);
- copy_v3_v3(vb_pipe, mesh_vert(vm, i, 0, ns)->co);
- }
- }
- } while ((v = v->next) != vm->boundstart);
- }
-
- /* Now make sure cross points of rings share coordinates and vertices.
- * After this loop, will have BMVerts for all (i, r, k) where
- * i is for a BoundVert that is beveled and has either a predecessor or
- * successor BoundVert beveled too, and
- * for odd ns: 0 <= r <= ns2, 0 <= k <= ns
- * for even ns: 0 <= r < ns2, 0 <= k <= ns except k=ns2 */
- v = vm->boundstart;
- do {
- i = v->index;
- if (v->ebev) {
- vprev = v->prev;
- vnext = v->next;
- if (vprev->ebev) {
- for (ring = 1; ring <= ns2; ring++) {
- for (k = 1; k <= ns2; k++) {
- if (!odd && (k == ns2 || ring == ns2))
- continue; /* center line is special case: do after the rest are done */
- nv = mesh_vert(vm, i, ring, k);
- nvprev = mesh_vert(vm, vprev->index, k, ns - ring);
- mid_v3_v3v3(co, nv->co, nvprev->co);
- if (epipe)
- snap_to_edge_profile(epipe, va_pipe, vb_pipe, co);
-
- copy_v3_v3(nv->co, co);
- BLI_assert(nv->v == NULL && nvprev->v == NULL);
- create_mesh_bmvert(bm, vm, i, ring, k, bv->v);
- copy_mesh_vert(vm, vprev->index, k, ns - ring, i, ring, k);
- }
- }
- if (!vprev->prev->ebev) {
- for (ring = 1; ring <= ns2; ring++) {
- for (k = 1; k <= ns2; k++) {
- if (!odd && (k == ns2 || ring == ns2))
- continue;
- create_mesh_bmvert(bm, vm, vprev->index, ring, k, bv->v);
- }
- }
- }
- if (!vnext->ebev) {
- for (ring = 1; ring <= ns2; ring++) {
- for (k = ns - ns2; k < ns; k++) {
- if (!odd && (k == ns2 || ring == ns2))
- continue;
- create_mesh_bmvert(bm, vm, i, ring, k, bv->v);
- }
- }
- }
- }
- }
- } while ((v = v->next) != vm->boundstart);
-
- if (!odd) {
- /* Do special case center lines.
- * This loop makes verts for (i, ns2, k) for 1 <= k <= ns-1, k!=ns2
- * and for (i, r, ns2) for 1 <= r <= ns2-1,
- * whenever i is in a sequence of at least two beveled verts */
- v = vm->boundstart;
- do {
- i = v->index;
- if (v->ebev) {
- vprev = v->prev;
- vnext = v->next;
- for (k = 1; k < ns2; k++) {
- nv = mesh_vert(vm, i, k, ns2);
- if (vprev->ebev)
- nvprev = mesh_vert(vm, vprev->index, ns2, ns - k);
- if (vnext->ebev)
- nvnext = mesh_vert(vm, vnext->index, ns2, k);
- if (vprev->ebev && vnext->ebev) {
- mid_v3_v3v3v3(co, nvprev->co, nv->co, nvnext->co);
- if (epipe)
- snap_to_edge_profile(epipe, va_pipe, vb_pipe, co);
- copy_v3_v3(nv->co, co);
- create_mesh_bmvert(bm, vm, i, k, ns2, bv->v);
- copy_mesh_vert(vm, vprev->index, ns2, ns - k, i, k, ns2);
- copy_mesh_vert(vm, vnext->index, ns2, k, i, k, ns2);
-
- }
- else if (vprev->ebev) {
- mid_v3_v3v3(co, nvprev->co, nv->co);
- if (epipe)
- snap_to_edge_profile(epipe, va_pipe, vb_pipe, co);
- copy_v3_v3(nv->co, co);
- create_mesh_bmvert(bm, vm, i, k, ns2, bv->v);
- copy_mesh_vert(vm, vprev->index, ns2, ns - k, i, k, ns2);
-
- create_mesh_bmvert(bm, vm, i, ns2, ns - k, bv->v);
- }
- else if (vnext->ebev) {
- mid_v3_v3v3(co, nv->co, nvnext->co);
- if (epipe)
- snap_to_edge_profile(epipe, va_pipe, vb_pipe, co);
- copy_v3_v3(nv->co, co);
- create_mesh_bmvert(bm, vm, i, k, ns2, bv->v);
- copy_mesh_vert(vm, vnext->index, ns2, k, i, k, ns2);
-
- create_mesh_bmvert(bm, vm, i, ns2, k, bv->v);
- }
- }
- }
- } while ((v = v->next) != vm->boundstart);
-
- /* center point need to be average of all centers of rings */
- /* TODO: this is wrong if not all verts have ebev: could have
- * several disconnected sections of mesh. */
- zero_v3(midco);
- nn = 0;
- v = vm->boundstart;
- do {
- i = v->index;
- if (v->ebev) {
- nv = mesh_vert(vm, i, ns2, ns2);
- add_v3_v3(midco, nv->co);
- nn++;
- }
- } while ((v = v->next) != vm->boundstart);
- mul_v3_fl(midco, 1.0f / nn);
- if (epipe)
- snap_to_edge_profile(epipe, va_pipe, vb_pipe, midco);
- bmv = BM_vert_create(bm, midco, NULL, BM_CREATE_NOP);
- v = vm->boundstart;
- do {
- i = v->index;
- if (v->ebev) {
- nv = mesh_vert(vm, i, ns2, ns2);
- copy_v3_v3(nv->co, midco);
- nv->v = bmv;
- }
- } while ((v = v->next) != vm->boundstart);
- }
-
- /* Make the ring quads */
- for (ring = 0; ring < ns2; ring++) {
- v = vm->boundstart;
- do {
- i = v->index;
- f = boundvert_rep_face(v);
- f2 = boundvert_rep_face(v->next);
- if (v->ebev && (v->prev->ebev || v->next->ebev)) {
- for (k = 0; k < ns2 + odd; k++) {
- bmv1 = mesh_vert(vm, i, ring, k)->v;
- bmv2 = mesh_vert(vm, i, ring, k + 1)->v;
- bmv3 = mesh_vert(vm, i, ring + 1, k + 1)->v;
- bmv4 = mesh_vert(vm, i, ring + 1, k)->v;
- BLI_assert(bmv1 && bmv2 && bmv3 && bmv4);
- if (bmv3 == bmv4 || bmv1 == bmv4)
- bmv4 = NULL;
- /* f23 is interp face for bmv2 and bmv3 */
- f23 = f;
- if (odd && k == ns2 && f2 && !v->any_seam)
- f23 = f2;
- bev_create_quad_tri_ex(bm, bmv1, bmv2, bmv3, bmv4,
- f, f23, f23, f);
- }
- }
- else if (v->prev->ebev && v->prev->prev->ebev) {
- /* finish off a sequence of beveled edges */
- i = v->prev->index;
- f = boundvert_rep_face(v->prev);
- f2 = boundvert_rep_face(v);
- for (k = ns2 + (ns % 2); k < ns; k++) {
- bmv1 = mesh_vert(vm, i, ring, k)->v;
- bmv2 = mesh_vert(vm, i, ring, k + 1)->v;
- bmv3 = mesh_vert(vm, i, ring + 1, k + 1)->v;
- bmv4 = mesh_vert(vm, i, ring + 1, k)->v;
- BLI_assert(bmv1 && bmv2 && bmv3 && bmv4);
- if (bmv2 == bmv3) {
- bmv3 = bmv4;
- bmv4 = NULL;
- }
- f23 = f;
- if (odd && k == ns2 && f2 && !v->any_seam)
- f23 = f2;
- bev_create_quad_tri_ex(bm, bmv1, bmv2, bmv3, bmv4,
- f, f23, f23, f);
- }
- }
- } while ((v = v->next) != vm->boundstart);
- }
-
- /* Fix UVs along center lines if even number of segments */
- if (!odd) {
- v = vm->boundstart;
- do {
- i = v->index;
- f = boundvert_rep_face(v);
- // f2 = boundvert_rep_face(v->next); // UNUSED
- if (!v->any_seam) {
- for (ring = 1; ring < ns2; ring++) {
- BMVert *v_uv = mesh_vert(vm, i, ring, ns2)->v;
- if (v_uv) {
- bev_merge_uvs(bm, v_uv);
- }
- }
- }
- } while ((v = v->next) != vm->boundstart);
- if (!bv->any_seam)
- bev_merge_uvs(bm, mesh_vert(vm, 0, ns2, ns2)->v);
- }
-
- /* Make center ngon if odd number of segments and fully beveled */
- if (odd && vm->count == bv->selcount) {
- BMVert **vv = NULL;
- BMFace **vf = NULL;
- BLI_array_staticdeclare(vv, BM_DEFAULT_NGON_STACK_SIZE);
- BLI_array_staticdeclare(vf, BM_DEFAULT_NGON_STACK_SIZE);
-
- v = vm->boundstart;
- do {
- i = v->index;
- BLI_assert(v->ebev);
- BLI_array_append(vv, mesh_vert(vm, i, ns2, ns2)->v);
- BLI_array_append(vf, bv->any_seam ? f : boundvert_rep_face(v));
- } while ((v = v->next) != vm->boundstart);
- f = boundvert_rep_face(vm->boundstart);
- bev_create_ngon(bm, vv, BLI_array_count(vv), vf, f, true);
-
- BLI_array_free(vv);
- }
-
- /* Make 'rest-of-vmesh' polygon if not fully beveled */
- /* TODO: use interpolation face array here too */
- if (vm->count > bv->selcount) {
- int j;
- BMVert **vv = NULL;
- BLI_array_staticdeclare(vv, BM_DEFAULT_NGON_STACK_SIZE);
-
- v = vm->boundstart;
- f = boundvert_rep_face(v);
- j = 0;
- do {
- i = v->index;
- if (v->ebev) {
- if (!v->prev->ebev) {
- for (k = 0; k < ns2; k++) {
- bmv1 = mesh_vert(vm, i, ns2, k)->v;
- if (!bmv1)
- bmv1 = mesh_vert(vm, i, 0, k)->v;
- if (!(j > 0 && bmv1 == vv[j - 1])) {
- BLI_assert(bmv1 != NULL);
- BLI_array_append(vv, bmv1);
- j++;
- }
- }
- }
- bmv1 = mesh_vert(vm, i, ns2, ns2)->v;
- if (!bmv1)
- bmv1 = mesh_vert(vm, i, 0, ns2)->v;
- if (!(j > 0 && bmv1 == vv[j - 1])) {
- BLI_assert(bmv1 != NULL);
- BLI_array_append(vv, bmv1);
- j++;
- }
- if (!v->next->ebev) {
- for (k = ns - ns2; k < ns; k++) {
- bmv1 = mesh_vert(vm, i, ns2, k)->v;
- if (!bmv1)
- bmv1 = mesh_vert(vm, i, 0, k)->v;
- if (!(j > 0 && bmv1 == vv[j - 1])) {
- BLI_assert(bmv1 != NULL);
- BLI_array_append(vv, bmv1);
- j++;
- }
- }
- }
- }
- else {
- BLI_assert(mesh_vert(vm, i, 0, 0)->v != NULL);
- BLI_array_append(vv, mesh_vert(vm, i, 0, 0)->v);
- j++;
- }
- } while ((v = v->next) != vm->boundstart);
- if (vv[0] == vv[j - 1])
- j--;
- bev_create_ngon(bm, vv, j, NULL, f, true);
-
- BLI_array_free(vv);
- }
-}
-#endif
-
-static VMesh *new_adj_subdiv_vmesh(MemArena *mem_arena, int count, int seg, BoundVert *bounds)
+static VMesh *new_adj_vmesh(MemArena *mem_arena, int count, int seg, BoundVert *bounds)
{
VMesh *vm;
@@ -2111,7 +1678,7 @@ static VMesh *new_adj_subdiv_vmesh(MemArena *mem_arena, int count, int seg, Boun
vm->seg = seg;
vm->boundstart = bounds;
vm->mesh = (NewVert *)BLI_memarena_alloc(mem_arena, count * (1 + seg / 2) * (1 + seg) * sizeof(NewVert));
- vm->mesh_kind = M_ADJ_SUBDIV;
+ vm->mesh_kind = M_ADJ;
return vm;
}
@@ -2316,7 +1883,7 @@ static VMesh *interp_vmesh(BevelParams *bp, VMesh *vm0, int nseg)
ns0 = vm0->seg;
nseg2 = nseg / 2;
odd = nseg % 2;
- vm1 = new_adj_subdiv_vmesh(bp->mem_arena, n, nseg, vm0->boundstart);
+ vm1 = new_adj_vmesh(bp->mem_arena, n, nseg, vm0->boundstart);
prev_frac = BLI_array_alloca(prev_frac, (ns0 + 1));
frac = BLI_array_alloca(frac, (ns0 + 1));
@@ -2388,7 +1955,7 @@ static VMesh *cubic_subdiv(BevelParams *bp, VMesh *vm0)
ns20 = ns0 / 2;
BLI_assert(ns0 % 2 == 0);
ns1 = 2 * ns0;
- vm1 = new_adj_subdiv_vmesh(bp->mem_arena, n, ns1, vm0->boundstart);
+ vm1 = new_adj_vmesh(bp->mem_arena, n, ns1, vm0->boundstart);
/* First we adjust the boundary vertices of the input mesh, storing in output mesh */
for (i = 0; i < n; i++) {
@@ -2551,7 +2118,7 @@ static VMesh *make_cube_corner_straight(MemArena *mem_arena, int nseg)
int i, j, k, ns2;
ns2 = nseg / 2;
- vm = new_adj_subdiv_vmesh(mem_arena, 3, nseg, NULL);
+ vm = new_adj_vmesh(mem_arena, 3, nseg, NULL);
vm->count = 0; // reset, so following loop will end up with correct count
for (i = 0; i < 3; i++) {
zero_v3(co);
@@ -2594,7 +2161,7 @@ static VMesh *make_cube_corner_adj_vmesh(BevelParams *bp)
return make_cube_corner_straight(mem_arena, nseg);
/* initial mesh has 3 sides, 2 segments */
- vm0 = new_adj_subdiv_vmesh(mem_arena, 3, 2, NULL);
+ vm0 = new_adj_vmesh(mem_arena, 3, 2, NULL);
vm0->count = 0; // reset, so following loop will end up with correct count
for (i = 0; i < 3; i++) {
zero_v3(co);
@@ -2725,7 +2292,7 @@ static VMesh *adj_vmesh(BevelParams *bp, BevVert *bv)
/* First construct an initial control mesh, with nseg==2 */
n = bv->vmesh->count;
ns = bv->vmesh->seg;
- vm0 = new_adj_subdiv_vmesh(mem_arena, n, 2, bv->vmesh->boundstart);
+ vm0 = new_adj_vmesh(mem_arena, n, 2, bv->vmesh->boundstart);
bndv = vm0->boundstart;
zero_v3(co);
@@ -2810,9 +2377,9 @@ static VMesh *pipe_adj_vmesh(BevelParams *bp, BevVert *bv, EdgeHalf *epipe)
/*
* Given that the boundary is built and the boundary BMVerts have been made,
- * calculate the positions of the interior mesh points for the M_ADJ_SUBDIV pattern,
+ * calculate the positions of the interior mesh points for the M_ADJ pattern,
* using cubic subdivision, then make the BMVerts and the new faces. */
-static void bevel_build_rings_subdiv(BevelParams *bp, BMesh *bm, BevVert *bv)
+static void bevel_build_rings(BevelParams *bp, BMesh *bm, BevVert *bv)
{
int n, ns, ns2, odd, i, j, k, ring;
VMesh *vm1, *vm;
@@ -3073,36 +2640,14 @@ static void build_vmesh(BevelParams *bp, BMesh *bm, BevVert *bv)
do {
i = v->index;
copy_mesh_vert(vm, i, 0, ns, v->next->index, 0, 0);
-#ifdef USE_ADJ_SUBDIV
for (k = 1; k < ns; k++) {
- if (v->ebev && vm->mesh_kind != M_ADJ_SUBDIV) {
+ if (v->ebev && vm->mesh_kind != M_ADJ) {
get_profile_point(bp, &v->profile, k, ns, co);
copy_v3_v3(mesh_vert(vm, i, 0, k)->co, co);
if (!weld)
create_mesh_bmvert(bm, vm, i, 0, k, bv->v);
}
}
-#else
- if (v->ebev) {
- float midco[3];
-
- va = mesh_vert(vm, i, 0, 0)->co;
- vb = mesh_vert(vm, i, 0, ns)->co;
- if (bv->edgecount == 3 && bv->selcount == 1) {
- /* special case: profile cuts the third face, so line it up with that */
- copy_v3_v3(midco, bv->v->co);
- }
- else {
- project_to_edge(v->ebev->e, va, vb, midco);
- }
- for (k = 1; k < ns; k++) {
- get_point_on_round_edge(v->ebev, k, va, midco, vb, co);
- copy_v3_v3(mesh_vert(vm, i, 0, k)->co, co);
- if (!weld)
- create_mesh_bmvert(bm, vm, i, 0, k, bv->v);
- }
- }
-#endif
} while ((v = v->next) != vm->boundstart);
if (weld) {
@@ -3140,12 +2685,7 @@ static void build_vmesh(BevelParams *bp, BMesh *bm, BevVert *bv)
bevel_build_poly(bm, bv);
break;
case M_ADJ:
-#ifndef USE_ADJ_SUBDIV
- bevel_build_rings(bm, bv);
- break;
-#endif
- case M_ADJ_SUBDIV:
- bevel_build_rings_subdiv(bp, bm, bv);
+ bevel_build_rings(bp, bm, bv);
break;
case M_TRI_FAN:
bevel_build_trifan(bm, bv);
@@ -3447,7 +2987,7 @@ static int bev_rebuild_polygon(BMesh *bm, BevelParams *bp, BMFace *f)
BLI_array_append(vv_fix, bmv);
}
}
- else if (vm->mesh_kind == M_ADJ_SUBDIV && vm->seg > 1 && !e->is_bev && !eprev->is_bev) {
+ else if (vm->mesh_kind == M_ADJ && vm->seg > 1 && !e->is_bev && !eprev->is_bev) {
BLI_assert(v->prev == vend);
i = vend->index;
for (k = vm->seg - 1; k > 0; k--) {