diff options
-rw-r--r-- | source/blender/blenkernel/intern/cdderivedmesh.c | 8 | ||||
-rw-r--r-- | source/blender/bmesh/bmesh_class.h | 5 | ||||
-rw-r--r-- | source/blender/bmesh/intern/bmesh_construct.c | 15 | ||||
-rw-r--r-- | source/blender/bmesh/intern/bmesh_mesh_conv.c | 3 |
4 files changed, 23 insertions, 8 deletions
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c index a34d2ecd47a..4a07e4b56c7 100644 --- a/source/blender/blenkernel/intern/cdderivedmesh.c +++ b/source/blender/blenkernel/intern/cdderivedmesh.c @@ -1891,6 +1891,14 @@ DerivedMesh *CDDM_from_BMEditMesh(BMEditMesh *em, Mesh *UNUSED(me), int use_mdis med->flag = BM_edge_flag_to_mflag(eed); + /* handle this differently to editmode switching, + * only enable draw for single user edges rather then calculating angle */ + if ((med->flag & ME_EDGEDRAW) == 0) { + if (eed->l && eed->l == eed->l->radial_next) { + med->flag |= ME_EDGEDRAW; + } + } + CustomData_from_bmesh_block(&bm->edata, &dm->edgeData, eed->head.data, i); if (add_orig) *index = i; } diff --git a/source/blender/bmesh/bmesh_class.h b/source/blender/bmesh/bmesh_class.h index c536a22cf53..737efde8391 100644 --- a/source/blender/bmesh/bmesh_class.h +++ b/source/blender/bmesh/bmesh_class.h @@ -225,9 +225,10 @@ enum { * when temp tagging is handy. * always assume dirty & clear before use. */ - /* we have 2 spare flags which is awesome but since we're limited to 8 + BM_ELEM_DRAW = (1 << 5), /* edge display */ + + /* we have 1 spare flag which is awesome but since we're limited to 8 * only add new flags with care! - campbell */ - /* BM_ELEM_SPARE = (1 << 5), */ /* BM_ELEM_SPARE = (1 << 6), */ BM_ELEM_INTERNAL_TAG = (1 << 7) /* for low level internal API tagging, diff --git a/source/blender/bmesh/intern/bmesh_construct.c b/source/blender/bmesh/intern/bmesh_construct.c index 684237b79c5..589a5fbaa66 100644 --- a/source/blender/bmesh/intern/bmesh_construct.c +++ b/source/blender/bmesh/intern/bmesh_construct.c @@ -973,6 +973,7 @@ char BM_edge_flag_from_mflag(const short meflag) { return ( ((meflag & SELECT) ? BM_ELEM_SELECT : 0) | ((meflag & ME_SEAM) ? BM_ELEM_SEAM : 0) | + ((meflag & ME_EDGEDRAW) ? BM_ELEM_DRAW : 0) | ((meflag & ME_SHARP) == 0 ? BM_ELEM_SMOOTH : 0) | /* invert */ ((meflag & ME_HIDE) ? BM_ELEM_HIDDEN : 0) ); @@ -994,16 +995,18 @@ char BM_vert_flag_to_mflag(BMVert *eve) ((hflag & BM_ELEM_HIDDEN) ? ME_HIDE : 0) ); } + short BM_edge_flag_to_mflag(BMEdge *eed) { const char hflag = eed->head.hflag; - return ( ((hflag & BM_ELEM_SELECT) ? SELECT : 0) | - ((hflag & BM_ELEM_SEAM) ? ME_SEAM : 0) | - ((hflag & BM_ELEM_SMOOTH) == 0 ? ME_SHARP : 0) | - ((hflag & BM_ELEM_HIDDEN) ? ME_HIDE : 0) | - ((BM_edge_is_wire(eed)) ? ME_LOOSEEDGE : 0) | /* not typical */ - (ME_EDGEDRAW | ME_EDGERENDER) + return ( ((hflag & BM_ELEM_SELECT) ? SELECT : 0) | + ((hflag & BM_ELEM_SEAM) ? ME_SEAM : 0) | + ((hflag & BM_ELEM_DRAW) ? ME_EDGEDRAW : 0) | + ((hflag & BM_ELEM_SMOOTH) == 0 ? ME_SHARP : 0) | + ((hflag & BM_ELEM_HIDDEN) ? ME_HIDE : 0) | + ((BM_edge_is_wire(eed)) ? ME_LOOSEEDGE : 0) | /* not typical */ + ME_EDGERENDER ); } char BM_face_flag_to_mflag(BMFace *efa) diff --git a/source/blender/bmesh/intern/bmesh_mesh_conv.c b/source/blender/bmesh/intern/bmesh_mesh_conv.c index 351fb8e941b..a8c27e0a761 100644 --- a/source/blender/bmesh/intern/bmesh_mesh_conv.c +++ b/source/blender/bmesh/intern/bmesh_mesh_conv.c @@ -495,6 +495,9 @@ BLI_INLINE void bmesh_quick_edgedraw_flag(MEdge *med, BMEdge *e) { med->flag &= ~ME_EDGEDRAW; } + else { + med->flag |= ME_EDGEDRAW; + } } void BM_mesh_bm_to_me(BMesh *bm, Mesh *me, int dotess) |