draw loopcut display on the deformed mesh when in editmode.
This commit is contained in:
@@ -95,6 +95,7 @@ void EDBM_selectmode_to_scene(struct bContext *C);
|
||||
void EDBM_mesh_make(struct ToolSettings *ts, struct Scene *scene, struct Object *ob);
|
||||
void EDBM_mesh_free(struct BMEditMesh *em);
|
||||
void EDBM_mesh_load(struct Object *ob);
|
||||
struct DerivedMesh *EDBM_mesh_deform_dm_get(struct BMEditMesh *em);
|
||||
|
||||
void EDBM_index_arrays_ensure(struct BMEditMesh *em, const char htype);
|
||||
void EDBM_index_arrays_init(struct BMEditMesh *em, const char htype);
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
#include "BKE_modifier.h"
|
||||
#include "BKE_report.h"
|
||||
#include "BKE_editmesh.h"
|
||||
#include "BKE_DerivedMesh.h"
|
||||
|
||||
#include "BIF_gl.h"
|
||||
|
||||
@@ -155,9 +156,30 @@ static void edgering_find_order(BMEdge *lasteed, BMEdge *eed,
|
||||
}
|
||||
}
|
||||
|
||||
static void edgering_vcos_get(DerivedMesh *dm, BMVert *v[2][2], float r_cos[2][2][3])
|
||||
{
|
||||
if (dm) {
|
||||
int j, k;
|
||||
for (j = 0; j < 2; j++) {
|
||||
for (k = 0; k < 2; k++) {
|
||||
dm->getVertCo(dm, BM_elem_index_get(v[j][k]), r_cos[j][k]);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
int j, k;
|
||||
for (j = 0; j < 2; j++) {
|
||||
for (k = 0; k < 2; k++) {
|
||||
copy_v3_v3(r_cos[j][k], v[j][k]->co);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void edgering_sel(RingSelOpData *lcd, int previewlines, bool select)
|
||||
{
|
||||
BMEditMesh *em = lcd->em;
|
||||
DerivedMesh *dm = EDBM_mesh_deform_dm_get(em);
|
||||
BMEdge *eed_start = lcd->eed;
|
||||
BMEdge *eed, *eed_last;
|
||||
BMVert *v[2][2], *v_last;
|
||||
@@ -195,6 +217,10 @@ static void edgering_sel(RingSelOpData *lcd, int previewlines, bool select)
|
||||
return;
|
||||
}
|
||||
|
||||
if (dm) {
|
||||
EDBM_index_arrays_ensure(lcd->em, BM_VERT);
|
||||
}
|
||||
|
||||
BMW_init(&walker, em->bm, BMW_EDGERING,
|
||||
BMW_MASK_NOP, BMW_MASK_NOP, BMW_MASK_NOP,
|
||||
BMW_FLAG_TEST_HIDDEN,
|
||||
@@ -222,8 +248,12 @@ static void edgering_sel(RingSelOpData *lcd, int previewlines, bool select)
|
||||
|
||||
for (i = 1; i <= previewlines; i++) {
|
||||
const float fac = (i / ((float)previewlines + 1));
|
||||
interp_v3_v3v3(edges[tot][0], v[0][0]->co, v[0][1]->co, fac);
|
||||
interp_v3_v3v3(edges[tot][1], v[1][0]->co, v[1][1]->co, fac);
|
||||
float v_cos[2][2][3];
|
||||
|
||||
edgering_vcos_get(dm, v, v_cos);
|
||||
|
||||
interp_v3_v3v3(edges[tot][0], v_cos[0][0], v_cos[0][1], fac);
|
||||
interp_v3_v3v3(edges[tot][1], v_cos[1][0], v_cos[1][1], fac);
|
||||
tot++;
|
||||
}
|
||||
}
|
||||
@@ -244,13 +274,16 @@ static void edgering_sel(RingSelOpData *lcd, int previewlines, bool select)
|
||||
|
||||
for (i = 1; i <= previewlines; i++) {
|
||||
const float fac = (i / ((float)previewlines + 1));
|
||||
float v_cos[2][2][3];
|
||||
|
||||
if (!v[0][0] || !v[0][1] || !v[1][0] || !v[1][1]) {
|
||||
continue;
|
||||
}
|
||||
|
||||
interp_v3_v3v3(edges[tot][0], v[0][0]->co, v[0][1]->co, fac);
|
||||
interp_v3_v3v3(edges[tot][1], v[1][0]->co, v[1][1]->co, fac);
|
||||
edgering_vcos_get(dm, v, v_cos);
|
||||
|
||||
interp_v3_v3v3(edges[tot][0], v_cos[0][0], v_cos[0][1], fac);
|
||||
interp_v3_v3v3(edges[tot][1], v_cos[1][0], v_cos[1][1], fac);
|
||||
tot++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -171,6 +171,14 @@ void EDBM_stats_update(BMEditMesh *em)
|
||||
}
|
||||
}
|
||||
|
||||
DerivedMesh *EDBM_mesh_deform_dm_get(BMEditMesh *em)
|
||||
{
|
||||
return ((em->derivedFinal != NULL) &&
|
||||
(em->derivedFinal) &&
|
||||
(em->derivedFinal->type == DM_TYPE_EDITBMESH) &&
|
||||
(em->derivedFinal->deformedOnly != false)) ? em->derivedFinal : NULL;
|
||||
}
|
||||
|
||||
bool EDBM_op_init(BMEditMesh *em, BMOperator *bmop, wmOperator *op, const char *fmt, ...)
|
||||
{
|
||||
BMesh *bm = em->bm;
|
||||
|
||||
@@ -2700,9 +2700,7 @@ static void draw_em_measure_stats(ARegion *ar, View3D *v3d, Object *ob, BMEditMe
|
||||
const bool do_moving = (G.moving & G_TRANSFORM_EDIT) != 0;
|
||||
float clip_planes[4][4];
|
||||
/* allow for displaying shape keys and deform mods */
|
||||
DerivedMesh *dm = ((em->derivedFinal != NULL) &&
|
||||
(em->derivedFinal->type == DM_TYPE_EDITBMESH) &&
|
||||
(em->derivedFinal->deformedOnly != false)) ? em->derivedFinal : NULL;
|
||||
DerivedMesh *dm = EDBM_mesh_deform_dm_get(em);
|
||||
BMIter iter;
|
||||
int i;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user